aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.#file.c.1.2438188
-rw-r--r--.#main.c.1.2536600
-rw-r--r--ABOUT-NLS1671
-rw-r--r--Bonus/CVS/Entries15
-rw-r--r--Bonus/CVS/Repository1
-rw-r--r--Bonus/CVS/Root1
-rw-r--r--CVS/Entries114
-rw-r--r--CVS/Repository1
-rw-r--r--CVS/Root1
-rw-r--r--ChangeLog385
-rw-r--r--Makefile.in22
-rw-r--r--NEWS16
-rw-r--r--Patches/CVS/Entries1
-rw-r--r--Patches/CVS/Repository1
-rw-r--r--Patches/CVS/Root1
-rw-r--r--Symbols/CVS/Entries11
-rw-r--r--Symbols/CVS/Repository1
-rw-r--r--Symbols/CVS/Root1
-rw-r--r--acinclude.m465
-rw-r--r--aclocal.m44115
-rw-r--r--backend.c6
-rw-r--r--buffer.c6
-rw-r--r--config.h.in2
-rwxr-xr-xconfig.rpath314
-rwxr-xr-xconfigure11006
-rw-r--r--configure.ac13
-rw-r--r--cookie.c33
-rw-r--r--display.c4
-rw-r--r--doc-jp/CVS/Entries26
-rw-r--r--doc-jp/CVS/Repository1
-rw-r--r--doc-jp/CVS/Root1
-rw-r--r--doc-jp/MANUAL.html2
-rw-r--r--doc-jp/README4
-rw-r--r--doc-jp/README.cookie7
-rw-r--r--doc-jp/README.img12
-rw-r--r--doc-jp/README.m17n10
-rw-r--r--doc-jp/README.passwd22
-rw-r--r--doc-jp/w3m.111
-rw-r--r--doc/CVS/Entries21
-rw-r--r--doc/CVS/Repository1
-rw-r--r--doc/CVS/Root1
-rw-r--r--doc/FAQ.html2
-rw-r--r--doc/MANUAL.html4
-rw-r--r--doc/README4
-rw-r--r--doc/README.cookie44
-rw-r--r--doc/README.img19
-rw-r--r--doc/README.m17n10
-rw-r--r--doc/README.passwd23
-rw-r--r--doc/w3m.174
-rw-r--r--entity.h2
-rw-r--r--file.c98
-rw-r--r--fm.h26
-rw-r--r--form.c3
-rw-r--r--ftp.c31
-rw-r--r--gc/CVS/Entries5
-rw-r--r--gc/CVS/Repository1
-rw-r--r--gc/CVS/Root1
-rw-r--r--gc/Mac_files/CVS/Entries1
-rw-r--r--gc/Mac_files/CVS/Repository1
-rw-r--r--gc/Mac_files/CVS/Root1
-rw-r--r--gc/cord/CVS/Entries1
-rw-r--r--gc/cord/CVS/Repository1
-rw-r--r--gc/cord/CVS/Root1
-rw-r--r--gc/cord/private/CVS/Entries1
-rw-r--r--gc/cord/private/CVS/Repository1
-rw-r--r--gc/cord/private/CVS/Root1
-rw-r--r--gc/doc/CVS/Entries1
-rw-r--r--gc/doc/CVS/Repository1
-rw-r--r--gc/doc/CVS/Root1
-rw-r--r--gc/include/CVS/Entries1
-rw-r--r--gc/include/CVS/Repository1
-rw-r--r--gc/include/CVS/Root1
-rw-r--r--gc/include/private/CVS/Entries1
-rw-r--r--gc/include/private/CVS/Repository1
-rw-r--r--gc/include/private/CVS/Root1
-rw-r--r--gc/tests/CVS/Entries1
-rw-r--r--gc/tests/CVS/Repository1
-rw-r--r--gc/tests/CVS/Root1
-rw-r--r--html.c166
-rw-r--r--html.h83
-rw-r--r--image.c9
-rwxr-xr-xinstall-sh634
-rw-r--r--intl/CVS/Entries1
-rw-r--r--intl/CVS/Repository1
-rw-r--r--intl/CVS/Root1
-rw-r--r--istream.c30
-rw-r--r--libwc/CVS/Entries53
-rw-r--r--libwc/CVS/Repository1
-rw-r--r--libwc/CVS/Root1
-rw-r--r--libwc/EastAsianWidth.txt21866
-rw-r--r--libwc/Makefile.in4
-rw-r--r--libwc/ambwidth_map.awk47
-rw-r--r--libwc/ces.h1
-rw-r--r--libwc/charset.c120
-rw-r--r--libwc/map/CVS/Entries112
-rw-r--r--libwc/map/CVS/Repository1
-rw-r--r--libwc/map/CVS/Root1
-rw-r--r--libwc/map/mk_ucs_case_map.pl48
-rw-r--r--libwc/map/mk_ucs_isdigit_map.pl56
-rw-r--r--libwc/map/ucs_ambwidth.map120
-rw-r--r--libwc/map/ucs_case.map2600
-rw-r--r--libwc/map/ucs_isalpha.map469
-rw-r--r--libwc/map/ucs_isdigit.map30
-rw-r--r--libwc/map/ucs_islower.map471
-rw-r--r--libwc/map/ucs_isupper.map455
-rw-r--r--libwc/status.c1
-rw-r--r--libwc/ucs.c91
-rw-r--r--libwc/ucs.h9
-rw-r--r--libwc/wc_types.h1
-rw-r--r--main.c369
-rw-r--r--mktable.c10
-rw-r--r--po/CVS/Entries16
-rw-r--r--po/CVS/Repository1
-rw-r--r--po/CVS/Root1
-rw-r--r--po/ChangeLog5
-rw-r--r--po/Makefile.in.in166
-rw-r--r--po/Rules-quot7
-rw-r--r--po/ja.po793
-rw-r--r--po/w3m.pot389
-rw-r--r--proto.h8
-rw-r--r--rc.c63
-rw-r--r--regex.c39
-rw-r--r--scripts/CVS/Entries13
-rw-r--r--scripts/CVS/Repository1
-rw-r--r--scripts/CVS/Root1
-rw-r--r--scripts/Makefile.in1
-rw-r--r--scripts/bm2menu/CVS/Entries3
-rw-r--r--scripts/bm2menu/CVS/Repository1
-rw-r--r--scripts/bm2menu/CVS/Root1
-rw-r--r--scripts/multipart/CVS/Entries6
-rw-r--r--scripts/multipart/CVS/Repository1
-rw-r--r--scripts/multipart/CVS/Root1
-rw-r--r--scripts/multipart/Makefile.in1
-rw-r--r--scripts/w3mman/CVS/Entries8
-rw-r--r--scripts/w3mman/CVS/Repository1
-rw-r--r--scripts/w3mman/CVS/Root1
-rw-r--r--scripts/w3mman/Makefile.in1
-rw-r--r--scripts/w3mman/w3mman2html.cgi.in4
-rw-r--r--symbol.c80
-rw-r--r--table.c13
-rw-r--r--tagtable.tab30
-rw-r--r--terms.c41
-rw-r--r--url.c40
-rw-r--r--version.c.in4
-rw-r--r--w3m-doc/CVS/Entries18
-rw-r--r--w3m-doc/CVS/Repository1
-rw-r--r--w3m-doc/CVS/Root1
-rw-r--r--w3m-doc/sample/CVS/Entries9
-rw-r--r--w3m-doc/sample/CVS/Repository1
-rw-r--r--w3m-doc/sample/CVS/Root1
-rw-r--r--w3mimg/CVS/Entries7
-rw-r--r--w3mimg/CVS/Repository1
-rw-r--r--w3mimg/CVS/Root1
-rw-r--r--w3mimg/Makefile.in11
-rw-r--r--w3mimg/fb/CVS/Entries11
-rw-r--r--w3mimg/fb/CVS/Repository1
-rw-r--r--w3mimg/fb/CVS/Root1
-rw-r--r--w3mimg/w3mimg.c6
-rw-r--r--w3mimg/w3mimg.h17
-rw-r--r--w3mimg/win/.cvsignore1
-rw-r--r--w3mimg/win/CVS/Entries4
-rw-r--r--w3mimg/win/CVS/Repository1
-rw-r--r--w3mimg/win/CVS/Root1
-rw-r--r--w3mimg/win/Makefile.in31
-rw-r--r--w3mimg/win/win_w3mimg.cpp982
-rw-r--r--w3mimg/x11/CVS/Entries4
-rw-r--r--w3mimg/x11/CVS/Repository1
-rw-r--r--w3mimg/x11/CVS/Root1
-rw-r--r--w3mimgdisplay.c4
169 files changed, 52971 insertions, 10831 deletions
diff --git a/.#file.c.1.243 b/.#file.c.1.243
new file mode 100644
index 0000000..411aa7a
--- /dev/null
+++ b/.#file.c.1.243
@@ -0,0 +1,8188 @@
+/* $Id: file.c,v 1.243 2006/05/29 12:54:26 inu Exp $ */
+#include "fm.h"
+#include <sys/types.h>
+#include "myctype.h"
+#include <signal.h>
+#include <setjmp.h>
+#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3)
+#include <sys/wait.h>
+#endif
+#include <stdio.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <utime.h>
+/* foo */
+
+#include "html.h"
+#include "parsetagx.h"
+#include "local.h"
+#include "regex.h"
+
+#ifndef max
+#define max(a,b) ((a) > (b) ? (a) : (b))
+#endif /* not max */
+#ifndef min
+#define min(a,b) ((a) > (b) ? (b) : (a))
+#endif /* not min */
+
+static int frame_source = 0;
+
+static char *guess_filename(char *file);
+static int _MoveFile(char *path1, char *path2);
+static void uncompress_stream(URLFile *uf, char **src);
+static FILE *lessopen_stream(char *path);
+static Buffer *loadcmdout(char *cmd,
+ Buffer *(*loadproc) (URLFile *, Buffer *),
+ Buffer *defaultbuf);
+#ifndef USE_ANSI_COLOR
+#define addnewline(a,b,c,d,e,f,g) _addnewline(a,b,c,e,f,g)
+#endif
+static void addnewline(Buffer *buf, char *line, Lineprop *prop,
+ Linecolor *color, int pos, int width, int nlines);
+static void addLink(Buffer *buf, struct parsed_tag *tag);
+
+static JMP_BUF AbortLoading;
+
+static struct table *tables[MAX_TABLE];
+static struct table_mode table_mode[MAX_TABLE];
+
+#ifdef USE_IMAGE
+static ParsedURL *cur_baseURL = NULL;
+#ifdef USE_M17N
+static char cur_document_charset;
+#endif
+#endif
+
+static Str cur_title;
+static Str cur_select;
+static Str select_str;
+static int select_is_multiple;
+static int n_selectitem;
+static Str cur_option;
+static Str cur_option_value;
+static Str cur_option_label;
+static int cur_option_selected;
+static int cur_status;
+#ifdef MENU_SELECT
+/* menu based <select> */
+FormSelectOption *select_option;
+static int max_select = MAX_SELECT;
+static int n_select;
+static int cur_option_maxwidth;
+#endif /* MENU_SELECT */
+
+static Str cur_textarea;
+Str *textarea_str;
+static int cur_textarea_size;
+static int cur_textarea_rows;
+static int cur_textarea_readonly;
+static int n_textarea;
+static int ignore_nl_textarea;
+static int max_textarea = MAX_TEXTAREA;
+
+static int http_response_code;
+
+#ifdef USE_M17N
+static wc_ces content_charset = 0;
+static wc_ces meta_charset = 0;
+static char *check_charset(char *p);
+static char *check_accept_charset(char *p);
+#endif
+
+#define set_prevchar(x,y,n) Strcopy_charp_n((x),(y),(n))
+#define set_space_to_prevchar(x) Strcopy_charp_n((x)," ",1)
+
+struct link_stack {
+ int cmd;
+ short offset;
+ short pos;
+ struct link_stack *next;
+};
+
+static struct link_stack *link_stack = NULL;
+
+#define FORMSTACK_SIZE 10
+#define FRAMESTACK_SIZE 10
+
+#ifdef USE_NNTP
+#define Str_news_endline(s) ((s)->ptr[0]=='.'&&((s)->ptr[1]=='\n'||(s)->ptr[1]=='\r'||(s)->ptr[1]=='\0'))
+#endif /* USE_NNTP */
+
+#define INITIAL_FORM_SIZE 10
+static FormList **forms;
+static int *form_stack;
+static int form_max = -1;
+static int forms_size = 0;
+#define cur_form_id ((form_sp >= 0)? form_stack[form_sp] : -1)
+static int form_sp = 0;
+
+static clen_t current_content_length;
+
+static int cur_hseq;
+#ifdef USE_IMAGE
+static int cur_iseq;
+#endif
+
+#define MAX_UL_LEVEL 9
+#define UL_SYMBOL(x) (N_GRAPH_SYMBOL + (x))
+#define UL_SYMBOL_DISC UL_SYMBOL(9)
+#define UL_SYMBOL_CIRCLE UL_SYMBOL(10)
+#define UL_SYMBOL_SQUARE UL_SYMBOL(11)
+#define IMG_SYMBOL UL_SYMBOL(12)
+#define HR_SYMBOL 26
+
+#ifdef USE_COOKIE
+/* This array should be somewhere else */
+/* FIXME: gettextize? */
+char *violations[COO_EMAX] = {
+ "internal error",
+ "tail match failed",
+ "wrong number of dots",
+ "RFC 2109 4.3.2 rule 1",
+ "RFC 2109 4.3.2 rule 2.1",
+ "RFC 2109 4.3.2 rule 2.2",
+ "RFC 2109 4.3.2 rule 3",
+ "RFC 2109 4.3.2 rule 4",
+ "RFC XXXX 4.3.2 rule 5"
+};
+#endif
+
+/* *INDENT-OFF* */
+static struct compression_decoder {
+ int type;
+ char *ext;
+ char *mime_type;
+ int auxbin_p;
+ char *cmd;
+ char *name;
+ char *encoding;
+ char *encodings[4];
+} compression_decoders[] = {
+ { CMP_COMPRESS, ".gz", "application/x-gzip",
+ 0, GUNZIP_CMDNAME, GUNZIP_NAME, "gzip",
+ {"gzip", "x-gzip", NULL} },
+ { CMP_COMPRESS, ".Z", "application/x-compress",
+ 0, GUNZIP_CMDNAME, GUNZIP_NAME, "compress",
+ {"compress", "x-compress", NULL} },
+ { CMP_BZIP2, ".bz2", "application/x-bzip",
+ 0, BUNZIP2_CMDNAME, BUNZIP2_NAME, "bzip, bzip2",
+ {"x-bzip", "bzip", "bzip2", NULL} },
+ { CMP_DEFLATE, ".deflate", "application/x-deflate",
+ 1, INFLATE_CMDNAME, INFLATE_NAME, "deflate",
+ {"deflate", "x-deflate", NULL} },
+ { CMP_NOCOMPRESS, NULL, NULL, 0, NULL, NULL, NULL, {NULL}},
+};
+/* *INDENT-ON* */
+
+#define SAVE_BUF_SIZE 1536
+
+static MySignalHandler
+KeyAbort(SIGNAL_ARG)
+{
+ LONGJMP(AbortLoading, 1);
+ SIGNAL_RETURN;
+}
+
+static void
+UFhalfclose(URLFile *f)
+{
+ switch (f->scheme) {
+ case SCM_FTP:
+ closeFTP();
+ break;
+#ifdef USE_NNTP
+ case SCM_NEWS:
+ case SCM_NNTP:
+ closeNews();
+ break;
+#endif
+ default:
+ UFclose(f);
+ break;
+ }
+}
+
+int
+currentLn(Buffer *buf)
+{
+ if (buf->currentLine)
+ /* return buf->currentLine->real_linenumber + 1; */
+ return buf->currentLine->linenumber + 1;
+ else
+ return 1;
+}
+
+static Buffer *
+loadSomething(URLFile *f,
+ char *path,
+ Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
+{
+ Buffer *buf;
+
+ if ((buf = loadproc(f, defaultbuf)) == NULL)
+ return NULL;
+
+ buf->filename = path;
+ if (buf->buffername == NULL || buf->buffername[0] == '\0') {
+ buf->buffername = checkHeader(buf, "Subject:");
+ if (buf->buffername == NULL)
+ buf->buffername = conv_from_system(lastFileName(path));
+ }
+ if (buf->currentURL.scheme == SCM_UNKNOWN)
+ buf->currentURL.scheme = f->scheme;
+ buf->real_scheme = f->scheme;
+ if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL)
+ buf->sourcefile = path;
+ return buf;
+}
+
+int
+dir_exist(char *path)
+{
+ struct stat stbuf;
+
+ if (path == NULL || *path == '\0')
+ return 0;
+ if (stat(path, &stbuf) == -1)
+ return 0;
+ return IS_DIRECTORY(stbuf.st_mode);
+}
+
+static int
+is_dump_text_type(char *type)
+{
+ struct mailcap *mcap;
+ return (type && (mcap = searchExtViewer(type)) &&
+ (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)));
+}
+
+static int
+is_text_type(char *type)
+{
+ return (type == NULL || type[0] == '\0' ||
+ strncasecmp(type, "text/", 5) == 0 ||
+ strncasecmp(type, "message/", sizeof("message/") - 1) == 0);
+}
+
+static int
+is_plain_text_type(char *type)
+{
+ return ((type && strcasecmp(type, "text/plain") == 0) ||
+ (is_text_type(type) && !is_dump_text_type(type)));
+}
+
+static void
+check_compression(char *path, URLFile *uf)
+{
+ int len;
+ struct compression_decoder *d;
+
+ if (path == NULL)
+ return;
+
+ len = strlen(path);
+ uf->compression = CMP_NOCOMPRESS;
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ int elen;
+ if (d->ext == NULL)
+ continue;
+ elen = strlen(d->ext);
+ if (len > elen && strcasecmp(&path[len - elen], d->ext) == 0) {
+ uf->compression = d->type;
+ uf->guess_type = d->mime_type;
+ break;
+ }
+ }
+}
+
+static char *
+compress_application_type(int compression)
+{
+ struct compression_decoder *d;
+
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ if (d->type == compression)
+ return d->mime_type;
+ }
+ return NULL;
+}
+
+static char *
+uncompressed_file_type(char *path, char **ext)
+{
+ int len, slen;
+ Str fn;
+ char *t0;
+ struct compression_decoder *d;
+
+ if (path == NULL)
+ return NULL;
+
+ slen = 0;
+ len = strlen(path);
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ if (d->ext == NULL)
+ continue;
+ slen = strlen(d->ext);
+ if (len > slen && strcasecmp(&path[len - slen], d->ext) == 0)
+ break;
+ }
+ if (d->type == CMP_NOCOMPRESS)
+ return NULL;
+
+ fn = Strnew_charp(path);
+ Strshrink(fn, slen);
+ if (ext)
+ *ext = filename_extension(fn->ptr, 0);
+ t0 = guessContentType(fn->ptr);
+ if (t0 == NULL)
+ t0 = "text/plain";
+ return t0;
+}
+
+static int
+setModtime(char *path, time_t modtime)
+{
+ struct utimbuf t;
+ struct stat st;
+
+ if (stat(path, &st) == 0)
+ t.actime = st.st_atime;
+ else
+ t.actime = time(NULL);
+ t.modtime = modtime;
+ return utime(path, &t);
+}
+
+void
+examineFile(char *path, URLFile *uf)
+{
+ struct stat stbuf;
+
+ uf->guess_type = NULL;
+ if (path == NULL || *path == '\0' ||
+ stat(path, &stbuf) == -1 || NOT_REGULAR(stbuf.st_mode)) {
+ uf->stream = NULL;
+ return;
+ }
+ uf->stream = openIS(path);
+ if (!do_download) {
+ if (use_lessopen && getenv("LESSOPEN") != NULL) {
+ FILE *fp;
+ uf->guess_type = guessContentType(path);
+ if (uf->guess_type == NULL)
+ uf->guess_type = "text/plain";
+ if (strcasecmp(uf->guess_type, "text/html") == 0)
+ return;
+ if ((fp = lessopen_stream(path))) {
+ UFclose(uf);
+ uf->stream = newFileStream(fp, (void (*)())pclose);
+ uf->guess_type = "text/plain";
+ return;
+ }
+ }
+ check_compression(path, uf);
+ if (uf->compression != CMP_NOCOMPRESS) {
+ char *ext = uf->ext;
+ char *t0 = uncompressed_file_type(path, &ext);
+ uf->guess_type = t0;
+ uf->ext = ext;
+ uncompress_stream(uf, NULL);
+ return;
+ }
+ }
+}
+
+#define S_IXANY (S_IXUSR|S_IXGRP|S_IXOTH)
+
+int
+check_command(char *cmd, int auxbin_p)
+{
+ static char *path = NULL;
+ Str dirs;
+ char *p, *np;
+ Str pathname;
+ struct stat st;
+
+ if (path == NULL)
+ path = getenv("PATH");
+ if (auxbin_p)
+ dirs = Strnew_charp(w3m_auxbin_dir());
+ else
+ dirs = Strnew_charp(path);
+ for (p = dirs->ptr; p != NULL; p = np) {
+ np = strchr(p, PATH_SEPARATOR);
+ if (np)
+ *np++ = '\0';
+ pathname = Strnew();
+ Strcat_charp(pathname, p);
+ Strcat_char(pathname, '/');
+ Strcat_charp(pathname, cmd);
+ if (stat(pathname->ptr, &st) == 0 && S_ISREG(st.st_mode)
+ && (st.st_mode & S_IXANY) != 0)
+ return 1;
+ }
+ return 0;
+}
+
+char *
+acceptableEncoding()
+{
+ static Str encodings = NULL;
+ struct compression_decoder *d;
+ TextList *l;
+ char *p;
+
+ if (encodings != NULL)
+ return encodings->ptr;
+ l = newTextList();
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ if (check_command(d->cmd, d->auxbin_p)) {
+ pushText(l, d->encoding);
+ }
+ }
+ encodings = Strnew();
+ while ((p = popText(l)) != NULL) {
+ if (encodings->length)
+ Strcat_charp(encodings, ", ");
+ Strcat_charp(encodings, p);
+ }
+ return encodings->ptr;
+}
+
+/*
+ * convert line
+ */
+#ifdef USE_M17N
+Str
+convertLine(URLFile *uf, Str line, int mode, wc_ces * charset,
+ wc_ces doc_charset)
+#else
+Str
+convertLine0(URLFile *uf, Str line, int mode)
+#endif
+{
+#ifdef USE_M17N
+ line = wc_Str_conv_with_detect(line, charset, doc_charset, InnerCharset);
+#endif
+ if (mode != RAW_MODE)
+ cleanup_line(line, mode);
+#ifdef USE_NNTP
+ if (uf && uf->scheme == SCM_NEWS)
+ Strchop(line);
+#endif /* USE_NNTP */
+ return line;
+}
+
+/*
+ * loadFile: load file to buffer
+ */
+Buffer *
+loadFile(char *path)
+{
+ Buffer *buf;
+ URLFile uf;
+ init_stream(&uf, SCM_LOCAL, NULL);
+ examineFile(path, &uf);
+ if (uf.stream == NULL)
+ return NULL;
+ buf = newBuffer(INIT_BUFFER_WIDTH);
+ current_content_length = 0;
+#ifdef USE_M17N
+ content_charset = 0;
+#endif
+ buf = loadSomething(&uf, path, loadBuffer, buf);
+ UFclose(&uf);
+ return buf;
+}
+
+int
+matchattr(char *p, char *attr, int len, Str *value)
+{
+ int quoted;
+ char *q = NULL;
+
+ if (strncasecmp(p, attr, len) == 0) {
+ p += len;
+ SKIP_BLANKS(p);
+ if (value) {
+ *value = Strnew();
+ if (*p == '=') {
+ p++;
+ SKIP_BLANKS(p);
+ quoted = 0;
+ while (!IS_ENDL(*p) && (quoted || *p != ';')) {
+ if (!IS_SPACE(*p))
+ q = p;
+ if (*p == '"')
+ quoted = (quoted) ? 0 : 1;
+ else
+ Strcat_char(*value, *p);
+ p++;
+ }
+ if (q)
+ Strshrink(*value, p - q - 1);
+ }
+ return 1;
+ }
+ else {
+ if (IS_ENDT(*p)) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+#ifdef USE_IMAGE
+#ifdef USE_XFACE
+static char *
+xface2xpm(char *xface)
+{
+ Image image;
+ ImageCache *cache;
+ FILE *f;
+ struct stat st;
+
+ SKIP_BLANKS(xface);
+ image.url = xface;
+ image.ext = ".xpm";
+ image.width = 48;
+ image.height = 48;
+ image.cache = NULL;
+ cache = getImage(&image, NULL, IMG_FLAG_AUTO);
+ if (cache->loaded & IMG_FLAG_LOADED && !stat(cache->file, &st))
+ return cache->file;
+ cache->loaded = IMG_FLAG_ERROR;
+
+ f = popen(Sprintf("%s > %s", shell_quote(auxbinFile(XFACE2XPM)),
+ shell_quote(cache->file))->ptr, "w");
+ if (!f)
+ return NULL;
+ fputs(xface, f);
+ pclose(f);
+ if (stat(cache->file, &st) || !st.st_size)
+ return NULL;
+ cache->loaded = IMG_FLAG_LOADED | IMG_FLAG_DONT_REMOVE;
+ cache->index = 0;
+ return cache->file;
+}
+#endif
+#endif
+
+void
+readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
+{
+ char *p, *q;
+#ifdef USE_COOKIE
+ char *emsg;
+#endif
+ char c;
+ Str lineBuf2 = NULL;
+ Str tmp;
+ TextList *headerlist;
+#ifdef USE_M17N
+ wc_ces charset = WC_CES_US_ASCII, mime_charset;
+#endif
+ char *tmpf;
+ FILE *src = NULL;
+ Lineprop *propBuffer;
+
+ headerlist = newBuf->document_header = newTextList();
+ if (uf->scheme == SCM_HTTP
+#ifdef USE_SSL
+ || uf->scheme == SCM_HTTPS
+#endif /* USE_SSL */
+ )
+ http_response_code = -1;
+ else
+ http_response_code = 0;
+
+ if (thru && !newBuf->header_source
+#ifdef USE_IMAGE
+ && !image_source
+#endif
+ ) {
+ tmpf = tmpfname(TMPF_DFL, NULL)->ptr;
+ src = fopen(tmpf, "w");
+ if (src)
+ newBuf->header_source = tmpf;
+ }
+ while ((tmp = StrmyUFgets(uf))->length) {
+#ifdef USE_NNTP
+ if (uf->scheme == SCM_NEWS && tmp->ptr[0] == '.')
+ Strshrinkfirst(tmp, 1);
+#endif
+#ifdef HTTP_DEBUG
+ {
+ FILE *ff;
+ ff = fopen("zzrequest", "a");
+ Strfputs(tmp, ff);
+ fclose(ff);
+ }
+#endif /* HTTP_DEBUG */
+ if (src)
+ Strfputs(tmp, src);
+ cleanup_line(tmp, HEADER_MODE);
+ if (tmp->ptr[0] == '\n' || tmp->ptr[0] == '\r' || tmp->ptr[0] == '\0') {
+ if (!lineBuf2)
+ /* there is no header */
+ break;
+ /* last header */
+ }
+ else if (!(w3m_dump & DUMP_HEAD)) {
+ if (lineBuf2) {
+ Strcat(lineBuf2, tmp);
+ }
+ else {
+ lineBuf2 = tmp;
+ }
+ c = UFgetc(uf);
+ UFundogetc(uf);
+ if (c == ' ' || c == '\t')
+ /* header line is continued */
+ continue;
+ lineBuf2 = decodeMIME(lineBuf2, &mime_charset);
+ lineBuf2 = convertLine(NULL, lineBuf2, RAW_MODE,
+ mime_charset ? &mime_charset : &charset,
+ mime_charset ? mime_charset
+ : DocumentCharset);
+ /* separated with line and stored */
+ tmp = Strnew_size(lineBuf2->length);
+ for (p = lineBuf2->ptr; *p; p = q) {
+ for (q = p; *q && *q != '\r' && *q != '\n'; q++) ;
+ lineBuf2 = checkType(Strnew_charp_n(p, q - p), &propBuffer,
+ NULL);
+ Strcat(tmp, lineBuf2);
+ if (thru)
+ addnewline(newBuf, lineBuf2->ptr, propBuffer, NULL,
+ lineBuf2->length, FOLD_BUFFER_WIDTH, -1);
+ for (; *q && (*q == '\r' || *q == '\n'); q++) ;
+ }
+#ifdef USE_IMAGE
+ if (thru && activeImage && displayImage) {
+ Str src = NULL;
+ if (!strncasecmp(tmp->ptr, "X-Image-URL:", 12)) {
+ tmpf = &tmp->ptr[12];
+ SKIP_BLANKS(tmpf);
+ src = Strnew_m_charp("<img src=\"", html_quote(tmpf),
+ "\" alt=\"X-Image-URL\">", NULL);
+ }
+#ifdef USE_XFACE
+ else if (!strncasecmp(tmp->ptr, "X-Face:", 7)) {
+ tmpf = xface2xpm(&tmp->ptr[7]);
+ if (tmpf)
+ src = Strnew_m_charp("<img src=\"file:",
+ html_quote(tmpf),
+ "\" alt=\"X-Face\"",
+ " width=48 height=48>", NULL);
+ }
+#endif
+ if (src) {
+ URLFile f;
+ Line *l;
+#ifdef USE_M17N
+ wc_ces old_charset = newBuf->document_charset;
+#endif
+ init_stream(&f, SCM_LOCAL, newStrStream(src));
+ loadHTMLstream(&f, newBuf, NULL, TRUE);
+ for (l = newBuf->lastLine; l && l->real_linenumber;
+ l = l->prev)
+ l->real_linenumber = 0;
+#ifdef USE_M17N
+ newBuf->document_charset = old_charset;
+#endif
+ }
+ }
+#endif
+ lineBuf2 = tmp;
+ }
+ else {
+ lineBuf2 = tmp;
+ }
+ if ((uf->scheme == SCM_HTTP
+#ifdef USE_SSL
+ || uf->scheme == SCM_HTTPS
+#endif /* USE_SSL */
+ ) && http_response_code == -1) {
+ p = lineBuf2->ptr;
+ while (*p && !IS_SPACE(*p))
+ p++;
+ while (*p && IS_SPACE(*p))
+ p++;
+ http_response_code = atoi(p);
+ if (fmInitialized) {
+ message(lineBuf2->ptr, 0, 0);
+ refresh();
+ }
+ }
+ if (!strncasecmp(lineBuf2->ptr, "content-transfer-encoding:", 26)) {
+ p = lineBuf2->ptr + 26;
+ while (IS_SPACE(*p))
+ p++;
+ if (!strncasecmp(p, "base64", 6))
+ uf->encoding = ENC_BASE64;
+ else if (!strncasecmp(p, "quoted-printable", 16))
+ uf->encoding = ENC_QUOTE;
+ else if (!strncasecmp(p, "uuencode", 8) ||
+ !strncasecmp(p, "x-uuencode", 10))
+ uf->encoding = ENC_UUENCODE;
+ else
+ uf->encoding = ENC_7BIT;
+ }
+ else if (!strncasecmp(lineBuf2->ptr, "content-encoding:", 17)) {
+ struct compression_decoder *d;
+ p = lineBuf2->ptr + 17;
+ while (IS_SPACE(*p))
+ p++;
+ uf->compression = CMP_NOCOMPRESS;
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ char **e;
+ for (e = d->encodings; *e != NULL; e++) {
+ if (strncasecmp(p, *e, strlen(*e)) == 0) {
+ uf->compression = d->type;
+ break;
+ }
+ }
+ if (uf->compression != CMP_NOCOMPRESS)
+ break;
+ }
+ uf->content_encoding = uf->compression;
+ }
+#ifdef USE_COOKIE
+ else if (use_cookie && accept_cookie &&
+ pu && check_cookie_accept_domain(pu->host) &&
+ (!strncasecmp(lineBuf2->ptr, "Set-Cookie:", 11) ||
+ !strncasecmp(lineBuf2->ptr, "Set-Cookie2:", 12))) {
+ Str name = Strnew(), value = Strnew(), domain = NULL, path = NULL,
+ comment = NULL, commentURL = NULL, port = NULL, tmp2;
+ int version, quoted, flag = 0;
+ time_t expires = (time_t) - 1;
+
+ q = NULL;
+ if (lineBuf2->ptr[10] == '2') {
+ p = lineBuf2->ptr + 12;
+ version = 1;
+ }
+ else {
+ p = lineBuf2->ptr + 11;
+ version = 0;
+ }
+#ifdef DEBUG
+ fprintf(stderr, "Set-Cookie: [%s]\n", p);
+#endif /* DEBUG */
+ SKIP_BLANKS(p);
+ while (*p != '=' && !IS_ENDT(*p))
+ Strcat_char(name, *(p++));
+ Strremovetrailingspaces(name);
+ if (*p == '=') {
+ p++;
+ SKIP_BLANKS(p);
+ quoted = 0;
+ while (!IS_ENDL(*p) && (quoted || *p != ';')) {
+ if (!IS_SPACE(*p))
+ q = p;
+ if (*p == '"')
+ quoted = (quoted) ? 0 : 1;
+ Strcat_char(value, *(p++));
+ }
+ if (q)
+ Strshrink(value, p - q - 1);
+ }
+ while (*p == ';') {
+ p++;
+ SKIP_BLANKS(p);
+ if (matchattr(p, "expires", 7, &tmp2)) {
+ /* version 0 */
+ expires = mymktime(tmp2->ptr);
+ }
+ else if (matchattr(p, "max-age", 7, &tmp2)) {
+ /* XXX Is there any problem with max-age=0? (RFC 2109 ss. 4.2.1, 4.2.2 */
+ expires = time(NULL) + atol(tmp2->ptr);
+ }
+ else if (matchattr(p, "domain", 6, &tmp2)) {
+ domain = tmp2;
+ }
+ else if (matchattr(p, "path", 4, &tmp2)) {
+ path = tmp2;
+ }
+ else if (matchattr(p, "secure", 6, NULL)) {
+ flag |= COO_SECURE;
+ }
+ else if (matchattr(p, "comment", 7, &tmp2)) {
+ comment = tmp2;
+ }
+ else if (matchattr(p, "version", 7, &tmp2)) {
+ version = atoi(tmp2->ptr);
+ }
+ else if (matchattr(p, "port", 4, &tmp2)) {
+ /* version 1, Set-Cookie2 */
+ port = tmp2;
+ }
+ else if (matchattr(p, "commentURL", 10, &tmp2)) {
+ /* version 1, Set-Cookie2 */
+ commentURL = tmp2;
+ }
+ else if (matchattr(p, "discard", 7, NULL)) {
+ /* version 1, Set-Cookie2 */
+ flag |= COO_DISCARD;
+ }
+ quoted = 0;
+ while (!IS_ENDL(*p) && (quoted || *p != ';')) {
+ if (*p == '"')
+ quoted = (quoted) ? 0 : 1;
+ p++;
+ }
+ }
+ if (pu && name->length > 0) {
+ int err;
+ if (show_cookie) {
+ if (flag & COO_SECURE)
+ disp_message_nsec("Received a secured cookie", FALSE, 1,
+ TRUE, FALSE);
+ else
+ disp_message_nsec(Sprintf("Received cookie: %s=%s",
+ name->ptr, value->ptr)->ptr,
+ FALSE, 1, TRUE, FALSE);
+ }
+ err =
+ add_cookie(pu, name, value, expires, domain, path, flag,
+ comment, version, port, commentURL);
+ if (err) {
+ char *ans = (accept_bad_cookie == ACCEPT_BAD_COOKIE_ACCEPT)
+ ? "y" : NULL;
+ if (fmInitialized && (err & COO_OVERRIDE_OK) &&
+ accept_bad_cookie == ACCEPT_BAD_COOKIE_ASK) {
+ Str msg = Sprintf("Accept bad cookie from %s for %s?",
+ pu->host,
+ ((domain && domain->ptr)
+ ? domain->ptr : "<localdomain>"));
+ if (msg->length > COLS - 10)
+ Strshrink(msg, msg->length - (COLS - 10));
+ Strcat_charp(msg, " (y/n)");
+ ans = inputAnswer(msg->ptr);
+ }
+ if (ans == NULL || TOLOWER(*ans) != 'y' ||
+ (err =
+ add_cookie(pu, name, value, expires, domain, path,
+ flag | COO_OVERRIDE, comment, version,
+ port, commentURL))) {
+ err = (err & ~COO_OVERRIDE_OK) - 1;
+ if (err >= 0 && err < COO_EMAX)
+ emsg = Sprintf("This cookie was rejected "
+ "to prevent security violation. [%s]",
+ violations[err])->ptr;
+ else
+ emsg =
+ "This cookie was rejected to prevent security violation.";
+ record_err_message(emsg);
+ if (show_cookie)
+ disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE);
+ }
+ else
+ if (show_cookie)
+ disp_message_nsec(Sprintf
+ ("Accepting invalid cookie: %s=%s",
+ name->ptr, value->ptr)->ptr, FALSE,
+ 1, TRUE, FALSE);
+ }
+ }
+ }
+#endif /* USE_COOKIE */
+ else if (!strncasecmp(lineBuf2->ptr, "w3m-control:", 12) &&
+ uf->scheme == SCM_LOCAL_CGI) {
+ Str funcname = Strnew();
+ int f;
+
+ p = lineBuf2->ptr + 12;
+ SKIP_BLANKS(p);
+ while (*p && !IS_SPACE(*p))
+ Strcat_char(funcname, *(p++));
+ SKIP_BLANKS(p);
+ f = getFuncList(funcname->ptr);
+ if (f >= 0) {
+ tmp = Strnew_charp(p);
+ Strchop(tmp);
+ pushEvent(f, tmp->ptr);
+ }
+ }
+ if (headerlist)
+ pushText(headerlist, lineBuf2->ptr);
+ Strfree(lineBuf2);
+ lineBuf2 = NULL;
+ }
+ if (thru)
+ addnewline(newBuf, "", propBuffer, NULL, 0, -1, -1);
+ if (src)
+ fclose(src);
+}
+
+char *
+checkHeader(Buffer *buf, char *field)
+{
+ int len;
+ TextListItem *i;
+ char *p;
+
+ if (buf == NULL || field == NULL || buf->document_header == NULL)
+ return NULL;
+ len = strlen(field);
+ for (i = buf->document_header->first; i != NULL; i = i->next) {
+ if (!strncasecmp(i->ptr, field, len)) {
+ p = i->ptr + len;
+ return remove_space(p);
+ }
+ }
+ return NULL;
+}
+
+char *
+checkContentType(Buffer *buf)
+{
+ char *p;
+ Str r;
+ p = checkHeader(buf, "Content-Type:");
+ if (p == NULL)
+ return NULL;
+ r = Strnew();
+ while (*p && *p != ';' && !IS_SPACE(*p))
+ Strcat_char(r, *p++);
+#ifdef USE_M17N
+ if ((p = strcasestr(p, "charset")) != NULL) {
+ p += 7;
+ SKIP_BLANKS(p);
+ if (*p == '=') {
+ p++;
+ SKIP_BLANKS(p);
+ if (*p == '"')
+ p++;
+ content_charset = wc_guess_charset(p, 0);
+ }
+ }
+#endif
+ return r->ptr;
+}
+
+struct auth_param {
+ char *name;
+ Str val;
+};
+
+struct http_auth {
+ int pri;
+ char *scheme;
+ struct auth_param *param;
+ Str (*cred) (struct http_auth * ha, Str uname, Str pw, ParsedURL *pu,
+ HRequest *hr, FormList *request);
+};
+
+enum {
+ AUTHCHR_NUL,
+ AUTHCHR_SEP,
+ AUTHCHR_TOKEN,
+};
+
+static int
+skip_auth_token(char **pp)
+{
+ char *p;
+ int first = AUTHCHR_NUL, typ;
+
+ for (p = *pp ;; ++p) {
+ switch (*p) {
+ case '\0':
+ goto endoftoken;
+ default:
+ if ((unsigned char)*p > 037) {
+ typ = AUTHCHR_TOKEN;
+ break;
+ }
+ /* thru */
+ case '\177':
+ case '[':
+ case ']':
+ case '(':
+ case ')':
+ case '<':
+ case '>':
+ case '@':
+ case ';':
+ case ':':
+ case '\\':
+ case '"':
+ case '/':
+ case '?':
+ case '=':
+ case ' ':
+ case '\t':
+ case ',':
+ typ = AUTHCHR_SEP;
+ break;
+ }
+
+ if (!first)
+ first = typ;
+ else if (first != typ)
+ break;
+ }
+endoftoken:
+ *pp = p;
+ return first;
+}
+
+static Str
+extract_auth_val(char **q)
+{
+ unsigned char *qq = *(unsigned char **)q;
+ int quoted = 0;
+ Str val = Strnew();
+
+ SKIP_BLANKS(qq);
+ if (*qq == '"') {
+ quoted = TRUE;
+ Strcat_char(val, *qq++);
+ }
+ while (*qq != '\0') {
+ if (quoted && *qq == '"') {
+ Strcat_char(val, *qq++);
+ break;
+ }
+ if (!quoted) {
+ switch (*qq) {
+ case '[':
+ case ']':
+ case '(':
+ case ')':
+ case '<':
+ case '>':
+ case '@':
+ case ';':
+ case ':':
+ case '\\':
+ case '"':
+ case '/':
+ case '?':
+ case '=':
+ case ' ':
+ case '\t':
+ qq++;
+ case ',':
+ goto end_token;
+ default:
+ if (*qq <= 037 || *qq == 0177) {
+ qq++;
+ goto end_token;
+ }
+ }
+ }
+ else if (quoted && *qq == '\\')
+ Strcat_char(val, *qq++);
+ Strcat_char(val, *qq++);
+ }
+ end_token:
+ *q = (char *)qq;
+ return val;
+}
+
+static Str
+qstr_unquote(Str s)
+{
+ char *p;
+
+ if (s == NULL)
+ return NULL;
+ p = s->ptr;
+ if (*p == '"') {
+ Str tmp = Strnew();
+ for (p++; *p != '\0'; p++) {
+ if (*p == '\\')
+ p++;
+ Strcat_char(tmp, *p);
+ }
+ if (Strlastchar(tmp) == '"')
+ Strshrink(tmp, 1);
+ return tmp;
+ }
+ else
+ return s;
+}
+
+static char *
+extract_auth_param(char *q, struct auth_param *auth)
+{
+ struct auth_param *ap;
+ char *p;
+
+ for (ap = auth; ap->name != NULL; ap++) {
+ ap->val = NULL;
+ }
+
+ while (*q != '\0') {
+ SKIP_BLANKS(q);
+ for (ap = auth; ap->name != NULL; ap++) {
+ size_t len;
+
+ len = strlen(ap->name);
+ if (strncasecmp(q, ap->name, len) == 0 &&
+ (IS_SPACE(q[len]) || q[len] == '=')) {
+ p = q + len;
+ SKIP_BLANKS(p);
+ if (*p != '=')
+ return q;
+ q = p + 1;
+ ap->val = extract_auth_val(&q);
+ break;
+ }
+ }
+ if (ap->name == NULL) {
+ /* skip unknown param */
+ int token_type;
+ p = q;
+ if ((token_type = skip_auth_token(&q)) == AUTHCHR_TOKEN &&
+ (IS_SPACE(*q) || *q == '=')) {
+ SKIP_BLANKS(q);
+ if (*q != '=')
+ return p;
+ q++;
+ extract_auth_val(&q);
+ }
+ else
+ return p;
+ }
+ if (*q != '\0') {
+ SKIP_BLANKS(q);
+ if (*q == ',')
+ q++;
+ else
+ break;
+ }
+ }
+ return q;
+}
+
+static Str
+get_auth_param(struct auth_param *auth, char *name)
+{
+ struct auth_param *ap;
+ for (ap = auth; ap->name != NULL; ap++) {
+ if (strcasecmp(name, ap->name) == 0)
+ return ap->val;
+ }
+ return NULL;
+}
+
+static Str
+AuthBasicCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
+ HRequest *hr, FormList *request)
+{
+ Str s = Strdup(uname);
+ Strcat_char(s, ':');
+ Strcat(s, pw);
+ return Strnew_m_charp("Basic ", encodeB(s->ptr)->ptr, NULL);
+}
+
+#ifdef USE_DIGEST_AUTH
+#include <openssl/md5.h>
+
+/* RFC2617: 3.2.2 The Authorization Request Header
+ *
+ * credentials = "Digest" digest-response
+ * digest-response = 1#( username | realm | nonce | digest-uri
+ * | response | [ algorithm ] | [cnonce] |
+ * [opaque] | [message-qop] |
+ * [nonce-count] | [auth-param] )
+ *
+ * username = "username" "=" username-value
+ * username-value = quoted-string
+ * digest-uri = "uri" "=" digest-uri-value
+ * digest-uri-value = request-uri ; As specified by HTTP/1.1
+ * message-qop = "qop" "=" qop-value
+ * cnonce = "cnonce" "=" cnonce-value
+ * cnonce-value = nonce-value
+ * nonce-count = "nc" "=" nc-value
+ * nc-value = 8LHEX
+ * response = "response" "=" request-digest
+ * request-digest = <"> 32LHEX <">
+ * LHEX = "0" | "1" | "2" | "3" |
+ * "4" | "5" | "6" | "7" |
+ * "8" | "9" | "a" | "b" |
+ * "c" | "d" | "e" | "f"
+ */
+
+static Str
+digest_hex(char *p)
+{
+ char *h = "0123456789abcdef";
+ Str tmp = Strnew_size(MD5_DIGEST_LENGTH * 2 + 1);
+ int i;
+ for (i = 0; i < MD5_DIGEST_LENGTH; i++, p++) {
+ Strcat_char(tmp, h[(*p >> 4) & 0x0f]);
+ Strcat_char(tmp, h[*p & 0x0f]);
+ }
+ return tmp;
+}
+
+enum {
+ QOP_NONE,
+ QOP_AUTH,
+ QOP_AUTH_INT,
+};
+
+static Str
+AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
+ HRequest *hr, FormList *request)
+{
+ Str tmp, a1buf, a2buf, rd, s;
+ char md5[MD5_DIGEST_LENGTH + 1];
+ Str uri = HTTPrequestURI(pu, hr);
+ char nc[] = "00000001";
+
+ Str algorithm = qstr_unquote(get_auth_param(ha->param, "algorithm"));
+ Str nonce = qstr_unquote(get_auth_param(ha->param, "nonce"));
+ Str cnonce /* = qstr_unquote(get_auth_param(ha->param, "cnonce")) */;
+ /* cnonce is what client should generate. */
+ Str qop = qstr_unquote(get_auth_param(ha->param, "qop"));
+
+ static union {
+ int r[4];
+ char s[sizeof(int) * 4];
+ } cnonce_seed;
+ int qop_i = QOP_NONE;
+
+ cnonce_seed.r[0] = rand();
+ cnonce_seed.r[1] = rand();
+ cnonce_seed.r[2] = rand();
+ MD5(cnonce_seed.s, sizeof(cnonce_seed.s), md5);
+ cnonce = digest_hex(md5);
+ cnonce_seed.r[3]++;
+
+ if (qop) {
+ char *p;
+ size_t i;
+
+ p = qop->ptr;
+ SKIP_BLANKS(p);
+
+ for (;;) {
+ if ((i = strcspn(p, " \t,")) > 0) {
+ if (i == sizeof("auth-int") - sizeof("") && !strncasecmp(p, "auth-int", i)) {
+ if (qop_i < QOP_AUTH_INT)
+ qop_i = QOP_AUTH_INT;
+ }
+ else if (i == sizeof("auth") - sizeof("") && !strncasecmp(p, "auth", i)) {
+ if (qop_i < QOP_AUTH)
+ qop_i = QOP_AUTH;
+ }
+ }
+
+ if (p[i]) {
+ p += i + 1;
+ SKIP_BLANKS(p);
+ }
+ else
+ break;
+ }
+ }
+
+ /* A1 = unq(username-value) ":" unq(realm-value) ":" passwd */
+ tmp = Strnew_m_charp(uname->ptr, ":",
+ qstr_unquote(get_auth_param(ha->param, "realm"))->ptr,
+ ":", pw->ptr, NULL);
+ MD5(tmp->ptr, strlen(tmp->ptr), md5);
+ a1buf = digest_hex(md5);
+
+ if (algorithm) {
+ if (strcasecmp(algorithm->ptr, "MD5-sess") == 0) {
+ /* A1 = H(unq(username-value) ":" unq(realm-value) ":" passwd)
+ * ":" unq(nonce-value) ":" unq(cnonce-value)
+ */
+ if (nonce == NULL)
+ return NULL;
+ tmp = Strnew_m_charp(a1buf->ptr, ":",
+ qstr_unquote(nonce)->ptr,
+ ":", qstr_unquote(cnonce)->ptr, NULL);
+ MD5(tmp->ptr, strlen(tmp->ptr), md5);
+ a1buf = digest_hex(md5);
+ }
+ else if (strcasecmp(algorithm->ptr, "MD5") == 0)
+ /* ok default */
+ ;
+ else
+ /* unknown algorithm */
+ return NULL;
+ }
+
+ /* A2 = Method ":" digest-uri-value */
+ tmp = Strnew_m_charp(HTTPrequestMethod(hr)->ptr, ":", uri->ptr, NULL);
+ if (qop_i == QOP_AUTH_INT) {
+ /* A2 = Method ":" digest-uri-value ":" H(entity-body) */
+ if (request && request->body) {
+ if (request->method == FORM_METHOD_POST && request->enctype == FORM_ENCTYPE_MULTIPART) {
+ FILE *fp = fopen(request->body, "r");
+ if (fp != NULL) {
+ Str ebody;
+ ebody = Strfgetall(fp);
+ MD5(ebody->ptr, strlen(ebody->ptr), md5);
+ }
+ else {
+ MD5("", 0, md5);
+ }
+ }
+ else {
+ MD5(request->body, request->length, md5);
+ }
+ }
+ else {
+ MD5("", 0, md5);
+ }
+ Strcat_char(tmp, ':');
+ Strcat(tmp, digest_hex(md5));
+ }
+ MD5(tmp->ptr, strlen(tmp->ptr), md5);
+ a2buf = digest_hex(md5);
+
+ if (qop_i >= QOP_AUTH) {
+ /* request-digest = <"> < KD ( H(A1), unq(nonce-value)
+ * ":" nc-value
+ * ":" unq(cnonce-value)
+ * ":" unq(qop-value)
+ * ":" H(A2)
+ * ) <">
+ */
+ if (nonce == NULL)
+ return NULL;
+ tmp = Strnew_m_charp(a1buf->ptr, ":", qstr_unquote(nonce)->ptr,
+ ":", nc,
+ ":", qstr_unquote(cnonce)->ptr,
+ ":", qop_i == QOP_AUTH ? "auth" : "auth-int",
+ ":", a2buf->ptr, NULL);
+ MD5(tmp->ptr, strlen(tmp->ptr), md5);
+ rd = digest_hex(md5);
+ }
+ else {
+ /* compatibility with RFC 2069
+ * request_digest = KD(H(A1), unq(nonce), H(A2))
+ */
+ tmp = Strnew_m_charp(a1buf->ptr, ":",
+ qstr_unquote(get_auth_param(ha->param, "nonce"))->
+ ptr, ":", a2buf->ptr, NULL);
+ MD5(tmp->ptr, strlen(tmp->ptr), md5);
+ rd = digest_hex(md5);
+ }
+
+ /*
+ * digest-response = 1#( username | realm | nonce | digest-uri
+ * | response | [ algorithm ] | [cnonce] |
+ * [opaque] | [message-qop] |
+ * [nonce-count] | [auth-param] )
+ */
+
+ tmp = Strnew_m_charp("Digest username=\"", uname->ptr, "\"", NULL);
+ Strcat_m_charp(tmp, ", realm=",
+ get_auth_param(ha->param, "realm")->ptr, NULL);
+ Strcat_m_charp(tmp, ", nonce=",
+ get_auth_param(ha->param, "nonce")->ptr, NULL);
+ Strcat_m_charp(tmp, ", uri=\"", uri->ptr, "\"", NULL);
+ Strcat_m_charp(tmp, ", response=\"", rd->ptr, "\"", NULL);
+
+ if (algorithm)
+ Strcat_m_charp(tmp, ", algorithm=",
+ get_auth_param(ha->param, "algorithm")->ptr, NULL);
+
+ if (cnonce)
+ Strcat_m_charp(tmp, ", cnonce=\"", cnonce->ptr, "\"", NULL);
+
+ if ((s = get_auth_param(ha->param, "opaque")) != NULL)
+ Strcat_m_charp(tmp, ", opaque=", s->ptr, NULL);
+
+ if (qop_i >= QOP_AUTH) {
+ Strcat_m_charp(tmp, ", qop=",
+ qop_i == QOP_AUTH ? "auth" : "auth-int",
+ NULL);
+ /* XXX how to count? */
+ /* Since nonce is unique up to each *-Authenticate and w3m does not re-use *-Authenticate: headers,
+ nonce-count should be always "00000001". */
+ Strcat_m_charp(tmp, ", nc=", nc, NULL);
+ }
+
+ return tmp;
+}
+#endif
+
+/* *INDENT-OFF* */
+struct auth_param none_auth_param[] = {
+ {NULL, NULL}
+};
+
+struct auth_param basic_auth_param[] = {
+ {"realm", NULL},
+ {NULL, NULL}
+};
+
+#ifdef USE_DIGEST_AUTH
+/* RFC2617: 3.2.1 The WWW-Authenticate Response Header
+ * challenge = "Digest" digest-challenge
+ *
+ * digest-challenge = 1#( realm | [ domain ] | nonce |
+ * [ opaque ] |[ stale ] | [ algorithm ] |
+ * [ qop-options ] | [auth-param] )
+ *
+ * domain = "domain" "=" <"> URI ( 1*SP URI ) <">
+ * URI = absoluteURI | abs_path
+ * nonce = "nonce" "=" nonce-value
+ * nonce-value = quoted-string
+ * opaque = "opaque" "=" quoted-string
+ * stale = "stale" "=" ( "true" | "false" )
+ * algorithm = "algorithm" "=" ( "MD5" | "MD5-sess" |
+ * token )
+ * qop-options = "qop" "=" <"> 1#qop-value <">
+ * qop-value = "auth" | "auth-int" | token
+ */
+struct auth_param digest_auth_param[] = {
+ {"realm", NULL},
+ {"domain", NULL},
+ {"nonce", NULL},
+ {"opaque", NULL},
+ {"stale", NULL},
+ {"algorithm", NULL},
+ {"qop", NULL},
+ {NULL, NULL}
+};
+#endif
+/* for RFC2617: HTTP Authentication */
+struct http_auth www_auth[] = {
+ { 1, "Basic ", basic_auth_param, AuthBasicCred },
+#ifdef USE_DIGEST_AUTH
+ { 10, "Digest ", digest_auth_param, AuthDigestCred },
+#endif
+ { 0, NULL, NULL, NULL,}
+};
+/* *INDENT-ON* */
+
+static struct http_auth *
+findAuthentication(struct http_auth *hauth, Buffer *buf, char *auth_field)
+{
+ struct http_auth *ha;
+ int len = strlen(auth_field), slen;
+ TextListItem *i;
+ char *p0, *p;
+
+ bzero(hauth, sizeof(struct http_auth));
+ for (i = buf->document_header->first; i != NULL; i = i->next) {
+ if (strncasecmp(i->ptr, auth_field, len) == 0) {
+ for (p = i->ptr + len; p != NULL && *p != '\0';) {
+ SKIP_BLANKS(p);
+ p0 = p;
+ for (ha = &www_auth[0]; ha->scheme != NULL; ha++) {
+ slen = strlen(ha->scheme);
+ if (strncasecmp(p, ha->scheme, slen) == 0) {
+ p += slen;
+ SKIP_BLANKS(p);
+ if (hauth->pri < ha->pri) {
+ *hauth = *ha;
+ p = extract_auth_param(p, hauth->param);
+ break;
+ }
+ else {
+ /* weak auth */
+ p = extract_auth_param(p, none_auth_param);
+ }
+ }
+ }
+ if (p0 == p) {
+ /* all unknown auth failed */
+ int token_type;
+ if ((token_type = skip_auth_token(&p)) == AUTHCHR_TOKEN && IS_SPACE(*p)) {
+ SKIP_BLANKS(p);
+ p = extract_auth_param(p, none_auth_param);
+ }
+ else
+ break;
+ }
+ }
+ }
+ }
+ return hauth->scheme ? hauth : NULL;
+}
+
+static void
+getAuthCookie(struct http_auth *hauth, char *auth_header,
+ TextList *extra_header, ParsedURL *pu, HRequest *hr,
+ FormList *request,
+ volatile Str *uname, volatile Str *pwd)
+{
+ Str ss = NULL;
+ Str tmp;
+ TextListItem *i;
+ int a_found;
+ int auth_header_len = strlen(auth_header);
+ char *realm = NULL;
+ int proxy;
+
+ if (hauth)
+ realm = qstr_unquote(get_auth_param(hauth->param, "realm"))->ptr;
+
+ if (!realm)
+ return;
+
+ a_found = FALSE;
+ for (i = extra_header->first; i != NULL; i = i->next) {
+ if (!strncasecmp(i->ptr, auth_header, auth_header_len)) {
+ a_found = TRUE;
+ break;
+ }
+ }
+ proxy = !strncasecmp("Proxy-Authorization:", auth_header,
+ auth_header_len);
+ if (a_found) {
+ /* This means that *-Authenticate: header is received after
+ * Authorization: header is sent to the server.
+ */
+ if (fmInitialized) {
+ message("Wrong username or password", 0, 0);
+ refresh();
+ }
+ else
+ fprintf(stderr, "Wrong username or password\n");
+ sleep(1);
+ /* delete Authenticate: header from extra_header */
+ delText(extra_header, i);
+ invalidate_auth_user_passwd(pu, realm, *uname, *pwd, proxy);
+ }
+ *uname = NULL;
+ *pwd = NULL;
+
+ if (!a_found && find_auth_user_passwd(pu, realm, (Str*)uname, (Str*)pwd,
+ proxy)) {
+ /* found username & password in passwd file */ ;
+ }
+ else {
+ if (QuietMessage)
+ return;
+ /* input username and password */
+ sleep(2);
+ if (fmInitialized) {
+ char *pp;
+ term_raw();
+ /* FIXME: gettextize? */
+ if ((pp = inputStr(Sprintf("Username for %s: ", realm)->ptr,
+ NULL)) == NULL)
+ return;
+ *uname = Str_conv_to_system(Strnew_charp(pp));
+ if ((pp = inputLine(Sprintf("Password for %s: ", realm)->ptr, NULL,
+ IN_PASSWORD)) == NULL) {
+ *uname = NULL;
+ return;
+ }
+ *pwd = Str_conv_to_system(Strnew_charp(pp));
+ term_cbreak();
+ }
+ else {
+ /*
+ * If post file is specified as '-', stdin is closed at this
+ * point.
+ * In this case, w3m cannot read username from stdin.
+ * So exit with error message.
+ * (This is same behavior as lwp-request.)
+ */
+ if (feof(stdin) || ferror(stdin)) {
+ /* FIXME: gettextize? */
+ fprintf(stderr, "w3m: Authorization required for %s\n",
+ realm);
+ exit(1);
+ }
+
+ /* FIXME: gettextize? */
+ printf(proxy ? "Proxy Username for %s: " : "Username for %s: ",
+ realm);
+ fflush(stdout);
+ *uname = Strfgets(stdin);
+ Strchop(*uname);
+#ifdef HAVE_GETPASSPHRASE
+ *pwd = Strnew_charp((char *)
+ getpassphrase(proxy ? "Proxy Password: " :
+ "Password: "));
+#else
+ *pwd = Strnew_charp((char *)
+ getpass(proxy ? "Proxy Password: " :
+ "Password: "));
+#endif
+ }
+ }
+ ss = hauth->cred(hauth, *uname, *pwd, pu, hr, request);
+ if (ss) {
+ tmp = Strnew_charp(auth_header);
+ Strcat_m_charp(tmp, " ", ss->ptr, "\r\n", NULL);
+ pushText(extra_header, tmp->ptr);
+ }
+ else {
+ *uname = NULL;
+ *pwd = NULL;
+ }
+ return;
+}
+
+static int
+same_url_p(ParsedURL *pu1, ParsedURL *pu2)
+{
+ return (pu1->scheme == pu2->scheme && pu1->port == pu2->port &&
+ (pu1->host ? pu2->host ? !strcasecmp(pu1->host, pu2->host) : 0 : 1)
+ && (pu1->file ? pu2->
+ file ? !strcmp(pu1->file, pu2->file) : 0 : 1));
+}
+
+static int
+checkRedirection(ParsedURL *pu)
+{
+ static ParsedURL *puv = NULL;
+ static int nredir = 0;
+ static int nredir_size = 0;
+ Str tmp;
+
+ if (pu == NULL) {
+ nredir = 0;
+ nredir_size = 0;
+ puv = NULL;
+ return TRUE;
+ }
+ if (nredir >= FollowRedirection) {
+ /* FIXME: gettextize? */
+ tmp = Sprintf("Number of redirections exceeded %d at %s",
+ FollowRedirection, parsedURL2Str(pu)->ptr);
+ disp_err_message(tmp->ptr, FALSE);
+ return FALSE;
+ }
+ else if (nredir_size > 0 &&
+ (same_url_p(pu, &puv[(nredir - 1) % nredir_size]) ||
+ (!(nredir % 2)
+ && same_url_p(pu, &puv[(nredir / 2) % nredir_size])))) {
+ /* FIXME: gettextize? */
+ tmp = Sprintf("Redirection loop detected (%s)",
+ parsedURL2Str(pu)->ptr);
+ disp_err_message(tmp->ptr, FALSE);
+ return FALSE;
+ }
+ if (!puv) {
+ nredir_size = FollowRedirection / 2 + 1;
+ puv = New_N(ParsedURL, nredir_size);
+ memset(puv, 0, sizeof(ParsedURL) * nredir_size);
+ }
+ copyParsedURL(&puv[nredir % nredir_size], pu);
+ nredir++;
+ return TRUE;
+}
+
+/*
+ * loadGeneralFile: load file to buffer
+ */
+Buffer *
+loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ int flag, FormList *volatile request)
+{
+ URLFile f, *volatile of = NULL;
+ ParsedURL pu;
+ Buffer *b = NULL, *(*volatile proc)() = loadBuffer;
+ char *volatile tpath;
+ char *volatile t = "text/plain", *p, *volatile real_type = NULL;
+ Buffer *volatile t_buf = NULL;
+ int volatile searchHeader = SearchHeader;
+ int volatile searchHeader_through = TRUE;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ TextList *extra_header = newTextList();
+ volatile Str uname = NULL;
+ volatile Str pwd = NULL;
+ volatile Str realm = NULL;
+ int volatile add_auth_cookie_flag;
+ unsigned char status = HTST_NORMAL;
+ URLOption url_option;
+ Str tmp;
+ Str volatile page = NULL;
+#ifdef USE_M17N
+ wc_ces charset = WC_CES_US_ASCII;
+#endif
+ HRequest hr;
+ ParsedURL *volatile auth_pu;
+
+ tpath = path;
+ prevtrap = NULL;
+ add_auth_cookie_flag = 0;
+
+ checkRedirection(NULL);
+ load_doc:
+ TRAP_OFF;
+ url_option.referer = referer;
+ url_option.flag = flag;
+ f = openURL(tpath, &pu, current, &url_option, request, extra_header, of,
+ &hr, &status);
+ of = NULL;
+#ifdef USE_M17N
+ content_charset = 0;
+#endif
+ if (f.stream == NULL) {
+ switch (f.scheme) {
+ case SCM_LOCAL:
+ {
+ struct stat st;
+ if (stat(pu.real_file, &st) < 0)
+ return NULL;
+ if (S_ISDIR(st.st_mode)) {
+ if (UseExternalDirBuffer) {
+ Str cmd = Sprintf("%s?dir=%s#current",
+ DirBufferCommand, pu.file);
+ b = loadGeneralFile(cmd->ptr, NULL, NO_REFERER, 0,
+ NULL);
+ if (b != NULL && b != NO_BUFFER) {
+ copyParsedURL(&b->currentURL, &pu);
+ b->filename = b->currentURL.real_file;
+ }
+ return b;
+ }
+ else {
+ page = loadLocalDir(pu.real_file);
+ t = "local:directory";
+#ifdef USE_M17N
+ charset = SystemCharset;
+#endif
+ }
+ }
+ }
+ break;
+ case SCM_FTPDIR:
+ page = loadFTPDir(&pu, &charset);
+ t = "ftp:directory";
+ break;
+#ifdef USE_NNTP
+ case SCM_NEWS_GROUP:
+ page = loadNewsgroup(&pu, &charset);
+ t = "news:group";
+ break;
+#endif
+ case SCM_UNKNOWN:
+#ifdef USE_EXTERNAL_URI_LOADER
+ tmp = searchURIMethods(&pu);
+ if (tmp != NULL) {
+ b = loadGeneralFile(tmp->ptr, current, referer, flag, request);
+ if (b != NULL && b != NO_BUFFER)
+ copyParsedURL(&b->currentURL, &pu);
+ return b;
+ }
+#endif
+ /* FIXME: gettextize? */
+ disp_err_message(Sprintf("Unknown URI: %s",
+ parsedURL2Str(&pu)->ptr)->ptr, FALSE);
+ break;
+ }
+ if (page && page->length > 0)
+ goto page_loaded;
+ return NULL;
+ }
+
+ if (status == HTST_MISSING) {
+ TRAP_OFF;
+ UFclose(&f);
+ return NULL;
+ }
+
+ /* openURL() succeeded */
+ if (SETJMP(AbortLoading) != 0) {
+ /* transfer interrupted */
+ TRAP_OFF;
+ if (b)
+ discardBuffer(b);
+ UFclose(&f);
+ return NULL;
+ }
+
+ b = NULL;
+ if (f.is_cgi) {
+ /* local CGI */
+ searchHeader = TRUE;
+ searchHeader_through = FALSE;
+ }
+ if (header_string)
+ header_string = NULL;
+ TRAP_ON;
+ if (pu.scheme == SCM_HTTP ||
+#ifdef USE_SSL
+ pu.scheme == SCM_HTTPS ||
+#endif /* USE_SSL */
+ ((
+#ifdef USE_GOPHER
+ (pu.scheme == SCM_GOPHER && non_null(GOPHER_proxy)) ||
+#endif /* USE_GOPHER */
+ (pu.scheme == SCM_FTP && non_null(FTP_proxy))
+ ) && !Do_not_use_proxy && !check_no_proxy(pu.host))) {
+
+ if (fmInitialized) {
+ term_cbreak();
+ /* FIXME: gettextize? */
+ message(Sprintf("%s contacted. Waiting for reply...", pu.host)->
+ ptr, 0, 0);
+ refresh();
+ }
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+#if 0 /* USE_SSL */
+ if (IStype(f.stream) == IST_SSL) {
+ Str s = ssl_get_certificate(f.stream, pu.host);
+ if (s == NULL)
+ return NULL;
+ else
+ t_buf->ssl_certificate = s->ptr;
+ }
+#endif
+ readHeader(&f, t_buf, FALSE, &pu);
+ if (((http_response_code >= 301 && http_response_code <= 303)
+ || http_response_code == 307)
+ && (p = checkHeader(t_buf, "Location:")) != NULL
+ && checkRedirection(&pu)) {
+ /* document moved */
+ /* 301: Moved Permanently */
+ /* 302: Found */
+ /* 303: See Other */
+ /* 307: Temporary Redirect (HTTP/1.1) */
+ tpath = url_quote_conv(p, DocumentCharset);
+ request = NULL;
+ UFclose(&f);
+ current = New(ParsedURL);
+ copyParsedURL(current, &pu);
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ t_buf->bufferprop |= BP_REDIRECTED;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+ t = checkContentType(t_buf);
+ if (t == NULL && pu.file != NULL) {
+ if (!((http_response_code >= 400 && http_response_code <= 407) ||
+ (http_response_code >= 500 && http_response_code <= 505)))
+ t = guessContentType(pu.file);
+ }
+ if (t == NULL)
+ t = "text/plain";
+ if (add_auth_cookie_flag && realm && uname && pwd) {
+ /* If authorization is required and passed */
+ add_auth_user_passwd(&pu, qstr_unquote(realm)->ptr, uname, pwd,
+ 0);
+ add_auth_cookie_flag = 0;
+ }
+ if ((p = checkHeader(t_buf, "WWW-Authenticate:")) != NULL &&
+ http_response_code == 401) {
+ /* Authentication needed */
+ struct http_auth hauth;
+ if (findAuthentication(&hauth, t_buf, "WWW-Authenticate:") != NULL
+ && (realm = get_auth_param(hauth.param, "realm")) != NULL) {
+ auth_pu = &pu;
+ getAuthCookie(&hauth, "Authorization:", extra_header,
+ auth_pu, &hr, request, &uname, &pwd);
+ if (uname == NULL) {
+ /* abort */
+ TRAP_OFF;
+ goto page_loaded;
+ }
+ UFclose(&f);
+ add_auth_cookie_flag = 1;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+ }
+ if ((p = checkHeader(t_buf, "Proxy-Authenticate:")) != NULL &&
+ http_response_code == 407) {
+ /* Authentication needed */
+ struct http_auth hauth;
+ if (findAuthentication(&hauth, t_buf, "Proxy-Authenticate:")
+ != NULL
+ && (realm = get_auth_param(hauth.param, "realm")) != NULL) {
+ auth_pu = schemeToProxy(pu.scheme);
+ getAuthCookie(&hauth, "Proxy-Authorization:",
+ extra_header, auth_pu, &hr, request,
+ &uname, &pwd);
+ if (uname == NULL) {
+ /* abort */
+ TRAP_OFF;
+ goto page_loaded;
+ }
+ UFclose(&f);
+ add_auth_cookie_flag = 1;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+ }
+ /* XXX: RFC2617 3.2.3 Authentication-Info: ? */
+
+ if (status == HTST_CONNECT) {
+ of = &f;
+ goto load_doc;
+ }
+
+ f.modtime = mymktime(checkHeader(t_buf, "Last-Modified:"));
+ }
+#ifdef USE_NNTP
+ else if (pu.scheme == SCM_NEWS || pu.scheme == SCM_NNTP) {
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ readHeader(&f, t_buf, TRUE, &pu);
+ t = checkContentType(t_buf);
+ if (t == NULL)
+ t = "text/plain";
+ }
+#endif /* USE_NNTP */
+#ifdef USE_GOPHER
+ else if (pu.scheme == SCM_GOPHER) {
+ switch (*pu.file) {
+ case '0':
+ t = "text/plain";
+ break;
+ case '1':
+ case 'm':
+ page = loadGopherDir(&f, &pu, &charset);
+ t = "gopher:directory";
+ TRAP_OFF;
+ goto page_loaded;
+ case 's':
+ t = "audio/basic";
+ break;
+ case 'g':
+ t = "image/gif";
+ break;
+ case 'h':
+ t = "text/html";
+ break;
+ }
+ }
+#endif /* USE_GOPHER */
+ else if (pu.scheme == SCM_FTP) {
+ check_compression(path, &f);
+ if (f.compression != CMP_NOCOMPRESS) {
+ char *t1 = uncompressed_file_type(pu.file, NULL);
+ real_type = f.guess_type;
+#if 0
+ if (t1 && strncasecmp(t1, "application/", 12) == 0) {
+ f.compression = CMP_NOCOMPRESS;
+ t = real_type;
+ }
+ else
+#endif
+ if (t1)
+ t = t1;
+ else
+ t = real_type;
+ }
+ else {
+ real_type = guessContentType(pu.file);
+ if (real_type == NULL)
+ real_type = "text/plain";
+ t = real_type;
+ }
+#if 0
+ if (!strncasecmp(t, "application/", 12)) {
+ char *tmpf = tmpfname(TMPF_DFL, NULL)->ptr;
+ current_content_length = 0;
+ if (save2tmp(f, tmpf) < 0)
+ UFclose(&f);
+ else {
+ UFclose(&f);
+ TRAP_OFF;
+ doFileMove(tmpf, guess_save_name(t_buf, pu.file));
+ }
+ return NO_BUFFER;
+ }
+#endif
+ }
+ else if (pu.scheme == SCM_DATA) {
+ t = f.guess_type;
+ }
+ else if (searchHeader) {
+ searchHeader = SearchHeader = FALSE;
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ readHeader(&f, t_buf, searchHeader_through, &pu);
+ if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL &&
+ checkRedirection(&pu)) {
+ /* document moved */
+ tpath = url_quote_conv(remove_space(p), DocumentCharset);
+ request = NULL;
+ UFclose(&f);
+ add_auth_cookie_flag = 0;
+ current = New(ParsedURL);
+ copyParsedURL(current, &pu);
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ t_buf->bufferprop |= BP_REDIRECTED;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+#ifdef AUTH_DEBUG
+ if ((p = checkHeader(t_buf, "WWW-Authenticate:")) != NULL) {
+ /* Authentication needed */
+ struct http_auth hauth;
+ if (findAuthentication(&hauth, t_buf, "WWW-Authenticate:") != NULL
+ && (realm = get_auth_param(hauth.param, "realm")) != NULL) {
+ auth_pu = &pu;
+ getAuthCookie(&hauth, "Authorization:", extra_header,
+ auth_pu, &hr, request, &uname, &pwd);
+ if (uname == NULL) {
+ /* abort */
+ TRAP_OFF;
+ goto page_loaded;
+ }
+ UFclose(&f);
+ add_auth_cookie_flag = 1;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+ }
+#endif /* defined(AUTH_DEBUG) */
+ t = checkContentType(t_buf);
+ if (t == NULL)
+ t = "text/plain";
+ }
+ else if (DefaultType) {
+ t = DefaultType;
+ DefaultType = NULL;
+ }
+ else {
+ t = guessContentType(pu.file);
+ if (t == NULL)
+ t = "text/plain";
+ real_type = t;
+ if (f.guess_type)
+ t = f.guess_type;
+ }
+
+ page_loaded:
+ if (page) {
+ FILE *src;
+#ifdef USE_IMAGE
+ if (image_source)
+ return NULL;
+#endif
+ tmp = tmpfname(TMPF_SRC, ".html");
+ src = fopen(tmp->ptr, "w");
+ if (src) {
+ Str s;
+ s = wc_Str_conv_strict(page, InnerCharset, charset);
+ Strfputs(s, src);
+ fclose(src);
+ }
+ if (do_download) {
+ char *file;
+ if (!src)
+ return NULL;
+ file = guess_filename(pu.file);
+#ifdef USE_GOPHER
+ if (f.scheme == SCM_GOPHER)
+ file = Sprintf("%s.html", file)->ptr;
+#endif
+#ifdef USE_NNTP
+ if (f.scheme == SCM_NEWS_GROUP)
+ file = Sprintf("%s.html", file)->ptr;
+#endif
+ doFileMove(tmp->ptr, file);
+ return NO_BUFFER;
+ }
+ b = loadHTMLString(page);
+ if (b) {
+ copyParsedURL(&b->currentURL, &pu);
+ b->real_scheme = pu.scheme;
+ b->real_type = t;
+ if (src)
+ b->sourcefile = tmp->ptr;
+#ifdef USE_M17N
+ b->document_charset = charset;
+#endif
+ }
+ return b;
+ }
+
+ if (real_type == NULL)
+ real_type = t;
+ proc = loadBuffer;
+#ifdef USE_IMAGE
+ cur_baseURL = New(ParsedURL);
+ copyParsedURL(cur_baseURL, &pu);
+#endif
+
+ current_content_length = 0;
+ if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
+ current_content_length = strtoclen(p);
+ if (do_download) {
+ /* download only */
+ char *file;
+ TRAP_OFF;
+ if (DecodeCTE && IStype(f.stream) != IST_ENCODED)
+ f.stream = newEncodedStream(f.stream, f.encoding);
+ if (pu.scheme == SCM_LOCAL) {
+ struct stat st;
+ if (PreserveTimestamp && !stat(pu.real_file, &st))
+ f.modtime = st.st_mtime;
+ file = conv_from_system(guess_save_name(NULL, pu.real_file));
+ }
+ else
+ file = guess_save_name(t_buf, pu.file);
+ if (doFileSave(f, file) == 0)
+ UFhalfclose(&f);
+ else
+ UFclose(&f);
+ return NO_BUFFER;
+ }
+
+ if (f.content_encoding != CMP_NOCOMPRESS) {
+ uncompress_stream(&f, &pu.real_file);
+ }
+ else if (f.compression != CMP_NOCOMPRESS) {
+ if (!(w3m_dump & DUMP_SOURCE) &&
+ (w3m_dump & ~DUMP_FRAME || is_text_type(t)
+ || searchExtViewer(t))) {
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ uncompress_stream(&f, &t_buf->sourcefile);
+ uncompressed_file_type(pu.file, &f.ext);
+ }
+ else {
+ t = compress_application_type(f.compression);
+ f.compression = CMP_NOCOMPRESS;
+ }
+ }
+#ifdef USE_IMAGE
+ if (image_source) {
+ Buffer *b = NULL;
+ if (IStype(f.stream) != IST_ENCODED)
+ f.stream = newEncodedStream(f.stream, f.encoding);
+ if (save2tmp(f, image_source) == 0) {
+ b = newBuffer(INIT_BUFFER_WIDTH);
+ b->sourcefile = image_source;
+ b->real_type = t;
+ }
+ UFclose(&f);
+ TRAP_OFF;
+ return b;
+ }
+#endif
+
+ if (!strcasecmp(t, "text/html"))
+ proc = loadHTMLBuffer;
+ else if (is_plain_text_type(t))
+ proc = loadBuffer;
+#ifdef USE_IMAGE
+ else if (activeImage && displayImage && !useExtImageViewer &&
+ !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6))
+ proc = loadImageBuffer;
+#endif
+ else if (w3m_backend) ;
+ else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
+ if (!do_download && doExternal(f,
+ pu.real_file ? pu.real_file : pu.file,
+ t, &b, t_buf)) {
+ if (b && b != NO_BUFFER) {
+ b->real_scheme = f.scheme;
+ b->real_type = real_type;
+ if (b->currentURL.host == NULL && b->currentURL.file == NULL)
+ copyParsedURL(&b->currentURL, &pu);
+ }
+ UFclose(&f);
+ TRAP_OFF;
+ return b;
+ }
+ else {
+ TRAP_OFF;
+ if (pu.scheme == SCM_LOCAL) {
+ UFclose(&f);
+ _doFileCopy(pu.real_file,
+ conv_from_system(guess_save_name
+ (NULL, pu.real_file)), TRUE);
+ }
+ else {
+ if (DecodeCTE && IStype(f.stream) != IST_ENCODED)
+ f.stream = newEncodedStream(f.stream, f.encoding);
+ if (doFileSave(f, guess_save_name(t_buf, pu.file)) == 0)
+ UFhalfclose(&f);
+ else
+ UFclose(&f);
+ }
+ return NO_BUFFER;
+ }
+ }
+ else if (w3m_dump & DUMP_FRAME)
+ return NULL;
+
+ if (flag & RG_FRAME) {
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ t_buf->bufferprop |= BP_FRAME;
+ }
+#ifdef USE_SSL
+ if (t_buf)
+ t_buf->ssl_certificate = f.ssl_certificate;
+#endif
+ frame_source = flag & RG_FRAME_SRC;
+ b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf);
+ UFclose(&f);
+ frame_source = 0;
+ if (b) {
+ b->real_scheme = f.scheme;
+ b->real_type = real_type;
+ if (b->currentURL.host == NULL && b->currentURL.file == NULL)
+ copyParsedURL(&b->currentURL, &pu);
+ if (!strcasecmp(t, "text/html"))
+ b->type = "text/html";
+ else if (w3m_backend) {
+ Str s = Strnew_charp(t);
+ b->type = s->ptr;
+ }
+#ifdef USE_IMAGE
+ else if (proc == loadImageBuffer)
+ b->type = "text/html";
+#endif
+ else
+ b->type = "text/plain";
+ if (pu.label) {
+ if (proc == loadHTMLBuffer) {
+ Anchor *a;
+ a = searchURLLabel(b, pu.label);
+ if (a != NULL) {
+ gotoLine(b, a->start.line);
+ if (label_topline)
+ b->topLine = lineSkip(b, b->topLine,
+ b->currentLine->linenumber
+ - b->topLine->linenumber, FALSE);
+ b->pos = a->start.pos;
+ arrangeCursor(b);
+ }
+ }
+ else { /* plain text */
+ int l = atoi(pu.label);
+ gotoLine(b, l);
+ b->pos = 0;
+ arrangeCursor(b);
+ }
+ }
+ }
+ if (header_string)
+ header_string = NULL;
+#ifdef USE_NNTP
+ if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)
+ reAnchorNewsheader(b);
+#endif
+ preFormUpdateBuffer(b);
+ TRAP_OFF;
+ return b;
+}
+
+#define TAG_IS(s,tag,len)\
+ (strncasecmp(s,tag,len)==0&&(s[len] == '>' || IS_SPACE((int)s[len])))
+
+static char *
+has_hidden_link(struct readbuffer *obuf, int cmd)
+{
+ Str line = obuf->line;
+ struct link_stack *p;
+
+ if (Strlastchar(line) != '>')
+ return NULL;
+
+ for (p = link_stack; p; p = p->next)
+ if (p->cmd == cmd)
+ break;
+ if (!p)
+ return NULL;
+
+ if (obuf->pos == p->pos)
+ return line->ptr + p->offset;
+
+ return NULL;
+}
+
+static void
+push_link(int cmd, int offset, int pos)
+{
+ struct link_stack *p;
+ p = New(struct link_stack);
+ p->cmd = cmd;
+ p->offset = offset;
+ p->pos = pos;
+ p->next = link_stack;
+ link_stack = p;
+}
+
+static int
+is_period_char(unsigned char *ch)
+{
+ switch (*ch) {
+ case ',':
+ case '.':
+ case ':':
+ case ';':
+ case '?':
+ case '!':
+ case ')':
+ case ']':
+ case '}':
+ case '>':
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+is_beginning_char(unsigned char *ch)
+{
+ switch (*ch) {
+ case '(':
+ case '[':
+ case '{':
+ case '`':
+ case '<':
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+is_word_char(unsigned char *ch)
+{
+ Lineprop ctype = get_mctype(ch);
+
+#ifdef USE_M17N
+ if (ctype & (PC_CTRL | PC_KANJI | PC_UNKNOWN))
+ return 0;
+ if (ctype & (PC_WCHAR1 | PC_WCHAR2))
+ return 1;
+#else
+ if (ctype == PC_CTRL)
+ return 0;
+#endif
+
+ if (IS_ALNUM(*ch))
+ return 1;
+
+ switch (*ch) {
+ case ',':
+ case '.':
+ case ':':
+ case '\"': /* " */
+ case '\'':
+ case '$':
+ case '%':
+ case '*':
+ case '+':
+ case '-':
+ case '@':
+ case '~':
+ case '_':
+ return 1;
+ }
+#ifdef USE_M17N
+ if (*ch == NBSP_CODE)
+ return 1;
+#else
+ if (*ch == TIMES_CODE || *ch == DIVIDE_CODE || *ch == ANSP_CODE)
+ return 0;
+ if (*ch >= AGRAVE_CODE || *ch == NBSP_CODE)
+ return 1;
+#endif
+ return 0;
+}
+
+#ifdef USE_M17N
+static int
+is_combining_char(unsigned char *ch)
+{
+ Lineprop ctype = get_mctype(ch);
+
+ if (ctype & PC_WCHAR2)
+ return 1;
+ return 0;
+}
+#endif
+
+int
+is_boundary(unsigned char *ch1, unsigned char *ch2)
+{
+ if (!*ch1 || !*ch2)
+ return 1;
+
+ if (*ch1 == ' ' && *ch2 == ' ')
+ return 0;
+
+ if (*ch1 != ' ' && is_period_char(ch2))
+ return 0;
+
+ if (*ch2 != ' ' && is_beginning_char(ch1))
+ return 0;
+
+#ifdef USE_M17N
+ if (is_combining_char(ch2))
+ return 0;
+#endif
+ if (is_word_char(ch1) && is_word_char(ch2))
+ return 0;
+
+ return 1;
+}
+
+
+static void
+set_breakpoint(struct readbuffer *obuf, int tag_length)
+{
+ obuf->bp.len = obuf->line->length;
+ obuf->bp.pos = obuf->pos;
+ obuf->bp.tlen = tag_length;
+ obuf->bp.flag = obuf->flag;
+#ifdef FORMAT_NICE
+ obuf->bp.flag &= ~RB_FILL;
+#endif /* FORMAT_NICE */
+ obuf->bp.top_margin = obuf->top_margin;
+ obuf->bp.bottom_margin = obuf->bottom_margin;
+
+ if (!obuf->bp.init_flag)
+ return;
+
+ bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor,
+ sizeof(obuf->anchor));
+ obuf->bp.img_alt = obuf->img_alt;
+ obuf->bp.in_bold = obuf->in_bold;
+ obuf->bp.in_under = obuf->in_under;
+ obuf->bp.nobr_level = obuf->nobr_level;
+ obuf->bp.prev_ctype = obuf->prev_ctype;
+ obuf->bp.init_flag = 0;
+}
+
+static void
+back_to_breakpoint(struct readbuffer *obuf)
+{
+ obuf->flag = obuf->bp.flag;
+ bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor,
+ sizeof(obuf->anchor));
+ obuf->img_alt = obuf->bp.img_alt;
+ obuf->in_bold = obuf->bp.in_bold;
+ obuf->in_under = obuf->bp.in_under;
+ obuf->prev_ctype = obuf->bp.prev_ctype;
+ obuf->pos = obuf->bp.pos;
+ obuf->top_margin = obuf->bp.top_margin;
+ obuf->bottom_margin = obuf->bp.bottom_margin;
+ if (obuf->flag & RB_NOBR)
+ obuf->nobr_level = obuf->bp.nobr_level;
+}
+
+static void
+append_tags(struct readbuffer *obuf)
+{
+ int i;
+ int len = obuf->line->length;
+ int set_bp = 0;
+
+ for (i = 0; i < obuf->tag_sp; i++) {
+ switch (obuf->tag_stack[i]->cmd) {
+ case HTML_A:
+ case HTML_IMG_ALT:
+ case HTML_B:
+ case HTML_U:
+ push_link(obuf->tag_stack[i]->cmd, obuf->line->length, obuf->pos);
+ break;
+ }
+ Strcat_charp(obuf->line, obuf->tag_stack[i]->cmdname);
+ switch (obuf->tag_stack[i]->cmd) {
+ case HTML_NOBR:
+ if (obuf->nobr_level > 1)
+ break;
+ case HTML_WBR:
+ set_bp = 1;
+ break;
+ }
+ }
+ obuf->tag_sp = 0;
+ if (set_bp)
+ set_breakpoint(obuf, obuf->line->length - len);
+}
+
+static void
+push_tag(struct readbuffer *obuf, char *cmdname, int cmd)
+{
+ obuf->tag_stack[obuf->tag_sp] = New(struct cmdtable);
+ obuf->tag_stack[obuf->tag_sp]->cmdname = allocStr(cmdname, -1);
+ obuf->tag_stack[obuf->tag_sp]->cmd = cmd;
+ obuf->tag_sp++;
+ if (obuf->tag_sp >= TAG_STACK_SIZE || obuf->flag & (RB_SPECIAL & ~RB_NOBR))
+ append_tags(obuf);
+}
+
+static void
+push_nchars(struct readbuffer *obuf, int width,
+ char *str, int len, Lineprop mode)
+{
+ append_tags(obuf);
+ Strcat_charp_n(obuf->line, str, len);
+ obuf->pos += width;
+ if (width > 0) {
+ set_prevchar(obuf->prevchar, str, len);
+ obuf->prev_ctype = mode;
+ }
+ obuf->flag |= RB_NFLUSHED;
+}
+
+#define push_charp(obuf, width, str, mode)\
+push_nchars(obuf, width, str, strlen(str), mode)
+
+#define push_str(obuf, width, str, mode)\
+push_nchars(obuf, width, str->ptr, str->length, mode)
+
+static void
+check_breakpoint(struct readbuffer *obuf, int pre_mode, char *ch)
+{
+ int tlen, len = obuf->line->length;
+
+ append_tags(obuf);
+ if (pre_mode)
+ return;
+ tlen = obuf->line->length - len;
+ if (tlen > 0
+ || is_boundary((unsigned char *)obuf->prevchar->ptr,
+ (unsigned char *)ch))
+ set_breakpoint(obuf, tlen);
+}
+
+static void
+push_char(struct readbuffer *obuf, int pre_mode, char ch)
+{
+ check_breakpoint(obuf, pre_mode, &ch);
+ Strcat_char(obuf->line, ch);
+ obuf->pos++;
+ set_prevchar(obuf->prevchar, &ch, 1);
+ if (ch != ' ')
+ obuf->prev_ctype = PC_ASCII;
+ obuf->flag |= RB_NFLUSHED;
+}
+
+#define PUSH(c) push_char(obuf, obuf->flag & RB_SPECIAL, c)
+
+static void
+push_spaces(struct readbuffer *obuf, int pre_mode, int width)
+{
+ int i;
+
+ if (width <= 0)
+ return;
+ check_breakpoint(obuf, pre_mode, " ");
+ for (i = 0; i < width; i++)
+ Strcat_char(obuf->line, ' ');
+ obuf->pos += width;
+ set_space_to_prevchar(obuf->prevchar);
+ obuf->flag |= RB_NFLUSHED;
+}
+
+static void
+proc_mchar(struct readbuffer *obuf, int pre_mode,
+ int width, char **str, Lineprop mode)
+{
+ check_breakpoint(obuf, pre_mode, *str);
+ obuf->pos += width;
+ Strcat_charp_n(obuf->line, *str, get_mclen(*str));
+ if (width > 0) {
+ set_prevchar(obuf->prevchar, *str, 1);
+ if (**str != ' ')
+ obuf->prev_ctype = mode;
+ }
+ (*str) += get_mclen(*str);
+ obuf->flag |= RB_NFLUSHED;
+}
+
+void
+push_render_image(Str str, int width, int limit,
+ struct html_feed_environ *h_env)
+{
+ struct readbuffer *obuf = h_env->obuf;
+ int indent = h_env->envs[h_env->envc].indent;
+
+ push_spaces(obuf, 1, (limit - width) / 2);
+ push_str(obuf, width, str, PC_ASCII);
+ push_spaces(obuf, 1, (limit - width + 1) / 2);
+ if (width > 0)
+ flushline(h_env, obuf, indent, 0, h_env->limit);
+}
+
+static int
+sloppy_parse_line(char **str)
+{
+ if (**str == '<') {
+ while (**str && **str != '>')
+ (*str)++;
+ if (**str == '>')
+ (*str)++;
+ return 1;
+ }
+ else {
+ while (**str && **str != '<')
+ (*str)++;
+ return 0;
+ }
+}
+
+static void
+passthrough(struct readbuffer *obuf, char *str, int back)
+{
+ int cmd;
+ Str tok = Strnew();
+ char *str_bak;
+
+ if (back) {
+ Str str_save = Strnew_charp(str);
+ Strshrink(obuf->line, obuf->line->ptr + obuf->line->length - str);
+ str = str_save->ptr;
+ }
+ while (*str) {
+ str_bak = str;
+ if (sloppy_parse_line(&str)) {
+ char *q = str_bak;
+ cmd = gethtmlcmd(&q);
+ if (back) {
+ struct link_stack *p;
+ for (p = link_stack; p; p = p->next) {
+ if (p->cmd == cmd) {
+ link_stack = p->next;
+ break;
+ }
+ }
+ back = 0;
+ }
+ else {
+ Strcat_charp_n(tok, str_bak, str - str_bak);
+ push_tag(obuf, tok->ptr, cmd);
+ Strclear(tok);
+ }
+ }
+ else {
+ push_nchars(obuf, 0, str_bak, str - str_bak, obuf->prev_ctype);
+ }
+ }
+}
+
+#if 0
+int
+is_blank_line(char *line, int indent)
+{
+ int i, is_blank = 0;
+
+ for (i = 0; i < indent; i++) {
+ if (line[i] == '\0') {
+ is_blank = 1;
+ }
+ else if (line[i] != ' ') {
+ break;
+ }
+ }
+ if (i == indent && line[i] == '\0')
+ is_blank = 1;
+ return is_blank;
+}
+#endif
+
+void
+fillline(struct readbuffer *obuf, int indent)
+{
+ push_spaces(obuf, 1, indent - obuf->pos);
+ obuf->flag &= ~RB_NFLUSHED;
+}
+
+void
+flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
+ int force, int width)
+{
+ TextLineList *buf = h_env->buf;
+ FILE *f = h_env->f;
+ Str line = obuf->line, pass = NULL;
+ char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL,
+ *hidden_under = NULL, *hidden = NULL;
+
+#ifdef DEBUG
+ if (w3m_debug) {
+ FILE *df = fopen("zzzproc1", "a");
+ fprintf(df, "flushline(%s,%d,%d,%d)\n", obuf->line->ptr, indent, force,
+ width);
+ if (buf) {
+ TextLineListItem *p;
+ for (p = buf->first; p; p = p->next) {
+ fprintf(df, "buf=\"%s\"\n", p->ptr->line->ptr);
+ }
+ }
+ fclose(df);
+ }
+#endif
+
+ if (!(obuf->flag & (RB_SPECIAL & ~RB_NOBR)) && Strlastchar(line) == ' ') {
+ Strshrink(line, 1);
+ obuf->pos--;
+ }
+
+ append_tags(obuf);
+
+ if (obuf->anchor.url)
+ hidden = hidden_anchor = has_hidden_link(obuf, HTML_A);
+ if (obuf->img_alt) {
+ if ((hidden_img = has_hidden_link(obuf, HTML_IMG_ALT)) != NULL) {
+ if (!hidden || hidden_img < hidden)
+ hidden = hidden_img;
+ }
+ }
+ if (obuf->in_bold) {
+ if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) {
+ if (!hidden || hidden_bold < hidden)
+ hidden = hidden_bold;
+ }
+ }
+ if (obuf->in_under) {
+ if ((hidden_under = has_hidden_link(obuf, HTML_U)) != NULL) {
+ if (!hidden || hidden_under < hidden)
+ hidden = hidden_under;
+ }
+ }
+ if (hidden) {
+ pass = Strnew_charp(hidden);
+ Strshrink(line, line->ptr + line->length - hidden);
+ }
+
+ if (!(obuf->flag & (RB_SPECIAL & ~RB_NOBR)) && obuf->pos > width) {
+ char *tp = &line->ptr[obuf->bp.len - obuf->bp.tlen];
+ char *ep = &line->ptr[line->length];
+
+ if (obuf->bp.pos == obuf->pos && tp <= ep &&
+ tp > line->ptr && tp[-1] == ' ') {
+ bcopy(tp, tp - 1, ep - tp + 1);
+ line->length--;
+ obuf->pos--;
+ }
+ }
+
+ if (obuf->anchor.url && !hidden_anchor)
+ Strcat_charp(line, "</a>");
+ if (obuf->img_alt && !hidden_img)
+ Strcat_charp(line, "</img_alt>");
+ if (obuf->in_bold && !hidden_bold)
+ Strcat_charp(line, "</b>");
+ if (obuf->in_under && !hidden_under)
+ Strcat_charp(line, "</u>");
+
+ if (obuf->top_margin > 0) {
+ int i;
+ struct html_feed_environ h;
+ struct readbuffer o;
+ struct environment e[1];
+
+ init_henv(&h, &o, e, 1, NULL, width, indent);
+ o.line = Strnew_size(width + 20);
+ o.pos = obuf->pos;
+ o.flag = obuf->flag;
+ o.top_margin = -1;
+ o.bottom_margin = -1;
+ Strcat_charp(o.line, "<pre_int>");
+ for (i = 0; i < o.pos; i++)
+ Strcat_char(o.line, ' ');
+ Strcat_charp(o.line, "</pre_int>");
+ for (i = 0; i < obuf->top_margin; i++)
+ flushline(h_env, &o, indent, force, width);
+ }
+
+ if (force == 1 || obuf->flag & RB_NFLUSHED) {
+ TextLine *lbuf = newTextLine(line, obuf->pos);
+ if (RB_GET_ALIGN(obuf) == RB_CENTER) {
+ align(lbuf, width, ALIGN_CENTER);
+ }
+ else if (RB_GET_ALIGN(obuf) == RB_RIGHT) {
+ align(lbuf, width, ALIGN_RIGHT);
+ }
+ else if (RB_GET_ALIGN(obuf) == RB_LEFT && obuf->flag & RB_INTABLE) {
+ align(lbuf, width, ALIGN_LEFT);
+ }
+#ifdef FORMAT_NICE
+ else if (obuf->flag & RB_FILL) {
+ char *p;
+ int rest, rrest;
+ int nspace, d, i;
+
+ rest = width - get_Str_strwidth(line);
+ if (rest > 1) {
+ nspace = 0;
+ for (p = line->ptr + indent; *p; p++) {
+ if (*p == ' ')
+ nspace++;
+ }
+ if (nspace > 0) {
+ int indent_here = 0;
+ d = rest / nspace;
+ p = line->ptr;
+ while (IS_SPACE(*p)) {
+ p++;
+ indent_here++;
+ }
+ rrest = rest - d * nspace;
+ line = Strnew_size(width + 1);
+ for (i = 0; i < indent_here; i++)
+ Strcat_char(line, ' ');
+ for (; *p; p++) {
+ Strcat_char(line, *p);
+ if (*p == ' ') {
+ for (i = 0; i < d; i++)
+ Strcat_char(line, ' ');
+ if (rrest > 0) {
+ Strcat_char(line, ' ');
+ rrest--;
+ }
+ }
+ }
+ lbuf = newTextLine(line, width);
+ }
+ }
+ }
+#endif /* FORMAT_NICE */
+#ifdef TABLE_DEBUG
+ if (w3m_debug) {
+ FILE *f = fopen("zzzproc1", "a");
+ fprintf(f, "pos=%d,%d, maxlimit=%d\n",
+ visible_length(lbuf->line->ptr), lbuf->pos,
+ h_env->maxlimit);
+ fclose(f);
+ }
+#endif
+ if (lbuf->pos > h_env->maxlimit)
+ h_env->maxlimit = lbuf->pos;
+ if (buf)
+ pushTextLine(buf, lbuf);
+ else if (f) {
+ Strfputs(Str_conv_to_halfdump(lbuf->line), f);
+ fputc('\n', f);
+ }
+ if (obuf->flag & RB_SPECIAL || obuf->flag & RB_NFLUSHED)
+ h_env->blank_lines = 0;
+ else
+ h_env->blank_lines++;
+ }
+ else {
+ char *p = line->ptr, *q;
+ Str tmp = Strnew(), tmp2 = Strnew();
+
+#define APPEND(str) \
+ if (buf) \
+ appendTextLine(buf,(str),0); \
+ else if (f) \
+ Strfputs((str),f)
+
+ while (*p) {
+ q = p;
+ if (sloppy_parse_line(&p)) {
+ Strcat_charp_n(tmp, q, p - q);
+ if (force == 2) {
+ APPEND(tmp);
+ }
+ else
+ Strcat(tmp2, tmp);
+ Strclear(tmp);
+ }
+ }
+ if (force == 2) {
+ if (pass) {
+ APPEND(pass);
+ }
+ pass = NULL;
+ }
+ else {
+ if (pass)
+ Strcat(tmp2, pass);
+ pass = tmp2;
+ }
+ }
+
+ if (obuf->bottom_margin > 0) {
+ int i;
+ struct html_feed_environ h;
+ struct readbuffer o;
+ struct environment e[1];
+
+ init_henv(&h, &o, e, 1, NULL, width, indent);
+ o.line = Strnew_size(width + 20);
+ o.pos = obuf->pos;
+ o.flag = obuf->flag;
+ o.top_margin = -1;
+ o.bottom_margin = -1;
+ Strcat_charp(o.line, "<pre_int>");
+ for (i = 0; i < o.pos; i++)
+ Strcat_char(o.line, ' ');
+ Strcat_charp(o.line, "</pre_int>");
+ for (i = 0; i < obuf->bottom_margin; i++)
+ flushline(h_env, &o, indent, force, width);
+ }
+ if (obuf->top_margin < 0 || obuf->bottom_margin < 0)
+ return;
+
+ obuf->line = Strnew_size(256);
+ obuf->pos = 0;
+ obuf->top_margin = 0;
+ obuf->bottom_margin = 0;
+ set_space_to_prevchar(obuf->prevchar);
+ obuf->bp.init_flag = 1;
+ obuf->flag &= ~RB_NFLUSHED;
+ set_breakpoint(obuf, 0);
+ obuf->prev_ctype = PC_ASCII;
+ link_stack = NULL;
+ fillline(obuf, indent);
+ if (pass)
+ passthrough(obuf, pass->ptr, 0);
+ if (!hidden_anchor && obuf->anchor.url) {
+ Str tmp;
+ if (obuf->anchor.hseq > 0)
+ obuf->anchor.hseq = -obuf->anchor.hseq;
+ tmp = Sprintf("<A HSEQ=\"%d\" HREF=\"", obuf->anchor.hseq);
+ Strcat_charp(tmp, html_quote(obuf->anchor.url));
+ if (obuf->anchor.target) {
+ Strcat_charp(tmp, "\" TARGET=\"");
+ Strcat_charp(tmp, html_quote(obuf->anchor.target));
+ }
+ if (obuf->anchor.referer) {
+ Strcat_charp(tmp, "\" REFERER=\"");
+ Strcat_charp(tmp, html_quote(obuf->anchor.referer));
+ }
+ if (obuf->anchor.title) {
+ Strcat_charp(tmp, "\" TITLE=\"");
+ Strcat_charp(tmp, html_quote(obuf->anchor.title));
+ }
+ if (obuf->anchor.accesskey) {
+ char *c = html_quote_char(obuf->anchor.accesskey);
+ Strcat_charp(tmp, "\" ACCESSKEY=\"");
+ if (c)
+ Strcat_charp(tmp, c);
+ else
+ Strcat_char(tmp, obuf->anchor.accesskey);
+ }
+ Strcat_charp(tmp, "\">");
+ push_tag(obuf, tmp->ptr, HTML_A);
+ }
+ if (!hidden_img && obuf->img_alt) {
+ Str tmp = Strnew_charp("<IMG_ALT SRC=\"");
+ Strcat_charp(tmp, html_quote(obuf->img_alt->ptr));
+ Strcat_charp(tmp, "\">");
+ push_tag(obuf, tmp->ptr, HTML_IMG_ALT);
+ }
+ if (!hidden_bold && obuf->in_bold)
+ push_tag(obuf, "<B>", HTML_B);
+ if (!hidden_under && obuf->in_under)
+ push_tag(obuf, "<U>", HTML_U);
+}
+
+void
+do_blankline(struct html_feed_environ *h_env, struct readbuffer *obuf,
+ int indent, int indent_incr, int width)
+{
+ if (h_env->blank_lines == 0)
+ flushline(h_env, obuf, indent, 1, width);
+}
+
+void
+purgeline(struct html_feed_environ *h_env)
+{
+ char *p, *q;
+ Str tmp;
+
+ if (h_env->buf == NULL || h_env->blank_lines == 0)
+ return;
+
+ p = rpopTextLine(h_env->buf)->line->ptr;
+ tmp = Strnew();
+ while (*p) {
+ q = p;
+ if (sloppy_parse_line(&p)) {
+ Strcat_charp_n(tmp, q, p - q);
+ }
+ }
+ appendTextLine(h_env->buf, tmp, 0);
+ h_env->blank_lines--;
+}
+
+static int
+close_effect0(struct readbuffer *obuf, int cmd)
+{
+ int i;
+ char *p;
+
+ for (i = obuf->tag_sp - 1; i >= 0; i--) {
+ if (obuf->tag_stack[i]->cmd == cmd)
+ break;
+ }
+ if (i >= 0) {
+ obuf->tag_sp--;
+ bcopy(&obuf->tag_stack[i + 1], &obuf->tag_stack[i],
+ (obuf->tag_sp - i) * sizeof(struct cmdtable *));
+ return 1;
+ }
+ else if ((p = has_hidden_link(obuf, cmd)) != NULL) {
+ passthrough(obuf, p, 1);
+ return 1;
+ }
+ return 0;
+}
+
+static void
+close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf)
+{
+ if (obuf->anchor.url) {
+ int i;
+ char *p = NULL;
+ int is_erased = 0;
+
+ for (i = obuf->tag_sp - 1; i >= 0; i--) {
+ if (obuf->tag_stack[i]->cmd == HTML_A)
+ break;
+ }
+ if (i < 0 && obuf->anchor.hseq > 0 && Strlastchar(obuf->line) == ' ') {
+ Strshrink(obuf->line, 1);
+ obuf->pos--;
+ is_erased = 1;
+ }
+
+ if (i >= 0 || (p = has_hidden_link(obuf, HTML_A))) {
+ if (obuf->anchor.hseq > 0) {
+ HTMLlineproc1(ANSP, h_env);
+ set_space_to_prevchar(obuf->prevchar);
+ }
+ else {
+ if (i >= 0) {
+ obuf->tag_sp--;
+ bcopy(&obuf->tag_stack[i + 1], &obuf->tag_stack[i],
+ (obuf->tag_sp - i) * sizeof(struct cmdtable *));
+ }
+ else {
+ passthrough(obuf, p, 1);
+ }
+ bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
+ return;
+ }
+ is_erased = 0;
+ }
+ if (is_erased) {
+ Strcat_char(obuf->line, ' ');
+ obuf->pos++;
+ }
+
+ push_tag(obuf, "</a>", HTML_N_A);
+ }
+ bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
+}
+
+void
+save_fonteffect(struct html_feed_environ *h_env, struct readbuffer *obuf)
+{
+ if (obuf->fontstat_sp < FONT_STACK_SIZE)
+ bcopy(obuf->fontstat, obuf->fontstat_stack[obuf->fontstat_sp],
+ FONTSTAT_SIZE);
+ obuf->fontstat_sp++;
+ if (obuf->in_bold)
+ push_tag(obuf, "</b>", HTML_N_B);
+ if (obuf->in_under)
+ push_tag(obuf, "</u>", HTML_N_U);
+ bzero(obuf->fontstat, FONTSTAT_SIZE);
+}
+
+void
+restore_fonteffect(struct html_feed_environ *h_env, struct readbuffer *obuf)
+{
+ if (obuf->fontstat_sp > 0)
+ obuf->fontstat_sp--;
+ if (obuf->fontstat_sp < FONT_STACK_SIZE)
+ bcopy(obuf->fontstat_stack[obuf->fontstat_sp], obuf->fontstat,
+ FONTSTAT_SIZE);
+ if (obuf->in_bold)
+ push_tag(obuf, "<b>", HTML_B);
+ if (obuf->in_under)
+ push_tag(obuf, "<u>", HTML_U);
+}
+
+static Str
+process_title(struct parsed_tag *tag)
+{
+ cur_title = Strnew();
+ return NULL;
+}
+
+static Str
+process_n_title(struct parsed_tag *tag)
+{
+ Str tmp;
+
+ if (!cur_title)
+ return NULL;
+ Strremovefirstspaces(cur_title);
+ Strremovetrailingspaces(cur_title);
+ tmp = Strnew_m_charp("<title_alt title=\"",
+ html_quote(cur_title->ptr), "\">", NULL);
+ cur_title = NULL;
+ return tmp;
+}
+
+static void
+feed_title(char *str)
+{
+ if (!cur_title)
+ return;
+ while (*str) {
+ if (*str == '&')
+ Strcat_charp(cur_title, getescapecmd(&str));
+ else if (*str == '\n' || *str == '\r') {
+ Strcat_char(cur_title, ' ');
+ str++;
+ }
+ else
+ Strcat_char(cur_title, *(str++));
+ }
+}
+
+Str
+process_img(struct parsed_tag *tag, int width)
+{
+ char *p, *q, *r, *r2 = NULL, *s, *t;
+#ifdef USE_IMAGE
+ int w, i, nw, ni = 1, n, w0 = -1, i0 = -1;
+ int align, xoffset, yoffset, top, bottom, ismap = 0;
+ int use_image = activeImage && displayImage;
+#else
+ int w, i, nw, n;
+#endif
+ int pre_int = FALSE;
+ Str tmp = Strnew();
+
+ if (!parsedtag_get_value(tag, ATTR_SRC, &p))
+ return tmp;
+ p = remove_space(p);
+ q = NULL;
+ parsedtag_get_value(tag, ATTR_ALT, &q);
+ t = q;
+ parsedtag_get_value(tag, ATTR_TITLE, &t);
+ w = -1;
+ if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) {
+ if (w < 0) {
+ if (width > 0)
+ w = (int)(-width * pixel_per_char * w / 100 + 0.5);
+ else
+ w = -1;
+ }
+#ifdef USE_IMAGE
+ if (use_image) {
+ if (w > 0) {
+ w = (int)(w * image_scale / 100 + 0.5);
+ if (w == 0)
+ w = 1;
+ else if (w > MAX_IMAGE_SIZE)
+ w = MAX_IMAGE_SIZE;
+ }
+ }
+#endif
+ }
+#ifdef USE_IMAGE
+ if (use_image) {
+ i = -1;
+ if (parsedtag_get_value(tag, ATTR_HEIGHT, &i)) {
+ if (i > 0) {
+ i = (int)(i * image_scale / 100 + 0.5);
+ if (i == 0)
+ i = 1;
+ else if (i > MAX_IMAGE_SIZE)
+ i = MAX_IMAGE_SIZE;
+ }
+ else {
+ i = -1;
+ }
+ }
+ align = -1;
+ parsedtag_get_value(tag, ATTR_ALIGN, &align);
+ ismap = 0;
+ if (parsedtag_exists(tag, ATTR_ISMAP))
+ ismap = 1;
+ }
+ else
+#endif
+ parsedtag_get_value(tag, ATTR_HEIGHT, &i);
+ r = NULL;
+ parsedtag_get_value(tag, ATTR_USEMAP, &r);
+
+ tmp = Strnew_size(128);
+#ifdef USE_IMAGE
+ if (use_image) {
+ switch (align) {
+ case ALIGN_LEFT:
+ Strcat_charp(tmp, "<div_int align=left>");
+ break;
+ case ALIGN_CENTER:
+ Strcat_charp(tmp, "<div_int align=center>");
+ break;
+ case ALIGN_RIGHT:
+ Strcat_charp(tmp, "<div_int align=right>");
+ break;
+ }
+ }
+#endif
+ if (r) {
+ Str tmp2;
+ r2 = strchr(r, '#');
+ s = "<form_int method=internal action=map>";
+ tmp2 = process_form(parse_tag(&s, TRUE));
+ if (tmp2)
+ Strcat(tmp, tmp2);
+ Strcat(tmp, Sprintf("<input_alt fid=\"%d\" "
+ "type=hidden name=link value=\"", cur_form_id));
+ Strcat_charp(tmp, html_quote((r2) ? r2 + 1 : r));
+ Strcat(tmp, Sprintf("\"><input_alt hseq=\"%d\" fid=\"%d\" "
+ "type=submit no_effect=true>",
+ cur_hseq++, cur_form_id));
+ }
+#ifdef USE_IMAGE
+ if (use_image) {
+ w0 = w;
+ i0 = i;
+ if (w < 0 || i < 0) {
+ Image image;
+ ParsedURL u;
+
+#ifdef USE_M17N
+ parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u,
+ cur_baseURL);
+#else
+ parseURL2(p, &u, cur_baseURL);
+#endif
+ image.url = parsedURL2Str(&u)->ptr;
+ if (!uncompressed_file_type(u.file, &image.ext))
+ image.ext = filename_extension(u.file, TRUE);
+ image.cache = NULL;
+ image.width = w;
+ image.height = i;
+
+ image.cache = getImage(&image, cur_baseURL, IMG_FLAG_SKIP);
+ if (image.cache && image.cache->width > 0 &&
+ image.cache->height > 0) {
+ w = w0 = image.cache->width;
+ i = i0 = image.cache->height;
+ }
+ if (w < 0)
+ w = 8 * pixel_per_char;
+ if (i < 0)
+ i = pixel_per_line;
+ }
+ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
+ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
+ Strcat(tmp,
+ Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++));
+ pre_int = TRUE;
+ }
+ else
+#endif
+ {
+ if (w < 0)
+ w = 12 * pixel_per_char;
+ nw = w ? (int)((w - 1) / pixel_per_char + 1) : 1;
+ if (r) {
+ Strcat_charp(tmp, "<pre_int>");
+ pre_int = TRUE;
+ }
+ Strcat_charp(tmp, "<img_alt src=\"");
+ }
+ Strcat_charp(tmp, html_quote(p));
+ Strcat_charp(tmp, "\"");
+ if (t) {
+ Strcat_charp(tmp, " title=\"");
+ Strcat_charp(tmp, html_quote(t));
+ Strcat_charp(tmp, "\"");
+ }
+#ifdef USE_IMAGE
+ if (use_image) {
+ if (w0 >= 0)
+ Strcat(tmp, Sprintf(" width=%d", w0));
+ if (i0 >= 0)
+ Strcat(tmp, Sprintf(" height=%d", i0));
+ switch (align) {
+ case ALIGN_TOP:
+ top = 0;
+ bottom = ni - 1;
+ yoffset = 0;
+ break;
+ case ALIGN_MIDDLE:
+ top = ni / 2;
+ bottom = top;
+ if (top * 2 == ni)
+ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
+ else
+ yoffset = (int)((ni * pixel_per_line - i) / 2);
+ break;
+ case ALIGN_BOTTOM:
+ top = ni - 1;
+ bottom = 0;
+ yoffset = (int)(ni * pixel_per_line - i);
+ break;
+ default:
+ top = ni - 1;
+ bottom = 0;
+ if (ni == 1 && ni * pixel_per_line > i)
+ yoffset = 0;
+ else {
+ yoffset = (int)(ni * pixel_per_line - i);
+ if (yoffset <= -2)
+ yoffset++;
+ }
+ break;
+ }
+ xoffset = (int)((nw * pixel_per_char - w) / 2);
+ if (xoffset)
+ Strcat(tmp, Sprintf(" xoffset=%d", xoffset));
+ if (yoffset)
+ Strcat(tmp, Sprintf(" yoffset=%d", yoffset));
+ if (top)
+ Strcat(tmp, Sprintf(" top_margin=%d", top));
+ if (bottom)
+ Strcat(tmp, Sprintf(" bottom_margin=%d", bottom));
+ if (r) {
+ Strcat_charp(tmp, " usemap=\"");
+ Strcat_charp(tmp, html_quote((r2) ? r2 + 1 : r));
+ Strcat_charp(tmp, "\"");
+ }
+ if (ismap)
+ Strcat_charp(tmp, " ismap");
+ }
+#endif
+ Strcat_charp(tmp, ">");
+ if (q != NULL && *q == '\0' && ignore_null_img_alt)
+ q = NULL;
+ if (q != NULL) {
+ n = get_strwidth(q);
+#ifdef USE_IMAGE
+ if (use_image) {
+ if (n > nw) {
+ char *r;
+ for (r = q, n = 0; r; r += get_mclen(r), n += get_mcwidth(r)) {
+ if (n + get_mcwidth(r) > nw)
+ break;
+ }
+ Strcat_charp(tmp, html_quote(Strnew_charp_n(q, r - q)->ptr));
+ }
+ else
+ Strcat_charp(tmp, html_quote(q));
+ }
+ else
+#endif
+ Strcat_charp(tmp, html_quote(q));
+ goto img_end;
+ }
+ if (w > 0 && i > 0) {
+ /* guess what the image is! */
+ if (w < 32 && i < 48) {
+ /* must be an icon or space */
+ n = 1;
+ if (strcasestr(p, "space") || strcasestr(p, "blank"))
+ Strcat_charp(tmp, "_");
+ else {
+ if (w * i < 8 * 16)
+ Strcat_charp(tmp, "*");
+ else {
+ if (!pre_int) {
+ Strcat_charp(tmp, "<pre_int>");
+ pre_int = TRUE;
+ }
+ push_symbol(tmp, IMG_SYMBOL, symbol_width, 1);
+ n = symbol_width;
+ }
+ }
+ goto img_end;
+ }
+ if (w > 200 && i < 13) {
+ /* must be a horizontal line */
+ if (!pre_int) {
+ Strcat_charp(tmp, "<pre_int>");
+ pre_int = TRUE;
+ }
+ w = w / pixel_per_char / symbol_width;
+ if (w <= 0)
+ w = 1;
+ push_symbol(tmp, HR_SYMBOL, symbol_width, w);
+ n = w * symbol_width;
+ goto img_end;
+ }
+ }
+ for (q = p; *q; q++) ;
+ while (q > p && *q != '/')
+ q--;
+ if (*q == '/')
+ q++;
+ Strcat_char(tmp, '[');
+ n = 1;
+ p = q;
+ for (; *q; q++) {
+ if (!IS_ALNUM(*q) && *q != '_' && *q != '-') {
+ break;
+ }
+ Strcat_char(tmp, *q);
+ n++;
+ if (n + 1 >= nw)
+ break;
+ }
+ Strcat_char(tmp, ']');
+ n++;
+ img_end:
+#ifdef USE_IMAGE
+ if (use_image) {
+ for (; n < nw; n++)
+ Strcat_char(tmp, ' ');
+ }
+#endif
+ Strcat_charp(tmp, "</img_alt>");
+ if (pre_int)
+ Strcat_charp(tmp, "</pre_int>");
+ if (r) {
+ Strcat_charp(tmp, "</input_alt>");
+ process_n_form();
+ }
+#ifdef USE_IMAGE
+ if (use_image) {
+ switch (align) {
+ case ALIGN_RIGHT:
+ case ALIGN_CENTER:
+ case ALIGN_LEFT:
+ Strcat_charp(tmp, "</div_int>");
+ break;
+ }
+ }
+#endif
+ return tmp;
+}
+
+Str
+process_anchor(struct parsed_tag *tag, char *tagbuf)
+{
+ if (parsedtag_need_reconstruct(tag)) {
+ parsedtag_set_value(tag, ATTR_HSEQ, Sprintf("%d", cur_hseq++)->ptr);
+ return parsedtag2str(tag);
+ }
+ else {
+ Str tmp = Sprintf("<a hseq=\"%d\"", cur_hseq++);
+ Strcat_charp(tmp, tagbuf + 2);
+ return tmp;
+ }
+}
+
+Str
+process_input(struct parsed_tag *tag)
+{
+ int i, w, v, x, y, z, iw, ih;
+ char *q, *p, *r, *p2, *s;
+ Str tmp = NULL;
+ char *qq = "";
+ int qlen = 0;
+
+ if (cur_form_id < 0) {
+ char *s = "<form_int method=internal action=none>";
+ tmp = process_form(parse_tag(&s, TRUE));
+ }
+ if (tmp == NULL)
+ tmp = Strnew();
+
+ p = "text";
+ parsedtag_get_value(tag, ATTR_TYPE, &p);
+ q = NULL;
+ parsedtag_get_value(tag, ATTR_VALUE, &q);
+ r = "";
+ parsedtag_get_value(tag, ATTR_NAME, &r);
+ w = 20;
+ parsedtag_get_value(tag, ATTR_SIZE, &w);
+ i = 20;
+ parsedtag_get_value(tag, ATTR_MAXLENGTH, &i);
+ p2 = NULL;
+ parsedtag_get_value(tag, ATTR_ALT, &p2);
+ x = parsedtag_exists(tag, ATTR_CHECKED);
+ y = parsedtag_exists(tag, ATTR_ACCEPT);
+ z = parsedtag_exists(tag, ATTR_READONLY);
+
+ v = formtype(p);
+ if (v == FORM_UNKNOWN)
+ return NULL;
+
+ if (!q) {
+ switch (v) {
+ case FORM_INPUT_IMAGE:
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ q = "SUBMIT";
+ break;
+ case FORM_INPUT_RESET:
+ q = "RESET";
+ break;
+ /* if no VALUE attribute is specified in
+ * <INPUT TYPE=CHECKBOX> tag, then the value "on" is used
+ * as a default value. It is not a part of HTML4.0
+ * specification, but an imitation of Netscape behaviour.
+ */
+ case FORM_INPUT_CHECKBOX:
+ q = "on";
+ }
+ }
+ /* VALUE attribute is not allowed in <INPUT TYPE=FILE> tag. */
+ if (v == FORM_INPUT_FILE)
+ q = NULL;
+ if (q) {
+ qq = html_quote(q);
+ qlen = get_strwidth(q);
+ }
+
+ Strcat_charp(tmp, "<pre_int>");
+ switch (v) {
+ case FORM_INPUT_PASSWORD:
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_FILE:
+ case FORM_INPUT_CHECKBOX:
+ Strcat_char(tmp, '[');
+ break;
+ case FORM_INPUT_RADIO:
+ Strcat_char(tmp, '(');
+ }
+ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
+ "name=\"%s\" width=%d maxlength=%d value=\"%s\"",
+ cur_hseq++, cur_form_id, p, html_quote(r), w, i, qq));
+ if (x)
+ Strcat_charp(tmp, " checked");
+ if (y)
+ Strcat_charp(tmp, " accept");
+ if (z)
+ Strcat_charp(tmp, " readonly");
+ Strcat_char(tmp, '>');
+
+ if (v == FORM_INPUT_HIDDEN)
+ Strcat_charp(tmp, "</input_alt></pre_int>");
+ else {
+ switch (v) {
+ case FORM_INPUT_PASSWORD:
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_FILE:
+ Strcat_charp(tmp, "<u>");
+ break;
+ case FORM_INPUT_IMAGE:
+ s = NULL;
+ parsedtag_get_value(tag, ATTR_SRC, &s);
+ if (s) {
+ Strcat(tmp, Sprintf("<img src=\"%s\"", html_quote(s)));
+ if (p2)
+ Strcat(tmp, Sprintf(" alt=\"%s\"", html_quote(p2)));
+ if (parsedtag_get_value(tag, ATTR_WIDTH, &iw))
+ Strcat(tmp, Sprintf(" width=\"%d\"", iw));
+ if (parsedtag_get_value(tag, ATTR_HEIGHT, &ih))
+ Strcat(tmp, Sprintf(" height=\"%d\"", ih));
+ Strcat_charp(tmp, ">");
+ Strcat_charp(tmp, "</input_alt></pre_int>");
+ return tmp;
+ }
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ case FORM_INPUT_RESET:
+ Strcat_charp(tmp, "[");
+ break;
+ }
+ switch (v) {
+ case FORM_INPUT_PASSWORD:
+ i = 0;
+ if (q) {
+ for (; i < qlen && i < w; i++)
+ Strcat_char(tmp, '*');
+ }
+ for (; i < w; i++)
+ Strcat_char(tmp, ' ');
+ break;
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_FILE:
+ if (q)
+ Strcat(tmp, textfieldrep(Strnew_charp(q), w));
+ else {
+ for (i = 0; i < w; i++)
+ Strcat_char(tmp, ' ');
+ }
+ break;
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ if (p2)
+ Strcat_charp(tmp, html_quote(p2));
+ else
+ Strcat_charp(tmp, qq);
+ break;
+ case FORM_INPUT_RESET:
+ Strcat_charp(tmp, qq);
+ break;
+ case FORM_INPUT_RADIO:
+ case FORM_INPUT_CHECKBOX:
+ if (x)
+ Strcat_char(tmp, '*');
+ else
+ Strcat_char(tmp, ' ');
+ break;
+ }
+ switch (v) {
+ case FORM_INPUT_PASSWORD:
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_FILE:
+ Strcat_charp(tmp, "</u>");
+ break;
+ case FORM_INPUT_IMAGE:
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ case FORM_INPUT_RESET:
+ Strcat_charp(tmp, "]");
+ }
+ Strcat_charp(tmp, "</input_alt>");
+ switch (v) {
+ case FORM_INPUT_PASSWORD:
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_FILE:
+ case FORM_INPUT_CHECKBOX:
+ Strcat_char(tmp, ']');
+ break;
+ case FORM_INPUT_RADIO:
+ Strcat_char(tmp, ')');
+ }
+ Strcat_charp(tmp, "</pre_int>");
+ }
+ return tmp;
+}
+
+Str
+process_select(struct parsed_tag *tag)
+{
+ Str tmp = NULL;
+ char *p;
+
+ if (cur_form_id < 0) {
+ char *s = "<form_int method=internal action=none>";
+ tmp = process_form(parse_tag(&s, TRUE));
+ }
+
+ p = "";
+ parsedtag_get_value(tag, ATTR_NAME, &p);
+ cur_select = Strnew_charp(p);
+ select_is_multiple = parsedtag_exists(tag, ATTR_MULTIPLE);
+
+#ifdef MENU_SELECT
+ if (!select_is_multiple) {
+ select_str = Sprintf("<pre_int>[<input_alt hseq=\"%d\" "
+ "fid=\"%d\" type=select name=\"%s\" selectnumber=%d",
+ cur_hseq++, cur_form_id, html_quote(p), n_select);
+ Strcat_charp(select_str, ">");
+ if (n_select == max_select) {
+ max_select *= 2;
+ select_option =
+ New_Reuse(FormSelectOption, select_option, max_select);
+ }
+ select_option[n_select].first = NULL;
+ select_option[n_select].last = NULL;
+ cur_option_maxwidth = 0;
+ }
+ else
+#endif /* MENU_SELECT */
+ select_str = Strnew();
+ cur_option = NULL;
+ cur_status = R_ST_NORMAL;
+ n_selectitem = 0;
+ return tmp;
+}
+
+Str
+process_n_select(void)
+{
+ if (cur_select == NULL)
+ return NULL;
+ process_option();
+#ifdef MENU_SELECT
+ if (!select_is_multiple) {
+ if (select_option[n_select].first) {
+ FormItemList sitem;
+ chooseSelectOption(&sitem, select_option[n_select].first);
+ Strcat(select_str, textfieldrep(sitem.label, cur_option_maxwidth));
+ }
+ Strcat_charp(select_str, "</input_alt>]</pre_int>");
+ n_select++;
+ }
+ else
+#endif /* MENU_SELECT */
+ Strcat_charp(select_str, "<br>");
+ cur_select = NULL;
+ n_selectitem = 0;
+ return select_str;
+}
+
+void
+feed_select(char *str)
+{
+ Str tmp = Strnew();
+ int prev_status = cur_status;
+ static int prev_spaces = -1;
+ char *p;
+
+ if (cur_select == NULL)
+ return;
+ while (read_token(tmp, &str, &cur_status, 0, 0)) {
+ if (cur_status != R_ST_NORMAL || prev_status != R_ST_NORMAL)
+ continue;
+ p = tmp->ptr;
+ if (tmp->ptr[0] == '<' && Strlastchar(tmp) == '>') {
+ struct parsed_tag *tag;
+ char *q;
+ if (!(tag = parse_tag(&p, FALSE)))
+ continue;
+ switch (tag->tagid) {
+ case HTML_OPTION:
+ process_option();
+ cur_option = Strnew();
+ if (parsedtag_get_value(tag, ATTR_VALUE, &q))
+ cur_option_value = Strnew_charp(q);
+ else
+ cur_option_value = NULL;
+ if (parsedtag_get_value(tag, ATTR_LABEL, &q))
+ cur_option_label = Strnew_charp(q);
+ else
+ cur_option_label = NULL;
+ cur_option_selected = parsedtag_exists(tag, ATTR_SELECTED);
+ prev_spaces = -1;
+ break;
+ case HTML_N_OPTION:
+ /* do nothing */
+ break;
+ default:
+ /* never happen */
+ break;
+ }
+ }
+ else if (cur_option) {
+ while (*p) {
+ if (IS_SPACE(*p) && prev_spaces != 0) {
+ p++;
+ if (prev_spaces > 0)
+ prev_spaces++;
+ }
+ else {
+ if (IS_SPACE(*p))
+ prev_spaces = 1;
+ else
+ prev_spaces = 0;
+ if (*p == '&')
+ Strcat_charp(cur_option, getescapecmd(&p));
+ else
+ Strcat_char(cur_option, *(p++));
+ }
+ }
+ }
+ }
+}
+
+void
+process_option(void)
+{
+ char begin_char = '[', end_char = ']';
+ int len;
+
+ if (cur_select == NULL || cur_option == NULL)
+ return;
+ while (cur_option->length > 0 && IS_SPACE(Strlastchar(cur_option)))
+ Strshrink(cur_option, 1);
+ if (cur_option_value == NULL)
+ cur_option_value = cur_option;
+ if (cur_option_label == NULL)
+ cur_option_label = cur_option;
+#ifdef MENU_SELECT
+ if (!select_is_multiple) {
+ len = get_Str_strwidth(cur_option_label);
+ if (len > cur_option_maxwidth)
+ cur_option_maxwidth = len;
+ addSelectOption(&select_option[n_select],
+ cur_option_value,
+ cur_option_label, cur_option_selected);
+ return;
+ }
+#endif /* MENU_SELECT */
+ if (!select_is_multiple) {
+ begin_char = '(';
+ end_char = ')';
+ }
+ Strcat(select_str, Sprintf("<br><pre_int>%c<input_alt hseq=\"%d\" "
+ "fid=\"%d\" type=%s name=\"%s\" value=\"%s\"",
+ begin_char, cur_hseq++, cur_form_id,
+ select_is_multiple ? "checkbox" : "radio",
+ html_quote(cur_select->ptr),
+ html_quote(cur_option_value->ptr)));
+ if (cur_option_selected)
+ Strcat_charp(select_str, " checked>*</input_alt>");
+ else
+ Strcat_charp(select_str, "> </input_alt>");
+ Strcat_char(select_str, end_char);
+ Strcat_charp(select_str, html_quote(cur_option_label->ptr));
+ Strcat_charp(select_str, "</pre_int>");
+ n_selectitem++;
+}
+
+Str
+process_textarea(struct parsed_tag *tag, int width)
+{
+ Str tmp = NULL;
+ char *p;
+
+ if (cur_form_id < 0) {
+ char *s = "<form_int method=internal action=none>";
+ tmp = process_form(parse_tag(&s, TRUE));
+ }
+
+ p = "";
+ parsedtag_get_value(tag, ATTR_NAME, &p);
+ cur_textarea = Strnew_charp(p);
+ cur_textarea_size = 20;
+ if (parsedtag_get_value(tag, ATTR_COLS, &p)) {
+ cur_textarea_size = atoi(p);
+ if (p[strlen(p) - 1] == '%')
+ cur_textarea_size = width * cur_textarea_size / 100 - 2;
+ if (cur_textarea_size <= 0)
+ cur_textarea_size = 20;
+ }
+ cur_textarea_rows = 1;
+ if (parsedtag_get_value(tag, ATTR_ROWS, &p)) {
+ cur_textarea_rows = atoi(p);
+ if (cur_textarea_rows <= 0)
+ cur_textarea_rows = 1;
+ }
+ cur_textarea_readonly = parsedtag_exists(tag, ATTR_READONLY);
+ if (n_textarea >= max_textarea) {
+ max_textarea *= 2;
+ textarea_str = New_Reuse(Str, textarea_str, max_textarea);
+ }
+ textarea_str[n_textarea] = Strnew();
+ ignore_nl_textarea = TRUE;
+
+ return tmp;
+}
+
+Str
+process_n_textarea(void)
+{
+ Str tmp;
+ int i;
+
+ if (cur_textarea == NULL)
+ return NULL;
+
+ tmp = Strnew();
+ Strcat(tmp, Sprintf("<pre_int>[<input_alt hseq=\"%d\" fid=\"%d\" "
+ "type=textarea name=\"%s\" size=%d rows=%d "
+ "top_margin=%d textareanumber=%d",
+ cur_hseq, cur_form_id,
+ html_quote(cur_textarea->ptr),
+ cur_textarea_size, cur_textarea_rows,
+ cur_textarea_rows - 1, n_textarea));
+ if (cur_textarea_readonly)
+ Strcat_charp(tmp, " readonly");
+ Strcat_charp(tmp, "><u>");
+ for (i = 0; i < cur_textarea_size; i++)
+ Strcat_char(tmp, ' ');
+ Strcat_charp(tmp, "</u></input_alt>]</pre_int>\n");
+ cur_hseq++;
+ n_textarea++;
+ cur_textarea = NULL;
+
+ return tmp;
+}
+
+void
+feed_textarea(char *str)
+{
+ if (cur_textarea == NULL)
+ return;
+ if (ignore_nl_textarea) {
+ if (*str == '\r')
+ str++;
+ if (*str == '\n')
+ str++;
+ }
+ ignore_nl_textarea = FALSE;
+ while (*str) {
+ if (*str == '&')
+ Strcat_charp(textarea_str[n_textarea], getescapecmd(&str));
+ else if (*str == '\n') {
+ Strcat_charp(textarea_str[n_textarea], "\r\n");
+ str++;
+ }
+ else if (*str != '\r')
+ Strcat_char(textarea_str[n_textarea], *(str++));
+ }
+}
+
+Str
+process_hr(struct parsed_tag *tag, int width, int indent_width)
+{
+ Str tmp = Strnew_charp("<nobr>");
+ int w = 0;
+ int x = ALIGN_CENTER;
+
+ if (width > indent_width)
+ width -= indent_width;
+ if (parsedtag_get_value(tag, ATTR_WIDTH, &w))
+ w = REAL_WIDTH(w, width);
+ else
+ w = width;
+
+ parsedtag_get_value(tag, ATTR_ALIGN, &x);
+ switch (x) {
+ case ALIGN_CENTER:
+ Strcat_charp(tmp, "<div_int align=center>");
+ break;
+ case ALIGN_RIGHT:
+ Strcat_charp(tmp, "<div_int align=right>");
+ break;
+ case ALIGN_LEFT:
+ Strcat_charp(tmp, "<div_int align=left>");
+ break;
+ }
+ w /= symbol_width;
+ if (w <= 0)
+ w = 1;
+ push_symbol(tmp, HR_SYMBOL, symbol_width, w);
+ Strcat_charp(tmp, "</div_int></nobr>");
+ return tmp;
+}
+
+#ifdef USE_M17N
+static char *
+check_charset(char *p)
+{
+ return wc_guess_charset(p, 0) ? p : NULL;
+}
+
+static char *
+check_accept_charset(char *ac)
+{
+ char *s = ac, *e;
+
+ while (*s) {
+ while (*s && (IS_SPACE(*s) || *s == ','))
+ s++;
+ if (!*s)
+ break;
+ e = s;
+ while (*e && !(IS_SPACE(*e) || *e == ','))
+ e++;
+ if (wc_guess_charset(Strnew_charp_n(s, e - s)->ptr, 0))
+ return ac;
+ s = e;
+ }
+ return NULL;
+}
+#endif
+
+static Str
+process_form_int(struct parsed_tag *tag, int fid)
+{
+ char *p, *q, *r, *s, *tg, *n;
+
+ p = "get";
+ parsedtag_get_value(tag, ATTR_METHOD, &p);
+ q = "!CURRENT_URL!";
+ parsedtag_get_value(tag, ATTR_ACTION, &q);
+ r = NULL;
+#ifdef USE_M17N
+ if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r))
+ r = check_accept_charset(r);
+ if (!r && parsedtag_get_value(tag, ATTR_CHARSET, &r))
+ r = check_charset(r);
+#endif
+ s = NULL;
+ parsedtag_get_value(tag, ATTR_ENCTYPE, &s);
+ tg = NULL;
+ parsedtag_get_value(tag, ATTR_TARGET, &tg);
+ n = NULL;
+ parsedtag_get_value(tag, ATTR_NAME, &n);
+
+ if (fid < 0) {
+ form_max++;
+ form_sp++;
+ fid = form_max;
+ }
+ else { /* <form_int> */
+ if (form_max < fid)
+ form_max = fid;
+ form_sp = fid;
+ }
+ if (forms_size == 0) {
+ forms_size = INITIAL_FORM_SIZE;
+ forms = New_N(FormList *, forms_size);
+ form_stack = NewAtom_N(int, forms_size);
+ }
+ else if (forms_size <= form_max) {
+ forms_size += form_max;
+ forms = New_Reuse(FormList *, forms, forms_size);
+ form_stack = New_Reuse(int, form_stack, forms_size);
+ }
+ form_stack[form_sp] = fid;
+
+ if (w3m_halfdump) {
+ Str tmp = Sprintf("<form_int fid=\"%d\" action=\"%s\" method=\"%s\"",
+ fid, html_quote(q), html_quote(p));
+ if (s)
+ Strcat(tmp, Sprintf(" enctype=\"%s\"", html_quote(s)));
+ if (tg)
+ Strcat(tmp, Sprintf(" target=\"%s\"", html_quote(tg)));
+ if (n)
+ Strcat(tmp, Sprintf(" name=\"%s\"", html_quote(n)));
+#ifdef USE_M17N
+ if (r)
+ Strcat(tmp, Sprintf(" accept-charset=\"%s\"", html_quote(r)));
+#endif
+ Strcat_charp(tmp, ">");
+ return tmp;
+ }
+
+ forms[fid] = newFormList(q, p, r, s, tg, n, NULL);
+ return NULL;
+}
+
+Str
+process_form(struct parsed_tag *tag)
+{
+ return process_form_int(tag, -1);
+}
+
+Str
+process_n_form(void)
+{
+ if (form_sp >= 0)
+ form_sp--;
+ return NULL;
+}
+
+static void
+clear_ignore_p_flag(int cmd, struct readbuffer *obuf)
+{
+ static int clear_flag_cmd[] = {
+ HTML_HR, HTML_UNKNOWN
+ };
+ int i;
+
+ for (i = 0; clear_flag_cmd[i] != HTML_UNKNOWN; i++) {
+ if (cmd == clear_flag_cmd[i]) {
+ obuf->flag &= ~RB_IGNORE_P;
+ return;
+ }
+ }
+}
+
+static void
+set_alignment(struct readbuffer *obuf, struct parsed_tag *tag)
+{
+ long flag = -1;
+ int align;
+
+ if (parsedtag_get_value(tag, ATTR_ALIGN, &align)) {
+ switch (align) {
+ case ALIGN_CENTER:
+ flag = RB_CENTER;
+ break;
+ case ALIGN_RIGHT:
+ flag = RB_RIGHT;
+ break;
+ case ALIGN_LEFT:
+ flag = RB_LEFT;
+ }
+ }
+ RB_SAVE_FLAG(obuf);
+ if (flag != -1) {
+ RB_SET_ALIGN(obuf, flag);
+ }
+}
+
+#ifdef ID_EXT
+static void
+process_idattr(struct readbuffer *obuf, int cmd, struct parsed_tag *tag)
+{
+ char *id = NULL, *framename = NULL;
+ Str idtag = NULL;
+
+ /*
+ * HTML_TABLE is handled by the other process.
+ */
+ if (cmd == HTML_TABLE)
+ return;
+
+ parsedtag_get_value(tag, ATTR_ID, &id);
+ parsedtag_get_value(tag, ATTR_FRAMENAME, &framename);
+ if (id == NULL)
+ return;
+ if (framename)
+ idtag = Sprintf("<_id id=\"%s\" framename=\"%s\">",
+ html_quote(id), html_quote(framename));
+ else
+ idtag = Sprintf("<_id id=\"%s\">", html_quote(id));
+ push_tag(obuf, idtag->ptr, HTML_NOP);
+}
+#endif /* ID_EXT */
+
+#define CLOSE_P if (obuf->flag & RB_P) { \
+ flushline(h_env, obuf, envs[h_env->envc].indent,0,h_env->limit);\
+ RB_RESTORE_FLAG(obuf);\
+ obuf->flag &= ~RB_P;\
+ }
+
+#define CLOSE_A \
+ CLOSE_P; \
+ close_anchor(h_env, obuf);
+
+#define CLOSE_DT \
+ if (obuf->flag & RB_IN_DT) { \
+ obuf->flag &= ~RB_IN_DT; \
+ HTMLlineproc1("</b>", h_env); \
+ }
+
+#define PUSH_ENV(cmd) \
+ if (++h_env->envc_real < h_env->nenv) { \
+ ++h_env->envc; \
+ envs[h_env->envc].env = cmd; \
+ envs[h_env->envc].count = 0; \
+ if (h_env->envc <= MAX_INDENT_LEVEL) \
+ envs[h_env->envc].indent = envs[h_env->envc - 1].indent + INDENT_INCR; \
+ else \
+ envs[h_env->envc].indent = envs[h_env->envc - 1].indent; \
+ }
+
+#define POP_ENV \
+ if (h_env->envc_real-- < h_env->nenv) \
+ h_env->envc--;
+
+static int
+ul_type(struct parsed_tag *tag, int default_type)
+{
+ char *p;
+ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
+ if (!strcasecmp(p, "disc"))
+ return (int)'d';
+ else if (!strcasecmp(p, "circle"))
+ return (int)'c';
+ else if (!strcasecmp(p, "square"))
+ return (int)'s';
+ }
+ return default_type;
+}
+
+int
+getMetaRefreshParam(char *q, Str *refresh_uri)
+{
+ int refresh_interval;
+ char *r;
+ Str s_tmp = NULL;
+
+ if (q == NULL || refresh_uri == NULL)
+ return 0;
+
+ refresh_interval = atoi(q);
+ if (refresh_interval < 0)
+ return 0;
+
+ while (*q) {
+ if (!strncasecmp(q, "url=", 4)) {
+ q += 4;
+ if (*q == '\"') /* " */
+ q++;
+ r = q;
+ while (*r && !IS_SPACE(*r) && *r != ';')
+ r++;
+ s_tmp = Strnew_charp_n(q, r - q);
+
+ if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* "
+ */
+ s_tmp->length--;
+ s_tmp->ptr[s_tmp->length] = '\0';
+ }
+ q = r;
+ }
+ while (*q && *q != ';')
+ q++;
+ if (*q == ';')
+ q++;
+ while (*q && *q == ' ')
+ q++;
+ }
+ *refresh_uri = s_tmp;
+ return refresh_interval;
+}
+
+int
+HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
+{
+ char *p, *q, *r;
+ int i, w, x, y, z, count, width;
+ struct readbuffer *obuf = h_env->obuf;
+ struct environment *envs = h_env->envs;
+ Str tmp;
+ int hseq;
+ int cmd;
+#ifdef ID_EXT
+ char *id = NULL;
+#endif /* ID_EXT */
+
+ cmd = tag->tagid;
+
+ if (obuf->flag & RB_PRE) {
+ switch (cmd) {
+ case HTML_NOBR:
+ case HTML_N_NOBR:
+ case HTML_PRE_INT:
+ case HTML_N_PRE_INT:
+ return 1;
+ }
+ }
+
+ switch (cmd) {
+ case HTML_B:
+ obuf->in_bold++;
+ if (obuf->in_bold > 1)
+ return 1;
+ return 0;
+ case HTML_N_B:
+ if (obuf->in_bold == 1 && close_effect0(obuf, HTML_B))
+ obuf->in_bold = 0;
+ if (obuf->in_bold > 0) {
+ obuf->in_bold--;
+ if (obuf->in_bold == 0)
+ return 0;
+ }
+ return 1;
+ case HTML_U:
+ obuf->in_under++;
+ if (obuf->in_under > 1)
+ return 1;
+ return 0;
+ case HTML_N_U:
+ if (obuf->in_under == 1 && close_effect0(obuf, HTML_U))
+ obuf->in_under = 0;
+ if (obuf->in_under > 0) {
+ obuf->in_under--;
+ if (obuf->in_under == 0)
+ return 0;
+ }
+ return 1;
+ case HTML_EM:
+ HTMLlineproc1("<b>", h_env);
+ return 1;
+ case HTML_N_EM:
+ HTMLlineproc1("</b>", h_env);
+ return 1;
+ case HTML_Q:
+ HTMLlineproc1("`", h_env);
+ return 1;
+ case HTML_N_Q:
+ HTMLlineproc1("'", h_env);
+ return 1;
+ case HTML_P:
+ case HTML_N_P:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ obuf->flag |= RB_IGNORE_P;
+ if (cmd == HTML_P) {
+ set_alignment(obuf, tag);
+ obuf->flag |= RB_P;
+ }
+ return 1;
+ case HTML_BR:
+ flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit);
+ h_env->blank_lines = 0;
+ return 1;
+ case HTML_H:
+ if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P))) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ HTMLlineproc1("<b>", h_env);
+ set_alignment(obuf, tag);
+ return 1;
+ case HTML_N_H:
+ HTMLlineproc1("</b>", h_env);
+ if (!(obuf->flag & RB_PREMODE)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ }
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ RB_RESTORE_FLAG(obuf);
+ close_anchor(h_env, obuf);
+ obuf->flag |= RB_IGNORE_P;
+ return 1;
+ case HTML_UL:
+ case HTML_OL:
+ case HTML_BLQ:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ if (!(obuf->flag & RB_PREMODE) &&
+ (h_env->envc == 0 || cmd == HTML_BLQ))
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ PUSH_ENV(cmd);
+ if (cmd == HTML_UL || cmd == HTML_OL) {
+ if (parsedtag_get_value(tag, ATTR_START, &count)) {
+ envs[h_env->envc].count = count - 1;
+ }
+ }
+ if (cmd == HTML_OL) {
+ envs[h_env->envc].type = '1';
+ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
+ envs[h_env->envc].type = (int)*p;
+ }
+ }
+ if (cmd == HTML_UL)
+ envs[h_env->envc].type = ul_type(tag, 0);
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ return 1;
+ case HTML_N_UL:
+ case HTML_N_OL:
+ case HTML_N_DL:
+ case HTML_N_BLQ:
+ CLOSE_DT;
+ CLOSE_A;
+ if (h_env->envc > 0) {
+ flushline(h_env, obuf, envs[h_env->envc - 1].indent, 0,
+ h_env->limit);
+ POP_ENV;
+ if (!(obuf->flag & RB_PREMODE) &&
+ (h_env->envc == 0 || cmd == HTML_N_DL || cmd == HTML_N_BLQ)) {
+ do_blankline(h_env, obuf,
+ envs[h_env->envc].indent,
+ INDENT_INCR, h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ }
+ }
+ close_anchor(h_env, obuf);
+ return 1;
+ case HTML_DL:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ if (!(obuf->flag & RB_PREMODE))
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ PUSH_ENV(cmd);
+ if (parsedtag_exists(tag, ATTR_COMPACT))
+ envs[h_env->envc].env = HTML_DL_COMPACT;
+ obuf->flag |= RB_IGNORE_P;
+ return 1;
+ case HTML_LI:
+ CLOSE_A;
+ CLOSE_DT;
+ if (h_env->envc > 0) {
+ Str num;
+ flushline(h_env, obuf,
+ envs[h_env->envc - 1].indent, 0, h_env->limit);
+ envs[h_env->envc].count++;
+ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) {
+ count = atoi(p);
+ if (count > 0)
+ envs[h_env->envc].count = count;
+ else
+ envs[h_env->envc].count = 0;
+ }
+ switch (envs[h_env->envc].env) {
+ case HTML_UL:
+ envs[h_env->envc].type = ul_type(tag, envs[h_env->envc].type);
+ for (i = 0; i < INDENT_INCR - 3; i++)
+ push_charp(obuf, 1, NBSP, PC_ASCII);
+ tmp = Strnew();
+ switch (envs[h_env->envc].type) {
+ case 'd':
+ push_symbol(tmp, UL_SYMBOL_DISC, symbol_width, 1);
+ break;
+ case 'c':
+ push_symbol(tmp, UL_SYMBOL_CIRCLE, symbol_width, 1);
+ break;
+ case 's':
+ push_symbol(tmp, UL_SYMBOL_SQUARE, symbol_width, 1);
+ break;
+ default:
+ push_symbol(tmp,
+ UL_SYMBOL((h_env->envc_real -
+ 1) % MAX_UL_LEVEL), symbol_width,
+ 1);
+ break;
+ }
+ if (symbol_width == 1)
+ push_charp(obuf, 1, NBSP, PC_ASCII);
+ push_str(obuf, symbol_width, tmp, PC_ASCII);
+ push_charp(obuf, 1, NBSP, PC_ASCII);
+ set_space_to_prevchar(obuf->prevchar);
+ break;
+ case HTML_OL:
+ if (parsedtag_get_value(tag, ATTR_TYPE, &p))
+ envs[h_env->envc].type = (int)*p;
+ switch ((envs[h_env->envc].count > 0)? envs[h_env->envc].type: '1') {
+ case 'i':
+ num = romanNumeral(envs[h_env->envc].count);
+ break;
+ case 'I':
+ num = romanNumeral(envs[h_env->envc].count);
+ Strupper(num);
+ break;
+ case 'a':
+ num = romanAlphabet(envs[h_env->envc].count);
+ break;
+ case 'A':
+ num = romanAlphabet(envs[h_env->envc].count);
+ Strupper(num);
+ break;
+ default:
+ num = Sprintf("%d", envs[h_env->envc].count);
+ break;
+ }
+ if (INDENT_INCR >= 4)
+ Strcat_charp(num, ". ");
+ else
+ Strcat_char(num, '.');
+ push_spaces(obuf, 1, INDENT_INCR - num->length);
+ push_str(obuf, num->length, num, PC_ASCII);
+ if (INDENT_INCR >= 4)
+ set_space_to_prevchar(obuf->prevchar);
+ break;
+ default:
+ push_spaces(obuf, 1, INDENT_INCR);
+ break;
+ }
+ }
+ else {
+ flushline(h_env, obuf, 0, 0, h_env->limit);
+ }
+ obuf->flag |= RB_IGNORE_P;
+ return 1;
+ case HTML_DT:
+ CLOSE_A;
+ if (h_env->envc == 0 ||
+ (h_env->envc_real < h_env->nenv &&
+ envs[h_env->envc].env != HTML_DL &&
+ envs[h_env->envc].env != HTML_DL_COMPACT)) {
+ PUSH_ENV(HTML_DL);
+ }
+ if (h_env->envc > 0) {
+ flushline(h_env, obuf,
+ envs[h_env->envc - 1].indent, 0, h_env->limit);
+ }
+ if (!(obuf->flag & RB_IN_DT)) {
+ HTMLlineproc1("<b>", h_env);
+ obuf->flag |= RB_IN_DT;
+ }
+ obuf->flag |= RB_IGNORE_P;
+ return 1;
+ case HTML_DD:
+ CLOSE_A;
+ CLOSE_DT;
+ if (envs[h_env->envc].env == HTML_DL_COMPACT) {
+ if (obuf->pos > envs[h_env->envc].indent)
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ else
+ push_spaces(obuf, 1, envs[h_env->envc].indent - obuf->pos);
+ }
+ else
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ /* obuf->flag |= RB_IGNORE_P; */
+ return 1;
+ case HTML_TITLE:
+ close_anchor(h_env, obuf);
+ process_title(tag);
+ obuf->flag |= RB_TITLE;
+ obuf->end_tag = HTML_N_TITLE;
+ return 1;
+ case HTML_N_TITLE:
+ if (!(obuf->flag & RB_TITLE))
+ return 1;
+ obuf->flag &= ~RB_TITLE;
+ obuf->end_tag = 0;
+ tmp = process_n_title(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_TITLE_ALT:
+ if (parsedtag_get_value(tag, ATTR_TITLE, &p))
+ h_env->title = html_unquote(p);
+ return 0;
+ case HTML_FRAMESET:
+ PUSH_ENV(cmd);
+ push_charp(obuf, 9, "--FRAME--", PC_ASCII);
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ return 0;
+ case HTML_N_FRAMESET:
+ if (h_env->envc > 0) {
+ POP_ENV;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ }
+ return 0;
+ case HTML_NOFRAMES:
+ CLOSE_A;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ obuf->flag |= (RB_NOFRAMES | RB_IGNORE_P);
+ /* istr = str; */
+ return 1;
+ case HTML_N_NOFRAMES:
+ CLOSE_A;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ obuf->flag &= ~RB_NOFRAMES;
+ return 1;
+ case HTML_FRAME:
+ q = r = NULL;
+ parsedtag_get_value(tag, ATTR_SRC, &q);
+ parsedtag_get_value(tag, ATTR_NAME, &r);
+ if (q) {
+ q = html_quote(q);
+ push_tag(obuf, Sprintf("<a hseq=\"%d\" href=\"%s\">",
+ cur_hseq++, q)->ptr, HTML_A);
+ if (r)
+ q = html_quote(r);
+ push_charp(obuf, get_strwidth(q), q, PC_ASCII);
+ push_tag(obuf, "</a>", HTML_N_A);
+ }
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ return 0;
+ case HTML_HR:
+ close_anchor(h_env, obuf);
+ tmp = process_hr(tag, h_env->limit, envs[h_env->envc].indent);
+ HTMLlineproc1(tmp->ptr, h_env);
+ set_space_to_prevchar(obuf->prevchar);
+ return 1;
+ case HTML_PRE:
+ x = parsedtag_exists(tag, ATTR_FOR_TABLE);
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ if (!x)
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ else
+ fillline(obuf, envs[h_env->envc].indent);
+ obuf->flag |= (RB_PRE | RB_IGNORE_P);
+ /* istr = str; */
+ return 1;
+ case HTML_N_PRE:
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ }
+ obuf->flag &= ~RB_PRE;
+ close_anchor(h_env, obuf);
+ return 1;
+ case HTML_PRE_INT:
+ i = obuf->line->length;
+ append_tags(obuf);
+ if (!(obuf->flag & RB_SPECIAL)) {
+ set_breakpoint(obuf, obuf->line->length - i);
+ }
+ obuf->flag |= RB_PRE_INT;
+ return 0;
+ case HTML_N_PRE_INT:
+ push_tag(obuf, "</pre_int>", HTML_N_PRE_INT);
+ obuf->flag &= ~RB_PRE_INT;
+ if (!(obuf->flag & RB_SPECIAL) && obuf->pos > obuf->bp.pos) {
+ set_prevchar(obuf->prevchar, "", 0);
+ obuf->prev_ctype = PC_CTRL;
+ }
+ return 1;
+ case HTML_NOBR:
+ obuf->flag |= RB_NOBR;
+ obuf->nobr_level++;
+ return 0;
+ case HTML_N_NOBR:
+ if (obuf->nobr_level > 0)
+ obuf->nobr_level--;
+ if (obuf->nobr_level == 0)
+ obuf->flag &= ~RB_NOBR;
+ return 0;
+ case HTML_PRE_PLAIN:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ obuf->flag |= (RB_PRE | RB_IGNORE_P);
+ return 1;
+ case HTML_N_PRE_PLAIN:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ }
+ obuf->flag &= ~RB_PRE;
+ return 1;
+ case HTML_LISTING:
+ case HTML_XMP:
+ case HTML_PLAINTEXT:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ }
+ obuf->flag |= (RB_PLAIN | RB_IGNORE_P);
+ switch (cmd) {
+ case HTML_LISTING:
+ obuf->end_tag = HTML_N_LISTING;
+ break;
+ case HTML_XMP:
+ obuf->end_tag = HTML_N_XMP;
+ break;
+ case HTML_PLAINTEXT:
+ obuf->end_tag = MAX_HTMLTAG;
+ break;
+ }
+ return 1;
+ case HTML_N_LISTING:
+ case HTML_N_XMP:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P)) {
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ }
+ obuf->flag &= ~RB_PLAIN;
+ obuf->end_tag = 0;
+ return 1;
+ case HTML_SCRIPT:
+ obuf->flag |= RB_SCRIPT;
+ obuf->end_tag = HTML_N_SCRIPT;
+ return 1;
+ case HTML_STYLE:
+ obuf->flag |= RB_STYLE;
+ obuf->end_tag = HTML_N_STYLE;
+ return 1;
+ case HTML_N_SCRIPT:
+ obuf->flag &= ~RB_SCRIPT;
+ obuf->end_tag = 0;
+ return 1;
+ case HTML_N_STYLE:
+ obuf->flag &= ~RB_STYLE;
+ obuf->end_tag = 0;
+ return 1;
+ case HTML_A:
+ if (obuf->anchor.url)
+ close_anchor(h_env, obuf);
+
+ hseq = 0;
+
+ if (parsedtag_get_value(tag, ATTR_HREF, &p))
+ obuf->anchor.url = Strnew_charp(p)->ptr;
+ if (parsedtag_get_value(tag, ATTR_TARGET, &p))
+ obuf->anchor.target = Strnew_charp(p)->ptr;
+ if (parsedtag_get_value(tag, ATTR_REFERER, &p))
+ obuf->anchor.referer = Strnew_charp(p)->ptr;
+ if (parsedtag_get_value(tag, ATTR_TITLE, &p))
+ obuf->anchor.title = Strnew_charp(p)->ptr;
+ if (parsedtag_get_value(tag, ATTR_ACCESSKEY, &p))
+ obuf->anchor.accesskey = (unsigned char)*p;
+ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq))
+ obuf->anchor.hseq = hseq;
+
+ if (hseq == 0 && obuf->anchor.url) {
+ obuf->anchor.hseq = cur_hseq;
+ tmp = process_anchor(tag, h_env->tagbuf->ptr);
+ push_tag(obuf, tmp->ptr, HTML_A);
+ return 1;
+ }
+ return 0;
+ case HTML_N_A:
+ close_anchor(h_env, obuf);
+ return 1;
+ case HTML_IMG:
+ tmp = process_img(tag, h_env->limit);
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_IMG_ALT:
+ if (parsedtag_get_value(tag, ATTR_SRC, &p))
+ obuf->img_alt = Strnew_charp(p);
+#ifdef USE_IMAGE
+ i = 0;
+ if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) {
+ if (i > obuf->top_margin)
+ obuf->top_margin = i;
+ }
+ i = 0;
+ if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) {
+ if (i > obuf->bottom_margin)
+ obuf->bottom_margin = i;
+ }
+#endif
+ return 0;
+ case HTML_N_IMG_ALT:
+ if (obuf->img_alt) {
+ if (!close_effect0(obuf, HTML_IMG_ALT))
+ push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
+ obuf->img_alt = NULL;
+ }
+ return 1;
+ case HTML_INPUT_ALT:
+ i = 0;
+ if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) {
+ if (i > obuf->top_margin)
+ obuf->top_margin = i;
+ }
+ i = 0;
+ if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) {
+ if (i > obuf->bottom_margin)
+ obuf->bottom_margin = i;
+ }
+ return 0;
+ case HTML_TABLE:
+ close_anchor(h_env, obuf);
+ obuf->table_level++;
+ if (obuf->table_level >= MAX_TABLE)
+ break;
+ w = BORDER_NONE;
+ /* x: cellspacing, y: cellpadding */
+ x = 2;
+ y = 1;
+ z = 0;
+ width = 0;
+ if (parsedtag_exists(tag, ATTR_BORDER)) {
+ if (parsedtag_get_value(tag, ATTR_BORDER, &w)) {
+ if (w > 2)
+ w = BORDER_THICK;
+ else if (w < 0) { /* weird */
+ w = BORDER_THIN;
+ }
+ }
+ else
+ w = BORDER_THIN;
+ }
+ if (parsedtag_get_value(tag, ATTR_WIDTH, &i)) {
+ if (obuf->table_level == 0)
+ width = REAL_WIDTH(i, h_env->limit - envs[h_env->envc].indent);
+ else
+ width = RELATIVE_WIDTH(i);
+ }
+ if (parsedtag_exists(tag, ATTR_HBORDER))
+ w = BORDER_NOWIN;
+ parsedtag_get_value(tag, ATTR_CELLSPACING, &x);
+ parsedtag_get_value(tag, ATTR_CELLPADDING, &y);
+ parsedtag_get_value(tag, ATTR_VSPACE, &z);
+#ifdef ID_EXT
+ parsedtag_get_value(tag, ATTR_ID, &id);
+#endif /* ID_EXT */
+ tables[obuf->table_level] = begin_table(w, x, y, z);
+#ifdef ID_EXT
+ if (id != NULL)
+ tables[obuf->table_level]->id = Strnew_charp(id);
+#endif /* ID_EXT */
+ table_mode[obuf->table_level].pre_mode = 0;
+ table_mode[obuf->table_level].indent_level = 0;
+ table_mode[obuf->table_level].nobr_level = 0;
+ table_mode[obuf->table_level].caption = 0;
+ table_mode[obuf->table_level].end_tag = 0; /* HTML_UNKNOWN */
+#ifndef TABLE_EXPAND
+ tables[obuf->table_level]->total_width = width;
+#else
+ tables[obuf->table_level]->real_width = width;
+ tables[obuf->table_level]->total_width = 0;
+#endif
+ return 1;
+ case HTML_N_TABLE:
+ /* should be processed in HTMLlineproc() */
+ return 1;
+ case HTML_CENTER:
+ CLOSE_A;
+ if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P)))
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ RB_SAVE_FLAG(obuf);
+ RB_SET_ALIGN(obuf, RB_CENTER);
+ return 1;
+ case HTML_N_CENTER:
+ CLOSE_A;
+ if (!(obuf->flag & RB_PREMODE))
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ RB_RESTORE_FLAG(obuf);
+ return 1;
+ case HTML_DIV:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P))
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ set_alignment(obuf, tag);
+ return 1;
+ case HTML_N_DIV:
+ CLOSE_A;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ RB_RESTORE_FLAG(obuf);
+ return 1;
+ case HTML_DIV_INT:
+ CLOSE_P;
+ if (!(obuf->flag & RB_IGNORE_P))
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ set_alignment(obuf, tag);
+ return 1;
+ case HTML_N_DIV_INT:
+ CLOSE_P;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ RB_RESTORE_FLAG(obuf);
+ return 1;
+ case HTML_FORM:
+ CLOSE_A;
+ if (!(obuf->flag & RB_IGNORE_P))
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ tmp = process_form(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_N_FORM:
+ CLOSE_A;
+ flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ process_n_form();
+ return 1;
+ case HTML_INPUT:
+ close_anchor(h_env, obuf);
+ tmp = process_input(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_SELECT:
+ close_anchor(h_env, obuf);
+ tmp = process_select(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ obuf->flag |= RB_INSELECT;
+ obuf->end_tag = HTML_N_SELECT;
+ return 1;
+ case HTML_N_SELECT:
+ obuf->flag &= ~RB_INSELECT;
+ obuf->end_tag = 0;
+ tmp = process_n_select();
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_OPTION:
+ /* nothing */
+ return 1;
+ case HTML_TEXTAREA:
+ close_anchor(h_env, obuf);
+ tmp = process_textarea(tag, h_env->limit);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ obuf->flag |= RB_INTXTA;
+ obuf->end_tag = HTML_N_TEXTAREA;
+ return 1;
+ case HTML_N_TEXTAREA:
+ obuf->flag &= ~RB_INTXTA;
+ obuf->end_tag = 0;
+ tmp = process_n_textarea();
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_ISINDEX:
+ p = "";
+ q = "!CURRENT_URL!";
+ parsedtag_get_value(tag, ATTR_PROMPT, &p);
+ parsedtag_get_value(tag, ATTR_ACTION, &q);
+ tmp = Strnew_m_charp("<form method=get action=\"",
+ html_quote(q),
+ "\">",
+ html_quote(p),
+ "<input type=text name=\"\" accept></form>",
+ NULL);
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_META:
+ p = q = NULL;
+ parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p);
+ parsedtag_get_value(tag, ATTR_CONTENT, &q);
+#ifdef USE_M17N
+ if (p && q && !strcasecmp(p, "Content-Type") &&
+ (q = strcasestr(q, "charset")) != NULL) {
+ q += 7;
+ SKIP_BLANKS(q);
+ if (*q == '=') {
+ q++;
+ SKIP_BLANKS(q);
+ meta_charset = wc_guess_charset(q, 0);
+ }
+ }
+ else
+#endif
+ if (p && q && !strcasecmp(p, "refresh")) {
+ int refresh_interval;
+ tmp = NULL;
+ refresh_interval = getMetaRefreshParam(q, &tmp);
+ if (tmp) {
+ q = html_quote(tmp->ptr);
+ tmp = Sprintf("Refresh (%d sec) <a href=\"%s\">%s</a>",
+ refresh_interval, q, q);
+ }
+ else if (refresh_interval > 0)
+ tmp = Sprintf("Refresh (%d sec)", refresh_interval);
+ if (tmp) {
+ HTMLlineproc1(tmp->ptr, h_env);
+ do_blankline(h_env, obuf, envs[h_env->envc].indent, 0,
+ h_env->limit);
+ if (!is_redisplay &&
+ !((obuf->flag & RB_NOFRAMES) && RenderFrame)) {
+ tag->need_reconstruct = TRUE;
+ return 0;
+ }
+ }
+ }
+ return 1;
+ case HTML_BASE:
+#ifdef USE_IMAGE
+ p = NULL;
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+ if (!cur_baseURL)
+ cur_baseURL = New(ParsedURL);
+ parseURL(p, cur_baseURL, NULL);
+ }
+#endif
+ case HTML_MAP:
+ case HTML_N_MAP:
+ case HTML_AREA:
+ return 0;
+ case HTML_DEL:
+ if (displayInsDel)
+ HTMLlineproc1("<U>[DEL:</U>", h_env);
+ else
+ obuf->flag |= RB_DEL;
+ return 1;
+ case HTML_N_DEL:
+ if (displayInsDel)
+ HTMLlineproc1("<U>:DEL]</U>", h_env);
+ else
+ obuf->flag &= ~RB_DEL;
+ return 1;
+ case HTML_S:
+ if (displayInsDel)
+ HTMLlineproc1("<U>[S:</U>", h_env);
+ else
+ obuf->flag |= RB_S;
+ return 1;
+ case HTML_N_S:
+ if (displayInsDel)
+ HTMLlineproc1("<U>:S]</U>", h_env);
+ else
+ obuf->flag &= ~RB_S;
+ return 1;
+ case HTML_INS:
+ if (displayInsDel)
+ HTMLlineproc1("<U>[INS:</U>", h_env);
+ return 1;
+ case HTML_N_INS:
+ if (displayInsDel)
+ HTMLlineproc1("<U>:INS]</U>", h_env);
+ return 1;
+ case HTML_SUP:
+ if (!(obuf->flag & (RB_DEL | RB_S)))
+ HTMLlineproc1("^", h_env);
+ return 1;
+ case HTML_N_SUP:
+ return 1;
+ case HTML_SUB:
+ if (!(obuf->flag & (RB_DEL | RB_S)))
+ HTMLlineproc1("[", h_env);
+ return 1;
+ case HTML_N_SUB:
+ if (!(obuf->flag & (RB_DEL | RB_S)))
+ HTMLlineproc1("]", h_env);
+ return 1;
+ case HTML_FONT:
+ case HTML_N_FONT:
+ case HTML_NOP:
+ return 1;
+ case HTML_BGSOUND:
+ if (view_unseenobject) {
+ if (parsedtag_get_value(tag, ATTR_SRC, &p)) {
+ Str s;
+ q = html_quote(p);
+ s = Sprintf("<A HREF=\"%s\">bgsound(%s)</A>", q, q);
+ HTMLlineproc1(s->ptr, h_env);
+ }
+ }
+ return 1;
+ case HTML_EMBED:
+ if (view_unseenobject) {
+ if (parsedtag_get_value(tag, ATTR_SRC, &p)) {
+ Str s;
+ q = html_quote(p);
+ s = Sprintf("<A HREF=\"%s\">embed(%s)</A>", q, q);
+ HTMLlineproc1(s->ptr, h_env);
+ }
+ }
+ return 1;
+ case HTML_APPLET:
+ if (view_unseenobject) {
+ if (parsedtag_get_value(tag, ATTR_ARCHIVE, &p)) {
+ Str s;
+ q = html_quote(p);
+ s = Sprintf("<A HREF=\"%s\">applet archive(%s)</A>", q, q);
+ HTMLlineproc1(s->ptr, h_env);
+ }
+ }
+ return 1;
+ case HTML_BODY:
+ if (view_unseenobject) {
+ if (parsedtag_get_value(tag, ATTR_BACKGROUND, &p)) {
+ Str s;
+ q = html_quote(p);
+ s = Sprintf("<IMG SRC=\"%s\" ALT=\"bg image(%s)\"><BR>", q, q);
+ HTMLlineproc1(s->ptr, h_env);
+ }
+ }
+ case HTML_N_HEAD:
+ if (obuf->flag & RB_TITLE)
+ HTMLlineproc1("</title>", h_env);
+ case HTML_HEAD:
+ case HTML_N_BODY:
+ return 1;
+ default:
+ /* obuf->prevchar = '\0'; */
+ return 0;
+ }
+ /* not reached */
+ return 0;
+}
+
+#define PPUSH(p,c) {outp[pos]=(p);outc[pos]=(c);pos++;}
+#define PSIZE \
+ if (out_size <= pos + 1) { \
+ out_size = pos * 3 / 2; \
+ outc = New_Reuse(char, outc, out_size); \
+ outp = New_Reuse(Lineprop, outp, out_size); \
+ }
+
+static TextLineListItem *_tl_lp2;
+
+static Str
+textlist_feed()
+{
+ TextLine *p;
+ if (_tl_lp2 != NULL) {
+ p = _tl_lp2->ptr;
+ _tl_lp2 = _tl_lp2->next;
+ return p->line;
+ }
+ return NULL;
+}
+
+static void
+HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+{
+ static char *outc = NULL;
+ static Lineprop *outp = NULL;
+ static int out_size = 0;
+ Anchor *a_href = NULL, *a_img = NULL, *a_form = NULL;
+ char *p, *q, *r, *s, *t, *str;
+ Lineprop mode, effect;
+ int pos;
+ int nlines;
+#ifdef DEBUG
+ FILE *debug = NULL;
+#endif
+ struct frameset *frameset_s[FRAMESTACK_SIZE];
+ int frameset_sp = -1;
+ union frameset_element *idFrame = NULL;
+ char *id = NULL;
+ int hseq, form_id;
+ Str line;
+ char *endp;
+ char symbol = '\0';
+ int internal = 0;
+ Anchor **a_textarea = NULL;
+#ifdef MENU_SELECT
+ Anchor **a_select = NULL;
+#endif
+
+ if (out_size == 0) {
+ out_size = LINELEN;
+ outc = NewAtom_N(char, out_size);
+ outp = NewAtom_N(Lineprop, out_size);
+ }
+
+ n_textarea = -1;
+ if (!max_textarea) { /* halfload */
+ max_textarea = MAX_TEXTAREA;
+ textarea_str = New_N(Str, max_textarea);
+ a_textarea = New_N(Anchor *, max_textarea);
+ }
+#ifdef MENU_SELECT
+ n_select = -1;
+ if (!max_select) { /* halfload */
+ max_select = MAX_SELECT;
+ select_option = New_N(FormSelectOption, max_select);
+ a_select = New_N(Anchor *, max_select);
+ }
+#endif
+
+#ifdef DEBUG
+ if (w3m_debug)
+ debug = fopen("zzzerr", "a");
+#endif
+
+ effect = 0;
+ nlines = 0;
+ while ((line = feed()) != NULL) {
+#ifdef DEBUG
+ if (w3m_debug) {
+ Strfputs(line, debug);
+ fputc('\n', debug);
+ }
+#endif
+ if (n_textarea >= 0 && *(line->ptr) != '<') { /* halfload */
+ Strcat(textarea_str[n_textarea], line);
+ continue;
+ }
+ proc_again:
+ if (++nlines == llimit)
+ break;
+ pos = 0;
+#ifdef ENABLE_REMOVE_TRAILINGSPACES
+ Strremovetrailingspaces(line);
+#endif
+ str = line->ptr;
+ endp = str + line->length;
+ while (str < endp) {
+ PSIZE;
+ mode = get_mctype(str);
+ if (effect & PC_SYMBOL && *str != '<') {
+#ifdef USE_M17N
+ char **buf = set_symbol(symbol_width0);
+ int len;
+
+ p = buf[(int)symbol];
+ len = get_mclen(p);
+ mode = get_mctype(p);
+ PPUSH(mode | effect, *(p++));
+ if (--len) {
+ mode = (mode & ~PC_WCHAR1) | PC_WCHAR2;
+ while (len--) {
+ PSIZE;
+ PPUSH(mode | effect, *(p++));
+ }
+ }
+#else
+ PPUSH(PC_ASCII | effect, SYMBOL_BASE + symbol);
+#endif
+ str += symbol_width;
+ }
+#ifdef USE_M17N
+ else if (mode == PC_CTRL || mode == PC_UNDEF) {
+#else
+ else if (mode == PC_CTRL || IS_INTSPACE(*str)) {
+#endif
+ PPUSH(PC_ASCII | effect, ' ');
+ str++;
+ }
+#ifdef USE_M17N
+ else if (mode & PC_UNKNOWN) {
+ PPUSH(PC_ASCII | effect, ' ');
+ str += get_mclen(str);
+ }
+#endif
+ else if (*str != '<' && *str != '&') {
+#ifdef USE_M17N
+ int len = get_mclen(str);
+#endif
+ PPUSH(mode | effect, *(str++));
+#ifdef USE_M17N
+ if (--len) {
+ mode = (mode & ~PC_WCHAR1) | PC_WCHAR2;
+ while (len--) {
+ PSIZE;
+ PPUSH(mode | effect, *(str++));
+ }
+ }
+#endif
+ }
+ else if (*str == '&') {
+ /*
+ * & escape processing
+ */
+ p = getescapecmd(&str);
+ while (*p) {
+ PSIZE;
+ mode = get_mctype((unsigned char *)p);
+#ifdef USE_M17N
+ if (mode == PC_CTRL || mode == PC_UNDEF) {
+#else
+ if (mode == PC_CTRL || IS_INTSPACE(*str)) {
+#endif
+ PPUSH(PC_ASCII | effect, ' ');
+ p++;
+ }
+#ifdef USE_M17N
+ else if (mode & PC_UNKNOWN) {
+ PPUSH(PC_ASCII | effect, ' ');
+ p += get_mclen(p);
+ }
+#endif
+ else {
+#ifdef USE_M17N
+ int len = get_mclen(p);
+#endif
+ PPUSH(mode | effect, *(p++));
+#ifdef USE_M17N
+ if (--len) {
+ mode = (mode & ~PC_WCHAR1) | PC_WCHAR2;
+ while (len--) {
+ PSIZE;
+ PPUSH(mode | effect, *(p++));
+ }
+ }
+#endif
+ }
+ }
+ }
+ else {
+ /* tag processing */
+ struct parsed_tag *tag;
+ if (!(tag = parse_tag(&str, TRUE)))
+ continue;
+ switch (tag->tagid) {
+ case HTML_B:
+ effect |= PE_BOLD;
+ break;
+ case HTML_N_B:
+ effect &= ~PE_BOLD;
+ break;
+ case HTML_U:
+ effect |= PE_UNDER;
+ break;
+ case HTML_N_U:
+ effect &= ~PE_UNDER;
+ break;
+ case HTML_A:
+ if (renderFrameSet &&
+ parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) {
+ p = url_quote_conv(p, buf->document_charset);
+ if (!idFrame || strcmp(idFrame->body->name, p)) {
+ idFrame = search_frame(renderFrameSet, p);
+ if (idFrame && idFrame->body->attr != F_BODY)
+ idFrame = NULL;
+ }
+ }
+ p = r = s = NULL;
+ q = buf->baseTarget;
+ t = "";
+ hseq = 0;
+ id = NULL;
+ if (parsedtag_get_value(tag, ATTR_NAME, &id)) {
+ id = url_quote_conv(id, buf->document_charset);
+ registerName(buf, id, currentLn(buf), pos);
+ }
+ if (parsedtag_get_value(tag, ATTR_HREF, &p))
+ p = url_quote_conv(remove_space(p),
+ buf->document_charset);
+ if (parsedtag_get_value(tag, ATTR_TARGET, &q))
+ q = url_quote_conv(q, buf->document_charset);
+ if (parsedtag_get_value(tag, ATTR_REFERER, &r))
+ r = url_quote_conv(r, buf->document_charset);
+ parsedtag_get_value(tag, ATTR_TITLE, &s);
+ parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);
+ parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
+ if (hseq > 0)
+ buf->hmarklist =
+ putHmarker(buf->hmarklist, currentLn(buf),
+ pos, hseq - 1);
+ else if (hseq < 0) {
+ int h = -hseq - 1;
+ if (buf->hmarklist &&
+ h < buf->hmarklist->nmark &&
+ buf->hmarklist->marks[h].invalid) {
+ buf->hmarklist->marks[h].pos = pos;
+ buf->hmarklist->marks[h].line = currentLn(buf);
+ buf->hmarklist->marks[h].invalid = 0;
+ hseq = -hseq;
+ }
+ }
+ if (id && idFrame)
+ idFrame->body->nameList =
+ putAnchor(idFrame->body->nameList, id, NULL,
+ (Anchor **)NULL, NULL, NULL, '\0',
+ currentLn(buf), pos);
+ if (p) {
+ effect |= PE_ANCHOR;
+ a_href = registerHref(buf, p, q, r, s,
+ *t, currentLn(buf), pos);
+ a_href->hseq = ((hseq > 0) ? hseq : -hseq) - 1;
+ a_href->slave = (hseq > 0) ? FALSE : TRUE;
+ }
+ break;
+ case HTML_N_A:
+ effect &= ~PE_ANCHOR;
+ if (a_href) {
+ a_href->end.line = currentLn(buf);
+ a_href->end.pos = pos;
+ if (a_href->start.line == a_href->end.line &&
+ a_href->start.pos == a_href->end.pos) {
+ if (buf->hmarklist &&
+ a_href->hseq < buf->hmarklist->nmark)
+ buf->hmarklist->marks[a_href->hseq].invalid = 1;
+ a_href->hseq = -1;
+ }
+ a_href = NULL;
+ }
+ break;
+
+ case HTML_LINK:
+ addLink(buf, tag);
+ break;
+
+ case HTML_IMG_ALT:
+ if (parsedtag_get_value(tag, ATTR_SRC, &p)) {
+#ifdef USE_IMAGE
+ int w = -1, h = -1, iseq = 0, ismap = 0;
+ int xoffset = 0, yoffset = 0, top = 0, bottom = 0;
+ parsedtag_get_value(tag, ATTR_HSEQ, &iseq);
+ parsedtag_get_value(tag, ATTR_WIDTH, &w);
+ parsedtag_get_value(tag, ATTR_HEIGHT, &h);
+ parsedtag_get_value(tag, ATTR_XOFFSET, &xoffset);
+ parsedtag_get_value(tag, ATTR_YOFFSET, &yoffset);
+ parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top);
+ parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom);
+ if (parsedtag_exists(tag, ATTR_ISMAP))
+ ismap = 1;
+ q = NULL;
+ parsedtag_get_value(tag, ATTR_USEMAP, &q);
+ if (iseq > 0) {
+ buf->imarklist = putHmarker(buf->imarklist,
+ currentLn(buf), pos,
+ iseq - 1);
+ }
+#endif
+ s = NULL;
+ parsedtag_get_value(tag, ATTR_TITLE, &s);
+ p = url_quote_conv(remove_space(p),
+ buf->document_charset);
+ a_img = registerImg(buf, p, s, currentLn(buf), pos);
+#ifdef USE_IMAGE
+ a_img->hseq = iseq;
+ a_img->image = NULL;
+ if (iseq > 0) {
+ ParsedURL u;
+ Image *image;
+
+ parseURL2(a_img->url, &u, cur_baseURL);
+ a_img->image = image = New(Image);
+ image->url = parsedURL2Str(&u)->ptr;
+ if (!uncompressed_file_type(u.file, &image->ext))
+ image->ext = filename_extension(u.file, TRUE);
+ image->cache = NULL;
+ image->width =
+ (w > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : w;
+ image->height =
+ (h > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : h;
+ image->xoffset = xoffset;
+ image->yoffset = yoffset;
+ image->y = currentLn(buf) - top;
+ if (image->xoffset < 0 && pos == 0)
+ image->xoffset = 0;
+ if (image->yoffset < 0 && image->y == 1)
+ image->yoffset = 0;
+ image->rows = 1 + top + bottom;
+ image->map = q;
+ image->ismap = ismap;
+ image->touch = 0;
+ image->cache = getImage(image, cur_baseURL,
+ IMG_FLAG_SKIP);
+ }
+ else if (iseq < 0) {
+ BufferPoint *po = buf->imarklist->marks - iseq - 1;
+ Anchor *a = retrieveAnchor(buf->img,
+ po->line, po->pos);
+ if (a) {
+ a_img->url = a->url;
+ a_img->image = a->image;
+ }
+ }
+#endif
+ }
+ effect |= PE_IMAGE;
+ break;
+ case HTML_N_IMG_ALT:
+ effect &= ~PE_IMAGE;
+ if (a_img) {
+ a_img->end.line = currentLn(buf);
+ a_img->end.pos = pos;
+ }
+ a_img = NULL;
+ break;
+ case HTML_INPUT_ALT:
+ {
+ FormList *form;
+ int top = 0, bottom = 0;
+ int textareanumber = -1;
+#ifdef MENU_SELECT
+ int selectnumber = -1;
+#endif
+ hseq = 0;
+ form_id = -1;
+
+ parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
+ parsedtag_get_value(tag, ATTR_FID, &form_id);
+ parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top);
+ parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom);
+ if (form_id < 0 || form_id > form_max || forms == NULL)
+ break; /* outside of <form>..</form> */
+ form = forms[form_id];
+ if (hseq > 0) {
+ int hpos = pos;
+ if (*str == '[')
+ hpos++;
+ buf->hmarklist =
+ putHmarker(buf->hmarklist, currentLn(buf),
+ hpos, hseq - 1);
+ }
+ if (!form->target)
+ form->target = buf->baseTarget;
+ if (a_textarea &&
+ parsedtag_get_value(tag, ATTR_TEXTAREANUMBER,
+ &textareanumber)) {
+ if (textareanumber >= max_textarea) {
+ max_textarea = 2 * textareanumber;
+ textarea_str = New_Reuse(Str, textarea_str,
+ max_textarea);
+ a_textarea = New_Reuse(Anchor *, a_textarea,
+ max_textarea);
+ }
+ }
+#ifdef MENU_SELECT
+ if (a_select &&
+ parsedtag_get_value(tag, ATTR_SELECTNUMBER,
+ &selectnumber)) {
+ if (selectnumber >= max_select) {
+ max_select = 2 * selectnumber;
+ select_option = New_Reuse(FormSelectOption,
+ select_option,
+ max_select);
+ a_select = New_Reuse(Anchor *, a_select,
+ max_select);
+ }
+ }
+#endif
+ a_form =
+ registerForm(buf, form, tag, currentLn(buf), pos);
+ if (a_textarea && textareanumber >= 0)
+ a_textarea[textareanumber] = a_form;
+#ifdef MENU_SELECT
+ if (a_select && selectnumber >= 0)
+ a_select[selectnumber] = a_form;
+#endif
+ if (a_form) {
+ a_form->hseq = hseq - 1;
+ a_form->y = currentLn(buf) - top;
+ a_form->rows = 1 + top + bottom;
+ if (!parsedtag_exists(tag, ATTR_NO_EFFECT))
+ effect |= PE_FORM;
+ break;
+ }
+ }
+ case HTML_N_INPUT_ALT:
+ effect &= ~PE_FORM;
+ if (a_form) {
+ a_form->end.line = currentLn(buf);
+ a_form->end.pos = pos;
+ if (a_form->start.line == a_form->end.line &&
+ a_form->start.pos == a_form->end.pos)
+ a_form->hseq = -1;
+ }
+ a_form = NULL;
+ break;
+ case HTML_MAP:
+ if (parsedtag_get_value(tag, ATTR_NAME, &p)) {
+ MapList *m = New(MapList);
+ m->name = Strnew_charp(p);
+ m->area = newGeneralList();
+ m->next = buf->maplist;
+ buf->maplist = m;
+ }
+ break;
+ case HTML_N_MAP:
+ /* nothing to do */
+ break;
+ case HTML_AREA:
+ if (buf->maplist == NULL) /* outside of <map>..</map> */
+ break;
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+ MapArea *a;
+ p = url_quote_conv(remove_space(p),
+ buf->document_charset);
+ t = NULL;
+ parsedtag_get_value(tag, ATTR_TARGET, &t);
+ q = "";
+ parsedtag_get_value(tag, ATTR_ALT, &q);
+ r = NULL;
+ s = NULL;
+#ifdef USE_IMAGE
+ parsedtag_get_value(tag, ATTR_SHAPE, &r);
+ parsedtag_get_value(tag, ATTR_COORDS, &s);
+#endif
+ a = newMapArea(p, t, q, r, s);
+ pushValue(buf->maplist->area, (void *)a);
+ }
+ break;
+ case HTML_FRAMESET:
+ frameset_sp++;
+ if (frameset_sp >= FRAMESTACK_SIZE)
+ break;
+ frameset_s[frameset_sp] = newFrameSet(tag);
+ if (frameset_s[frameset_sp] == NULL)
+ break;
+ if (frameset_sp == 0) {
+ if (buf->frameset == NULL) {
+ buf->frameset = frameset_s[frameset_sp];
+ }
+ else
+ pushFrameTree(&(buf->frameQ),
+ frameset_s[frameset_sp], NULL);
+ }
+ else
+ addFrameSetElement(frameset_s[frameset_sp - 1],
+ *(union frameset_element *)
+ &frameset_s[frameset_sp]);
+ break;
+ case HTML_N_FRAMESET:
+ if (frameset_sp >= 0)
+ frameset_sp--;
+ break;
+ case HTML_FRAME:
+ if (frameset_sp >= 0 && frameset_sp < FRAMESTACK_SIZE) {
+ union frameset_element element;
+
+ element.body = newFrame(tag, buf);
+ addFrameSetElement(frameset_s[frameset_sp], element);
+ }
+ break;
+ case HTML_BASE:
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+ p = url_quote_conv(remove_space(p),
+ buf->document_charset);
+ if (!buf->baseURL)
+ buf->baseURL = New(ParsedURL);
+ parseURL(p, buf->baseURL, NULL);
+ }
+ if (parsedtag_get_value(tag, ATTR_TARGET, &p))
+ buf->baseTarget =
+ url_quote_conv(p, buf->document_charset);
+ break;
+ case HTML_META:
+ p = q = NULL;
+ parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p);
+ parsedtag_get_value(tag, ATTR_CONTENT, &q);
+ if (p && q && !strcasecmp(p, "refresh") && MetaRefresh) {
+ Str tmp = NULL;
+ int refresh_interval = getMetaRefreshParam(q, &tmp);
+#ifdef USE_ALARM
+ if (tmp) {
+ p = url_quote_conv(remove_space(tmp->ptr),
+ buf->document_charset);
+ buf->event = setAlarmEvent(buf->event,
+ refresh_interval,
+ AL_IMPLICIT_ONCE,
+ FUNCNAME_gorURL, p);
+ }
+ else if (refresh_interval > 0)
+ buf->event = setAlarmEvent(buf->event,
+ refresh_interval,
+ AL_IMPLICIT,
+ FUNCNAME_reload, NULL);
+#else
+ if (tmp && refresh_interval == 0) {
+ p = url_quote_conv(remove_space(tmp->ptr),
+ buf->document_charset);
+ pushEvent(FUNCNAME_gorURL, p);
+ }
+#endif
+ }
+ break;
+ case HTML_INTERNAL:
+ internal = HTML_INTERNAL;
+ break;
+ case HTML_N_INTERNAL:
+ internal = HTML_N_INTERNAL;
+ break;
+ case HTML_FORM_INT:
+ if (parsedtag_get_value(tag, ATTR_FID, &form_id))
+ process_form_int(tag, form_id);
+ break;
+ case HTML_TEXTAREA_INT:
+ if (parsedtag_get_value(tag, ATTR_TEXTAREANUMBER,
+ &n_textarea)
+ && n_textarea < max_textarea) {
+ textarea_str[n_textarea] = Strnew();
+ }
+ else
+ n_textarea = -1;
+ break;
+ case HTML_N_TEXTAREA_INT:
+ if (n_textarea >= 0) {
+ FormItemList *item =
+ (FormItemList *)a_textarea[n_textarea]->url;
+ item->init_value = item->value =
+ textarea_str[n_textarea];
+ }
+ break;
+#ifdef MENU_SELECT
+ case HTML_SELECT_INT:
+ if (parsedtag_get_value(tag, ATTR_SELECTNUMBER, &n_select)
+ && n_select < max_select) {
+ select_option[n_select].first = NULL;
+ select_option[n_select].last = NULL;
+ }
+ else
+ n_select = -1;
+ break;
+ case HTML_N_SELECT_INT:
+ if (n_select >= 0) {
+ FormItemList *item =
+ (FormItemList *)a_select[n_select]->url;
+ item->select_option = select_option[n_select].first;
+ chooseSelectOption(item, item->select_option);
+ item->init_selected = item->selected;
+ item->init_value = item->value;
+ item->init_label = item->label;
+ }
+ break;
+ case HTML_OPTION_INT:
+ if (n_select >= 0) {
+ int selected;
+ q = "";
+ parsedtag_get_value(tag, ATTR_LABEL, &q);
+ p = q;
+ parsedtag_get_value(tag, ATTR_VALUE, &p);
+ selected = parsedtag_exists(tag, ATTR_SELECTED);
+ addSelectOption(&select_option[n_select],
+ Strnew_charp(p), Strnew_charp(q),
+ selected);
+ }
+ break;
+#endif
+ case HTML_TITLE_ALT:
+ if (parsedtag_get_value(tag, ATTR_TITLE, &p))
+ buf->buffername = html_unquote(p);
+ break;
+ case HTML_SYMBOL:
+ effect |= PC_SYMBOL;
+ if (parsedtag_get_value(tag, ATTR_TYPE, &p))
+ symbol = (char)atoi(p);
+ break;
+ case HTML_N_SYMBOL:
+ effect &= ~PC_SYMBOL;
+ break;
+ }
+#ifdef ID_EXT
+ id = NULL;
+ if (parsedtag_get_value(tag, ATTR_ID, &id)) {
+ id = url_quote_conv(id, buf->document_charset);
+ registerName(buf, id, currentLn(buf), pos);
+ }
+ if (renderFrameSet &&
+ parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) {
+ p = url_quote_conv(p, buf->document_charset);
+ if (!idFrame || strcmp(idFrame->body->name, p)) {
+ idFrame = search_frame(renderFrameSet, p);
+ if (idFrame && idFrame->body->attr != F_BODY)
+ idFrame = NULL;
+ }
+ }
+ if (id && idFrame)
+ idFrame->body->nameList =
+ putAnchor(idFrame->body->nameList, id, NULL,
+ (Anchor **)NULL, NULL, NULL, '\0',
+ currentLn(buf), pos);
+#endif /* ID_EXT */
+ }
+ }
+ /* end of processing for one line */
+ if (!internal)
+ addnewline(buf, outc, outp, NULL, pos, -1, nlines);
+ if (internal == HTML_N_INTERNAL)
+ internal = 0;
+ if (str != endp) {
+ line = Strsubstr(line, str - line->ptr, endp - str);
+ goto proc_again;
+ }
+ }
+#ifdef DEBUG
+ if (w3m_debug)
+ fclose(debug);
+#endif
+ for (form_id = 1; form_id <= form_max; form_id++)
+ forms[form_id]->next = forms[form_id - 1];
+ buf->formlist = (form_max >= 0) ? forms[form_max] : NULL;
+ if (n_textarea)
+ addMultirowsForm(buf, buf->formitem);
+#ifdef USE_IMAGE
+ addMultirowsImg(buf, buf->img);
+#endif
+}
+
+static void
+addLink(Buffer *buf, struct parsed_tag *tag)
+{
+ char *href = NULL, *title = NULL, *ctype = NULL, *rel = NULL, *rev = NULL;
+ char type = LINK_TYPE_NONE;
+ LinkList *l;
+
+ parsedtag_get_value(tag, ATTR_HREF, &href);
+ if (href)
+ href = url_quote_conv(remove_space(href), buf->document_charset);
+ parsedtag_get_value(tag, ATTR_TITLE, &title);
+ parsedtag_get_value(tag, ATTR_TYPE, &ctype);
+ parsedtag_get_value(tag, ATTR_REL, &rel);
+ if (rel != NULL) {
+ /* forward link type */
+ type = LINK_TYPE_REL;
+ if (title == NULL)
+ title = rel;
+ }
+ parsedtag_get_value(tag, ATTR_REV, &rev);
+ if (rev != NULL) {
+ /* reverse link type */
+ type = LINK_TYPE_REV;
+ if (title == NULL)
+ title = rev;
+ }
+
+ l = New(LinkList);
+ l->url = href;
+ l->title = title;
+ l->ctype = ctype;
+ l->type = type;
+ l->next = NULL;
+ if (buf->linklist) {
+ LinkList *i;
+ for (i = buf->linklist; i->next; i = i->next) ;
+ i->next = l;
+ }
+ else
+ buf->linklist = l;
+}
+
+void
+HTMLlineproc2(Buffer *buf, TextLineList *tl)
+{
+ _tl_lp2 = tl->first;
+ HTMLlineproc2body(buf, textlist_feed, -1);
+}
+
+static InputStream _file_lp2;
+
+static Str
+file_feed()
+{
+ Str s;
+ s = StrISgets(_file_lp2);
+ if (s->length == 0) {
+ ISclose(_file_lp2);
+ return NULL;
+ }
+ return s;
+}
+
+void
+HTMLlineproc3(Buffer *buf, InputStream stream)
+{
+ _file_lp2 = stream;
+ HTMLlineproc2body(buf, file_feed, -1);
+}
+
+static void
+proc_escape(struct readbuffer *obuf, char **str_return)
+{
+ char *str = *str_return, *estr;
+ int ech = getescapechar(str_return);
+ int width, n_add = *str_return - str;
+ Lineprop mode = PC_ASCII;
+
+ if (ech < 0) {
+ *str_return = str;
+ proc_mchar(obuf, obuf->flag & RB_SPECIAL, 1, str_return, PC_ASCII);
+ return;
+ }
+ mode = IS_CNTRL(ech) ? PC_CTRL : PC_ASCII;
+
+ estr = conv_entity(ech);
+ check_breakpoint(obuf, obuf->flag & RB_SPECIAL, estr);
+ width = get_strwidth(estr);
+ if (width == 1 && ech == (unsigned char)*estr &&
+ ech != '&' && ech != '<' && ech != '>') {
+ if (IS_CNTRL(ech))
+ mode = PC_CTRL;
+ push_charp(obuf, width, estr, mode);
+ }
+ else
+ push_nchars(obuf, width, str, n_add, mode);
+ set_prevchar(obuf->prevchar, estr, strlen(estr));
+ obuf->prev_ctype = mode;
+}
+
+
+static int
+need_flushline(struct html_feed_environ *h_env, struct readbuffer *obuf,
+ Lineprop mode)
+{
+ char ch;
+
+ if (obuf->flag & RB_PRE_INT) {
+ if (obuf->pos > h_env->limit)
+ return 1;
+ else
+ return 0;
+ }
+
+ ch = Strlastchar(obuf->line);
+ /* if (ch == ' ' && obuf->tag_sp > 0) */
+ if (ch == ' ')
+ return 0;
+
+ if (obuf->pos > h_env->limit)
+ return 1;
+
+ return 0;
+}
+
+static int
+table_width(struct html_feed_environ *h_env, int table_level)
+{
+ int width;
+ if (table_level < 0)
+ return 0;
+ width = tables[table_level]->total_width;
+ if (table_level > 0 || width > 0)
+ return width;
+ return h_env->limit - h_env->envs[h_env->envc].indent;
+}
+
+/* HTML processing first pass */
+void
+HTMLlineproc0(char *line, struct html_feed_environ *h_env, int internal)
+{
+ Lineprop mode;
+ int cmd;
+ struct readbuffer *obuf = h_env->obuf;
+ int indent, delta;
+ struct parsed_tag *tag;
+ Str tokbuf;
+ struct table *tbl = NULL;
+ struct table_mode *tbl_mode = NULL;
+ int tbl_width = 0;
+#ifdef USE_M17N
+ int is_hangul, prev_is_hangul = 0;
+#endif
+
+#ifdef DEBUG
+ if (w3m_debug) {
+ FILE *f = fopen("zzzproc1", "a");
+ fprintf(f, "%c%c%c%c",
+ (obuf->flag & RB_PREMODE) ? 'P' : ' ',
+ (obuf->table_level >= 0) ? 'T' : ' ',
+ (obuf->flag & RB_INTXTA) ? 'X' : ' ',
+ (obuf->flag & (RB_SCRIPT | RB_STYLE)) ? 'S' : ' ');
+ fprintf(f, "HTMLlineproc1(\"%s\",%d,%lx)\n", line, h_env->limit,
+ (unsigned long)h_env);
+ fclose(f);
+ }
+#endif
+
+ tokbuf = Strnew();
+
+ table_start:
+ if (obuf->table_level >= 0) {
+ int level = min(obuf->table_level, MAX_TABLE - 1);
+ tbl = tables[level];
+ tbl_mode = &table_mode[level];
+ tbl_width = table_width(h_env, level);
+ }
+
+ while (*line != '\0') {
+ char *str, *p;
+ int is_tag = FALSE;
+ int pre_mode = (obuf->table_level >= 0) ? tbl_mode->pre_mode :
+ obuf->flag;
+ int end_tag = (obuf->table_level >= 0) ? tbl_mode->end_tag :
+ obuf->end_tag;
+
+ if (*line == '<' || obuf->status != R_ST_NORMAL) {
+ /*
+ * Tag processing
+ */
+ if (obuf->status == R_ST_EOL)
+ obuf->status = R_ST_NORMAL;
+ else {
+ read_token(h_env->tagbuf, &line, &obuf->status,
+ pre_mode & RB_PREMODE, obuf->status != R_ST_NORMAL);
+ if (obuf->status != R_ST_NORMAL)
+ return;
+ }
+ if (h_env->tagbuf->length == 0)
+ continue;
+ str = h_env->tagbuf->ptr;
+ if (*str == '<') {
+ if (str[1] && REALLY_THE_BEGINNING_OF_A_TAG(str))
+ is_tag = TRUE;
+ else if (!(pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT |
+ RB_SCRIPT | RB_STYLE | RB_TITLE))) {
+ line = Strnew_m_charp(str + 1, line, NULL)->ptr;
+ str = "&lt;";
+ }
+ }
+ }
+ else {
+ read_token(tokbuf, &line, &obuf->status, pre_mode & RB_PREMODE, 0);
+ if (obuf->status != R_ST_NORMAL) /* R_ST_AMP ? */
+ obuf->status = R_ST_NORMAL;
+ str = tokbuf->ptr;
+ }
+
+ if (pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT | RB_SCRIPT |
+ RB_STYLE | RB_TITLE)) {
+ if (is_tag) {
+ p = str;
+ if ((tag = parse_tag(&p, internal))) {
+ if (tag->tagid == end_tag ||
+ (pre_mode & RB_INSELECT && tag->tagid == HTML_N_FORM)
+ || (pre_mode & RB_TITLE
+ && (tag->tagid == HTML_N_HEAD
+ || tag->tagid == HTML_BODY)))
+ goto proc_normal;
+ }
+ }
+ /* title */
+ if (pre_mode & RB_TITLE) {
+ feed_title(str);
+ continue;
+ }
+ /* select */
+ if (pre_mode & RB_INSELECT) {
+ if (obuf->table_level >= 0)
+ goto proc_normal;
+ feed_select(str);
+ continue;
+ }
+ if (is_tag) {
+ if (strncmp(str, "<!--", 4) && (p = strchr(str + 1, '<'))) {
+ str = Strnew_charp_n(str, p - str)->ptr;
+ line = Strnew_m_charp(p, line, NULL)->ptr;
+ }
+ is_tag = FALSE;
+ }
+ if (obuf->table_level >= 0)
+ goto proc_normal;
+ /* textarea */
+ if (pre_mode & RB_INTXTA) {
+ feed_textarea(str);
+ continue;
+ }
+ /* script */
+ if (pre_mode & RB_SCRIPT)
+ continue;
+ /* style */
+ if (pre_mode & RB_STYLE)
+ continue;
+ }
+
+ proc_normal:
+ if (obuf->table_level >= 0) {
+ /*
+ * within table: in <table>..</table>, all input tokens
+ * are fed to the table renderer, and then the renderer
+ * makes HTML output.
+ */
+ switch (feed_table(tbl, str, tbl_mode, tbl_width, internal)) {
+ case 0:
+ /* </table> tag */
+ obuf->table_level--;
+ if (obuf->table_level >= MAX_TABLE - 1)
+ continue;
+ end_table(tbl);
+ if (obuf->table_level >= 0) {
+ struct table *tbl0 = tables[obuf->table_level];
+ str = Sprintf("<table_alt tid=%d>", tbl0->ntable)->ptr;
+ pushTable(tbl0, tbl);
+ tbl = tbl0;
+ tbl_mode = &table_mode[obuf->table_level];
+ tbl_width = table_width(h_env, obuf->table_level);
+ feed_table(tbl, str, tbl_mode, tbl_width, TRUE);
+ continue;
+ /* continue to the next */
+ }
+ if (obuf->flag & RB_DEL)
+ continue;
+ /* all tables have been read */
+ if (tbl->vspace > 0 && !(obuf->flag & RB_IGNORE_P)) {
+ int indent = h_env->envs[h_env->envc].indent;
+ flushline(h_env, obuf, indent, 0, h_env->limit);
+ do_blankline(h_env, obuf, indent, 0, h_env->limit);
+ }
+ save_fonteffect(h_env, obuf);
+ renderTable(tbl, tbl_width, h_env);
+ restore_fonteffect(h_env, obuf);
+ obuf->flag &= ~RB_IGNORE_P;
+ if (tbl->vspace > 0) {
+ int indent = h_env->envs[h_env->envc].indent;
+ do_blankline(h_env, obuf, indent, 0, h_env->limit);
+ obuf->flag |= RB_IGNORE_P;
+ }
+ set_space_to_prevchar(obuf->prevchar);
+ continue;
+ case 1:
+ /* <table> tag */
+ break;
+ default:
+ continue;
+ }
+ }
+
+ if (is_tag) {
+/*** Beginning of a new tag ***/
+ if ((tag = parse_tag(&str, internal)))
+ cmd = tag->tagid;
+ else
+ continue;
+ /* process tags */
+ if (HTMLtagproc1(tag, h_env) == 0) {
+ /* preserve the tag for second-stage processing */
+ if (parsedtag_need_reconstruct(tag))
+ h_env->tagbuf = parsedtag2str(tag);
+ push_tag(obuf, h_env->tagbuf->ptr, cmd);
+ }
+#ifdef ID_EXT
+ else {
+ process_idattr(obuf, cmd, tag);
+ }
+#endif /* ID_EXT */
+ obuf->bp.init_flag = 1;
+ clear_ignore_p_flag(cmd, obuf);
+ if (cmd == HTML_TABLE)
+ goto table_start;
+ else
+ continue;
+ }
+
+ if (obuf->flag & (RB_DEL | RB_S))
+ continue;
+ while (*str) {
+ mode = get_mctype(str);
+ delta = get_mcwidth(str);
+ if (obuf->flag & (RB_SPECIAL & ~RB_NOBR)) {
+ char ch = *str;
+ if (!(obuf->flag & RB_PLAIN) && (*str == '&')) {
+ char *p = str;
+ int ech = getescapechar(&p);
+ if (ech == '\n' || ech == '\r') {
+ ch = '\n';
+ str = p - 1;
+ }
+ else if (ech == '\t') {
+ ch = '\t';
+ str = p - 1;
+ }
+ }
+ if (ch != '\n')
+ obuf->flag &= ~RB_IGNORE_P;
+ if (ch == '\n') {
+ str++;
+ if (obuf->flag & RB_IGNORE_P) {
+ obuf->flag &= ~RB_IGNORE_P;
+ continue;
+ }
+ if (obuf->flag & RB_PRE_INT)
+ PUSH(' ');
+ else
+ flushline(h_env, obuf, h_env->envs[h_env->envc].indent,
+ 1, h_env->limit);
+ }
+ else if (ch == '\t') {
+ do {
+ PUSH(' ');
+ } while ((h_env->envs[h_env->envc].indent + obuf->pos)
+ % Tabstop != 0);
+ str++;
+ }
+ else if (obuf->flag & RB_PLAIN) {
+ char *p = html_quote_char(*str);
+ if (p) {
+ push_charp(obuf, 1, p, PC_ASCII);
+ str++;
+ }
+ else {
+ proc_mchar(obuf, 1, delta, &str, mode);
+ }
+ }
+ else {
+ if (*str == '&')
+ proc_escape(obuf, &str);
+ else
+ proc_mchar(obuf, 1, delta, &str, mode);
+ }
+ if (obuf->flag & (RB_SPECIAL & ~RB_PRE_INT))
+ continue;
+ }
+ else {
+ if (!IS_SPACE(*str))
+ obuf->flag &= ~RB_IGNORE_P;
+ if ((mode == PC_ASCII || mode == PC_CTRL) && IS_SPACE(*str)) {
+ if (*obuf->prevchar->ptr != ' ') {
+ PUSH(' ');
+ }
+ str++;
+ }
+ else {
+#ifdef USE_M17N
+ if (mode == PC_KANJI1)
+ is_hangul = wtf_is_hangul((wc_uchar *) str);
+ else
+ is_hangul = 0;
+ if (mode == PC_KANJI1 &&
+ !is_hangul && !prev_is_hangul &&
+ obuf->pos > h_env->envs[h_env->envc].indent &&
+ Strlastchar(obuf->line) == ' ') {
+ while (obuf->line->length >= 2 &&
+ !strncmp(obuf->line->ptr + obuf->line->length -
+ 2, " ", 2)
+ && obuf->pos >= h_env->envs[h_env->envc].indent) {
+ Strshrink(obuf->line, 1);
+ obuf->pos--;
+ }
+ if (obuf->line->length >= 3 &&
+ obuf->prev_ctype == PC_KANJI1 &&
+ Strlastchar(obuf->line) == ' ' &&
+ obuf->pos >= h_env->envs[h_env->envc].indent) {
+ Strshrink(obuf->line, 1);
+ obuf->pos--;
+ }
+ }
+ prev_is_hangul = is_hangul;
+#endif
+ if (*str == '&')
+ proc_escape(obuf, &str);
+ else
+ proc_mchar(obuf, obuf->flag & RB_SPECIAL, delta, &str,
+ mode);
+ }
+ }
+ if (need_flushline(h_env, obuf, mode)) {
+ char *bp = obuf->line->ptr + obuf->bp.len;
+ char *tp = bp - obuf->bp.tlen;
+ int i = 0;
+
+ if (tp > obuf->line->ptr && tp[-1] == ' ')
+ i = 1;
+
+ indent = h_env->envs[h_env->envc].indent;
+ if (obuf->bp.pos - i > indent) {
+ Str line;
+ append_tags(obuf);
+ line = Strnew_charp(bp);
+ Strshrink(obuf->line, obuf->line->length - obuf->bp.len);
+#ifdef FORMAT_NICE
+ if (obuf->pos - i > h_env->limit)
+ obuf->flag |= RB_FILL;
+#endif /* FORMAT_NICE */
+ back_to_breakpoint(obuf);
+ flushline(h_env, obuf, indent, 0, h_env->limit);
+#ifdef FORMAT_NICE
+ obuf->flag &= ~RB_FILL;
+#endif /* FORMAT_NICE */
+ HTMLlineproc1(line->ptr, h_env);
+ }
+ }
+ }
+ }
+ if (!(obuf->flag & (RB_SPECIAL | RB_INTXTA | RB_INSELECT))) {
+ char *tp;
+ int i = 0;
+
+ if (obuf->bp.pos == obuf->pos) {
+ tp = &obuf->line->ptr[obuf->bp.len - obuf->bp.tlen];
+ }
+ else {
+ tp = &obuf->line->ptr[obuf->line->length];
+ }
+
+ if (tp > obuf->line->ptr && tp[-1] == ' ')
+ i = 1;
+ indent = h_env->envs[h_env->envc].indent;
+ if (obuf->pos - i > h_env->limit) {
+#ifdef FORMAT_NICE
+ obuf->flag |= RB_FILL;
+#endif /* FORMAT_NICE */
+ flushline(h_env, obuf, indent, 0, h_env->limit);
+#ifdef FORMAT_NICE
+ obuf->flag &= ~RB_FILL;
+#endif /* FORMAT_NICE */
+ }
+ }
+}
+
+extern char *NullLine;
+extern Lineprop NullProp[];
+
+#ifndef USE_ANSI_COLOR
+#define addnewline2(a,b,c,d,e,f) _addnewline2(a,b,c,e,f)
+#endif
+static void
+addnewline2(Buffer *buf, char *line, Lineprop *prop, Linecolor *color, int pos,
+ int nlines)
+{
+ Line *l;
+ l = New(Line);
+ l->next = NULL;
+ l->lineBuf = line;
+ l->propBuf = prop;
+#ifdef USE_ANSI_COLOR
+ l->colorBuf = color;
+#endif
+ l->len = pos;
+ l->width = -1;
+ l->size = pos;
+ l->bpos = 0;
+ l->bwidth = 0;
+ l->prev = buf->currentLine;
+ if (buf->currentLine) {
+ l->next = buf->currentLine->next;
+ buf->currentLine->next = l;
+ }
+ else
+ l->next = NULL;
+ if (buf->lastLine == NULL || buf->lastLine == buf->currentLine)
+ buf->lastLine = l;
+ buf->currentLine = l;
+ if (buf->firstLine == NULL)
+ buf->firstLine = l;
+ l->linenumber = ++buf->allLine;
+ if (nlines < 0) {
+ /* l->real_linenumber = l->linenumber; */
+ l->real_linenumber = 0;
+ }
+ else {
+ l->real_linenumber = nlines;
+ }
+ l = NULL;
+}
+
+static void
+addnewline(Buffer *buf, char *line, Lineprop *prop, Linecolor *color, int pos,
+ int width, int nlines)
+{
+ char *s;
+ Lineprop *p;
+#ifdef USE_ANSI_COLOR
+ Linecolor *c;
+#endif
+ Line *l;
+ int i, bpos, bwidth;
+
+ if (pos > 0) {
+ s = allocStr(line, pos);
+ p = NewAtom_N(Lineprop, pos);
+ bcopy((void *)prop, (void *)p, pos * sizeof(Lineprop));
+ }
+ else {
+ s = NullLine;
+ p = NullProp;
+ }
+#ifdef USE_ANSI_COLOR
+ if (pos > 0 && color) {
+ c = NewAtom_N(Linecolor, pos);
+ bcopy((void *)color, (void *)c, pos * sizeof(Linecolor));
+ }
+ else {
+ c = NULL;
+ }
+#endif
+ addnewline2(buf, s, p, c, pos, nlines);
+ if (pos <= 0 || width <= 0)
+ return;
+ bpos = 0;
+ bwidth = 0;
+ while (1) {
+ l = buf->currentLine;
+ l->bpos = bpos;
+ l->bwidth = bwidth;
+ i = columnLen(l, width);
+ if (i == 0) {
+ i++;
+#ifdef USE_M17N
+ while (i < l->len && p[i] & PC_WCHAR2)
+ i++;
+#endif
+ }
+ l->len = i;
+ l->width = COLPOS(l, l->len);
+ if (pos <= i)
+ return;
+ bpos += l->len;
+ bwidth += l->width;
+ s += i;
+ p += i;
+#ifdef USE_ANSI_COLOR
+ if (c)
+ c += i;
+#endif
+ pos -= i;
+ addnewline2(buf, s, p, c, pos, nlines);
+ }
+}
+
+/*
+ * loadHTMLBuffer: read file and make new buffer
+ */
+Buffer *
+loadHTMLBuffer(URLFile *f, Buffer *newBuf)
+{
+ FILE *src = NULL;
+ Str tmp;
+
+ if (newBuf == NULL)
+ newBuf = newBuffer(INIT_BUFFER_WIDTH);
+ if (newBuf->sourcefile == NULL &&
+ (f->scheme != SCM_LOCAL || newBuf->mailcap)) {
+ tmp = tmpfname(TMPF_SRC, ".html");
+ src = fopen(tmp->ptr, "w");
+ if (src)
+ newBuf->sourcefile = tmp->ptr;
+ }
+
+ loadHTMLstream(f, newBuf, src, newBuf->bufferprop & BP_FRAME);
+
+ newBuf->topLine = newBuf->firstLine;
+ newBuf->lastLine = newBuf->currentLine;
+ newBuf->currentLine = newBuf->firstLine;
+ if (n_textarea)
+ formResetBuffer(newBuf, newBuf->formitem);
+ if (src)
+ fclose(src);
+
+ return newBuf;
+}
+
+static char *_size_unit[] = { "b", "kb", "Mb", "Gb", "Tb",
+ "Pb", "Eb", "Zb", "Bb", "Yb", NULL
+};
+
+char *
+convert_size(clen_t size, int usefloat)
+{
+ float csize;
+ int sizepos = 0;
+ char **sizes = _size_unit;
+
+ csize = (float)size;
+ while (csize >= 999.495 && sizes[sizepos + 1]) {
+ csize = csize / 1024.0;
+ sizepos++;
+ }
+ return Sprintf(usefloat ? "%.3g%s" : "%.0f%s",
+ floor(csize * 100.0 + 0.5) / 100.0, sizes[sizepos])->ptr;
+}
+
+char *
+convert_size2(clen_t size1, clen_t size2, int usefloat)
+{
+ char **sizes = _size_unit;
+ float csize, factor = 1;
+ int sizepos = 0;
+
+ csize = (float)((size1 > size2) ? size1 : size2);
+ while (csize / factor >= 999.495 && sizes[sizepos + 1]) {
+ factor *= 1024.0;
+ sizepos++;
+ }
+ return Sprintf(usefloat ? "%.3g/%.3g%s" : "%.0f/%.0f%s",
+ floor(size1 / factor * 100.0 + 0.5) / 100.0,
+ floor(size2 / factor * 100.0 + 0.5) / 100.0,
+ sizes[sizepos])->ptr;
+}
+
+void
+showProgress(clen_t * linelen, clen_t * trbyte)
+{
+ int i, j, rate, duration, eta, pos;
+ static time_t last_time, start_time;
+ time_t cur_time;
+ Str messages;
+ char *fmtrbyte, *fmrate;
+
+ if (!fmInitialized)
+ return;
+
+ if (*linelen < 1024)
+ return;
+ if (current_content_length > 0) {
+ double ratio;
+ cur_time = time(0);
+ if (*trbyte == 0) {
+ move(LASTLINE, 0);
+ clrtoeolx();
+ start_time = cur_time;
+ }
+ *trbyte += *linelen;
+ *linelen = 0;
+ if (cur_time == last_time)
+ return;
+ last_time = cur_time;
+ move(LASTLINE, 0);
+ ratio = 100.0 * (*trbyte) / current_content_length;
+ fmtrbyte = convert_size2(*trbyte, current_content_length, 1);
+ duration = cur_time - start_time;
+ if (duration) {
+ rate = *trbyte / duration;
+ fmrate = convert_size(rate, 1);
+ eta = rate ? (current_content_length - *trbyte) / rate : -1;
+ messages = Sprintf("%11s %3.0f%% "
+ "%7s/s "
+ "eta %02d:%02d:%02d ",
+ fmtrbyte, ratio,
+ fmrate,
+ eta / (60 * 60), (eta / 60) % 60, eta % 60);
+ }
+ else {
+ messages = Sprintf("%11s %3.0f%% ",
+ fmtrbyte, ratio);
+ }
+ addstr(messages->ptr);
+ pos = 42;
+ i = pos + (COLS - pos - 1) * (*trbyte) / current_content_length;
+ move(LASTLINE, pos);
+ standout();
+ addch(' ');
+ for (j = pos + 1; j <= i; j++)
+ addch('|');
+ standend();
+ /* no_clrtoeol(); */
+ refresh();
+ }
+ else {
+ cur_time = time(0);
+ if (*trbyte == 0) {
+ move(LASTLINE, 0);
+ clrtoeolx();
+ start_time = cur_time;
+ }
+ *trbyte += *linelen;
+ *linelen = 0;
+ if (cur_time == last_time)
+ return;
+ last_time = cur_time;
+ move(LASTLINE, 0);
+ fmtrbyte = convert_size(*trbyte, 1);
+ duration = cur_time - start_time;
+ if (duration) {
+ fmrate = convert_size(*trbyte / duration, 1);
+ messages = Sprintf("%7s loaded %7s/s", fmtrbyte, fmrate);
+ }
+ else {
+ messages = Sprintf("%7s loaded", fmtrbyte);
+ }
+ message(messages->ptr, 0, 0);
+ refresh();
+ }
+}
+
+void
+init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf,
+ struct environment *envs, int nenv, TextLineList *buf,
+ int limit, int indent)
+{
+ envs[0].indent = indent;
+
+ obuf->line = Strnew();
+ obuf->cprop = 0;
+ obuf->pos = 0;
+ obuf->prevchar = Strnew_size(8);
+ set_space_to_prevchar(obuf->prevchar);
+ obuf->flag = RB_IGNORE_P;
+ obuf->flag_sp = 0;
+ obuf->status = R_ST_NORMAL;
+ obuf->table_level = -1;
+ obuf->nobr_level = 0;
+ bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
+ obuf->img_alt = 0;
+ obuf->in_bold = 0;
+ obuf->in_under = 0;
+ obuf->prev_ctype = PC_ASCII;
+ obuf->tag_sp = 0;
+ obuf->fontstat_sp = 0;
+ obuf->top_margin = 0;
+ obuf->bottom_margin = 0;
+ obuf->bp.init_flag = 1;
+ set_breakpoint(obuf, 0);
+
+ h_env->buf = buf;
+ h_env->f = NULL;
+ h_env->obuf = obuf;
+ h_env->tagbuf = Strnew();
+ h_env->limit = limit;
+ h_env->maxlimit = 0;
+ h_env->envs = envs;
+ h_env->nenv = nenv;
+ h_env->envc = 0;
+ h_env->envc_real = 0;
+ h_env->title = NULL;
+ h_env->blank_lines = 0;
+}
+
+void
+completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf)
+{
+ close_anchor(h_env, obuf);
+ if (obuf->img_alt) {
+ push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
+ obuf->img_alt = NULL;
+ }
+ if (obuf->in_bold) {
+ push_tag(obuf, "</b>", HTML_N_B);
+ obuf->in_bold = 0;
+ }
+ if (obuf->in_under) {
+ push_tag(obuf, "</u>", HTML_N_U);
+ obuf->in_under = 0;
+ }
+ if (obuf->flag & RB_INTXTA)
+ HTMLlineproc1("</textarea>", h_env);
+ /* for unbalanced select tag */
+ if (obuf->flag & RB_INSELECT)
+ HTMLlineproc1("</select>", h_env);
+ if (obuf->flag & RB_TITLE)
+ HTMLlineproc1("</title>", h_env);
+
+ /* for unbalanced table tag */
+ if (obuf->table_level >= MAX_TABLE)
+ obuf->table_level = MAX_TABLE - 1;
+
+ while (obuf->table_level >= 0) {
+ table_mode[obuf->table_level].pre_mode
+ &= ~(TBLM_SCRIPT | TBLM_STYLE | TBLM_PLAIN);
+ HTMLlineproc1("</table>", h_env);
+ }
+}
+
+static void
+print_internal_information(struct html_feed_environ *henv)
+{
+ int i;
+ Str s;
+ TextLineList *tl = newTextLineList();
+
+ s = Strnew_charp("<internal>");
+ pushTextLine(tl, newTextLine(s, 0));
+ if (henv->title) {
+ s = Strnew_m_charp("<title_alt title=\"",
+ html_quote(henv->title), "\">", NULL);
+ pushTextLine(tl, newTextLine(s, 0));
+ }
+#if 0
+ if (form_max >= 0) {
+ FormList *fp;
+ for (i = 0; i <= form_max; i++) {
+ fp = forms[i];
+ s = Sprintf("<form_int fid=\"%d\" action=\"%s\" method=\"%s\"",
+ i, html_quote(fp->action->ptr),
+ (fp->method == FORM_METHOD_POST) ? "post"
+ : ((fp->method ==
+ FORM_METHOD_INTERNAL) ? "internal" : "get"));
+ if (fp->target)
+ Strcat(s, Sprintf(" target=\"%s\"", html_quote(fp->target)));
+ if (fp->enctype == FORM_ENCTYPE_MULTIPART)
+ Strcat_charp(s, " enctype=\"multipart/form-data\"");
+#ifdef USE_M17N
+ if (fp->charset)
+ Strcat(s, Sprintf(" accept-charset=\"%s\"",
+ html_quote(fp->charset)));
+#endif
+ Strcat_charp(s, ">");
+ pushTextLine(tl, newTextLine(s, 0));
+ }
+ }
+#endif
+#ifdef MENU_SELECT
+ if (n_select > 0) {
+ FormSelectOptionItem *ip;
+ for (i = 0; i < n_select; i++) {
+ s = Sprintf("<select_int selectnumber=%d>", i);
+ pushTextLine(tl, newTextLine(s, 0));
+ for (ip = select_option[i].first; ip; ip = ip->next) {
+ s = Sprintf("<option_int value=\"%s\" label=\"%s\"%s>",
+ html_quote(ip->value ? ip->value->ptr :
+ ip->label->ptr),
+ html_quote(ip->label->ptr),
+ ip->checked ? " selected" : "");
+ pushTextLine(tl, newTextLine(s, 0));
+ }
+ s = Strnew_charp("</select_int>");
+ pushTextLine(tl, newTextLine(s, 0));
+ }
+ }
+#endif /* MENU_SELECT */
+ if (n_textarea > 0) {
+ for (i = 0; i < n_textarea; i++) {
+ s = Sprintf("<textarea_int textareanumber=%d>", i);
+ pushTextLine(tl, newTextLine(s, 0));
+ s = Strnew_charp(html_quote(textarea_str[i]->ptr));
+ Strcat_charp(s, "</textarea_int>");
+ pushTextLine(tl, newTextLine(s, 0));
+ }
+ }
+ s = Strnew_charp("</internal>");
+ pushTextLine(tl, newTextLine(s, 0));
+
+ if (henv->buf)
+ appendTextLineList(henv->buf, tl);
+ else if (henv->f) {
+ TextLineListItem *p;
+ for (p = tl->first; p; p = p->next)
+ fprintf(henv->f, "%s\n", Str_conv_to_halfdump(p->ptr->line)->ptr);
+ }
+}
+
+void
+loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
+{
+ struct environment envs[MAX_ENV_LEVEL];
+ clen_t linelen = 0;
+ clen_t trbyte = 0;
+ Str lineBuf2 = Strnew();
+#ifdef USE_M17N
+ wc_ces charset = WC_CES_US_ASCII;
+ wc_ces volatile doc_charset = DocumentCharset;
+#endif
+ struct html_feed_environ htmlenv1;
+ struct readbuffer obuf;
+#ifdef USE_IMAGE
+ int volatile image_flag;
+#endif
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+
+#ifdef USE_M17N
+ if (fmInitialized && graph_ok()) {
+ symbol_width = symbol_width0 = 1;
+ }
+ else {
+ symbol_width0 = 0;
+ get_symbol(DisplayCharset, &symbol_width0);
+ symbol_width = WcOption.use_wide ? symbol_width0 : 1;
+ }
+#else
+ symbol_width = symbol_width0 = 1;
+#endif
+
+ cur_title = NULL;
+ n_textarea = 0;
+ cur_textarea = NULL;
+ max_textarea = MAX_TEXTAREA;
+ textarea_str = New_N(Str, max_textarea);
+#ifdef MENU_SELECT
+ n_select = 0;
+ max_select = MAX_SELECT;
+ select_option = New_N(FormSelectOption, max_select);
+#endif /* MENU_SELECT */
+ cur_select = NULL;
+ form_sp = -1;
+ form_max = -1;
+ forms_size = 0;
+ forms = NULL;
+ cur_hseq = 1;
+#ifdef USE_IMAGE
+ cur_iseq = 1;
+ if (newBuf->image_flag)
+ image_flag = newBuf->image_flag;
+ else if (activeImage && displayImage && autoImage)
+ image_flag = IMG_FLAG_AUTO;
+ else
+ image_flag = IMG_FLAG_SKIP;
+ if (newBuf->currentURL.file)
+ cur_baseURL = baseURL(newBuf);
+#endif
+
+ if (w3m_halfload) {
+ newBuf->buffername = "---";
+#ifdef USE_M17N
+ newBuf->document_charset = InnerCharset;
+#endif
+ max_textarea = 0;
+#ifdef MENU_SELECT
+ max_select = 0;
+#endif
+ HTMLlineproc3(newBuf, f->stream);
+ w3m_halfload = FALSE;
+ return;
+ }
+
+ init_henv(&htmlenv1, &obuf, envs, MAX_ENV_LEVEL, NULL, newBuf->width, 0);
+
+ if (w3m_halfdump)
+ htmlenv1.f = stdout;
+ else
+ htmlenv1.buf = newTextLineList();
+
+ if (SETJMP(AbortLoading) != 0) {
+ HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1);
+ goto phase2;
+ }
+ TRAP_ON;
+
+#ifdef USE_M17N
+ if (newBuf != NULL) {
+ if (newBuf->bufferprop & BP_FRAME)
+ charset = InnerCharset;
+ else if (newBuf->document_charset)
+ charset = doc_charset = newBuf->document_charset;
+ }
+ if (content_charset && UseContentCharset)
+ doc_charset = content_charset;
+ meta_charset = 0;
+#endif
+#if 0
+ do_blankline(&htmlenv1, &obuf, 0, 0, htmlenv1.limit);
+ obuf.flag = RB_IGNORE_P;
+#endif
+ if (IStype(f->stream) != IST_ENCODED)
+ f->stream = newEncodedStream(f->stream, f->encoding);
+ while ((lineBuf2 = StrmyUFgets(f))->length) {
+#ifdef USE_NNTP
+ if (f->scheme == SCM_NEWS && lineBuf2->ptr[0] == '.') {
+ Strshrinkfirst(lineBuf2, 1);
+ if (lineBuf2->ptr[0] == '\n' || lineBuf2->ptr[0] == '\r' ||
+ lineBuf2->ptr[0] == '\0') {
+ /*
+ * iseos(f->stream) = TRUE;
+ */
+ break;
+ }
+ }
+#endif /* USE_NNTP */
+ if (src)
+ Strfputs(lineBuf2, src);
+ linelen += lineBuf2->length;
+ if (w3m_dump & DUMP_EXTRA)
+ printf("W3m-in-progress: %s?n", convert_size2(linelen, current_content_length, TRUE));
+ if (w3m_dump & DUMP_SOURCE)
+ continue;
+ showProgress(&linelen, &trbyte);
+ /*
+ * if (frame_source)
+ * continue;
+ */
+#ifdef USE_M17N
+ if (meta_charset) { /* <META> */
+ if (content_charset == 0 && UseContentCharset) {
+ doc_charset = meta_charset;
+ charset = WC_CES_US_ASCII;
+ }
+ meta_charset = 0;
+ }
+#endif
+ lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset);
+#if defined(USE_M17N) && defined(USE_IMAGE)
+ cur_document_charset = charset;
+#endif
+ HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal);
+ }
+ if (obuf.status != R_ST_NORMAL) {
+ obuf.status = R_ST_EOL;
+ HTMLlineproc0("\n", &htmlenv1, internal);
+ }
+ obuf.status = R_ST_NORMAL;
+ completeHTMLstream(&htmlenv1, &obuf);
+ flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit);
+ if (htmlenv1.title)
+ newBuf->buffername = htmlenv1.title;
+ if (w3m_halfdump) {
+ TRAP_OFF;
+ print_internal_information(&htmlenv1);
+ return;
+ }
+ if (w3m_backend) {
+ TRAP_OFF;
+ print_internal_information(&htmlenv1);
+ backend_halfdump_buf = htmlenv1.buf;
+ return;
+ }
+ phase2:
+ newBuf->trbyte = trbyte + linelen;
+ TRAP_OFF;
+#ifdef USE_M17N
+ if (!(newBuf->bufferprop & BP_FRAME))
+ newBuf->document_charset = charset;
+#endif
+#ifdef USE_IMAGE
+ newBuf->image_flag = image_flag;
+#endif
+ HTMLlineproc2(newBuf, htmlenv1.buf);
+}
+
+/*
+ * loadHTMLString: read string and make new buffer
+ */
+Buffer *
+loadHTMLString(Str page)
+{
+ URLFile f;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ Buffer *newBuf;
+
+ newBuf = newBuffer(INIT_BUFFER_WIDTH);
+ if (SETJMP(AbortLoading) != 0) {
+ TRAP_OFF;
+ discardBuffer(newBuf);
+ return NULL;
+ }
+ TRAP_ON;
+
+ init_stream(&f, SCM_LOCAL, newStrStream(page));
+
+#ifdef USE_M17N
+ newBuf->document_charset = InnerCharset;
+#endif
+ loadHTMLstream(&f, newBuf, NULL, TRUE);
+#ifdef USE_M17N
+ newBuf->document_charset = WC_CES_US_ASCII;
+#endif
+
+ TRAP_OFF;
+ newBuf->topLine = newBuf->firstLine;
+ newBuf->lastLine = newBuf->currentLine;
+ newBuf->currentLine = newBuf->firstLine;
+ newBuf->type = "text/html";
+ newBuf->real_type = newBuf->type;
+ if (n_textarea)
+ formResetBuffer(newBuf, newBuf->formitem);
+ return newBuf;
+}
+
+#ifdef USE_GOPHER
+
+/*
+ * loadGopherDir: get gopher directory
+ */
+Str
+loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)
+{
+ Str volatile tmp;
+ Str lbuf, name, file, host, port;
+ char *volatile p, *volatile q;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+#ifdef USE_M17N
+ wc_ces doc_charset = DocumentCharset;
+#endif
+
+ tmp = parsedURL2Str(pu);
+ p = html_quote(tmp->ptr);
+ tmp =
+ convertLine(NULL, Strnew_charp(file_unquote(tmp->ptr)), RAW_MODE,
+ charset, doc_charset);
+ q = html_quote(tmp->ptr);
+ tmp = Strnew_m_charp("<html>\n<head>\n<base href=\"", p, "\">\n<title>", q,
+ "</title>\n</head>\n<body>\n<h1>Index of ", q,
+ "</h1>\n<table>\n", NULL);
+
+ if (SETJMP(AbortLoading) != 0)
+ goto gopher_end;
+ TRAP_ON;
+
+ while (1) {
+ if (lbuf = StrUFgets(uf), lbuf->length == 0)
+ break;
+ if (lbuf->ptr[0] == '.' &&
+ (lbuf->ptr[1] == '\n' || lbuf->ptr[1] == '\r'))
+ break;
+ lbuf = convertLine(uf, lbuf, HTML_MODE, charset, doc_charset);
+ p = lbuf->ptr;
+ for (q = p; *q && *q != '\t'; q++) ;
+ name = Strnew_charp_n(p, q - p);
+ if (!*q)
+ continue;
+ p = q + 1;
+ for (q = p; *q && *q != '\t'; q++) ;
+ file = Strnew_charp_n(p, q - p);
+ if (!*q)
+ continue;
+ p = q + 1;
+ for (q = p; *q && *q != '\t'; q++) ;
+ host = Strnew_charp_n(p, q - p);
+ if (!*q)
+ continue;
+ p = q + 1;
+ for (q = p; *q && *q != '\t' && *q != '\r' && *q != '\n'; q++) ;
+ port = Strnew_charp_n(p, q - p);
+
+ switch (name->ptr[0]) {
+ case '0':
+ p = "[text file]";
+ break;
+ case '1':
+ p = "[directory]";
+ break;
+ case 'm':
+ p = "[message]";
+ break;
+ case 's':
+ p = "[sound]";
+ break;
+ case 'g':
+ p = "[gif]";
+ break;
+ case 'h':
+ p = "[HTML]";
+ break;
+ default:
+ p = "[unsupported]";
+ break;
+ }
+ q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
+ "/", file->ptr, NULL)->ptr;
+ Strcat_m_charp(tmp, "<a href=\"",
+ html_quote(url_quote_conv(q, *charset)),
+ "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
+ }
+
+ gopher_end:
+ TRAP_OFF;
+
+ Strcat_charp(tmp, "</table>\n</body>\n</html>\n");
+ return tmp;
+}
+#endif /* USE_GOPHER */
+
+/*
+ * loadBuffer: read file and make new buffer
+ */
+Buffer *
+loadBuffer(URLFile *uf, Buffer *volatile newBuf)
+{
+ FILE *volatile src = NULL;
+#ifdef USE_M17N
+ wc_ces charset = WC_CES_US_ASCII;
+ wc_ces volatile doc_charset = DocumentCharset;
+#endif
+ Str lineBuf2;
+ volatile char pre_lbuf = '\0';
+ int nlines;
+ Str tmpf;
+ clen_t linelen = 0, trbyte = 0;
+ Lineprop *propBuffer = NULL;
+#ifdef USE_ANSI_COLOR
+ Linecolor *colorBuffer = NULL;
+#endif
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+
+ if (newBuf == NULL)
+ newBuf = newBuffer(INIT_BUFFER_WIDTH);
+ lineBuf2 = Strnew();
+
+ if (SETJMP(AbortLoading) != 0) {
+ goto _end;
+ }
+ TRAP_ON;
+
+ if (newBuf->sourcefile == NULL &&
+ (uf->scheme != SCM_LOCAL || newBuf->mailcap)) {
+ tmpf = tmpfname(TMPF_SRC, NULL);
+ src = fopen(tmpf->ptr, "w");
+ if (src)
+ newBuf->sourcefile = tmpf->ptr;
+ }
+#ifdef USE_M17N
+ if (newBuf->document_charset)
+ charset = doc_charset = newBuf->document_charset;
+ if (content_charset && UseContentCharset)
+ doc_charset = content_charset;
+#endif
+
+ nlines = 0;
+ if (IStype(uf->stream) != IST_ENCODED)
+ uf->stream = newEncodedStream(uf->stream, uf->encoding);
+ while ((lineBuf2 = StrmyISgets(uf->stream))->length) {
+#ifdef USE_NNTP
+ if (uf->scheme == SCM_NEWS && lineBuf2->ptr[0] == '.') {
+ Strshrinkfirst(lineBuf2, 1);
+ if (lineBuf2->ptr[0] == '\n' || lineBuf2->ptr[0] == '\r' ||
+ lineBuf2->ptr[0] == '\0') {
+ /*
+ * iseos(uf->stream) = TRUE;
+ */
+ break;
+ }
+ }
+#endif /* USE_NNTP */
+ if (src)
+ Strfputs(lineBuf2, src);
+ linelen += lineBuf2->length;
+ if (w3m_dump & DUMP_SOURCE)
+ continue;
+ showProgress(&linelen, &trbyte);
+ if (frame_source)
+ continue;
+ lineBuf2 =
+ convertLine(uf, lineBuf2, PAGER_MODE, &charset, doc_charset);
+ if (squeezeBlankLine) {
+ if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') {
+ ++nlines;
+ continue;
+ }
+ pre_lbuf = lineBuf2->ptr[0];
+ }
+ ++nlines;
+ Strchop(lineBuf2);
+ lineBuf2 = checkType(lineBuf2, &propBuffer, NULL);
+ addnewline(newBuf, lineBuf2->ptr, propBuffer, colorBuffer,
+ lineBuf2->length, FOLD_BUFFER_WIDTH, nlines);
+ }
+ _end:
+ TRAP_OFF;
+ newBuf->topLine = newBuf->firstLine;
+ newBuf->lastLine = newBuf->currentLine;
+ newBuf->currentLine = newBuf->firstLine;
+ newBuf->trbyte = trbyte + linelen;
+#ifdef USE_M17N
+ newBuf->document_charset = charset;
+#endif
+ if (src)
+ fclose(src);
+
+ return newBuf;
+}
+
+#ifdef USE_IMAGE
+Buffer *
+loadImageBuffer(URLFile *uf, Buffer *newBuf)
+{
+ Image image;
+ ImageCache *cache;
+ Str tmp, tmpf;
+ FILE *src = NULL;
+ URLFile f;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ struct stat st;
+
+ loadImage(newBuf, IMG_FLAG_STOP);
+ image.url = uf->url;
+ image.ext = uf->ext;
+ image.width = -1;
+ image.height = -1;
+ image.cache = NULL;
+ cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO);
+ if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED &&
+ !stat(cache->file, &st))
+ goto image_buffer;
+
+ TRAP_ON;
+ if (IStype(uf->stream) != IST_ENCODED)
+ uf->stream = newEncodedStream(uf->stream, uf->encoding);
+ if (save2tmp(*uf, cache->file) < 0) {
+ UFclose(uf);
+ TRAP_OFF;
+ return NULL;
+ }
+ UFclose(uf);
+ TRAP_OFF;
+
+ cache->loaded = IMG_FLAG_LOADED;
+ cache->index = 0;
+
+ image_buffer:
+ if (newBuf == NULL)
+ newBuf = newBuffer(INIT_BUFFER_WIDTH);
+ cache->loaded |= IMG_FLAG_DONT_REMOVE;
+ if (newBuf->sourcefile == NULL && uf->scheme != SCM_LOCAL)
+ newBuf->sourcefile = cache->file;
+
+ tmp = Sprintf("<img src=\"%s\"><br><br>", html_quote(image.url));
+ tmpf = tmpfname(TMPF_SRC, ".html");
+ src = fopen(tmpf->ptr, "w");
+ newBuf->mailcap_source = tmpf->ptr;
+
+ init_stream(&f, SCM_LOCAL, newStrStream(tmp));
+ loadHTMLstream(&f, newBuf, src, TRUE);
+ if (src)
+ fclose(src);
+
+ newBuf->topLine = newBuf->firstLine;
+ newBuf->lastLine = newBuf->currentLine;
+ newBuf->currentLine = newBuf->firstLine;
+ newBuf->image_flag = IMG_FLAG_AUTO;
+ return newBuf;
+}
+#endif
+
+static Str
+conv_symbol(Line *l)
+{
+ Str tmp = NULL;
+ char *p = l->lineBuf, *ep = p + l->len;
+ Lineprop *pr = l->propBuf;
+#ifdef USE_M17N
+ int w;
+ char **symbol = NULL;
+#else
+ char **symbol = get_symbol();
+#endif
+
+ for (; p < ep; p++, pr++) {
+ if (*pr & PC_SYMBOL) {
+#ifdef USE_M17N
+ char c = ((char)wtf_get_code((wc_uchar *) p) & 0x7f) - SYMBOL_BASE;
+ int len = get_mclen(p);
+#else
+ char c = *p - SYMBOL_BASE;
+#endif
+ if (tmp == NULL) {
+ tmp = Strnew_size(l->len);
+ Strcopy_charp_n(tmp, l->lineBuf, p - l->lineBuf);
+#ifdef USE_M17N
+ w = (*pr & PC_KANJI) ? 2 : 1;
+ symbol = get_symbol(DisplayCharset, &w);
+#endif
+ }
+ Strcat_charp(tmp, symbol[(int)c]);
+#ifdef USE_M17N
+ p += len - 1;
+ pr += len - 1;
+#endif
+ }
+ else if (tmp != NULL)
+ Strcat_char(tmp, *p);
+ }
+ if (tmp)
+ return tmp;
+ else
+ return Strnew_charp_n(l->lineBuf, l->len);
+}
+
+/*
+ * saveBuffer: write buffer to file
+ */
+static void
+_saveBuffer(Buffer *buf, Line *l, FILE * f, int cont)
+{
+ Str tmp;
+ int is_html = FALSE;
+#ifdef USE_M17N
+ int set_charset = !DisplayCharset;
+ wc_ces charset = DisplayCharset ? DisplayCharset : WC_CES_US_ASCII;
+#endif
+
+ if (buf->type && !strcasecmp(buf->type, "text/html"))
+ is_html = TRUE;
+
+ pager_next:
+ for (; l != NULL; l = l->next) {
+ if (is_html)
+ tmp = conv_symbol(l);
+ else
+ tmp = Strnew_charp_n(l->lineBuf, l->len);
+ tmp = wc_Str_conv(tmp, InnerCharset, charset);
+ Strfputs(tmp, f);
+ if (Strlastchar(tmp) != '\n' && !(cont && l->next && l->next->bpos))
+ putc('\n', f);
+ }
+ if (buf->pagerSource && !(buf->bufferprop & BP_CLOSE)) {
+ l = getNextPage(buf, PagerMax);
+#ifdef USE_M17N
+ if (set_charset)
+ charset = buf->document_charset;
+#endif
+ goto pager_next;
+ }
+}
+
+void
+saveBuffer(Buffer *buf, FILE * f, int cont)
+{
+ _saveBuffer(buf, buf->firstLine, f, cont);
+}
+
+void
+saveBufferBody(Buffer *buf, FILE * f, int cont)
+{
+ Line *l = buf->firstLine;
+
+ while (l != NULL && l->real_linenumber == 0)
+ l = l->next;
+ _saveBuffer(buf, l, f, cont);
+}
+
+static Buffer *
+loadcmdout(char *cmd,
+ Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
+{
+ FILE *f, *popen(const char *, const char *);
+ Buffer *buf;
+ URLFile uf;
+
+ if (cmd == NULL || *cmd == '\0')
+ return NULL;
+ f = popen(cmd, "r");
+ if (f == NULL)
+ return NULL;
+ init_stream(&uf, SCM_UNKNOWN, newFileStream(f, (void (*)())pclose));
+ buf = loadproc(&uf, defaultbuf);
+ UFclose(&uf);
+ return buf;
+}
+
+/*
+ * getshell: execute shell command and get the result into a buffer
+ */
+Buffer *
+getshell(char *cmd)
+{
+ Buffer *buf;
+
+ buf = loadcmdout(cmd, loadBuffer, NULL);
+ if (buf == NULL)
+ return NULL;
+ buf->filename = cmd;
+ buf->buffername = Sprintf("%s %s", SHELLBUFFERNAME,
+ conv_from_system(cmd))->ptr;
+ return buf;
+}
+
+/*
+ * getpipe: execute shell command and connect pipe to the buffer
+ */
+Buffer *
+getpipe(char *cmd)
+{
+ FILE *f, *popen(const char *, const char *);
+ Buffer *buf;
+
+ if (cmd == NULL || *cmd == '\0')
+ return NULL;
+ f = popen(cmd, "r");
+ if (f == NULL)
+ return NULL;
+ buf = newBuffer(INIT_BUFFER_WIDTH);
+ buf->pagerSource = newFileStream(f, (void (*)())pclose);
+ buf->filename = cmd;
+ buf->buffername = Sprintf("%s %s", PIPEBUFFERNAME,
+ conv_from_system(cmd))->ptr;
+ buf->bufferprop |= BP_PIPE;
+#ifdef USE_M17N
+ buf->document_charset = WC_CES_US_ASCII;
+#endif
+ return buf;
+}
+
+/*
+ * Open pager buffer
+ */
+Buffer *
+openPagerBuffer(InputStream stream, Buffer *buf)
+{
+
+ if (buf == NULL)
+ buf = newBuffer(INIT_BUFFER_WIDTH);
+ buf->pagerSource = stream;
+ buf->buffername = getenv("MAN_PN");
+ if (buf->buffername == NULL)
+ buf->buffername = PIPEBUFFERNAME;
+ else
+ buf->buffername = conv_from_system(buf->buffername);
+ buf->bufferprop |= BP_PIPE;
+#ifdef USE_M17N
+ if (content_charset && UseContentCharset)
+ buf->document_charset = content_charset;
+ else
+ buf->document_charset = WC_CES_US_ASCII;
+#endif
+ buf->currentLine = buf->firstLine;
+
+ return buf;
+}
+
+Buffer *
+openGeneralPagerBuffer(InputStream stream)
+{
+ Buffer *buf;
+ char *t = "text/plain";
+ Buffer *t_buf = NULL;
+ URLFile uf;
+
+ init_stream(&uf, SCM_UNKNOWN, stream);
+
+#ifdef USE_M17N
+ content_charset = 0;
+#endif
+ if (SearchHeader) {
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ readHeader(&uf, t_buf, TRUE, NULL);
+ t = checkContentType(t_buf);
+ if (t == NULL)
+ t = "text/plain";
+ if (t_buf) {
+ t_buf->topLine = t_buf->firstLine;
+ t_buf->currentLine = t_buf->lastLine;
+ }
+ SearchHeader = FALSE;
+ }
+ else if (DefaultType) {
+ t = DefaultType;
+ DefaultType = NULL;
+ }
+ if (!strcasecmp(t, "text/html")) {
+ buf = loadHTMLBuffer(&uf, t_buf);
+ buf->type = "text/html";
+ }
+ else if (is_plain_text_type(t)) {
+ if (IStype(stream) != IST_ENCODED)
+ stream = newEncodedStream(stream, uf.encoding);
+ buf = openPagerBuffer(stream, t_buf);
+ buf->type = "text/plain";
+ }
+#ifdef USE_IMAGE
+ else if (activeImage && displayImage && !useExtImageViewer &&
+ !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) {
+ cur_baseURL = New(ParsedURL);
+ parseURL("-", cur_baseURL, NULL);
+ buf = loadImageBuffer(&uf, t_buf);
+ buf->type = "text/html";
+ }
+#endif
+ else {
+ if (doExternal(uf, "-", t, &buf, t_buf)) {
+ UFclose(&uf);
+ if (buf == NULL || buf == NO_BUFFER)
+ return buf;
+ }
+ else { /* unknown type is regarded as text/plain */
+ if (IStype(stream) != IST_ENCODED)
+ stream = newEncodedStream(stream, uf.encoding);
+ buf = openPagerBuffer(stream, t_buf);
+ buf->type = "text/plain";
+ }
+ }
+ buf->real_type = t;
+ buf->currentURL.scheme = SCM_LOCAL;
+ buf->currentURL.file = "-";
+ return buf;
+}
+
+Line *
+getNextPage(Buffer *buf, int plen)
+{
+ Line *volatile top = buf->topLine, *volatile last = buf->lastLine,
+ *volatile cur = buf->currentLine;
+ int i;
+ int volatile nlines = 0;
+ clen_t linelen = 0, trbyte = buf->trbyte;
+ Str lineBuf2;
+ char volatile pre_lbuf = '\0';
+ URLFile uf;
+#ifdef USE_M17N
+ wc_ces charset;
+ wc_ces volatile doc_charset = DocumentCharset;
+ wc_uint8 old_auto_detect = WcOption.auto_detect;
+#endif
+ int volatile squeeze_flag = FALSE;
+ Lineprop *propBuffer = NULL;
+
+#ifdef USE_ANSI_COLOR
+ Linecolor *colorBuffer = NULL;
+#endif
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+
+ if (buf->pagerSource == NULL)
+ return NULL;
+
+ if (last != NULL) {
+ nlines = last->real_linenumber;
+ pre_lbuf = *(last->lineBuf);
+ if (pre_lbuf == '\0')
+ pre_lbuf = '\n';
+ buf->currentLine = last;
+ }
+
+#ifdef USE_M17N
+ charset = buf->document_charset;
+ if (buf->document_charset != WC_CES_US_ASCII)
+ doc_charset = buf->document_charset;
+ else if (UseContentCharset) {
+ content_charset = 0;
+ checkContentType(buf);
+ if (content_charset)
+ doc_charset = content_charset;
+ }
+ WcOption.auto_detect = buf->auto_detect;
+#endif
+
+ if (SETJMP(AbortLoading) != 0) {
+ goto pager_end;
+ }
+ TRAP_ON;
+
+ init_stream(&uf, SCM_UNKNOWN, NULL);
+ for (i = 0; i < plen; i++) {
+ lineBuf2 = StrmyISgets(buf->pagerSource);
+ if (lineBuf2->length == 0) {
+ /* Assume that `cmd == buf->filename' */
+ if (buf->filename)
+ buf->buffername = Sprintf("%s %s",
+ CPIPEBUFFERNAME,
+ conv_from_system(buf->filename))->
+ ptr;
+ else if (getenv("MAN_PN") == NULL)
+ buf->buffername = CPIPEBUFFERNAME;
+ buf->bufferprop |= BP_CLOSE;
+ break;
+ }
+ linelen += lineBuf2->length;
+ showProgress(&linelen, &trbyte);
+ lineBuf2 =
+ convertLine(&uf, lineBuf2, PAGER_MODE, &charset, doc_charset);
+ if (squeezeBlankLine) {
+ squeeze_flag = FALSE;
+ if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') {
+ ++nlines;
+ --i;
+ squeeze_flag = TRUE;
+ continue;
+ }
+ pre_lbuf = lineBuf2->ptr[0];
+ }
+ ++nlines;
+ Strchop(lineBuf2);
+ lineBuf2 = checkType(lineBuf2, &propBuffer, &colorBuffer);
+ addnewline(buf, lineBuf2->ptr, propBuffer, colorBuffer,
+ lineBuf2->length, FOLD_BUFFER_WIDTH, nlines);
+ if (!top) {
+ top = buf->firstLine;
+ cur = top;
+ }
+ if (buf->lastLine->real_linenumber - buf->firstLine->real_linenumber
+ >= PagerMax) {
+ Line *l = buf->firstLine;
+ do {
+ if (top == l)
+ top = l->next;
+ if (cur == l)
+ cur = l->next;
+ if (last == l)
+ last = NULL;
+ l = l->next;
+ } while (l && l->bpos);
+ buf->firstLine = l;
+ buf->firstLine->prev = NULL;
+ }
+ }
+ pager_end:
+ TRAP_OFF;
+
+ buf->trbyte = trbyte + linelen;
+#ifdef USE_M17N
+ buf->document_charset = charset;
+ WcOption.auto_detect = old_auto_detect;
+#endif
+ buf->topLine = top;
+ buf->currentLine = cur;
+ if (!last)
+ last = buf->firstLine;
+ else if (last && (last->next || !squeeze_flag))
+ last = last->next;
+ return last;
+}
+
+int
+save2tmp(URLFile uf, char *tmpf)
+{
+ FILE *ff;
+ int check;
+ clen_t linelen = 0, trbyte = 0;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ static JMP_BUF env_bak;
+
+ ff = fopen(tmpf, "wb");
+ if (ff == NULL) {
+ /* fclose(f); */
+ return -1;
+ }
+ bcopy(AbortLoading, env_bak, sizeof(JMP_BUF));
+ if (SETJMP(AbortLoading) != 0) {
+ goto _end;
+ }
+ TRAP_ON;
+ check = 0;
+#ifdef USE_NNTP
+ if (uf.scheme == SCM_NEWS) {
+ char c;
+ while (c = UFgetc(&uf), !iseos(uf.stream)) {
+ if (c == '\n') {
+ if (check == 0)
+ check++;
+ else if (check == 3)
+ break;
+ }
+ else if (c == '.' && check == 1)
+ check++;
+ else if (c == '\r' && check == 2)
+ check++;
+ else
+ check = 0;
+ putc(c, ff);
+ linelen += sizeof(c);
+ showProgress(&linelen, &trbyte);
+ }
+ }
+ else
+#endif /* USE_NNTP */
+ {
+ Str buf = Strnew_size(SAVE_BUF_SIZE);
+ while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
+ Strfputs(buf, ff);
+ linelen += buf->length;
+ showProgress(&linelen, &trbyte);
+ }
+ }
+ _end:
+ bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
+ TRAP_OFF;
+ fclose(ff);
+ current_content_length = 0;
+ return 0;
+}
+
+int
+doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+ Buffer *defaultbuf)
+{
+ Str tmpf, command;
+ struct mailcap *mcap;
+ int mc_stat;
+ Buffer *buf = NULL;
+ char *header, *src = NULL, *ext = uf.ext;
+
+ if (!(mcap = searchExtViewer(type)))
+ return 0;
+
+ if (mcap->nametemplate) {
+ tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL);
+ if (tmpf->ptr[0] == '.')
+ ext = tmpf->ptr;
+ }
+ tmpf = tmpfname(TMPF_DFL, (ext && *ext) ? ext : NULL);
+
+ if (IStype(uf.stream) != IST_ENCODED)
+ uf.stream = newEncodedStream(uf.stream, uf.encoding);
+ header = checkHeader(defaultbuf, "Content-Type:");
+ if (header)
+ header = conv_to_system(header);
+ command = unquote_mailcap(mcap->viewer, type, tmpf->ptr, header, &mc_stat);
+#ifndef __EMX__
+ if (!(mc_stat & MCSTAT_REPNAME)) {
+ Str tmp = Sprintf("(%s) < %s", command->ptr, shell_quote(tmpf->ptr));
+ command = tmp;
+ }
+#endif
+
+#ifdef HAVE_SETPGRP
+ if (!(mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) &&
+ !(mcap->flags & MAILCAP_NEEDSTERMINAL) && BackgroundExtViewer) {
+ flush_tty();
+ if (!fork()) {
+ setup_child(FALSE, 0, UFfileno(&uf));
+ if (save2tmp(uf, tmpf->ptr) < 0)
+ exit(1);
+ UFclose(&uf);
+ myExec(command->ptr);
+ }
+ *bufp = NO_BUFFER;
+ return 1;
+ }
+ else
+#endif
+ {
+ if (save2tmp(uf, tmpf->ptr) < 0) {
+ *bufp = NULL;
+ return 1;
+ }
+ }
+ if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) {
+ if (defaultbuf == NULL)
+ defaultbuf = newBuffer(INIT_BUFFER_WIDTH);
+ if (defaultbuf->sourcefile)
+ src = defaultbuf->sourcefile;
+ else
+ src = tmpf->ptr;
+ defaultbuf->sourcefile = NULL;
+ defaultbuf->mailcap = mcap;
+ }
+ if (mcap->flags & MAILCAP_HTMLOUTPUT) {
+ buf = loadcmdout(command->ptr, loadHTMLBuffer, defaultbuf);
+ if (buf && buf != NO_BUFFER) {
+ buf->type = "text/html";
+ buf->mailcap_source = buf->sourcefile;
+ buf->sourcefile = src;
+ }
+ }
+ else if (mcap->flags & MAILCAP_COPIOUSOUTPUT) {
+ buf = loadcmdout(command->ptr, loadBuffer, defaultbuf);
+ if (buf && buf != NO_BUFFER) {
+ buf->type = "text/plain";
+ buf->mailcap_source = buf->sourcefile;
+ buf->sourcefile = src;
+ }
+ }
+ else {
+ if (mcap->flags & MAILCAP_NEEDSTERMINAL || !BackgroundExtViewer) {
+ fmTerm();
+ mySystem(command->ptr, 0);
+ fmInit();
+ if (CurrentTab && Currentbuf)
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ }
+ else {
+ mySystem(command->ptr, 1);
+ }
+ buf = NO_BUFFER;
+ }
+ if (buf && buf != NO_BUFFER) {
+ buf->filename = path;
+ if (buf->buffername == NULL || buf->buffername[0] == '\0')
+ buf->buffername = conv_from_system(lastFileName(path));
+ buf->edit = mcap->edit;
+ buf->mailcap = mcap;
+ }
+ *bufp = buf;
+ return 1;
+}
+
+static int
+_MoveFile(char *path1, char *path2)
+{
+ InputStream f1;
+ FILE *f2;
+ int is_pipe;
+ clen_t linelen = 0, trbyte = 0;
+ Str buf;
+
+ f1 = openIS(path1);
+ if (f1 == NULL)
+ return -1;
+ if (*path2 == '|' && PermitSaveToPipe) {
+ is_pipe = TRUE;
+ f2 = popen(path2 + 1, "w");
+ }
+ else {
+ is_pipe = FALSE;
+ f2 = fopen(path2, "wb");
+ }
+ if (f2 == NULL) {
+ ISclose(f1);
+ return -1;
+ }
+ current_content_length = 0;
+ buf = Strnew_size(SAVE_BUF_SIZE);
+ while (ISread(f1, buf, SAVE_BUF_SIZE)) {
+ Strfputs(buf, f2);
+ linelen += buf->length;
+ showProgress(&linelen, &trbyte);
+ }
+ ISclose(f1);
+ if (is_pipe)
+ pclose(f2);
+ else
+ fclose(f2);
+ return 0;
+}
+
+int
+_doFileCopy(char *tmpf, char *defstr, int download)
+{
+ Str msg;
+ Str filen;
+ char *p, *q = NULL;
+ pid_t pid;
+ char *lock;
+#if !(defined(HAVE_SYMLINK) && defined(HAVE_LSTAT))
+ FILE *f;
+#endif
+ struct stat st;
+ clen_t size = 0;
+ int is_pipe = FALSE;
+
+ if (fmInitialized) {
+ p = searchKeyData();
+ if (p == NULL || *p == '\0') {
+ /* FIXME: gettextize? */
+ q = inputLineHist("(Download)Save file to: ",
+ defstr, IN_COMMAND, SaveHist);
+ if (q == NULL || *q == '\0')
+ return FALSE;
+ p = conv_to_system(q);
+ }
+ if (*p == '|' && PermitSaveToPipe)
+ is_pipe = TRUE;
+ else {
+ if (q) {
+ p = unescape_spaces(Strnew_charp(q))->ptr;
+ p = conv_to_system(q);
+ }
+ p = expandPath(p);
+ if (checkOverWrite(p) < 0)
+ return -1;
+ }
+ if (checkCopyFile(tmpf, p) < 0) {
+ /* FIXME: gettextize? */
+ msg = Sprintf("Can't copy. %s and %s are identical.",
+ conv_from_system(tmpf), conv_from_system(p));
+ disp_err_message(msg->ptr, FALSE);
+ return -1;
+ }
+ if (!download) {
+ if (_MoveFile(tmpf, p) < 0) {
+ /* FIXME: gettextize? */
+ msg = Sprintf("Can't save to %s", conv_from_system(p));
+ disp_err_message(msg->ptr, FALSE);
+ }
+ return -1;
+ }
+ lock = tmpfname(TMPF_DFL, ".lock")->ptr;
+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
+ symlink(p, lock);
+#else
+ f = fopen(lock, "w");
+ if (f)
+ fclose(f);
+#endif
+ flush_tty();
+ pid = fork();
+ if (!pid) {
+ setup_child(FALSE, 0, -1);
+ if (!_MoveFile(tmpf, p) && PreserveTimestamp && !is_pipe &&
+ !stat(tmpf, &st))
+ setModtime(p, st.st_mtime);
+ unlink(lock);
+ exit(0);
+ }
+ if (!stat(tmpf, &st))
+ size = st.st_size;
+ addDownloadList(pid, conv_from_system(tmpf), p, lock, size);
+ }
+ else {
+ q = searchKeyData();
+ if (q == NULL || *q == '\0') {
+ /* FIXME: gettextize? */
+ printf("(Download)Save file to: ");
+ fflush(stdout);
+ filen = Strfgets(stdin);
+ if (filen->length == 0)
+ return -1;
+ q = filen->ptr;
+ }
+ for (p = q + strlen(q) - 1; IS_SPACE(*p); p--) ;
+ *(p + 1) = '\0';
+ if (*q == '\0')
+ return -1;
+ p = q;
+ if (*p == '|' && PermitSaveToPipe)
+ is_pipe = TRUE;
+ else {
+ p = expandPath(p);
+ if (checkOverWrite(p) < 0)
+ return -1;
+ }
+ if (checkCopyFile(tmpf, p) < 0) {
+ /* FIXME: gettextize? */
+ printf("Can't copy. %s and %s are identical.", tmpf, p);
+ return -1;
+ }
+ if (_MoveFile(tmpf, p) < 0) {
+ /* FIXME: gettextize? */
+ printf("Can't save to %s\n", p);
+ return -1;
+ }
+ if (PreserveTimestamp && !is_pipe && !stat(tmpf, &st))
+ setModtime(p, st.st_mtime);
+ }
+ return 0;
+}
+
+int
+doFileMove(char *tmpf, char *defstr)
+{
+ int ret = doFileCopy(tmpf, defstr);
+ unlink(tmpf);
+ return ret;
+}
+
+int
+doFileSave(URLFile uf, char *defstr)
+{
+ Str msg;
+ Str filen;
+ char *p, *q;
+ pid_t pid;
+ char *lock;
+ char *tmpf = NULL;
+#if !(defined(HAVE_SYMLINK) && defined(HAVE_LSTAT))
+ FILE *f;
+#endif
+
+ if (fmInitialized) {
+ p = searchKeyData();
+ if (p == NULL || *p == '\0') {
+ /* FIXME: gettextize? */
+ p = inputLineHist("(Download)Save file to: ",
+ defstr, IN_FILENAME, SaveHist);
+ if (p == NULL || *p == '\0')
+ return -1;
+ p = conv_to_system(p);
+ }
+ if (checkOverWrite(p) < 0)
+ return -1;
+ if (checkSaveFile(uf.stream, p) < 0) {
+ /* FIXME: gettextize? */
+ msg = Sprintf("Can't save. Load file and %s are identical.",
+ conv_from_system(p));
+ disp_err_message(msg->ptr, FALSE);
+ return -1;
+ }
+ /*
+ * if (save2tmp(uf, p) < 0) {
+ * msg = Sprintf("Can't save to %s", conv_from_system(p));
+ * disp_err_message(msg->ptr, FALSE);
+ * }
+ */
+ lock = tmpfname(TMPF_DFL, ".lock")->ptr;
+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
+ symlink(p, lock);
+#else
+ f = fopen(lock, "w");
+ if (f)
+ fclose(f);
+#endif
+ flush_tty();
+ pid = fork();
+ if (!pid) {
+ if (uf.content_encoding != CMP_NOCOMPRESS) {
+ uncompress_stream(&uf, &tmpf);
+ if (tmpf)
+ unlink(tmpf);
+ }
+ setup_child(FALSE, 0, UFfileno(&uf));
+ if (!save2tmp(uf, p) && PreserveTimestamp && uf.modtime != -1)
+ setModtime(p, uf.modtime);
+ UFclose(&uf);
+ unlink(lock);
+ exit(0);
+ }
+ addDownloadList(pid, uf.url, p, lock, current_content_length);
+ }
+ else {
+ q = searchKeyData();
+ if (q == NULL || *q == '\0') {
+ /* FIXME: gettextize? */
+ printf("(Download)Save file to: ");
+ fflush(stdout);
+ filen = Strfgets(stdin);
+ if (filen->length == 0)
+ return -1;
+ q = filen->ptr;
+ }
+ for (p = q + strlen(q) - 1; IS_SPACE(*p); p--) ;
+ *(p + 1) = '\0';
+ if (*q == '\0')
+ return -1;
+ p = expandPath(q);
+ if (checkOverWrite(p) < 0)
+ return -1;
+ if (checkSaveFile(uf.stream, p) < 0) {
+ /* FIXME: gettextize? */
+ printf("Can't save. Load file and %s are identical.", p);
+ return -1;
+ }
+ if (uf.content_encoding != CMP_NOCOMPRESS) {
+ uncompress_stream(&uf, &tmpf);
+ if (tmpf)
+ unlink(tmpf);
+ }
+ if (save2tmp(uf, p) < 0) {
+ /* FIXME: gettextize? */
+ printf("Can't save to %s\n", p);
+ return -1;
+ }
+ if (PreserveTimestamp && uf.modtime != -1)
+ setModtime(p, uf.modtime);
+ }
+ return 0;
+}
+
+int
+checkCopyFile(char *path1, char *path2)
+{
+ struct stat st1, st2;
+
+ if (*path2 == '|' && PermitSaveToPipe)
+ return 0;
+ if ((stat(path1, &st1) == 0) && (stat(path2, &st2) == 0))
+ if (st1.st_ino == st2.st_ino)
+ return -1;
+ return 0;
+}
+
+int
+checkSaveFile(InputStream stream, char *path2)
+{
+ struct stat st1, st2;
+ int des = ISfileno(stream);
+
+ if (des < 0)
+ return 0;
+ if (*path2 == '|' && PermitSaveToPipe)
+ return 0;
+ if ((fstat(des, &st1) == 0) && (stat(path2, &st2) == 0))
+ if (st1.st_ino == st2.st_ino)
+ return -1;
+ return 0;
+}
+
+int
+checkOverWrite(char *path)
+{
+ struct stat st;
+ char *ans;
+
+ if (stat(path, &st) < 0)
+ return 0;
+ /* FIXME: gettextize? */
+ ans = inputAnswer("File exists. Overwrite? (y/n)");
+ if (ans && TOLOWER(*ans) == 'y')
+ return 0;
+ else
+ return -1;
+}
+
+char *
+inputAnswer(char *prompt)
+{
+ char *ans;
+
+ if (QuietMessage)
+ return "n";
+ if (fmInitialized) {
+ term_raw();
+ ans = inputChar(prompt);
+ }
+ else {
+ printf(prompt);
+ fflush(stdout);
+ ans = Strfgets(stdin)->ptr;
+ }
+ return ans;
+}
+
+static void
+uncompress_stream(URLFile *uf, char **src)
+{
+ pid_t pid1;
+ FILE *f1;
+ char *expand_cmd = GUNZIP_CMDNAME;
+ char *expand_name = GUNZIP_NAME;
+ char *tmpf = NULL;
+ char *ext = NULL;
+ struct compression_decoder *d;
+
+ if (IStype(uf->stream) != IST_ENCODED) {
+ uf->stream = newEncodedStream(uf->stream, uf->encoding);
+ uf->encoding = ENC_7BIT;
+ }
+ for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
+ if (uf->compression == d->type) {
+ if (d->auxbin_p)
+ expand_cmd = auxbinFile(d->cmd);
+ else
+ expand_cmd = d->cmd;
+ expand_name = d->name;
+ ext = d->ext;
+ break;
+ }
+ }
+ uf->compression = CMP_NOCOMPRESS;
+
+ if (uf->scheme != SCM_LOCAL
+#ifdef USE_IMAGE
+ && !image_source
+#endif
+ ) {
+ tmpf = tmpfname(TMPF_DFL, ext)->ptr;
+ }
+
+ /* child1 -- stdout|f1=uf -> parent */
+ pid1 = open_pipe_rw(&f1, NULL);
+ if (pid1 < 0) {
+ UFclose(uf);
+ return;
+ }
+ if (pid1 == 0) {
+ /* child */
+ pid_t pid2;
+ FILE *f2 = stdin;
+
+ /* uf -> child2 -- stdout|stdin -> child1 */
+ pid2 = open_pipe_rw(&f2, NULL);
+ if (pid2 < 0) {
+ UFclose(uf);
+ exit(1);
+ }
+ if (pid2 == 0) {
+ /* child2 */
+ Str buf = Strnew_size(SAVE_BUF_SIZE);
+ FILE *f = NULL;
+
+ setup_child(TRUE, 2, UFfileno(uf));
+ if (tmpf)
+ f = fopen(tmpf, "wb");
+ while (UFread(uf, buf, SAVE_BUF_SIZE)) {
+ if (Strfputs(buf, stdout) < 0)
+ break;
+ if (f)
+ Strfputs(buf, f);
+ }
+ UFclose(uf);
+ if (f)
+ fclose(f);
+ exit(0);
+ }
+ /* child1 */
+ dup2(1, 2); /* stderr>&stdout */
+ setup_child(TRUE, -1, -1);
+ execlp(expand_cmd, expand_name, NULL);
+ exit(1);
+ }
+ if (tmpf) {
+ if (src)
+ *src = tmpf;
+ else
+ uf->scheme = SCM_LOCAL;
+ }
+ UFhalfclose(uf);
+ uf->stream = newFileStream(f1, (void (*)())fclose);
+}
+
+static FILE *
+lessopen_stream(char *path)
+{
+ char *lessopen;
+ FILE *fp;
+
+ lessopen = getenv("LESSOPEN");
+ if (lessopen == NULL) {
+ return NULL;
+ }
+ if (lessopen[0] == '\0') {
+ return NULL;
+ }
+
+ if (lessopen[0] == '|') {
+ /* pipe mode */
+ Str tmpf;
+ int c;
+
+ ++lessopen;
+ tmpf = Sprintf(lessopen, shell_quote(path));
+ fp = popen(tmpf->ptr, "r");
+ if (fp == NULL) {
+ return NULL;
+ }
+ c = getc(fp);
+ if (c == EOF) {
+ fclose(fp);
+ return NULL;
+ }
+ ungetc(c, fp);
+ }
+ else {
+ /* filename mode */
+ /* not supported m(__)m */
+ fp = NULL;
+ }
+ return fp;
+}
+
+#if 0
+void
+reloadBuffer(Buffer *buf)
+{
+ URLFile uf;
+
+ if (buf->sourcefile == NULL || buf->pagerSource != NULL)
+ return;
+ init_stream(&uf, SCM_UNKNOWN, NULL);
+ examineFile(buf->mailcap_source ? buf->mailcap_source : buf->sourcefile,
+ &uf);
+ if (uf.stream == NULL)
+ return;
+ is_redisplay = TRUE;
+ buf->allLine = 0;
+ buf->href = NULL;
+ buf->name = NULL;
+ buf->img = NULL;
+ buf->formitem = NULL;
+ buf->linklist = NULL;
+ buf->maplist = NULL;
+ if (buf->hmarklist)
+ buf->hmarklist->nmark = 0;
+ if (buf->imarklist)
+ buf->imarklist->nmark = 0;
+ if (!strcasecmp(buf->type, "text/html"))
+ loadHTMLBuffer(&uf, buf);
+ else
+ loadBuffer(&uf, buf);
+ UFclose(&uf);
+ is_redisplay = FALSE;
+}
+#endif
+
+static char *
+guess_filename(char *file)
+{
+ char *p = NULL, *s;
+
+ if (file != NULL)
+ p = mybasename(file);
+ if (p == NULL || *p == '\0')
+ return DEF_SAVE_FILE;
+ s = p;
+ if (*p == '#')
+ p++;
+ while (*p != '\0') {
+ if ((*p == '#' && *(p + 1) != '\0') || *p == '?') {
+ *p = '\0';
+ break;
+ }
+ p++;
+ }
+ return s;
+}
+
+char *
+guess_save_name(Buffer *buf, char *path)
+{
+ if (buf && buf->document_header) {
+ Str name = NULL;
+ char *p, *q;
+ if ((p = checkHeader(buf, "Content-Disposition:")) != NULL &&
+ (q = strcasestr(p, "filename")) != NULL &&
+ (q == p || IS_SPACE(*(q - 1)) || *(q - 1) == ';') &&
+ matchattr(q, "filename", 8, &name))
+ path = name->ptr;
+ else if ((p = checkHeader(buf, "Content-Type:")) != NULL &&
+ (q = strcasestr(p, "name")) != NULL &&
+ (q == p || IS_SPACE(*(q - 1)) || *(q - 1) == ';') &&
+ matchattr(q, "name", 4, &name))
+ path = name->ptr;
+ }
+ return guess_filename(path);
+}
+
+/* Local Variables: */
+/* c-basic-offset: 4 */
+/* tab-width: 8 */
+/* End: */
diff --git a/.#main.c.1.253 b/.#main.c.1.253
new file mode 100644
index 0000000..9a4c755
--- /dev/null
+++ b/.#main.c.1.253
@@ -0,0 +1,6600 @@
+/* $Id: main.c,v 1.253 2006/12/10 10:49:23 inu Exp $ */
+#define MAINPROGRAM
+#include "fm.h"
+#include <signal.h>
+#include <setjmp.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3)
+#include <sys/wait.h>
+#endif
+#include <time.h>
+#include "terms.h"
+#include "myctype.h"
+#include "regex.h"
+#ifdef USE_MOUSE
+#ifdef USE_GPM
+#include <gpm.h>
+#endif /* USE_GPM */
+#if defined(USE_GPM) || defined(USE_SYSMOUSE)
+extern int do_getch();
+#define getch() do_getch()
+#endif /* defined(USE_GPM) || defined(USE_SYSMOUSE) */
+#endif
+
+#define DSTR_LEN 256
+
+Hist *LoadHist;
+Hist *SaveHist;
+Hist *URLHist;
+Hist *ShellHist;
+Hist *TextHist;
+
+typedef struct _Event {
+ int cmd;
+ void *data;
+ struct _Event *next;
+} Event;
+static Event *CurrentEvent = NULL;
+static Event *LastEvent = NULL;
+
+#ifdef USE_ALARM
+static AlarmEvent DefaultAlarm = {
+ 0, AL_UNSET, FUNCNAME_nulcmd, NULL
+};
+static AlarmEvent *CurrentAlarm = &DefaultAlarm;
+static MySignalHandler SigAlarm(SIGNAL_ARG);
+#endif
+
+#ifdef SIGWINCH
+static int need_resize_screen = FALSE;
+static MySignalHandler resize_hook(SIGNAL_ARG);
+static void resize_screen(void);
+#endif
+
+#ifdef SIGPIPE
+static MySignalHandler SigPipe(SIGNAL_ARG);
+#endif
+
+#ifdef USE_MARK
+static char *MarkString = NULL;
+#endif
+static char *SearchString = NULL;
+int (*searchRoutine) (Buffer *, char *);
+
+JMP_BUF IntReturn;
+
+static void delBuffer(Buffer *buf);
+static void cmd_loadfile(char *path);
+static void cmd_loadURL(char *url, ParsedURL *current, char *referer,
+ FormList *request);
+static void cmd_loadBuffer(Buffer *buf, int prop, int linkid);
+static void keyPressEventProc(int c);
+int show_params_p = 0;
+void show_params(FILE * fp);
+
+static char *getCurWord(Buffer *buf, int *spos, int *epos,
+ const char *badchars);
+
+static int display_ok = FALSE;
+static void do_dump(Buffer *);
+int prec_num = 0;
+int prev_key = -1;
+int on_target = 1;
+static int add_download_list = FALSE;
+
+void set_buffer_environ(Buffer *);
+static void save_buffer_position(Buffer *buf);
+
+static void _followForm(int);
+static void _goLine(char *);
+static void _newT(void);
+static void followTab(TabBuffer * tab);
+static void moveTab(TabBuffer * t, TabBuffer * t2, int right);
+static void _nextA(int);
+static void _prevA(int);
+static int check_target = TRUE;
+#define PREC_NUM (prec_num ? prec_num : 1)
+#define PREC_LIMIT 10000
+static int searchKeyNum(void);
+
+#define help() fusage(stdout, 0)
+#define usage() fusage(stderr, 1)
+
+static void
+fversion(FILE * f)
+{
+ fprintf(f, "w3m version %s, options %s\n", w3m_version,
+#if LANG == JA
+ "lang=ja"
+#else
+ "lang=en"
+#endif
+#ifdef USE_M17N
+ ",m17n"
+#endif
+#ifdef USE_IMAGE
+ ",image"
+#endif
+#ifdef USE_COLOR
+ ",color"
+#ifdef USE_ANSI_COLOR
+ ",ansi-color"
+#endif
+#endif
+#ifdef USE_MOUSE
+ ",mouse"
+#ifdef USE_GPM
+ ",gpm"
+#endif
+#ifdef USE_SYSMOUSE
+ ",sysmouse"
+#endif
+#endif
+#ifdef USE_MENU
+ ",menu"
+#endif
+#ifdef USE_COOKIE
+ ",cookie"
+#endif
+#ifdef USE_SSL
+ ",ssl"
+#ifdef USE_SSL_VERIFY
+ ",ssl-verify"
+#endif
+#endif
+#ifdef USE_EXTERNAL_URI_LOADER
+ ",external-uri-loader"
+#endif
+#ifdef USE_W3MMAILER
+ ",w3mmailer"
+#endif
+#ifdef USE_NNTP
+ ",nntp"
+#endif
+#ifdef USE_GOPHER
+ ",gopher"
+#endif
+#ifdef INET6
+ ",ipv6"
+#endif
+#ifdef USE_ALARM
+ ",alarm"
+#endif
+#ifdef USE_MARK
+ ",mark"
+#endif
+#ifdef USE_MIGEMO
+ ",migemo"
+#endif
+ );
+}
+
+static void
+fusage(FILE * f, int err)
+{
+ fversion(f);
+ /* FIXME: gettextize? */
+ fprintf(f, "usage: w3m [options] [URL or filename]\noptions:\n");
+ fprintf(f, " -t tab set tab width\n");
+ fprintf(f, " -r ignore backspace effect\n");
+ fprintf(f, " -l line # of preserved line (default 10000)\n");
+#ifdef USE_M17N
+ fprintf(f, " -I charset document charset\n");
+ fprintf(f, " -O charset display/output charset\n");
+#ifndef DEBIAN /* disabled by ukai: -s is used for squeeze multi lines */
+ fprintf(f, " -e EUC-JP\n");
+ fprintf(f, " -s Shift_JIS\n");
+ fprintf(f, " -j JIS\n");
+#endif
+#endif
+ fprintf(f, " -B load bookmark\n");
+ fprintf(f, " -bookmark file specify bookmark file\n");
+ fprintf(f, " -T type specify content-type\n");
+ fprintf(f, " -m internet message mode\n");
+ fprintf(f, " -v visual startup mode\n");
+#ifdef USE_COLOR
+ fprintf(f, " -M monochrome display\n");
+#endif /* USE_COLOR */
+ fprintf(f,
+ " -N open URL of command line on each new tab\n");
+ fprintf(f, " -F automatically render frame\n");
+ fprintf(f,
+ " -cols width specify column width (used with -dump)\n");
+ fprintf(f,
+ " -ppc count specify the number of pixels per character (4.0...32.0)\n");
+#ifdef USE_IMAGE
+ fprintf(f,
+ " -ppl count specify the number of pixels per line (4.0...64.0)\n");
+#endif
+ fprintf(f, " -dump dump formatted page into stdout\n");
+ fprintf(f,
+ " -dump_head dump response of HEAD request into stdout\n");
+ fprintf(f, " -dump_source dump page source into stdout\n");
+ fprintf(f, " -dump_both dump HEAD and source into stdout\n");
+ fprintf(f,
+ " -dump_extra dump HEAD, source, and extra information into stdout\n");
+ fprintf(f, " -post file use POST method with file content\n");
+ fprintf(f, " -header string insert string as a header\n");
+ fprintf(f, " +<num> goto <num> line\n");
+ fprintf(f, " -num show line number\n");
+ fprintf(f, " -no-proxy don't use proxy\n");
+#ifdef INET6
+ fprintf(f, " -4 IPv4 only (-o dns_order=4)\n");
+ fprintf(f, " -6 IPv6 only (-o dns_order=6)\n");
+#endif
+#ifdef USE_MOUSE
+ fprintf(f, " -no-mouse don't use mouse\n");
+#endif /* USE_MOUSE */
+#ifdef USE_COOKIE
+ fprintf(f,
+ " -cookie use cookie (-no-cookie: don't use cookie)\n");
+#endif /* USE_COOKIE */
+ fprintf(f, " -pauth user:pass proxy authentication\n");
+ fprintf(f, " -graph use graphic character\n");
+ fprintf(f, " -no-graph don't use graphic character\n");
+#ifdef DEBIAN /* replaced by ukai: pager requires -s */
+ fprintf(f, " -s squeeze multiple blank lines\n");
+#else
+ fprintf(f, " -S squeeze multiple blank lines\n");
+#endif
+ fprintf(f, " -W toggle wrap search mode\n");
+ fprintf(f, " -X don't use termcap init/deinit\n");
+ fprintf(f,
+ " -title[=TERM] set buffer name to terminal title string\n");
+ fprintf(f, " -o opt=value assign value to config option\n");
+ fprintf(f, " -show-option print all config options\n");
+ fprintf(f, " -config file specify config file\n");
+ fprintf(f, " -help print this usage message\n");
+ fprintf(f, " -version print w3m version\n");
+ fprintf(f, " -reqlog write request logfile\n");
+ fprintf(f, " -debug DO NOT USE\n");
+ if (show_params_p)
+ show_params(f);
+ exit(err);
+}
+
+#ifdef USE_M17N
+#ifdef __EMX__
+static char *getCodePage(void);
+#endif
+#endif
+
+static GC_warn_proc orig_GC_warn_proc = NULL;
+#define GC_WARN_KEEP_MAX (20)
+
+static void
+wrap_GC_warn_proc(char *msg, GC_word arg)
+{
+ if (fmInitialized) {
+ /* *INDENT-OFF* */
+ static struct {
+ char *msg;
+ GC_word arg;
+ } msg_ring[GC_WARN_KEEP_MAX];
+ /* *INDENT-ON* */
+ static int i = 0;
+ static int n = 0;
+ static int lock = 0;
+ int j;
+
+ j = (i + n) % (sizeof(msg_ring) / sizeof(msg_ring[0]));
+ msg_ring[j].msg = msg;
+ msg_ring[j].arg = arg;
+
+ if (n < sizeof(msg_ring) / sizeof(msg_ring[0]))
+ ++n;
+ else
+ ++i;
+
+ if (!lock) {
+ lock = 1;
+
+ for (; n > 0; --n, ++i) {
+ i %= sizeof(msg_ring) / sizeof(msg_ring[0]);
+
+ printf(msg_ring[i].msg, (unsigned long)msg_ring[i].arg);
+ sleep_till_anykey(1, 1);
+ }
+
+ lock = 0;
+ }
+ }
+ else if (orig_GC_warn_proc)
+ orig_GC_warn_proc(msg, arg);
+ else
+ fprintf(stderr, msg, (unsigned long)arg);
+}
+
+#ifdef SIGCHLD
+static void
+sig_chld(int signo)
+{
+ int p_stat;
+#ifdef HAVE_WAITPID
+ pid_t pid;
+
+ while ((pid = waitpid(-1, &p_stat, WNOHANG)) > 0) {
+ ;
+ }
+#elif HAVE_WAIT3
+ int pid;
+
+ while ((pid = wait3(&p_stat, WNOHANG, NULL)) > 0) {
+ ;
+ }
+#else
+ wait(&p_stat);
+#endif
+ mySignal(SIGCHLD, sig_chld);
+ return;
+}
+#endif
+
+Str
+make_optional_header_string(char *s)
+{
+ char *p;
+ Str hs;
+
+ if (strchr(s, '\n') || strchr(s, '\r'))
+ return NULL;
+ for (p = s; *p && *p != ':'; p++) ;
+ if (*p != ':' || p == s)
+ return NULL;
+ hs = Strnew_size(strlen(s) + 3);
+ Strcopy_charp_n(hs, s, p - s);
+ if (!Strcasecmp_charp(hs, "content-type"))
+ override_content_type = TRUE;
+ Strcat_charp(hs, ": ");
+ if (*(++p)) { /* not null header */
+ SKIP_BLANKS(p); /* skip white spaces */
+ Strcat_charp(hs, p);
+ }
+ Strcat_charp(hs, "\r\n");
+ return hs;
+}
+
+int
+main(int argc, char **argv, char **envp)
+{
+ Buffer *newbuf = NULL;
+ char *p, c;
+ int i;
+ InputStream redin;
+ char *line_str = NULL;
+ char **load_argv;
+ FormList *request;
+ int load_argc = 0;
+ int load_bookmark = FALSE;
+ int visual_start = FALSE;
+ int open_new_tab = FALSE;
+ char search_header = FALSE;
+ char *default_type = NULL;
+ char *post_file = NULL;
+ Str err_msg;
+#ifdef USE_M17N
+ char *Locale = NULL;
+ wc_uint8 auto_detect;
+#ifdef __EMX__
+ wc_ces CodePage;
+#endif
+#endif
+ GC_init();
+#if ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+
+#ifndef HAVE_SYS_ERRLIST
+ prepare_sys_errlist();
+#endif /* not HAVE_SYS_ERRLIST */
+
+ NO_proxy_domains = newTextList();
+ fileToDelete = newTextList();
+
+ load_argv = New_N(char *, argc - 1);
+ load_argc = 0;
+
+ CurrentDir = currentdir();
+ CurrentPid = (int)getpid();
+ BookmarkFile = NULL;
+ config_file = NULL;
+
+ /* argument search 1 */
+ for (i = 1; i < argc; i++) {
+ if (*argv[i] == '-') {
+ if (!strcmp("-config", argv[i])) {
+ argv[i] = "-dummy";
+ if (++i >= argc)
+ usage();
+ config_file = argv[i];
+ argv[i] = "-dummy";
+ }
+ else if (!strcmp("-h", argv[i]) || !strcmp("-help", argv[i]))
+ help();
+ else if (!strcmp("-V", argv[i]) || !strcmp("-version", argv[i])) {
+ fversion(stdout);
+ exit(0);
+ }
+ }
+ }
+
+#ifdef USE_M17N
+ if (non_null(Locale = getenv("LC_ALL")) ||
+ non_null(Locale = getenv("LC_CTYPE")) ||
+ non_null(Locale = getenv("LANG"))) {
+ DisplayCharset = wc_guess_locale_charset(Locale, DisplayCharset);
+ DocumentCharset = wc_guess_locale_charset(Locale, DocumentCharset);
+ SystemCharset = wc_guess_locale_charset(Locale, SystemCharset);
+ }
+#ifdef __EMX__
+ CodePage = wc_guess_charset(getCodePage(), 0);
+ if (CodePage)
+ DisplayCharset = DocumentCharset = SystemCharset = CodePage;
+#endif
+#endif
+
+ /* initializations */
+ init_rc();
+
+ LoadHist = newHist();
+ SaveHist = newHist();
+ ShellHist = newHist();
+ TextHist = newHist();
+ URLHist = newHist();
+
+#ifdef USE_M17N
+ if (FollowLocale && Locale) {
+ DisplayCharset = wc_guess_locale_charset(Locale, DisplayCharset);
+ SystemCharset = wc_guess_locale_charset(Locale, SystemCharset);
+ }
+ auto_detect = WcOption.auto_detect;
+ BookmarkCharset = DocumentCharset;
+#endif
+
+ if (!non_null(HTTP_proxy) &&
+ ((p = getenv("HTTP_PROXY")) ||
+ (p = getenv("http_proxy")) || (p = getenv("HTTP_proxy"))))
+ HTTP_proxy = p;
+#ifdef USE_SSL
+ if (!non_null(HTTPS_proxy) &&
+ ((p = getenv("HTTPS_PROXY")) ||
+ (p = getenv("https_proxy")) || (p = getenv("HTTPS_proxy"))))
+ HTTPS_proxy = p;
+ if (HTTPS_proxy == NULL && non_null(HTTP_proxy))
+ HTTPS_proxy = HTTP_proxy;
+#endif /* USE_SSL */
+#ifdef USE_GOPHER
+ if (!non_null(GOPHER_proxy) &&
+ ((p = getenv("GOPHER_PROXY")) ||
+ (p = getenv("gopher_proxy")) || (p = getenv("GOPHER_proxy"))))
+ GOPHER_proxy = p;
+#endif /* USE_GOPHER */
+ if (!non_null(FTP_proxy) &&
+ ((p = getenv("FTP_PROXY")) ||
+ (p = getenv("ftp_proxy")) || (p = getenv("FTP_proxy"))))
+ FTP_proxy = p;
+ if (!non_null(NO_proxy) &&
+ ((p = getenv("NO_PROXY")) ||
+ (p = getenv("no_proxy")) || (p = getenv("NO_proxy"))))
+ NO_proxy = p;
+#ifdef USE_NNTP
+ if (!non_null(NNTP_server) && (p = getenv("NNTPSERVER")) != NULL)
+ NNTP_server = p;
+ if (!non_null(NNTP_mode) && (p = getenv("NNTPMODE")) != NULL)
+ NNTP_mode = p;
+#endif
+
+ if (!non_null(Editor) && (p = getenv("EDITOR")) != NULL)
+ Editor = p;
+ if (!non_null(Mailer) && (p = getenv("MAILER")) != NULL)
+ Mailer = p;
+
+ /* argument search 2 */
+ i = 1;
+ while (i < argc) {
+ if (*argv[i] == '-') {
+ if (!strcmp("-t", argv[i])) {
+ if (++i >= argc)
+ usage();
+ if (atoi(argv[i]) > 0)
+ Tabstop = atoi(argv[i]);
+ }
+ else if (!strcmp("-r", argv[i]))
+ ShowEffect = FALSE;
+ else if (!strcmp("-l", argv[i])) {
+ if (++i >= argc)
+ usage();
+ if (atoi(argv[i]) > 0)
+ PagerMax = atoi(argv[i]);
+ }
+#ifdef USE_M17N
+#ifndef DEBIAN /* XXX: use -o kanjicode={S|J|E} */
+ else if (!strcmp("-s", argv[i]))
+ DisplayCharset = WC_CES_SHIFT_JIS;
+ else if (!strcmp("-j", argv[i]))
+ DisplayCharset = WC_CES_ISO_2022_JP;
+ else if (!strcmp("-e", argv[i]))
+ DisplayCharset = WC_CES_EUC_JP;
+#endif
+ else if (!strncmp("-I", argv[i], 2)) {
+ if (argv[i][2] != '\0')
+ p = argv[i] + 2;
+ else {
+ if (++i >= argc)
+ usage();
+ p = argv[i];
+ }
+ DocumentCharset = wc_guess_charset_short(p, DocumentCharset);
+ WcOption.auto_detect = WC_OPT_DETECT_OFF;
+ UseContentCharset = FALSE;
+ }
+ else if (!strncmp("-O", argv[i], 2)) {
+ if (argv[i][2] != '\0')
+ p = argv[i] + 2;
+ else {
+ if (++i >= argc)
+ usage();
+ p = argv[i];
+ }
+ DisplayCharset = wc_guess_charset_short(p, DisplayCharset);
+ }
+#endif
+ else if (!strcmp("-graph", argv[i]))
+ UseGraphicChar = TRUE;
+ else if (!strcmp("-no-graph", argv[i]))
+ UseGraphicChar = FALSE;
+ else if (!strcmp("-T", argv[i])) {
+ if (++i >= argc)
+ usage();
+ DefaultType = default_type = argv[i];
+ }
+ else if (!strcmp("-m", argv[i]))
+ SearchHeader = search_header = TRUE;
+ else if (!strcmp("-v", argv[i]))
+ visual_start = TRUE;
+ else if (!strcmp("-N", argv[i]))
+ open_new_tab = TRUE;
+#ifdef USE_COLOR
+ else if (!strcmp("-M", argv[i]))
+ useColor = FALSE;
+#endif /* USE_COLOR */
+ else if (!strcmp("-B", argv[i]))
+ load_bookmark = TRUE;
+ else if (!strcmp("-bookmark", argv[i])) {
+ if (++i >= argc)
+ usage();
+ BookmarkFile = argv[i];
+ if (BookmarkFile[0] != '~' && BookmarkFile[0] != '/') {
+ Str tmp = Strnew_charp(CurrentDir);
+ if (Strlastchar(tmp) != '/')
+ Strcat_char(tmp, '/');
+ Strcat_charp(tmp, BookmarkFile);
+ BookmarkFile = cleanupName(tmp->ptr);
+ }
+ }
+ else if (!strcmp("-F", argv[i]))
+ RenderFrame = TRUE;
+ else if (!strcmp("-W", argv[i])) {
+ if (WrapDefault)
+ WrapDefault = FALSE;
+ else
+ WrapDefault = TRUE;
+ }
+ else if (!strcmp("-dump", argv[i]))
+ w3m_dump = DUMP_BUFFER;
+ else if (!strcmp("-dump_source", argv[i]))
+ w3m_dump = DUMP_SOURCE;
+ else if (!strcmp("-dump_head", argv[i]))
+ w3m_dump = DUMP_HEAD;
+ else if (!strcmp("-dump_both", argv[i]))
+ w3m_dump = (DUMP_HEAD | DUMP_SOURCE);
+ else if (!strcmp("-dump_extra", argv[i]))
+ w3m_dump = (DUMP_HEAD | DUMP_SOURCE | DUMP_EXTRA);
+ else if (!strcmp("-halfdump", argv[i]))
+ w3m_dump = DUMP_HALFDUMP;
+ else if (!strcmp("-halfload", argv[i])) {
+ w3m_dump = 0;
+ w3m_halfload = TRUE;
+ DefaultType = default_type = "text/html";
+ }
+ else if (!strcmp("-backend", argv[i])) {
+ w3m_backend = TRUE;
+ }
+ else if (!strcmp("-backend_batch", argv[i])) {
+ w3m_backend = TRUE;
+ if (++i >= argc)
+ usage();
+ if (!backend_batch_commands)
+ backend_batch_commands = newTextList();
+ pushText(backend_batch_commands, argv[i]);
+ }
+ else if (!strcmp("-cols", argv[i])) {
+ if (++i >= argc)
+ usage();
+ COLS = atoi(argv[i]);
+ }
+ else if (!strcmp("-ppc", argv[i])) {
+ double ppc;
+ if (++i >= argc)
+ usage();
+ ppc = atof(argv[i]);
+ if (ppc >= MINIMUM_PIXEL_PER_CHAR &&
+ ppc <= MAXIMUM_PIXEL_PER_CHAR) {
+ pixel_per_char = ppc;
+ set_pixel_per_char = TRUE;
+ }
+ }
+#ifdef USE_IMAGE
+ else if (!strcmp("-ppl", argv[i])) {
+ double ppc;
+ if (++i >= argc)
+ usage();
+ ppc = atof(argv[i]);
+ if (ppc >= MINIMUM_PIXEL_PER_CHAR &&
+ ppc <= MAXIMUM_PIXEL_PER_CHAR * 2) {
+ pixel_per_line = ppc;
+ set_pixel_per_line = TRUE;
+ }
+ }
+#endif
+ else if (!strcmp("-num", argv[i]))
+ showLineNum = TRUE;
+ else if (!strcmp("-no-proxy", argv[i]))
+ use_proxy = FALSE;
+#ifdef INET6
+ else if (!strcmp("-4", argv[i]) || !strcmp("-6", argv[i]))
+ set_param_option(Sprintf("dns_order=%c", argv[i][1])->ptr);
+#endif
+ else if (!strcmp("-post", argv[i])) {
+ if (++i >= argc)
+ usage();
+ post_file = argv[i];
+ }
+ else if (!strcmp("-header", argv[i])) {
+ Str hs;
+ if (++i >= argc)
+ usage();
+ if ((hs = make_optional_header_string(argv[i])) != NULL) {
+ if (header_string == NULL)
+ header_string = hs;
+ else
+ Strcat(header_string, hs);
+ }
+ while (argv[i][0]) {
+ argv[i][0] = '\0';
+ argv[i]++;
+ }
+ }
+#ifdef USE_MOUSE
+ else if (!strcmp("-no-mouse", argv[i])) {
+ use_mouse = FALSE;
+ }
+#endif /* USE_MOUSE */
+#ifdef USE_COOKIE
+ else if (!strcmp("-no-cookie", argv[i])) {
+ use_cookie = FALSE;
+ accept_cookie = FALSE;
+ }
+ else if (!strcmp("-cookie", argv[i])) {
+ use_cookie = TRUE;
+ accept_cookie = TRUE;
+ }
+#endif /* USE_COOKIE */
+ else if (!strcmp("-pauth", argv[i])) {
+ if (++i >= argc)
+ usage();
+ proxy_auth_cookie = Strnew_m_charp("Basic ",
+ encodeB(argv[i])->ptr,
+ NULL);
+ while (argv[i][0]) {
+ argv[i][0] = '\0';
+ argv[i]++;
+ }
+ }
+#ifdef DEBIAN
+ else if (!strcmp("-s", argv[i]))
+#else
+ else if (!strcmp("-S", argv[i]))
+#endif
+ squeezeBlankLine = TRUE;
+ else if (!strcmp("-X", argv[i]))
+ Do_not_use_ti_te = TRUE;
+ else if (!strcmp("-title", argv[i]))
+ displayTitleTerm = getenv("TERM");
+ else if (!strncmp("-title=", argv[i], 7))
+ displayTitleTerm = argv[i] + 7;
+ else if (!strcmp("-o", argv[i]) ||
+ !strcmp("-show-option", argv[i])) {
+ if (!strcmp("-show-option", argv[i]) || ++i >= argc ||
+ !strcmp(argv[i], "?")) {
+ show_params(stdout);
+ exit(0);
+ }
+ if (!set_param_option(argv[i])) {
+ /* option set failed */
+ /* FIXME: gettextize? */
+ fprintf(stderr, "%s: bad option\n", argv[i]);
+ show_params_p = 1;
+ usage();
+ }
+ }
+ else if (!strcmp("-dummy", argv[i])) {
+ /* do nothing */
+ }
+ else if (!strcmp("-debug", argv[i])) {
+ w3m_debug = TRUE;
+ }
+ else if (!strcmp("-reqlog",argv[i])) {
+ w3m_reqlog=rcFile("request.log");
+ }
+ else {
+ usage();
+ }
+ }
+ else if (*argv[i] == '+') {
+ line_str = argv[i] + 1;
+ }
+ else {
+ load_argv[load_argc++] = argv[i];
+ }
+ i++;
+ }
+
+#ifdef __WATT32__
+ if (w3m_debug)
+ dbug_init();
+ sock_init();
+#endif
+
+ FirstTab = NULL;
+ LastTab = NULL;
+ nTab = 0;
+ CurrentTab = NULL;
+ CurrentKey = -1;
+ if (BookmarkFile == NULL)
+ BookmarkFile = rcFile(BOOKMARK);
+
+ if (!isatty(1) && !w3m_dump) {
+ /* redirected output */
+ w3m_dump = DUMP_BUFFER;
+ }
+ if (w3m_dump) {
+ if (COLS == 0)
+ COLS = 80;
+ }
+
+#ifdef USE_BINMODE_STREAM
+ setmode(fileno(stdout), O_BINARY);
+#endif
+ if (!w3m_dump && !w3m_backend) {
+ fmInit();
+#ifdef SIGWINCH
+ mySignal(SIGWINCH, resize_hook);
+#else /* not SIGWINCH */
+ setlinescols();
+ setupscreen();
+#endif /* not SIGWINCH */
+ }
+#ifdef USE_IMAGE
+ else if (w3m_halfdump && displayImage)
+ activeImage = TRUE;
+#endif
+
+ sync_with_option();
+#ifdef USE_COOKIE
+ initCookie();
+#endif /* USE_COOKIE */
+#ifdef USE_HISTORY
+ if (UseHistory)
+ loadHistory(URLHist);
+#endif /* not USE_HISTORY */
+
+#ifdef USE_M17N
+ wtf_init(DocumentCharset, DisplayCharset);
+ /* if (w3m_dump)
+ * WcOption.pre_conv = WC_TRUE;
+ */
+#endif
+
+ if (w3m_backend)
+ backend();
+
+ if (w3m_dump)
+ mySignal(SIGINT, SIG_IGN);
+#ifdef SIGCHLD
+ mySignal(SIGCHLD, sig_chld);
+#endif
+#ifdef SIGPIPE
+ mySignal(SIGPIPE, SigPipe);
+#endif
+
+ orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
+ err_msg = Strnew();
+ if (load_argc == 0) {
+ /* no URL specified */
+ if (!isatty(0)) {
+ redin = newFileStream(fdopen(dup(0), "rb"), (void (*)())pclose);
+ newbuf = openGeneralPagerBuffer(redin);
+ dup2(1, 0);
+ }
+ else if (load_bookmark) {
+ newbuf = loadGeneralFile(BookmarkFile, NULL, NO_REFERER, 0, NULL);
+ if (newbuf == NULL)
+ Strcat_charp(err_msg, "w3m: Can't load bookmark.\n");
+ }
+ else if (visual_start) {
+ /* FIXME: gettextize? */
+ Str s_page;
+ s_page =
+ Strnew_charp
+ ("<title>W3M startup page</title><center><b>Welcome to ");
+ Strcat_charp(s_page, "<a href='http://w3m.sourceforge.net/'>");
+ Strcat_m_charp(s_page,
+ "w3m</a>!<p><p>This is w3m version ",
+ w3m_version,
+ "<br>Written by <a href='mailto:aito@fw.ipsj.or.jp'>Akinori Ito</a>",
+ NULL);
+#ifdef DEBIAN
+ Strcat_m_charp(s_page,
+ "<p>Debian package is maintained by <a href='mailto:ukai@debian.or.jp'>Fumitoshi UKAI</a>.",
+ "You can read <a href='file:///usr/share/doc/w3m/'>w3m documents on your local system</a>.",
+ NULL);
+#endif /* DEBIAN */
+ newbuf = loadHTMLString(s_page);
+ if (newbuf == NULL)
+ Strcat_charp(err_msg, "w3m: Can't load string.\n");
+ else if (newbuf != NO_BUFFER)
+ newbuf->bufferprop |= (BP_INTERNAL | BP_NO_URL);
+ }
+ else if ((p = getenv("HTTP_HOME")) != NULL ||
+ (p = getenv("WWW_HOME")) != NULL) {
+ newbuf = loadGeneralFile(p, NULL, NO_REFERER, 0, NULL);
+ if (newbuf == NULL)
+ Strcat(err_msg, Sprintf("w3m: Can't load %s.\n", p));
+ else if (newbuf != NO_BUFFER)
+ pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
+ }
+ else {
+ if (fmInitialized)
+ fmTerm();
+ usage();
+ }
+ if (newbuf == NULL) {
+ if (fmInitialized)
+ fmTerm();
+ if (err_msg->length)
+ fprintf(stderr, "%s", err_msg->ptr);
+ w3m_exit(2);
+ }
+ i = -1;
+ }
+ else {
+ i = 0;
+ }
+ for (; i < load_argc; i++) {
+ if (i >= 0) {
+ SearchHeader = search_header;
+ DefaultType = default_type;
+ if (w3m_dump == DUMP_HEAD) {
+ request = New(FormList);
+ request->method = FORM_METHOD_HEAD;
+ newbuf =
+ loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
+ request);
+ }
+ else {
+ if (post_file && i == 0) {
+ FILE *fp;
+ Str body;
+ if (!strcmp(post_file, "-"))
+ fp = stdin;
+ else
+ fp = fopen(post_file, "r");
+ if (fp == NULL) {
+ /* FIXME: gettextize? */
+ Strcat(err_msg,
+ Sprintf("w3m: Can't open %s.\n", post_file));
+ continue;
+ }
+ body = Strfgetall(fp);
+ if (fp != stdin)
+ fclose(fp);
+ request =
+ newFormList(NULL, "post", NULL, NULL, NULL, NULL,
+ NULL);
+ request->body = body->ptr;
+ request->boundary = NULL;
+ request->length = body->length;
+ }
+ else {
+ request = NULL;
+ }
+ newbuf =
+ loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
+ request);
+ }
+ if (newbuf == NULL) {
+ /* FIXME: gettextize? */
+ Strcat(err_msg,
+ Sprintf("w3m: Can't load %s.\n", load_argv[i]));
+ continue;
+ }
+ else if (newbuf == NO_BUFFER)
+ continue;
+ switch (newbuf->real_scheme) {
+ case SCM_MAILTO:
+ break;
+ case SCM_LOCAL:
+ case SCM_LOCAL_CGI:
+ unshiftHist(LoadHist, conv_from_system(load_argv[i]));
+ default:
+ pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
+ break;
+ }
+ }
+ else if (newbuf == NO_BUFFER)
+ continue;
+ if (newbuf->pagerSource ||
+ (newbuf->real_scheme == SCM_LOCAL && newbuf->header_source &&
+ newbuf->currentURL.file && strcmp(newbuf->currentURL.file, "-")))
+ newbuf->search_header = search_header;
+ if (CurrentTab == NULL) {
+ FirstTab = LastTab = CurrentTab = newTab();
+ nTab = 1;
+ Firstbuf = Currentbuf = newbuf;
+ }
+ else if (open_new_tab) {
+ _newT();
+ Currentbuf->nextBuffer = newbuf;
+ delBuffer(Currentbuf);
+ }
+ else {
+ Currentbuf->nextBuffer = newbuf;
+ Currentbuf = newbuf;
+ }
+ if (!w3m_dump || w3m_dump == DUMP_BUFFER) {
+ if (Currentbuf->frameset != NULL && RenderFrame)
+ rFrame();
+ }
+ if (w3m_dump)
+ do_dump(Currentbuf);
+ else {
+ Currentbuf = newbuf;
+#ifdef USE_BUFINFO
+ saveBufferInfo();
+#endif
+ }
+ }
+ if (w3m_dump) {
+ if (err_msg->length)
+ fprintf(stderr, "%s", err_msg->ptr);
+#ifdef USE_COOKIE
+ save_cookies();
+#endif /* USE_COOKIE */
+ w3m_exit(0);
+ }
+
+ if (add_download_list) {
+ add_download_list = FALSE;
+ CurrentTab = LastTab;
+ if (!FirstTab) {
+ FirstTab = LastTab = CurrentTab = newTab();
+ nTab = 1;
+ }
+ if (!Firstbuf || Firstbuf == NO_BUFFER) {
+ Firstbuf = Currentbuf = newBuffer(INIT_BUFFER_WIDTH);
+ Currentbuf->bufferprop = BP_INTERNAL | BP_NO_URL;
+ Currentbuf->buffername = DOWNLOAD_LIST_TITLE;
+ }
+ else
+ Currentbuf = Firstbuf;
+ ldDL();
+ }
+ else
+ CurrentTab = FirstTab;
+ if (!FirstTab || !Firstbuf || Firstbuf == NO_BUFFER) {
+ if (newbuf == NO_BUFFER) {
+ if (fmInitialized)
+ /* FIXME: gettextize? */
+ inputChar("Hit any key to quit w3m:");
+ }
+ if (fmInitialized)
+ fmTerm();
+ if (err_msg->length)
+ fprintf(stderr, "%s", err_msg->ptr);
+ if (newbuf == NO_BUFFER) {
+#ifdef USE_COOKIE
+ save_cookies();
+#endif /* USE_COOKIE */
+ if (!err_msg->length)
+ w3m_exit(0);
+ }
+ w3m_exit(2);
+ }
+ if (err_msg->length)
+ disp_message_nsec(err_msg->ptr, FALSE, 1, TRUE, FALSE);
+
+ SearchHeader = FALSE;
+ DefaultType = NULL;
+#ifdef USE_M17N
+ UseContentCharset = TRUE;
+ WcOption.auto_detect = auto_detect;
+#endif
+
+ Currentbuf = Firstbuf;
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ if (line_str) {
+ _goLine(line_str);
+ }
+ for (;;) {
+ if (add_download_list) {
+ add_download_list = FALSE;
+ ldDL();
+ }
+ if (Currentbuf->submit) {
+ Anchor *a = Currentbuf->submit;
+ Currentbuf->submit = NULL;
+ gotoLine(Currentbuf, a->start.line);
+ Currentbuf->pos = a->start.pos;
+ _followForm(TRUE);
+ continue;
+ }
+ /* event processing */
+ if (CurrentEvent) {
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ CurrentCmdData = (char *)CurrentEvent->data;
+ w3mFuncList[CurrentEvent->cmd].func();
+ CurrentCmdData = NULL;
+ CurrentEvent = CurrentEvent->next;
+ continue;
+ }
+ /* get keypress event */
+#ifdef USE_ALARM
+ if (Currentbuf->event) {
+ if (Currentbuf->event->status != AL_UNSET) {
+ CurrentAlarm = Currentbuf->event;
+ if (CurrentAlarm->sec == 0) { /* refresh (0sec) */
+ Currentbuf->event = NULL;
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ CurrentCmdData = (char *)CurrentAlarm->data;
+ w3mFuncList[CurrentAlarm->cmd].func();
+ CurrentCmdData = NULL;
+ continue;
+ }
+ }
+ else
+ Currentbuf->event = NULL;
+ }
+ if (!Currentbuf->event)
+ CurrentAlarm = &DefaultAlarm;
+#endif
+#ifdef USE_MOUSE
+ mouse_action.in_action = FALSE;
+ if (use_mouse)
+ mouse_active();
+#endif /* USE_MOUSE */
+#ifdef USE_ALARM
+ if (CurrentAlarm->sec > 0) {
+ mySignal(SIGALRM, SigAlarm);
+ alarm(CurrentAlarm->sec);
+ }
+#endif
+#ifdef SIGWINCH
+ mySignal(SIGWINCH, resize_hook);
+#endif
+#ifdef USE_IMAGE
+ if (activeImage && displayImage && Currentbuf->img &&
+ !Currentbuf->image_loaded) {
+ do {
+#ifdef SIGWINCH
+ if (need_resize_screen)
+ resize_screen();
+#endif
+ loadImage(Currentbuf, IMG_FLAG_NEXT);
+ } while (sleep_till_anykey(1, 0) <= 0);
+ }
+#ifdef SIGWINCH
+ else
+#endif
+#endif
+#ifdef SIGWINCH
+ {
+ do {
+ if (need_resize_screen)
+ resize_screen();
+ } while (sleep_till_anykey(1, 0) <= 0);
+ }
+#endif
+ c = getch();
+#ifdef USE_ALARM
+ if (CurrentAlarm->sec > 0) {
+ alarm(0);
+ }
+#endif
+#ifdef USE_MOUSE
+ if (use_mouse)
+ mouse_inactive();
+#endif /* USE_MOUSE */
+ if (IS_ASCII(c)) { /* Ascii */
+ if(((prec_num && c == '0') || '1' <= c) && (c <= '9')) {
+ prec_num = prec_num * 10 + (int)(c - '0');
+ if (prec_num > PREC_LIMIT)
+ prec_num = PREC_LIMIT;
+ }
+ else {
+ set_buffer_environ(Currentbuf);
+ save_buffer_position(Currentbuf);
+ keyPressEventProc((int)c);
+ prec_num = 0;
+ }
+ }
+ prev_key = CurrentKey;
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ }
+}
+
+static void
+keyPressEventProc(int c)
+{
+ CurrentKey = c;
+ w3mFuncList[(int)GlobalKeymap[c]].func();
+}
+
+void
+pushEvent(int cmd, void *data)
+{
+ Event *event;
+
+ event = New(Event);
+ event->cmd = cmd;
+ event->data = data;
+ event->next = NULL;
+ if (CurrentEvent)
+ LastEvent->next = event;
+ else
+ CurrentEvent = event;
+ LastEvent = event;
+}
+
+static void
+dump_source(Buffer *buf)
+{
+ FILE *f;
+ char c;
+ if (buf->sourcefile == NULL)
+ return;
+ f = fopen(buf->sourcefile, "r");
+ if (f == NULL)
+ return;
+ while (c = fgetc(f), !feof(f)) {
+ putchar(c);
+ }
+ fclose(f);
+}
+
+static void
+dump_head(Buffer *buf)
+{
+ TextListItem *ti;
+
+ if (buf->document_header == NULL) {
+ if (w3m_dump & DUMP_EXTRA)
+ printf("\n");
+ return;
+ }
+ for (ti = buf->document_header->first; ti; ti = ti->next) {
+#ifdef USE_M17N
+ printf("%s",
+ wc_conv_strict(ti->ptr, InnerCharset,
+ buf->document_charset)->ptr);
+#else
+ printf("%s", ti->ptr);
+#endif
+ }
+ puts("");
+}
+
+static void
+dump_extra(Buffer *buf)
+{
+ printf("W3m-current-url: %s\n", parsedURL2Str(&buf->currentURL)->ptr);
+ if (buf->baseURL)
+ printf("W3m-base-url: %s\n", parsedURL2Str(buf->baseURL)->ptr);
+#ifdef USE_M17N
+ printf("W3m-document-charset: %s\n",
+ wc_ces_to_charset(buf->document_charset));
+#endif
+#ifdef USE_SSL
+ if (buf->ssl_certificate) {
+ Str tmp = Strnew();
+ char *p;
+ for (p = buf->ssl_certificate; *p; p++) {
+ Strcat_char(tmp, *p);
+ if (*p == '\n') {
+ for (; *(p + 1) == '\n'; p++) ;
+ if (*(p + 1))
+ Strcat_char(tmp, '\t');
+ }
+ }
+ if (Strlastchar(tmp) != '\n')
+ Strcat_char(tmp, '\n');
+ printf("W3m-ssl-certificate: %s", tmp->ptr);
+ }
+#endif
+}
+
+static void
+do_dump(Buffer *buf)
+{
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+
+ prevtrap = mySignal(SIGINT, intTrap);
+ if (SETJMP(IntReturn) != 0) {
+ mySignal(SIGINT, prevtrap);
+ return;
+ }
+ if (w3m_dump & DUMP_EXTRA)
+ dump_extra(buf);
+ if (w3m_dump & DUMP_HEAD)
+ dump_head(buf);
+ if (w3m_dump & DUMP_SOURCE)
+ dump_source(buf);
+ if (w3m_dump == DUMP_BUFFER)
+ saveBuffer(buf, stdout, FALSE);
+ mySignal(SIGINT, prevtrap);
+}
+
+DEFUN(nulcmd, NOTHING NULL @@@, "Do nothing")
+{ /* do nothing */
+}
+
+#ifdef __EMX__
+DEFUN(pcmap, PCMAP, "pcmap")
+{
+ w3mFuncList[(int)PcKeymap[(int)getch()]].func();
+}
+#else /* not __EMX__ */
+void
+pcmap(void)
+{
+}
+#endif
+
+static void
+escKeyProc(int c, int esc, unsigned char *map)
+{
+ if (CurrentKey >= 0 && CurrentKey & K_MULTI) {
+ unsigned char **mmap;
+ mmap = (unsigned char **)getKeyData(MULTI_KEY(CurrentKey));
+ if (!mmap)
+ return;
+ switch (esc) {
+ case K_ESCD:
+ map = mmap[3];
+ break;
+ case K_ESCB:
+ map = mmap[2];
+ break;
+ case K_ESC:
+ map = mmap[1];
+ break;
+ default:
+ map = mmap[0];
+ break;
+ }
+ esc |= (CurrentKey & ~0xFFFF);
+ }
+ CurrentKey = esc | c;
+ w3mFuncList[(int)map[c]].func();
+}
+
+DEFUN(escmap, ESCMAP, "ESC map")
+{
+ char c;
+ c = getch();
+ if (IS_ASCII(c))
+ escKeyProc((int)c, K_ESC, EscKeymap);
+}
+
+DEFUN(escbmap, ESCBMAP, "ESC [ map")
+{
+ char c;
+ c = getch();
+ if (IS_DIGIT(c)) {
+ escdmap(c);
+ return;
+ }
+ if (IS_ASCII(c))
+ escKeyProc((int)c, K_ESCB, EscBKeymap);
+}
+
+void
+escdmap(char c)
+{
+ int d;
+ d = (int)c - (int)'0';
+ c = getch();
+ if (IS_DIGIT(c)) {
+ d = d * 10 + (int)c - (int)'0';
+ c = getch();
+ }
+ if (c == '~')
+ escKeyProc((int)d, K_ESCD, EscDKeymap);
+}
+
+DEFUN(multimap, MULTIMAP, "multimap")
+{
+ char c;
+ c = getch();
+ if (IS_ASCII(c)) {
+ CurrentKey = K_MULTI | (CurrentKey << 16) | c;
+ escKeyProc((int)c, 0, NULL);
+ }
+}
+
+void
+tmpClearBuffer(Buffer *buf)
+{
+ if (buf->pagerSource == NULL && writeBufferCache(buf) == 0) {
+ buf->firstLine = NULL;
+ buf->topLine = NULL;
+ buf->currentLine = NULL;
+ buf->lastLine = NULL;
+ }
+}
+
+static Str currentURL(void);
+
+#ifdef USE_BUFINFO
+void
+saveBufferInfo()
+{
+ FILE *fp;
+
+ if (w3m_dump)
+ return;
+ if ((fp = fopen(rcFile("bufinfo"), "w")) == NULL) {
+ return;
+ }
+ fprintf(fp, "%s\n", currentURL()->ptr);
+ fclose(fp);
+}
+#endif
+
+static void
+pushBuffer(Buffer *buf)
+{
+ Buffer *b;
+
+#ifdef USE_IMAGE
+ deleteImage(Currentbuf);
+#endif
+ if (clear_buffer)
+ tmpClearBuffer(Currentbuf);
+ if (Firstbuf == Currentbuf) {
+ buf->nextBuffer = Firstbuf;
+ Firstbuf = Currentbuf = buf;
+ }
+ else if ((b = prevBuffer(Firstbuf, Currentbuf)) != NULL) {
+ b->nextBuffer = buf;
+ buf->nextBuffer = Currentbuf;
+ Currentbuf = buf;
+ }
+#ifdef USE_BUFINFO
+ saveBufferInfo();
+#endif
+
+}
+
+static void
+delBuffer(Buffer *buf)
+{
+ if (buf == NULL)
+ return;
+ if (Currentbuf == buf)
+ Currentbuf = buf->nextBuffer;
+ Firstbuf = deleteBuffer(Firstbuf, buf);
+ if (!Currentbuf)
+ Currentbuf = Firstbuf;
+}
+
+static void
+repBuffer(Buffer *oldbuf, Buffer *buf)
+{
+ Firstbuf = replaceBuffer(Firstbuf, oldbuf, buf);
+ Currentbuf = buf;
+}
+
+
+MySignalHandler
+intTrap(SIGNAL_ARG)
+{ /* Interrupt catcher */
+ LONGJMP(IntReturn, 0);
+ SIGNAL_RETURN;
+}
+
+#ifdef SIGWINCH
+static MySignalHandler
+resize_hook(SIGNAL_ARG)
+{
+ need_resize_screen = TRUE;
+ mySignal(SIGWINCH, resize_hook);
+ SIGNAL_RETURN;
+}
+
+static void
+resize_screen(void)
+{
+ need_resize_screen = FALSE;
+ setlinescols();
+ setupscreen();
+ if (CurrentTab)
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+#endif /* SIGWINCH */
+
+#ifdef SIGPIPE
+static MySignalHandler
+SigPipe(SIGNAL_ARG)
+{
+#ifdef USE_MIGEMO
+ init_migemo();
+#endif
+ mySignal(SIGPIPE, SigPipe);
+ SIGNAL_RETURN;
+}
+#endif
+
+/*
+ * Command functions: These functions are called with a keystroke.
+ */
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+static void
+nscroll(int n, int mode)
+{
+ Buffer *buf = Currentbuf;
+ Line *top = buf->topLine, *cur = buf->currentLine;
+ int lnum, tlnum, llnum, diff_n;
+
+ if (buf->firstLine == NULL)
+ return;
+ lnum = cur->linenumber;
+ buf->topLine = lineSkip(buf, top, n, FALSE);
+ if (buf->topLine == top) {
+ lnum += n;
+ if (lnum < buf->topLine->linenumber)
+ lnum = buf->topLine->linenumber;
+ else if (lnum > buf->lastLine->linenumber)
+ lnum = buf->lastLine->linenumber;
+ }
+ else {
+ tlnum = buf->topLine->linenumber;
+ llnum = buf->topLine->linenumber + buf->LINES - 1;
+ if (nextpage_topline)
+ diff_n = 0;
+ else
+ diff_n = n - (tlnum - top->linenumber);
+ if (lnum < tlnum)
+ lnum = tlnum + diff_n;
+ if (lnum > llnum)
+ lnum = llnum + diff_n;
+ }
+ gotoLine(buf, lnum);
+ arrangeLine(buf);
+ if (n > 0) {
+ if (buf->currentLine->bpos &&
+ buf->currentLine->bwidth >= buf->currentColumn + buf->visualpos)
+ cursorDown(buf, 1);
+ else {
+ while (buf->currentLine->next && buf->currentLine->next->bpos &&
+ buf->currentLine->bwidth + buf->currentLine->width <
+ buf->currentColumn + buf->visualpos)
+ cursorDown0(buf, 1);
+ }
+ }
+ else {
+ if (buf->currentLine->bwidth + buf->currentLine->width <
+ buf->currentColumn + buf->visualpos)
+ cursorUp(buf, 1);
+ else {
+ while (buf->currentLine->prev && buf->currentLine->bpos &&
+ buf->currentLine->bwidth >=
+ buf->currentColumn + buf->visualpos)
+ cursorUp0(buf, 1);
+ }
+ }
+ displayBuffer(buf, mode);
+}
+
+/* Move page forward */
+DEFUN(pgFore, NEXT_PAGE, "Move to next page")
+{
+ if (vi_prec_num)
+ nscroll(searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL);
+ else
+ nscroll(prec_num ? searchKeyNum() : searchKeyNum()
+ * (Currentbuf->LINES - 1), prec_num ? B_SCROLL : B_NORMAL);
+}
+
+/* Move page backward */
+DEFUN(pgBack, PREV_PAGE, "Move to previous page")
+{
+ if (vi_prec_num)
+ nscroll(-searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL);
+ else
+ nscroll(-(prec_num ? searchKeyNum() : searchKeyNum()
+ * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
+}
+
+/* 1 line up */
+DEFUN(lup1, UP, "Scroll up one line")
+{
+ nscroll(searchKeyNum(), B_SCROLL);
+}
+
+/* 1 line down */
+DEFUN(ldown1, DOWN, "Scroll down one line")
+{
+ nscroll(-searchKeyNum(), B_SCROLL);
+}
+
+/* move cursor position to the center of screen */
+DEFUN(ctrCsrV, CENTER_V, "Move to the center column")
+{
+ int offsety;
+ if (Currentbuf->firstLine == NULL)
+ return;
+ offsety = Currentbuf->LINES / 2 - Currentbuf->cursorY;
+ if (offsety != 0) {
+#if 0
+ Currentbuf->currentLine = lineSkip(Currentbuf,
+ Currentbuf->currentLine, offsety,
+ FALSE);
+#endif
+ Currentbuf->topLine =
+ lineSkip(Currentbuf, Currentbuf->topLine, -offsety, FALSE);
+ arrangeLine(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+ }
+}
+
+DEFUN(ctrCsrH, CENTER_H, "Move to the center line")
+{
+ int offsetx;
+ if (Currentbuf->firstLine == NULL)
+ return;
+ offsetx = Currentbuf->cursorX - Currentbuf->COLS / 2;
+ if (offsetx != 0) {
+ columnSkip(Currentbuf, offsetx);
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+ }
+}
+
+/* Redraw screen */
+DEFUN(rdrwSc, REDRAW, "Redraw screen")
+{
+ clear();
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+static void
+clear_mark(Line *l)
+{
+ int pos;
+ if (!l)
+ return;
+ for (pos = 0; pos < l->size; pos++)
+ l->propBuf[pos] &= ~PE_MARK;
+}
+
+/* search by regular expression */
+static int
+srchcore(char *volatile str, int (*func) (Buffer *, char *))
+{
+ MySignalHandler(*prevtrap) ();
+ volatile int i, result = SR_NOTFOUND;
+
+ if (str != NULL && str != SearchString)
+ SearchString = str;
+ if (SearchString == NULL || *SearchString == '\0')
+ return SR_NOTFOUND;
+
+ str = conv_search_string(SearchString, DisplayCharset);
+ prevtrap = mySignal(SIGINT, intTrap);
+ crmode();
+ if (SETJMP(IntReturn) == 0) {
+ for (i = 0; i < PREC_NUM; i++) {
+ result = func(Currentbuf, str);
+ if (i < PREC_NUM - 1 && result & SR_FOUND)
+ clear_mark(Currentbuf->currentLine);
+ }
+ }
+ mySignal(SIGINT, prevtrap);
+ term_raw();
+ return result;
+}
+
+static void
+disp_srchresult(int result, char *prompt, char *str)
+{
+ if (str == NULL)
+ str = "";
+ if (result & SR_NOTFOUND)
+ disp_message(Sprintf("Not found: %s", str)->ptr, TRUE);
+ else if (result & SR_WRAPPED)
+ disp_message(Sprintf("Search wrapped: %s", str)->ptr, TRUE);
+ else if (show_srch_str)
+ disp_message(Sprintf("%s%s", prompt, str)->ptr, TRUE);
+}
+
+static int
+dispincsrch(int ch, Str buf, Lineprop *prop)
+{
+ static Buffer sbuf;
+ static Line *currentLine;
+ static int pos;
+ char *str;
+ int do_next_search = FALSE;
+
+ if (ch == 0 && buf == NULL) {
+ SAVE_BUFPOSITION(&sbuf); /* search starting point */
+ currentLine = sbuf.currentLine;
+ pos = sbuf.pos;
+ return -1;
+ }
+
+ str = buf->ptr;
+ switch (ch) {
+ case 022: /* C-r */
+ searchRoutine = backwardSearch;
+ do_next_search = TRUE;
+ break;
+ case 023: /* C-s */
+ searchRoutine = forwardSearch;
+ do_next_search = TRUE;
+ break;
+
+#ifdef USE_MIGEMO
+ case 034:
+ migemo_active = -migemo_active;
+ goto done;
+#endif
+
+ default:
+ if (ch >= 0)
+ return ch; /* use InputKeymap */
+ }
+
+ if (do_next_search) {
+ if (*str) {
+ if (searchRoutine == forwardSearch)
+ Currentbuf->pos += 1;
+ SAVE_BUFPOSITION(&sbuf);
+ if (srchcore(str, searchRoutine) == SR_NOTFOUND
+ && searchRoutine == forwardSearch) {
+ Currentbuf->pos -= 1;
+ SAVE_BUFPOSITION(&sbuf);
+ }
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ clear_mark(Currentbuf->currentLine);
+ return -1;
+ }
+ else
+ return 020; /* _prev completion for C-s C-s */
+ }
+ else if (*str) {
+ RESTORE_BUFPOSITION(&sbuf);
+ arrangeCursor(Currentbuf);
+ srchcore(str, searchRoutine);
+ arrangeCursor(Currentbuf);
+ currentLine = Currentbuf->currentLine;
+ pos = Currentbuf->pos;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ clear_mark(Currentbuf->currentLine);
+#ifdef USE_MIGEMO
+ done:
+ while (*str++ != '\0') {
+ if (migemo_active > 0)
+ *prop++ |= PE_UNDER;
+ else
+ *prop++ &= ~PE_UNDER;
+ }
+#endif
+ return -1;
+}
+
+void
+isrch(int (*func) (Buffer *, char *), char *prompt)
+{
+ char *str;
+ Buffer sbuf;
+ SAVE_BUFPOSITION(&sbuf);
+ dispincsrch(0, NULL, NULL); /* initialize incremental search state */
+
+ searchRoutine = func;
+ str = inputLineHistSearch(prompt, NULL, IN_STRING, TextHist, dispincsrch);
+ if (str == NULL) {
+ RESTORE_BUFPOSITION(&sbuf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+void
+srch(int (*func) (Buffer *, char *), char *prompt)
+{
+ char *str;
+ int result;
+ int disp = FALSE;
+ int pos;
+
+ str = searchKeyData();
+ if (str == NULL || *str == '\0') {
+ str = inputStrHist(prompt, NULL, TextHist);
+ if (str != NULL && *str == '\0')
+ str = SearchString;
+ if (str == NULL) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ disp = TRUE;
+ }
+ pos = Currentbuf->pos;
+ if (func == forwardSearch)
+ Currentbuf->pos += 1;
+ result = srchcore(str, func);
+ if (result & SR_FOUND)
+ clear_mark(Currentbuf->currentLine);
+ else
+ Currentbuf->pos = pos;
+ displayBuffer(Currentbuf, B_NORMAL);
+ if (disp)
+ disp_srchresult(result, prompt, str);
+ searchRoutine = func;
+}
+
+/* Search regular expression forward */
+
+DEFUN(srchfor, SEARCH SEARCH_FORE WHEREIS, "Search forward")
+{
+ srch(forwardSearch, "Forward: ");
+}
+
+DEFUN(isrchfor, ISEARCH, "Incremental search forward")
+{
+ isrch(forwardSearch, "I-search: ");
+}
+
+/* Search regular expression backward */
+
+DEFUN(srchbak, SEARCH_BACK, "Search backward")
+{
+ srch(backwardSearch, "Backward: ");
+}
+
+DEFUN(isrchbak, ISEARCH_BACK, "Incremental search backward")
+{
+ isrch(backwardSearch, "I-search backward: ");
+}
+
+static void
+srch_nxtprv(int reverse)
+{
+ int result;
+ /* *INDENT-OFF* */
+ static int (*routine[2]) (Buffer *, char *) = {
+ forwardSearch, backwardSearch
+ };
+ /* *INDENT-ON* */
+
+ if (searchRoutine == NULL) {
+ /* FIXME: gettextize? */
+ disp_message("No previous regular expression", TRUE);
+ return;
+ }
+ if (reverse != 0)
+ reverse = 1;
+ if (searchRoutine == backwardSearch)
+ reverse ^= 1;
+ if (reverse == 0)
+ Currentbuf->pos += 1;
+ result = srchcore(SearchString, routine[reverse]);
+ if (result & SR_FOUND)
+ clear_mark(Currentbuf->currentLine);
+ displayBuffer(Currentbuf, B_NORMAL);
+ disp_srchresult(result, (reverse ? "Backward: " : "Forward: "),
+ SearchString);
+}
+
+/* Search next matching */
+DEFUN(srchnxt, SEARCH_NEXT, "Search next regexp")
+{
+ srch_nxtprv(0);
+}
+
+/* Search previous matching */
+DEFUN(srchprv, SEARCH_PREV, "Search previous regexp")
+{
+ srch_nxtprv(1);
+}
+
+static void
+shiftvisualpos(Buffer *buf, int shift)
+{
+ Line *l = buf->currentLine;
+ buf->visualpos -= shift;
+ if (buf->visualpos - l->bwidth >= buf->COLS)
+ buf->visualpos = l->bwidth + buf->COLS - 1;
+ else if (buf->visualpos - l->bwidth < 0)
+ buf->visualpos = l->bwidth;
+ arrangeLine(buf);
+ if (buf->visualpos - l->bwidth == -shift && buf->cursorX == 0)
+ buf->visualpos = l->bwidth;
+}
+
+/* Shift screen left */
+DEFUN(shiftl, SHIFT_LEFT, "Shift screen left")
+{
+ int column;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ column = Currentbuf->currentColumn;
+ columnSkip(Currentbuf, searchKeyNum() * (-Currentbuf->COLS + 1) + 1);
+ shiftvisualpos(Currentbuf, Currentbuf->currentColumn - column);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* Shift screen right */
+DEFUN(shiftr, SHIFT_RIGHT, "Shift screen right")
+{
+ int column;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ column = Currentbuf->currentColumn;
+ columnSkip(Currentbuf, searchKeyNum() * (Currentbuf->COLS - 1) - 1);
+ shiftvisualpos(Currentbuf, Currentbuf->currentColumn - column);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(col1R, RIGHT, "Shift screen one column right")
+{
+ Buffer *buf = Currentbuf;
+ Line *l = buf->currentLine;
+ int j, column, n = searchKeyNum();
+
+ if (l == NULL)
+ return;
+ for (j = 0; j < n; j++) {
+ column = buf->currentColumn;
+ columnSkip(Currentbuf, 1);
+ if (column == buf->currentColumn)
+ break;
+ shiftvisualpos(Currentbuf, 1);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(col1L, LEFT, "Shift screen one column")
+{
+ Buffer *buf = Currentbuf;
+ Line *l = buf->currentLine;
+ int j, n = searchKeyNum();
+
+ if (l == NULL)
+ return;
+ for (j = 0; j < n; j++) {
+ if (buf->currentColumn == 0)
+ break;
+ columnSkip(Currentbuf, -1);
+ shiftvisualpos(Currentbuf, -1);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(setEnv, SETENV, "Set environment variable")
+{
+ char *env;
+ char *var, *value;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ env = searchKeyData();
+ if (env == NULL || *env == '\0' || strchr(env, '=') == NULL) {
+ if (env != NULL && *env != '\0')
+ env = Sprintf("%s=", env)->ptr;
+ env = inputStrHist("Set environ: ", env, TextHist);
+ if (env == NULL || *env == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ if ((value = strchr(env, '=')) != NULL && value > env) {
+ var = allocStr(env, value - env);
+ value++;
+ set_environ(var, value);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(pipeBuf, PIPE_BUF, "Send rendered document to pipe")
+{
+ Buffer *buf;
+ char *cmd, *tmpf;
+ FILE *f;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ cmd = searchKeyData();
+ if (cmd == NULL || *cmd == '\0') {
+ /* FIXME: gettextize? */
+ cmd = inputLineHist("Pipe buffer to: ", "", IN_COMMAND, ShellHist);
+ }
+ if (cmd != NULL)
+ cmd = conv_to_system(cmd);
+ if (cmd == NULL || *cmd == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ tmpf = tmpfname(TMPF_DFL, NULL)->ptr;
+ f = fopen(tmpf, "w");
+ if (f == NULL) {
+ /* FIXME: gettextize? */
+ disp_message(Sprintf("Can't save buffer to %s", cmd)->ptr, TRUE);
+ return;
+ }
+ saveBuffer(Currentbuf, f, TRUE);
+ fclose(f);
+ buf = getpipe(myExtCommand(cmd, shell_quote(tmpf), TRUE)->ptr);
+ if (buf == NULL) {
+ disp_message("Execution failed", TRUE);
+ return;
+ }
+ else {
+ buf->filename = cmd;
+ buf->buffername = Sprintf("%s %s", PIPEBUFFERNAME,
+ conv_from_system(cmd))->ptr;
+ buf->bufferprop |= (BP_INTERNAL | BP_NO_URL);
+ if (buf->type == NULL)
+ buf->type = "text/plain";
+ buf->currentURL.file = "-";
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Execute shell command and read output ac pipe. */
+DEFUN(pipesh, PIPE_SHELL, "Execute shell command and browse")
+{
+ Buffer *buf;
+ char *cmd;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ cmd = searchKeyData();
+ if (cmd == NULL || *cmd == '\0') {
+ cmd = inputLineHist("(read shell[pipe])!", "", IN_COMMAND, ShellHist);
+ }
+ if (cmd != NULL)
+ cmd = conv_to_system(cmd);
+ if (cmd == NULL || *cmd == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ buf = getpipe(cmd);
+ if (buf == NULL) {
+ disp_message("Execution failed", TRUE);
+ return;
+ }
+ else {
+ buf->bufferprop |= (BP_INTERNAL | BP_NO_URL);
+ if (buf->type == NULL)
+ buf->type = "text/plain";
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Execute shell command and load entire output to buffer */
+DEFUN(readsh, READ_SHELL, "Execute shell command and load")
+{
+ Buffer *buf;
+ MySignalHandler(*prevtrap) ();
+ char *cmd;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ cmd = searchKeyData();
+ if (cmd == NULL || *cmd == '\0') {
+ cmd = inputLineHist("(read shell)!", "", IN_COMMAND, ShellHist);
+ }
+ if (cmd != NULL)
+ cmd = conv_to_system(cmd);
+ if (cmd == NULL || *cmd == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ prevtrap = mySignal(SIGINT, intTrap);
+ crmode();
+ buf = getshell(cmd);
+ mySignal(SIGINT, prevtrap);
+ term_raw();
+ if (buf == NULL) {
+ /* FIXME: gettextize? */
+ disp_message("Execution failed", TRUE);
+ return;
+ }
+ else {
+ buf->bufferprop |= (BP_INTERNAL | BP_NO_URL);
+ if (buf->type == NULL)
+ buf->type = "text/plain";
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Execute shell command */
+DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command")
+{
+ char *cmd;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ cmd = searchKeyData();
+ if (cmd == NULL || *cmd == '\0') {
+ cmd = inputLineHist("(exec shell)!", "", IN_COMMAND, ShellHist);
+ }
+ if (cmd != NULL)
+ cmd = conv_to_system(cmd);
+ if (cmd != NULL && *cmd != '\0') {
+ fmTerm();
+ printf("\n");
+ system(cmd);
+ /* FIXME: gettextize? */
+ printf("\n[Hit any key]");
+ fflush(stdout);
+ fmInit();
+ getch();
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Load file */
+DEFUN(ldfile, LOAD, "Load local file")
+{
+ char *fn;
+
+ fn = searchKeyData();
+ if (fn == NULL || *fn == '\0') {
+ /* FIXME: gettextize? */
+ fn = inputFilenameHist("(Load)Filename? ", NULL, LoadHist);
+ }
+ if (fn != NULL)
+ fn = conv_to_system(fn);
+ if (fn == NULL || *fn == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ cmd_loadfile(fn);
+}
+
+/* Load help file */
+DEFUN(ldhelp, HELP, "View help")
+{
+#ifdef USE_HELP_CGI
+ char *lang;
+ int n;
+ Str tmp;
+
+ lang = AcceptLang;
+ n = strcspn(lang, ";, \t");
+ tmp = Sprintf("file:///$LIB/" HELP_CGI CGI_EXTENSION "?version=%s&lang=%s",
+ Str_form_quote(Strnew_charp(w3m_version))->ptr,
+ Str_form_quote(Strnew_charp_n(lang, n))->ptr);
+ cmd_loadURL(tmp->ptr, NULL, NO_REFERER, NULL);
+#else
+ cmd_loadURL(helpFile(HELP_FILE), NULL, NO_REFERER, NULL);
+#endif
+}
+
+static void
+cmd_loadfile(char *fn)
+{
+ Buffer *buf;
+
+ buf = loadGeneralFile(file_to_url(fn), NULL, NO_REFERER, 0, NULL);
+ if (buf == NULL) {
+ /* FIXME: gettextize? */
+ char *emsg = Sprintf("%s not found", conv_from_system(fn))->ptr;
+ disp_err_message(emsg, FALSE);
+ }
+ else if (buf != NO_BUFFER) {
+ pushBuffer(buf);
+ if (RenderFrame && Currentbuf->frameset != NULL)
+ rFrame();
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* Move cursor left */
+static void
+_movL(int n)
+{
+ int i, m = searchKeyNum();
+ if (Currentbuf->firstLine == NULL)
+ return;
+ for (i = 0; i < m; i++)
+ cursorLeft(Currentbuf, n);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(movL, MOVE_LEFT,
+ "Move cursor left (a half screen shift at the left edge)")
+{
+ _movL(Currentbuf->COLS / 2);
+}
+
+DEFUN(movL1, MOVE_LEFT1, "Move cursor left (1 columns shift at the left edge)")
+{
+ _movL(1);
+}
+
+/* Move cursor downward */
+static void
+_movD(int n)
+{
+ int i, m = searchKeyNum();
+ if (Currentbuf->firstLine == NULL)
+ return;
+ for (i = 0; i < m; i++)
+ cursorDown(Currentbuf, n);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(movD, MOVE_DOWN,
+ "Move cursor down (a half screen scroll at the end of screen)")
+{
+ _movD((Currentbuf->LINES + 1) / 2);
+}
+
+DEFUN(movD1, MOVE_DOWN1,
+ "Move cursor down (1 line scroll at the end of screen)")
+{
+ _movD(1);
+}
+
+/* move cursor upward */
+static void
+_movU(int n)
+{
+ int i, m = searchKeyNum();
+ if (Currentbuf->firstLine == NULL)
+ return;
+ for (i = 0; i < m; i++)
+ cursorUp(Currentbuf, n);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(movU, MOVE_UP,
+ "Move cursor up (a half screen scroll at the top of screen)")
+{
+ _movU((Currentbuf->LINES + 1) / 2);
+}
+
+DEFUN(movU1, MOVE_UP1, "Move cursor up (1 line scrol at the top of screen)")
+{
+ _movU(1);
+}
+
+/* Move cursor right */
+static void
+_movR(int n)
+{
+ int i, m = searchKeyNum();
+ if (Currentbuf->firstLine == NULL)
+ return;
+ for (i = 0; i < m; i++)
+ cursorRight(Currentbuf, n);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+DEFUN(movR, MOVE_RIGHT,
+ "Move cursor right (a half screen shift at the right edge)")
+{
+ _movR(Currentbuf->COLS / 2);
+}
+
+DEFUN(movR1, MOVE_RIGHT1,
+ "Move cursor right (1 columns shift at the right edge)")
+{
+ _movR(1);
+}
+
+/* movLW, movRW */
+/*
+ * From: Takashi Nishimoto <g96p0935@mse.waseda.ac.jp> Date: Mon, 14 Jun
+ * 1999 09:29:56 +0900
+ */
+#define IS_WORD_CHAR(c,p) (IS_ALNUM(c) && CharType(p) == PC_ASCII)
+
+static int
+prev_nonnull_line(Line *line)
+{
+ Line *l;
+
+ for (l = line; l != NULL && l->len == 0; l = l->prev) ;
+ if (l == NULL || l->len == 0)
+ return -1;
+
+ Currentbuf->currentLine = l;
+ if (l != line)
+ Currentbuf->pos = Currentbuf->currentLine->len;
+ return 0;
+}
+
+DEFUN(movLW, PREV_WORD, "Move to previous word")
+{
+ char *lb;
+ Lineprop *pb;
+ Line *pline;
+ int ppos;
+ int i, n = searchKeyNum();
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+
+ for (i = 0; i < n; i++) {
+ pline = Currentbuf->currentLine;
+ ppos = Currentbuf->pos;
+
+ if (prev_nonnull_line(Currentbuf->currentLine) < 0)
+ goto end;
+
+ while (1) {
+ lb = Currentbuf->currentLine->lineBuf;
+ pb = Currentbuf->currentLine->propBuf;
+ while (Currentbuf->pos > 0 &&
+ !IS_WORD_CHAR(lb[Currentbuf->pos - 1],
+ pb[Currentbuf->pos - 1])) {
+ Currentbuf->pos--;
+ }
+ if (Currentbuf->pos > 0)
+ break;
+ if (prev_nonnull_line(Currentbuf->currentLine->prev) < 0) {
+ Currentbuf->currentLine = pline;
+ Currentbuf->pos = ppos;
+ goto end;
+ }
+ Currentbuf->pos = Currentbuf->currentLine->len;
+ }
+
+ lb = Currentbuf->currentLine->lineBuf;
+ pb = Currentbuf->currentLine->propBuf;
+ while (Currentbuf->pos > 0 &&
+ IS_WORD_CHAR(lb[Currentbuf->pos - 1],
+ pb[Currentbuf->pos - 1])) {
+ Currentbuf->pos--;
+ }
+ }
+ end:
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+static int
+next_nonnull_line(Line *line)
+{
+ Line *l;
+
+ for (l = line; l != NULL && l->len == 0; l = l->next) ;
+
+ if (l == NULL || l->len == 0)
+ return -1;
+
+ Currentbuf->currentLine = l;
+ if (l != line)
+ Currentbuf->pos = 0;
+ return 0;
+}
+
+DEFUN(movRW, NEXT_WORD, "Move to next word")
+{
+ char *lb;
+ Lineprop *pb;
+ Line *pline;
+ int ppos;
+ int i, n = searchKeyNum();
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+
+ for (i = 0; i < n; i++) {
+ pline = Currentbuf->currentLine;
+ ppos = Currentbuf->pos;
+
+ if (next_nonnull_line(Currentbuf->currentLine) < 0)
+ goto end;
+
+ lb = Currentbuf->currentLine->lineBuf;
+ pb = Currentbuf->currentLine->propBuf;
+
+ while (lb[Currentbuf->pos] &&
+ IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos]))
+ Currentbuf->pos++;
+
+ while (1) {
+ while (lb[Currentbuf->pos] &&
+ !IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos]))
+ Currentbuf->pos++;
+ if (lb[Currentbuf->pos])
+ break;
+ if (next_nonnull_line(Currentbuf->currentLine->next) < 0) {
+ Currentbuf->currentLine = pline;
+ Currentbuf->pos = ppos;
+ goto end;
+ }
+ Currentbuf->pos = 0;
+ lb = Currentbuf->currentLine->lineBuf;
+ pb = Currentbuf->currentLine->propBuf;
+ }
+ }
+ end:
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+static void
+_quitfm(int confirm)
+{
+ char *ans = "y";
+
+ if (checkDownloadList())
+ /* FIXME: gettextize? */
+ ans = inputChar("Download process retains. "
+ "Do you want to exit w3m? (y/n)");
+ else if (confirm)
+ /* FIXME: gettextize? */
+ ans = inputChar("Do you want to exit w3m? (y/n)");
+ if (!(ans && TOLOWER(*ans) == 'y')) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+
+ term_title(""); /* XXX */
+#ifdef USE_IMAGE
+ if (activeImage)
+ termImage();
+#endif
+ fmTerm();
+#ifdef USE_COOKIE
+ save_cookies();
+#endif /* USE_COOKIE */
+#ifdef USE_HISTORY
+ if (UseHistory && SaveURLHist)
+ saveHistory(URLHist, URLHistSize);
+#endif /* USE_HISTORY */
+ w3m_exit(0);
+}
+
+/* Quit */
+DEFUN(quitfm, ABORT EXIT, "Quit w3m without confirmation")
+{
+ _quitfm(FALSE);
+}
+
+/* Question and Quit */
+DEFUN(qquitfm, QUIT, "Quit w3m")
+{
+ _quitfm(confirm_on_quit);
+}
+
+/* Select buffer */
+DEFUN(selBuf, SELECT, "Go to buffer selection panel")
+{
+ Buffer *buf;
+ int ok;
+ char cmd;
+
+ ok = FALSE;
+ do {
+ buf = selectBuffer(Firstbuf, Currentbuf, &cmd);
+ switch (cmd) {
+ case 'B':
+ ok = TRUE;
+ break;
+ case '\n':
+ case ' ':
+ Currentbuf = buf;
+ ok = TRUE;
+ break;
+ case 'D':
+ delBuffer(buf);
+ if (Firstbuf == NULL) {
+ /* No more buffer */
+ Firstbuf = nullBuffer();
+ Currentbuf = Firstbuf;
+ }
+ break;
+ case 'q':
+ qquitfm();
+ break;
+ case 'Q':
+ quitfm();
+ break;
+ }
+ } while (!ok);
+
+ for (buf = Firstbuf; buf != NULL; buf = buf->nextBuffer) {
+ if (buf == Currentbuf)
+ continue;
+#ifdef USE_IMAGE
+ deleteImage(buf);
+#endif
+ if (clear_buffer)
+ tmpClearBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Suspend (on BSD), or run interactive shell (on SysV) */
+DEFUN(susp, INTERRUPT SUSPEND, "Stop loading document")
+{
+#ifndef SIGSTOP
+ char *shell;
+#endif /* not SIGSTOP */
+ move(LASTLINE, 0);
+ clrtoeolx();
+ refresh();
+ fmTerm();
+#ifndef SIGSTOP
+ shell = getenv("SHELL");
+ if (shell == NULL)
+ shell = "/bin/sh";
+ system(shell);
+#else /* SIGSTOP */
+ kill((pid_t) 0, SIGSTOP);
+#endif /* SIGSTOP */
+ fmInit();
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Go to specified line */
+static void
+_goLine(char *l)
+{
+ if (l == NULL || *l == '\0' || Currentbuf->currentLine == NULL) {
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+ }
+ Currentbuf->pos = 0;
+ if (((*l == '^') || (*l == '$')) && prec_num) {
+ gotoRealLine(Currentbuf, prec_num);
+ }
+ else if (*l == '^') {
+ Currentbuf->topLine = Currentbuf->currentLine = Currentbuf->firstLine;
+ }
+ else if (*l == '$') {
+ Currentbuf->topLine =
+ lineSkip(Currentbuf, Currentbuf->lastLine,
+ -(Currentbuf->LINES + 1) / 2, TRUE);
+ Currentbuf->currentLine = Currentbuf->lastLine;
+ }
+ else
+ gotoRealLine(Currentbuf, atoi(l));
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(goLine, GOTO_LINE, "Go to specified line")
+{
+
+ char *str = searchKeyData();
+ if (prec_num)
+ _goLine("^");
+ else if (str)
+ _goLine(str);
+ else
+ /* FIXME: gettextize? */
+ _goLine(inputStr("Goto line: ", ""));
+}
+
+
+DEFUN(goLineF, BEGIN, "Go to the first line")
+{
+ _goLine("^");
+}
+
+DEFUN(goLineL, END, "Go to the last line")
+{
+ _goLine("$");
+}
+
+/* Go to the beginning of the line */
+DEFUN(linbeg, LINE_BEGIN, "Go to the beginning of line")
+{
+ if (Currentbuf->firstLine == NULL)
+ return;
+ while (Currentbuf->currentLine->prev && Currentbuf->currentLine->bpos)
+ cursorUp0(Currentbuf, 1);
+ Currentbuf->pos = 0;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* Go to the bottom of the line */
+DEFUN(linend, LINE_END, "Go to the end of line")
+{
+ if (Currentbuf->firstLine == NULL)
+ return;
+ while (Currentbuf->currentLine->next
+ && Currentbuf->currentLine->next->bpos)
+ cursorDown0(Currentbuf, 1);
+ Currentbuf->pos = Currentbuf->currentLine->len - 1;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+static int
+cur_real_linenumber(Buffer *buf)
+{
+ Line *l, *cur = buf->currentLine;
+ int n;
+
+ if (!cur)
+ return 1;
+ n = cur->real_linenumber ? cur->real_linenumber : 1;
+ for (l = buf->firstLine; l && l != cur && l->real_linenumber == 0; l = l->next) { /* header */
+ if (l->bpos == 0)
+ n++;
+ }
+ return n;
+}
+
+/* Run editor on the current buffer */
+DEFUN(editBf, EDIT, "Edit current document")
+{
+ char *fn = Currentbuf->filename;
+ Str cmd;
+
+ if (fn == NULL || Currentbuf->pagerSource != NULL || /* Behaving as a pager */
+ (Currentbuf->type == NULL && Currentbuf->edit == NULL) || /* Reading shell */
+ Currentbuf->real_scheme != SCM_LOCAL || !strcmp(Currentbuf->currentURL.file, "-") || /* file is std input */
+ Currentbuf->bufferprop & BP_FRAME) { /* Frame */
+ disp_err_message("Can't edit other than local file", TRUE);
+ return;
+ }
+ if (Currentbuf->edit)
+ cmd = unquote_mailcap(Currentbuf->edit, Currentbuf->real_type, fn,
+ checkHeader(Currentbuf, "Content-Type:"), NULL);
+ else
+ cmd = myEditor(Editor, shell_quote(fn),
+ cur_real_linenumber(Currentbuf));
+ fmTerm();
+ system(cmd->ptr);
+ fmInit();
+
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ reload();
+}
+
+/* Run editor on the current screen */
+DEFUN(editScr, EDIT_SCREEN, "Edit currently rendered document")
+{
+ char *tmpf;
+ FILE *f;
+
+ tmpf = tmpfname(TMPF_DFL, NULL)->ptr;
+ f = fopen(tmpf, "w");
+ if (f == NULL) {
+ /* FIXME: gettextize? */
+ disp_err_message(Sprintf("Can't open %s", tmpf)->ptr, TRUE);
+ return;
+ }
+ saveBuffer(Currentbuf, f, TRUE);
+ fclose(f);
+ fmTerm();
+ system(myEditor(Editor, shell_quote(tmpf),
+ cur_real_linenumber(Currentbuf))->ptr);
+ fmInit();
+ unlink(tmpf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+#ifdef USE_MARK
+
+/* Set / unset mark */
+DEFUN(_mark, MARK, "Set/unset mark")
+{
+ Line *l;
+ if (!use_mark)
+ return;
+ if (Currentbuf->firstLine == NULL)
+ return;
+ l = Currentbuf->currentLine;
+ l->propBuf[Currentbuf->pos] ^= PE_MARK;
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* Go to next mark */
+DEFUN(nextMk, NEXT_MARK, "Move to next word")
+{
+ Line *l;
+ int i;
+
+ if (!use_mark)
+ return;
+ if (Currentbuf->firstLine == NULL)
+ return;
+ i = Currentbuf->pos + 1;
+ l = Currentbuf->currentLine;
+ if (i >= l->len) {
+ i = 0;
+ l = l->next;
+ }
+ while (l != NULL) {
+ for (; i < l->len; i++) {
+ if (l->propBuf[i] & PE_MARK) {
+ Currentbuf->currentLine = l;
+ Currentbuf->pos = i;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ l = l->next;
+ i = 0;
+ }
+ /* FIXME: gettextize? */
+ disp_message("No mark exist after here", TRUE);
+}
+
+/* Go to previous mark */
+DEFUN(prevMk, PREV_MARK, "Move to previous mark")
+{
+ Line *l;
+ int i;
+
+ if (!use_mark)
+ return;
+ if (Currentbuf->firstLine == NULL)
+ return;
+ i = Currentbuf->pos - 1;
+ l = Currentbuf->currentLine;
+ if (i < 0) {
+ l = l->prev;
+ if (l != NULL)
+ i = l->len - 1;
+ }
+ while (l != NULL) {
+ for (; i >= 0; i--) {
+ if (l->propBuf[i] & PE_MARK) {
+ Currentbuf->currentLine = l;
+ Currentbuf->pos = i;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ l = l->prev;
+ if (l != NULL)
+ i = l->len - 1;
+ }
+ /* FIXME: gettextize? */
+ disp_message("No mark exist before here", TRUE);
+}
+
+/* Mark place to which the regular expression matches */
+DEFUN(reMark, REG_MARK, "Set mark using regexp")
+{
+ Line *l;
+ char *str;
+ char *p, *p1, *p2;
+
+ if (!use_mark)
+ return;
+ str = searchKeyData();
+ if (str == NULL || *str == '\0') {
+ str = inputStrHist("(Mark)Regexp: ", MarkString, TextHist);
+ if (str == NULL || *str == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ str = conv_search_string(str, DisplayCharset);
+ if ((str = regexCompile(str, 1)) != NULL) {
+ disp_message(str, TRUE);
+ return;
+ }
+ MarkString = str;
+ for (l = Currentbuf->firstLine; l != NULL; l = l->next) {
+ p = l->lineBuf;
+ for (;;) {
+ if (regexMatch(p, &l->lineBuf[l->len] - p, p == l->lineBuf) == 1) {
+ matchedPosition(&p1, &p2);
+ l->propBuf[p1 - l->lineBuf] |= PE_MARK;
+ p = p2;
+ }
+ else
+ break;
+ }
+ }
+
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+#endif /* USE_MARK */
+
+static Buffer *
+loadNormalBuf(Buffer *buf, int renderframe)
+{
+ pushBuffer(buf);
+ if (renderframe && RenderFrame && Currentbuf->frameset != NULL)
+ rFrame();
+ return buf;
+}
+
+static Buffer *
+loadLink(char *url, char *target, char *referer, FormList *request)
+{
+ Buffer *buf, *nfbuf;
+ union frameset_element *f_element = NULL;
+ int flag = 0;
+ ParsedURL *base, pu;
+
+ message(Sprintf("loading %s", url)->ptr, 0, 0);
+ refresh();
+
+ base = baseURL(Currentbuf);
+ if (base == NULL ||
+ base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI)
+ referer = NO_REFERER;
+ if (referer == NULL)
+ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
+ buf = loadGeneralFile(url, baseURL(Currentbuf), referer, flag, request);
+ if (buf == NULL) {
+ char *emsg = Sprintf("Can't load %s", url)->ptr;
+ disp_err_message(emsg, FALSE);
+ return NULL;
+ }
+
+ parseURL2(url, &pu, base);
+ pushHashHist(URLHist, parsedURL2Str(&pu)->ptr);
+
+ if (buf == NO_BUFFER) {
+ return NULL;
+ }
+ if (!on_target) /* open link as an indivisual page */
+ return loadNormalBuf(buf, TRUE);
+
+ if (do_download) /* download (thus no need to render frame) */
+ return loadNormalBuf(buf, FALSE);
+
+ if (target == NULL || /* no target specified (that means this page is not a frame page) */
+ !strcmp(target, "_top") || /* this link is specified to be opened as an indivisual * page */
+ !(Currentbuf->bufferprop & BP_FRAME) /* This page is not a frame page */
+ ) {
+ return loadNormalBuf(buf, TRUE);
+ }
+ nfbuf = Currentbuf->linkBuffer[LB_N_FRAME];
+ if (nfbuf == NULL) {
+ /* original page (that contains <frameset> tag) doesn't exist */
+ return loadNormalBuf(buf, TRUE);
+ }
+
+ f_element = search_frame(nfbuf->frameset, target);
+ if (f_element == NULL) {
+ /* specified target doesn't exist in this frameset */
+ return loadNormalBuf(buf, TRUE);
+ }
+
+ /* frame page */
+
+ /* stack current frameset */
+ pushFrameTree(&(nfbuf->frameQ), copyFrameSet(nfbuf->frameset), Currentbuf);
+ /* delete frame view buffer */
+ delBuffer(Currentbuf);
+ Currentbuf = nfbuf;
+ /* nfbuf->frameset = copyFrameSet(nfbuf->frameset); */
+ resetFrameElement(f_element, buf, referer, request);
+ discardBuffer(buf);
+ rFrame();
+ {
+ Anchor *al = NULL;
+ char *label = pu.label;
+
+ if (label && f_element->element->attr == F_BODY) {
+ al = searchAnchor(f_element->body->nameList, label);
+ }
+ if (!al) {
+ label = Strnew_m_charp("_", target, NULL)->ptr;
+ al = searchURLLabel(Currentbuf, label);
+ }
+ if (al) {
+ gotoLine(Currentbuf, al->start.line);
+ if (label_topline)
+ Currentbuf->topLine = lineSkip(Currentbuf, Currentbuf->topLine,
+ Currentbuf->currentLine->
+ linenumber -
+ Currentbuf->topLine->linenumber,
+ FALSE);
+ Currentbuf->pos = al->start.pos;
+ arrangeCursor(Currentbuf);
+ }
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+ return buf;
+}
+
+static void
+gotoLabel(char *label)
+{
+ Buffer *buf;
+ Anchor *al;
+ int i;
+
+ al = searchURLLabel(Currentbuf, label);
+ if (al == NULL) {
+ /* FIXME: gettextize? */
+ disp_message(Sprintf("%s is not found", label)->ptr, TRUE);
+ return;
+ }
+ buf = newBuffer(Currentbuf->width);
+ copyBuffer(buf, Currentbuf);
+ for (i = 0; i < MAX_LB; i++)
+ buf->linkBuffer[i] = NULL;
+ buf->currentURL.label = allocStr(label, -1);
+ pushHashHist(URLHist, parsedURL2Str(&buf->currentURL)->ptr);
+ (*buf->clone)++;
+ pushBuffer(buf);
+ gotoLine(Currentbuf, al->start.line);
+ if (label_topline)
+ Currentbuf->topLine = lineSkip(Currentbuf, Currentbuf->topLine,
+ Currentbuf->currentLine->linenumber
+ - Currentbuf->topLine->linenumber,
+ FALSE);
+ Currentbuf->pos = al->start.pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+}
+
+/* follow HREF link */
+DEFUN(followA, GOTO_LINK, "Go to current link")
+{
+ Line *l;
+ Anchor *a;
+ ParsedURL u;
+#ifdef USE_IMAGE
+ int x = 0, y = 0, map = 0;
+#endif
+ char *url;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ l = Currentbuf->currentLine;
+
+#ifdef USE_IMAGE
+ a = retrieveCurrentImg(Currentbuf);
+ if (a && a->image && a->image->map) {
+ _followForm(FALSE);
+ return;
+ }
+ if (a && a->image && a->image->ismap) {
+ getMapXY(Currentbuf, a, &x, &y);
+ map = 1;
+ }
+#else
+ a = retrieveCurrentMap(Currentbuf);
+ if (a) {
+ _followForm(FALSE);
+ return;
+ }
+#endif
+ a = retrieveCurrentAnchor(Currentbuf);
+ if (a == NULL) {
+ _followForm(FALSE);
+ return;
+ }
+ if (*a->url == '#') { /* index within this buffer */
+ gotoLabel(a->url + 1);
+ return;
+ }
+ parseURL2(a->url, &u, baseURL(Currentbuf));
+ if (Strcmp(parsedURL2Str(&u), parsedURL2Str(&Currentbuf->currentURL)) == 0) {
+ /* index within this buffer */
+ if (u.label) {
+ gotoLabel(u.label);
+ return;
+ }
+ }
+ if (!strncasecmp(a->url, "mailto:", 7)
+#ifdef USE_W3MMAILER
+ && non_null(Mailer) && strchr(a->url, '?') == NULL
+#endif
+ ) {
+ /* invoke external mailer */
+ Str to = Strnew_charp(a->url + 7);
+#ifndef USE_W3MMAILER
+ char *pos;
+ if (!non_null(Mailer)) {
+ /* FIXME: gettextize? */
+ disp_err_message("no mailer is specified", TRUE);
+ return;
+ }
+ if ((pos = strchr(to->ptr, '?')) != NULL)
+ Strtruncate(to, pos - to->ptr);
+#endif
+ fmTerm();
+ system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)),
+ FALSE)->ptr);
+ fmInit();
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ pushHashHist(URLHist, a->url);
+ return;
+ }
+#if 0
+ else if (!strncasecmp(a->url, "news:", 5) && strchr(a->url, '@') == NULL) {
+ /* news:newsgroup is not supported */
+ /* FIXME: gettextize? */
+ disp_err_message("news:newsgroup_name is not supported", TRUE);
+ return;
+ }
+#endif /* USE_NNTP */
+ url = a->url;
+#ifdef USE_IMAGE
+ if (map)
+ url = Sprintf("%s?%d,%d", a->url, x, y)->ptr;
+#endif
+
+ if (check_target && open_tab_blank && a->target &&
+ (!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) {
+ Buffer *buf;
+
+ _newT();
+ buf = Currentbuf;
+ loadLink(url, a->target, a->referer, NULL);
+ if (buf != Currentbuf)
+ delBuffer(buf);
+ else
+ deleteTab(CurrentTab);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+ }
+ loadLink(url, a->target, a->referer, NULL);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* follow HREF link in the buffer */
+void
+bufferA(void)
+{
+ on_target = FALSE;
+ followA();
+ on_target = TRUE;
+}
+
+/* view inline image */
+DEFUN(followI, VIEW_IMAGE, "View image")
+{
+ Line *l;
+ Anchor *a;
+ Buffer *buf;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ l = Currentbuf->currentLine;
+
+ a = retrieveCurrentImg(Currentbuf);
+ if (a == NULL)
+ return;
+ /* FIXME: gettextize? */
+ message(Sprintf("loading %s", a->url)->ptr, 0, 0);
+ refresh();
+ buf = loadGeneralFile(a->url, baseURL(Currentbuf), NULL, 0, NULL);
+ if (buf == NULL) {
+ /* FIXME: gettextize? */
+ char *emsg = Sprintf("Can't load %s", a->url)->ptr;
+ disp_err_message(emsg, FALSE);
+ }
+ else if (buf != NO_BUFFER) {
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+static FormItemList *
+save_submit_formlist(FormItemList *src)
+{
+ FormList *list;
+ FormList *srclist;
+ FormItemList *srcitem;
+ FormItemList *item;
+ FormItemList *ret = NULL;
+#ifdef MENU_SELECT
+ FormSelectOptionItem *opt;
+ FormSelectOptionItem *curopt;
+ FormSelectOptionItem *srcopt;
+#endif /* MENU_SELECT */
+
+ if (src == NULL)
+ return NULL;
+ srclist = src->parent;
+ list = New(FormList);
+ list->method = srclist->method;
+ list->action = Strdup(srclist->action);
+#ifdef USE_M17N
+ list->charset = srclist->charset;
+#endif
+ list->enctype = srclist->enctype;
+ list->nitems = srclist->nitems;
+ list->body = srclist->body;
+ list->boundary = srclist->boundary;
+ list->length = srclist->length;
+
+ for (srcitem = srclist->item; srcitem; srcitem = srcitem->next) {
+ item = New(FormItemList);
+ item->type = srcitem->type;
+ item->name = Strdup(srcitem->name);
+ item->value = Strdup(srcitem->value);
+ item->checked = srcitem->checked;
+ item->accept = srcitem->accept;
+ item->size = srcitem->size;
+ item->rows = srcitem->rows;
+ item->maxlength = srcitem->maxlength;
+ item->readonly = srcitem->readonly;
+#ifdef MENU_SELECT
+ opt = curopt = NULL;
+ for (srcopt = srcitem->select_option; srcopt; srcopt = srcopt->next) {
+ if (!srcopt->checked)
+ continue;
+ opt = New(FormSelectOptionItem);
+ opt->value = Strdup(srcopt->value);
+ opt->label = Strdup(srcopt->label);
+ opt->checked = srcopt->checked;
+ if (item->select_option == NULL) {
+ item->select_option = curopt = opt;
+ }
+ else {
+ curopt->next = opt;
+ curopt = curopt->next;
+ }
+ }
+ item->select_option = opt;
+ if (srcitem->label)
+ item->label = Strdup(srcitem->label);
+#endif /* MENU_SELECT */
+ item->parent = list;
+ item->next = NULL;
+
+ if (list->lastitem == NULL) {
+ list->item = list->lastitem = item;
+ }
+ else {
+ list->lastitem->next = item;
+ list->lastitem = item;
+ }
+
+ if (srcitem == src)
+ ret = item;
+ }
+
+ return ret;
+}
+
+#ifdef USE_M17N
+static Str
+conv_form_encoding(Str val, FormItemList *fi, Buffer *buf)
+{
+ wc_ces charset = SystemCharset;
+
+ if (fi->parent->charset)
+ charset = fi->parent->charset;
+ else if (buf->document_charset && buf->document_charset != WC_CES_US_ASCII)
+ charset = buf->document_charset;
+ return wc_Str_conv_strict(val, InnerCharset, charset);
+}
+#else
+#define conv_form_encoding(val, fi, buf) (val)
+#endif
+
+static void
+query_from_followform(Str *query, FormItemList *fi, int multipart)
+{
+ FormItemList *f2;
+ FILE *body = NULL;
+
+ if (multipart) {
+ *query = tmpfname(TMPF_DFL, NULL);
+ body = fopen((*query)->ptr, "w");
+ if (body == NULL) {
+ return;
+ }
+ fi->parent->body = (*query)->ptr;
+ fi->parent->boundary =
+ Sprintf("------------------------------%d%ld%ld%ld", CurrentPid,
+ fi->parent, fi->parent->body, fi->parent->boundary)->ptr;
+ }
+ *query = Strnew();
+ for (f2 = fi->parent->item; f2; f2 = f2->next) {
+ if (f2->name == NULL)
+ continue;
+ /* <ISINDEX> is translated into single text form */
+ if (f2->name->length == 0 &&
+ (multipart || f2->type != FORM_INPUT_TEXT))
+ continue;
+ switch (f2->type) {
+ case FORM_INPUT_RESET:
+ /* do nothing */
+ continue;
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_IMAGE:
+ if (f2 != fi || f2->value == NULL)
+ continue;
+ break;
+ case FORM_INPUT_RADIO:
+ case FORM_INPUT_CHECKBOX:
+ if (!f2->checked)
+ continue;
+ }
+ if (multipart) {
+ if (f2->type == FORM_INPUT_IMAGE) {
+ int x = 0, y = 0;
+#ifdef USE_IMAGE
+ getMapXY(Currentbuf, retrieveCurrentImg(Currentbuf), &x, &y);
+#endif
+ *query = Strdup(conv_form_encoding(f2->name, fi, Currentbuf));
+ Strcat_charp(*query, ".x");
+ form_write_data(body, fi->parent->boundary, (*query)->ptr,
+ Sprintf("%d", x)->ptr);
+ *query = Strdup(conv_form_encoding(f2->name, fi, Currentbuf));
+ Strcat_charp(*query, ".y");
+ form_write_data(body, fi->parent->boundary, (*query)->ptr,
+ Sprintf("%d", y)->ptr);
+ }
+ else if (f2->name && f2->name->length > 0 && f2->value != NULL) {
+ /* not IMAGE */
+ *query = conv_form_encoding(f2->value, fi, Currentbuf);
+ if (f2->type == FORM_INPUT_FILE)
+ form_write_from_file(body, fi->parent->boundary,
+ conv_form_encoding(f2->name, fi,
+ Currentbuf)->ptr,
+ (*query)->ptr,
+ Str_conv_to_system(f2->value)->ptr);
+ else
+ form_write_data(body, fi->parent->boundary,
+ conv_form_encoding(f2->name, fi,
+ Currentbuf)->ptr,
+ (*query)->ptr);
+ }
+ }
+ else {
+ /* not multipart */
+ if (f2->type == FORM_INPUT_IMAGE) {
+ int x = 0, y = 0;
+#ifdef USE_IMAGE
+ getMapXY(Currentbuf, retrieveCurrentImg(Currentbuf), &x, &y);
+#endif
+ Strcat(*query,
+ Str_form_quote(conv_form_encoding
+ (f2->name, fi, Currentbuf)));
+ Strcat(*query, Sprintf(".x=%d&", x));
+ Strcat(*query,
+ Str_form_quote(conv_form_encoding
+ (f2->name, fi, Currentbuf)));
+ Strcat(*query, Sprintf(".y=%d", y));
+ }
+ else {
+ /* not IMAGE */
+ if (f2->name && f2->name->length > 0) {
+ Strcat(*query,
+ Str_form_quote(conv_form_encoding
+ (f2->name, fi, Currentbuf)));
+ Strcat_char(*query, '=');
+ }
+ if (f2->value != NULL) {
+ if (fi->parent->method == FORM_METHOD_INTERNAL)
+ Strcat(*query, Str_form_quote(f2->value));
+ else {
+ Strcat(*query,
+ Str_form_quote(conv_form_encoding
+ (f2->value, fi, Currentbuf)));
+ }
+ }
+ }
+ if (f2->next)
+ Strcat_char(*query, '&');
+ }
+ }
+ if (multipart) {
+ fprintf(body, "--%s--\r\n", fi->parent->boundary);
+ fclose(body);
+ }
+ else {
+ /* remove trailing & */
+ while (Strlastchar(*query) == '&')
+ Strshrink(*query, 1);
+ }
+}
+
+/* submit form */
+DEFUN(submitForm, SUBMIT, "Submit form")
+{
+ _followForm(TRUE);
+}
+
+/* process form */
+void
+followForm(void)
+{
+ _followForm(FALSE);
+}
+
+static void
+_followForm(int submit)
+{
+ Line *l;
+ Anchor *a, *a2;
+ char *p;
+ FormItemList *fi, *f2;
+ Str tmp, tmp2;
+ int multipart = 0, i;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ l = Currentbuf->currentLine;
+
+ a = retrieveCurrentForm(Currentbuf);
+ if (a == NULL)
+ return;
+ fi = (FormItemList *)a->url;
+ switch (fi->type) {
+ case FORM_INPUT_TEXT:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly)
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ /* FIXME: gettextize? */
+ p = inputStrHist("TEXT:", fi->value ? fi->value->ptr : NULL, TextHist);
+ if (p == NULL || fi->readonly)
+ break;
+ fi->value = Strnew_charp(p);
+ formUpdateBuffer(a, Currentbuf, fi);
+ if (fi->accept || fi->parent->nitems == 1)
+ goto do_submit;
+ break;
+ case FORM_INPUT_FILE:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly)
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ /* FIXME: gettextize? */
+ p = inputFilenameHist("Filename:", fi->value ? fi->value->ptr : NULL,
+ NULL);
+ if (p == NULL || fi->readonly)
+ break;
+ fi->value = Strnew_charp(p);
+ formUpdateBuffer(a, Currentbuf, fi);
+ if (fi->accept || fi->parent->nitems == 1)
+ goto do_submit;
+ break;
+ case FORM_INPUT_PASSWORD:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly) {
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ break;
+ }
+ /* FIXME: gettextize? */
+ p = inputLine("Password:", fi->value ? fi->value->ptr : NULL,
+ IN_PASSWORD);
+ if (p == NULL)
+ break;
+ fi->value = Strnew_charp(p);
+ formUpdateBuffer(a, Currentbuf, fi);
+ if (fi->accept)
+ goto do_submit;
+ break;
+ case FORM_TEXTAREA:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly)
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ input_textarea(fi);
+ formUpdateBuffer(a, Currentbuf, fi);
+ break;
+ case FORM_INPUT_RADIO:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly) {
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ break;
+ }
+ formRecheckRadio(a, Currentbuf, fi);
+ break;
+ case FORM_INPUT_CHECKBOX:
+ if (submit)
+ goto do_submit;
+ if (fi->readonly) {
+ /* FIXME: gettextize? */
+ disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE);
+ break;
+ }
+ fi->checked = !fi->checked;
+ formUpdateBuffer(a, Currentbuf, fi);
+ break;
+#ifdef MENU_SELECT
+ case FORM_SELECT:
+ if (submit)
+ goto do_submit;
+ if (!formChooseOptionByMenu(fi,
+ Currentbuf->cursorX - Currentbuf->pos +
+ a->start.pos + Currentbuf->rootX,
+ Currentbuf->cursorY + Currentbuf->rootY))
+ break;
+ formUpdateBuffer(a, Currentbuf, fi);
+ if (fi->parent->nitems == 1)
+ goto do_submit;
+ break;
+#endif /* MENU_SELECT */
+ case FORM_INPUT_IMAGE:
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ do_submit:
+ tmp = Strnew();
+ tmp2 = Strnew();
+ multipart = (fi->parent->method == FORM_METHOD_POST &&
+ fi->parent->enctype == FORM_ENCTYPE_MULTIPART);
+ query_from_followform(&tmp, fi, multipart);
+
+ tmp2 = Strdup(fi->parent->action);
+ if (!Strcmp_charp(tmp2, "!CURRENT_URL!")) {
+ /* It means "current URL" */
+ tmp2 = parsedURL2Str(&Currentbuf->currentURL);
+ if ((p = strchr(tmp2->ptr, '?')) != NULL)
+ Strshrink(tmp2, (tmp2->ptr + tmp2->length) - p);
+ }
+
+ if (fi->parent->method == FORM_METHOD_GET) {
+ if ((p = strchr(tmp2->ptr, '?')) != NULL)
+ Strshrink(tmp2, (tmp2->ptr + tmp2->length) - p);
+ Strcat_charp(tmp2, "?");
+ Strcat(tmp2, tmp);
+ loadLink(tmp2->ptr, a->target, NULL, NULL);
+ }
+ else if (fi->parent->method == FORM_METHOD_POST) {
+ Buffer *buf;
+ if (multipart) {
+ struct stat st;
+ stat(fi->parent->body, &st);
+ fi->parent->length = st.st_size;
+ }
+ else {
+ fi->parent->body = tmp->ptr;
+ fi->parent->length = tmp->length;
+ }
+ buf = loadLink(tmp2->ptr, a->target, NULL, fi->parent);
+ if (multipart) {
+ unlink(fi->parent->body);
+ }
+ if (buf && !(buf->bufferprop & BP_REDIRECTED)) { /* buf must be Currentbuf */
+ /* BP_REDIRECTED means that the buffer is obtained through
+ * Location: header. In this case, buf->form_submit must not be set
+ * because the page is not loaded by POST method but GET method.
+ */
+ buf->form_submit = save_submit_formlist(fi);
+ }
+ }
+ else if ((fi->parent->method == FORM_METHOD_INTERNAL && (!Strcmp_charp(fi->parent->action, "map") || !Strcmp_charp(fi->parent->action, "none"))) || Currentbuf->bufferprop & BP_INTERNAL) { /* internal */
+ do_internal(tmp2->ptr, tmp->ptr);
+ }
+ else {
+ disp_err_message("Can't send form because of illegal method.",
+ FALSE);
+ }
+ break;
+ case FORM_INPUT_RESET:
+ for (i = 0; i < Currentbuf->formitem->nanchor; i++) {
+ a2 = &Currentbuf->formitem->anchors[i];
+ f2 = (FormItemList *)a2->url;
+ if (f2->parent == fi->parent &&
+ f2->name && f2->value &&
+ f2->type != FORM_INPUT_SUBMIT &&
+ f2->type != FORM_INPUT_HIDDEN &&
+ f2->type != FORM_INPUT_RESET) {
+ f2->value = f2->init_value;
+ f2->checked = f2->init_checked;
+#ifdef MENU_SELECT
+ f2->label = f2->init_label;
+ f2->selected = f2->init_selected;
+#endif /* MENU_SELECT */
+ formUpdateBuffer(a2, Currentbuf, f2);
+ }
+ }
+ break;
+ case FORM_INPUT_HIDDEN:
+ default:
+ break;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* go to the top anchor */
+DEFUN(topA, LINK_BEGIN, "Go to the first link")
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ BufferPoint *po;
+ Anchor *an;
+ int hseq = 0;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ if (prec_num > hl->nmark)
+ hseq = hl->nmark - 1;
+ else if (prec_num > 0)
+ hseq = prec_num - 1;
+ do {
+ if (hseq >= hl->nmark)
+ return;
+ po = hl->marks + hseq;
+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+ if (an == NULL)
+ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
+ hseq++;
+ } while (an == NULL);
+
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the last anchor */
+DEFUN(lastA, LINK_END, "Go to the last link")
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ BufferPoint *po;
+ Anchor *an;
+ int hseq;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ if (prec_num >= hl->nmark)
+ hseq = 0;
+ else if (prec_num > 0)
+ hseq = hl->nmark - prec_num;
+ else
+ hseq = hl->nmark - 1;
+ do {
+ if (hseq < 0)
+ return;
+ po = hl->marks + hseq;
+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+ if (an == NULL)
+ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
+ hseq--;
+ } while (an == NULL);
+
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the next anchor */
+DEFUN(nextA, NEXT_LINK, "Move to next link")
+{
+ _nextA(FALSE);
+}
+
+/* go to the previous anchor */
+DEFUN(prevA, PREV_LINK, "Move to previous link")
+{
+ _prevA(FALSE);
+}
+
+/* go to the next visited anchor */
+DEFUN(nextVA, NEXT_VISITED, "Move to next visited link")
+{
+ _nextA(TRUE);
+}
+
+/* go to the previous visited anchor */
+DEFUN(prevVA, PREV_VISITED, "Move to previous visited link")
+{
+ _prevA(TRUE);
+}
+
+/* go to the next [visited] anchor */
+static void
+_nextA(int visited)
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ BufferPoint *po;
+ Anchor *an, *pan;
+ int i, x, y, n = searchKeyNum();
+ ParsedURL url;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ an = retrieveCurrentAnchor(Currentbuf);
+ if (visited != TRUE && an == NULL)
+ an = retrieveCurrentForm(Currentbuf);
+
+ y = Currentbuf->currentLine->linenumber;
+ x = Currentbuf->pos;
+
+ if (visited == TRUE) {
+ n = hl->nmark;
+ }
+
+ for (i = 0; i < n; i++) {
+ pan = an;
+ if (an && an->hseq >= 0) {
+ int hseq = an->hseq + 1;
+ do {
+ if (hseq >= hl->nmark) {
+ if (visited == TRUE)
+ return;
+ an = pan;
+ goto _end;
+ }
+ po = &hl->marks[hseq];
+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+ if (visited != TRUE && an == NULL)
+ an = retrieveAnchor(Currentbuf->formitem, po->line,
+ po->pos);
+ hseq++;
+ if (visited == TRUE && an) {
+ parseURL2(an->url, &url, baseURL(Currentbuf));
+ if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) {
+ goto _end;
+ }
+ }
+ } while (an == NULL || an == pan);
+ }
+ else {
+ an = closest_next_anchor(Currentbuf->href, NULL, x, y);
+ if (visited != TRUE)
+ an = closest_next_anchor(Currentbuf->formitem, an, x, y);
+ if (an == NULL) {
+ if (visited == TRUE)
+ return;
+ an = pan;
+ break;
+ }
+ x = an->start.pos;
+ y = an->start.line;
+ if (visited == TRUE) {
+ parseURL2(an->url, &url, baseURL(Currentbuf));
+ if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) {
+ goto _end;
+ }
+ }
+ }
+ }
+ if (visited == TRUE)
+ return;
+
+ _end:
+ if (an == NULL || an->hseq < 0)
+ return;
+ po = &hl->marks[an->hseq];
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the previous anchor */
+static void
+_prevA(int visited)
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ BufferPoint *po;
+ Anchor *an, *pan;
+ int i, x, y, n = searchKeyNum();
+ ParsedURL url;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ an = retrieveCurrentAnchor(Currentbuf);
+ if (visited != TRUE && an == NULL)
+ an = retrieveCurrentForm(Currentbuf);
+
+ y = Currentbuf->currentLine->linenumber;
+ x = Currentbuf->pos;
+
+ if (visited == TRUE) {
+ n = hl->nmark;
+ }
+
+ for (i = 0; i < n; i++) {
+ pan = an;
+ if (an && an->hseq >= 0) {
+ int hseq = an->hseq - 1;
+ do {
+ if (hseq < 0) {
+ if (visited == TRUE)
+ return;
+ an = pan;
+ goto _end;
+ }
+ po = hl->marks + hseq;
+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+ if (visited != TRUE && an == NULL)
+ an = retrieveAnchor(Currentbuf->formitem, po->line,
+ po->pos);
+ hseq--;
+ if (visited == TRUE && an) {
+ parseURL2(an->url, &url, baseURL(Currentbuf));
+ if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) {
+ goto _end;
+ }
+ }
+ } while (an == NULL || an == pan);
+ }
+ else {
+ an = closest_prev_anchor(Currentbuf->href, NULL, x, y);
+ if (visited != TRUE)
+ an = closest_prev_anchor(Currentbuf->formitem, an, x, y);
+ if (an == NULL) {
+ if (visited == TRUE)
+ return;
+ an = pan;
+ break;
+ }
+ x = an->start.pos;
+ y = an->start.line;
+ if (visited == TRUE && an) {
+ parseURL2(an->url, &url, baseURL(Currentbuf));
+ if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) {
+ goto _end;
+ }
+ }
+ }
+ }
+ if (visited == TRUE)
+ return;
+
+ _end:
+ if (an == NULL || an->hseq < 0)
+ return;
+ po = hl->marks + an->hseq;
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the next left/right anchor */
+static void
+nextX(int d, int dy)
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ Anchor *an, *pan;
+ Line *l;
+ int i, x, y, n = searchKeyNum();
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ an = retrieveCurrentAnchor(Currentbuf);
+ if (an == NULL)
+ an = retrieveCurrentForm(Currentbuf);
+
+ l = Currentbuf->currentLine;
+ x = Currentbuf->pos;
+ y = l->linenumber;
+ pan = NULL;
+ for (i = 0; i < n; i++) {
+ if (an)
+ x = (d > 0) ? an->end.pos : an->start.pos - 1;
+ an = NULL;
+ while (1) {
+ for (; x >= 0 && x < l->len; x += d) {
+ an = retrieveAnchor(Currentbuf->href, y, x);
+ if (!an)
+ an = retrieveAnchor(Currentbuf->formitem, y, x);
+ if (an) {
+ pan = an;
+ break;
+ }
+ }
+ if (!dy || an)
+ break;
+ l = (dy > 0) ? l->next : l->prev;
+ if (!l)
+ break;
+ x = (d > 0) ? 0 : l->len - 1;
+ y = l->linenumber;
+ }
+ if (!an)
+ break;
+ }
+
+ if (pan == NULL)
+ return;
+ gotoLine(Currentbuf, y);
+ Currentbuf->pos = pan->start.pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the next downward/upward anchor */
+static void
+nextY(int d)
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ Anchor *an, *pan;
+ int i, x, y, n = searchKeyNum();
+ int hseq;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ an = retrieveCurrentAnchor(Currentbuf);
+ if (an == NULL)
+ an = retrieveCurrentForm(Currentbuf);
+
+ x = Currentbuf->pos;
+ y = Currentbuf->currentLine->linenumber + d;
+ pan = NULL;
+ hseq = -1;
+ for (i = 0; i < n; i++) {
+ if (an)
+ hseq = abs(an->hseq);
+ an = NULL;
+ for (; y >= 0 && y <= Currentbuf->lastLine->linenumber; y += d) {
+ an = retrieveAnchor(Currentbuf->href, y, x);
+ if (!an)
+ an = retrieveAnchor(Currentbuf->formitem, y, x);
+ if (an && hseq != abs(an->hseq)) {
+ pan = an;
+ break;
+ }
+ }
+ if (!an)
+ break;
+ }
+
+ if (pan == NULL)
+ return;
+ gotoLine(Currentbuf, pan->start.line);
+ arrangeLine(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* go to the next left anchor */
+DEFUN(nextL, NEXT_LEFT, "Move to next left link")
+{
+ nextX(-1, 0);
+}
+
+/* go to the next left-up anchor */
+DEFUN(nextLU, NEXT_LEFT_UP, "Move to next left (or upward) link")
+{
+ nextX(-1, -1);
+}
+
+/* go to the next right anchor */
+DEFUN(nextR, NEXT_RIGHT, "Move to next right link")
+{
+ nextX(1, 0);
+}
+
+/* go to the next right-down anchor */
+DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move to next right (or downward) link")
+{
+ nextX(1, 1);
+}
+
+/* go to the next downward anchor */
+DEFUN(nextD, NEXT_DOWN, "Move to next downward link")
+{
+ nextY(1);
+}
+
+/* go to the next upward anchor */
+DEFUN(nextU, NEXT_UP, "Move to next upward link")
+{
+ nextY(-1);
+}
+
+/* go to the next bufferr */
+DEFUN(nextBf, NEXT, "Move to next buffer")
+{
+ Buffer *buf;
+ int i;
+
+ for (i = 0; i < PREC_NUM; i++) {
+ buf = prevBuffer(Firstbuf, Currentbuf);
+ if (!buf) {
+ if (i == 0)
+ return;
+ break;
+ }
+ Currentbuf = buf;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* go to the previous bufferr */
+DEFUN(prevBf, PREV, "Move to previous buffer")
+{
+ Buffer *buf;
+ int i;
+
+ for (i = 0; i < PREC_NUM; i++) {
+ buf = Currentbuf->nextBuffer;
+ if (!buf) {
+ if (i == 0)
+ return;
+ break;
+ }
+ Currentbuf = buf;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+static int
+checkBackBuffer(Buffer *buf)
+{
+ Buffer *fbuf = buf->linkBuffer[LB_N_FRAME];
+
+ if (fbuf) {
+ if (fbuf->frameQ)
+ return TRUE; /* Currentbuf has stacked frames */
+ /* when no frames stacked and next is frame source, try next's
+ * nextBuffer */
+ if (RenderFrame && fbuf == buf->nextBuffer) {
+ if (fbuf->nextBuffer != NULL)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ }
+
+ if (buf->nextBuffer)
+ return TRUE;
+
+ return FALSE;
+}
+
+/* delete current buffer and back to the previous buffer */
+DEFUN(backBf, BACK, "Back to previous buffer")
+{
+ Buffer *buf = Currentbuf->linkBuffer[LB_N_FRAME];
+
+ if (!checkBackBuffer(Currentbuf)) {
+ if (close_tab_back && nTab >= 1) {
+ deleteTab(CurrentTab);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ }
+ else
+ /* FIXME: gettextize? */
+ disp_message("Can't back...", TRUE);
+ return;
+ }
+
+ delBuffer(Currentbuf);
+
+ if (buf) {
+ if (buf->frameQ) {
+ struct frameset *fs;
+ long linenumber = buf->frameQ->linenumber;
+ long top = buf->frameQ->top_linenumber;
+ int pos = buf->frameQ->pos;
+ int currentColumn = buf->frameQ->currentColumn;
+ AnchorList *formitem = buf->frameQ->formitem;
+
+ fs = popFrameTree(&(buf->frameQ));
+ deleteFrameSet(buf->frameset);
+ buf->frameset = fs;
+
+ if (buf == Currentbuf) {
+ rFrame();
+ Currentbuf->topLine = lineSkip(Currentbuf,
+ Currentbuf->firstLine, top - 1,
+ FALSE);
+ gotoLine(Currentbuf, linenumber);
+ Currentbuf->pos = pos;
+ Currentbuf->currentColumn = currentColumn;
+ arrangeCursor(Currentbuf);
+ formResetBuffer(Currentbuf, formitem);
+ }
+ }
+ else if (RenderFrame && buf == Currentbuf) {
+ delBuffer(Currentbuf);
+ }
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(deletePrevBuf, DELETE_PREVBUF,
+ "Delete previous buffer (mainly for local-CGI)")
+{
+ Buffer *buf = Currentbuf->nextBuffer;
+ if (buf)
+ delBuffer(buf);
+}
+
+static void
+cmd_loadURL(char *url, ParsedURL *current, char *referer, FormList *request)
+{
+ Buffer *buf;
+
+ if (!strncasecmp(url, "mailto:", 7)
+#ifdef USE_W3MMAILER
+ && non_null(Mailer) && strchr(url, '?') == NULL
+#endif
+ ) {
+ /* invoke external mailer */
+ Str to = Strnew_charp(url + 7);
+#ifndef USE_W3MMAILER
+ char *pos;
+ if (!non_null(Mailer)) {
+ /* FIXME: gettextize? */
+ disp_err_message("no mailer is specified", TRUE);
+ return;
+ }
+ if ((pos = strchr(to->ptr, '?')) != NULL)
+ Strtruncate(to, pos - to->ptr);
+#endif
+ fmTerm();
+ system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)),
+ FALSE)->ptr);
+ fmInit();
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ pushHashHist(URLHist, url);
+ return;
+ }
+#if 0
+ if (!strncasecmp(url, "news:", 5) && strchr(url, '@') == NULL) {
+ /* news:newsgroup is not supported */
+ /* FIXME: gettextize? */
+ disp_err_message("news:newsgroup_name is not supported", TRUE);
+ return;
+ }
+#endif /* USE_NNTP */
+
+ refresh();
+ buf = loadGeneralFile(url, current, referer, 0, request);
+ if (buf == NULL) {
+ /* FIXME: gettextize? */
+ char *emsg = Sprintf("Can't load %s", conv_from_system(url))->ptr;
+ disp_err_message(emsg, FALSE);
+ }
+ else if (buf != NO_BUFFER) {
+ pushBuffer(buf);
+ if (RenderFrame && Currentbuf->frameset != NULL)
+ rFrame();
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+
+/* go to specified URL */
+static void
+goURL0(char *prompt, int relative)
+{
+ char *url, *referer;
+ ParsedURL p_url, *current;
+ Buffer *cur_buf = Currentbuf;
+
+ url = searchKeyData();
+ if (url == NULL) {
+ Hist *hist = copyHist(URLHist);
+ Anchor *a;
+
+ current = baseURL(Currentbuf);
+ if (current) {
+ char *c_url = parsedURL2Str(current)->ptr;
+ if (DefaultURLString == DEFAULT_URL_CURRENT) {
+ url = c_url;
+ if (DecodeURL)
+ url = url_unquote_conv(url, 0);
+ }
+ else
+ pushHist(hist, c_url);
+ }
+ a = retrieveCurrentAnchor(Currentbuf);
+ if (a) {
+ char *a_url;
+ parseURL2(a->url, &p_url, current);
+ a_url = parsedURL2Str(&p_url)->ptr;
+ if (DefaultURLString == DEFAULT_URL_LINK) {
+ url = a_url;
+ if (DecodeURL)
+ url = url_unquote_conv(url, Currentbuf->document_charset);
+ }
+ else
+ pushHist(hist, a_url);
+ }
+ url = inputLineHist(prompt, url, IN_URL, hist);
+ if (url != NULL)
+ SKIP_BLANKS(url);
+ }
+#ifdef USE_M17N
+ if (url != NULL) {
+ if ((relative || *url == '#') && Currentbuf->document_charset)
+ url = wc_conv_strict(url, InnerCharset,
+ Currentbuf->document_charset)->ptr;
+ else
+ url = conv_to_system(url);
+ }
+#endif
+ if (url == NULL || *url == '\0') {
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+ }
+ if (*url == '#') {
+ gotoLabel(url + 1);
+ return;
+ }
+ if (relative) {
+ current = baseURL(Currentbuf);
+ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
+ }
+ else {
+ current = NULL;
+ referer = NULL;
+ }
+ parseURL2(url, &p_url, current);
+ pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
+ cmd_loadURL(url, current, referer, NULL);
+ if (Currentbuf != cur_buf) /* success */
+ pushHashHist(URLHist, parsedURL2Str(&Currentbuf->currentURL)->ptr);
+}
+
+DEFUN(goURL, GOTO, "Go to URL")
+{
+ goURL0("Goto URL: ", FALSE);
+}
+
+DEFUN(gorURL, GOTO_RELATIVE, "Go to relative URL")
+{
+ goURL0("Goto relative URL: ", TRUE);
+}
+
+static void
+cmd_loadBuffer(Buffer *buf, int prop, int linkid)
+{
+ if (buf == NULL) {
+ disp_err_message("Can't load string", FALSE);
+ }
+ else if (buf != NO_BUFFER) {
+ buf->bufferprop |= (BP_INTERNAL | prop);
+ if (!(buf->bufferprop & BP_NO_URL))
+ copyParsedURL(&buf->currentURL, &Currentbuf->currentURL);
+ if (linkid != LB_NOLINK) {
+ buf->linkBuffer[REV_LB[linkid]] = Currentbuf;
+ Currentbuf->linkBuffer[linkid] = buf;
+ }
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* load bookmark */
+DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "Read bookmark")
+{
+ cmd_loadURL(BookmarkFile, NULL, NO_REFERER, NULL);
+}
+
+
+/* Add current to bookmark */
+DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark")
+{
+ Str tmp;
+ FormList *request;
+
+ tmp = Sprintf("mode=panel&cookie=%s&bmark=%s&url=%s&title=%s"
+#ifdef USE_M17N
+ "&charset=%s"
+#endif
+ ,
+ (Str_form_quote(localCookie()))->ptr,
+ (Str_form_quote(Strnew_charp(BookmarkFile)))->ptr,
+ (Str_form_quote(parsedURL2Str(&Currentbuf->currentURL)))->
+ ptr,
+#ifdef USE_M17N
+ (Str_form_quote(wc_conv_strict(Currentbuf->buffername,
+ InnerCharset,
+ BookmarkCharset)))->ptr,
+ wc_ces_to_charset(BookmarkCharset));
+#else
+ (Str_form_quote(Strnew_charp(Currentbuf->buffername)))->ptr);
+#endif
+ request = newFormList(NULL, "post", NULL, NULL, NULL, NULL, NULL);
+ request->body = tmp->ptr;
+ request->length = tmp->length;
+ cmd_loadURL("file:///$LIB/" W3MBOOKMARK_CMDNAME, NULL, NO_REFERER,
+ request);
+}
+
+/* option setting */
+DEFUN(ldOpt, OPTIONS, "Option setting panel")
+{
+ cmd_loadBuffer(load_option_panel(), BP_NO_URL, LB_NOLINK);
+}
+
+/* set an option */
+DEFUN(setOpt, SET_OPTION, "Set option")
+{
+ char *opt;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ opt = searchKeyData();
+ if (opt == NULL || *opt == '\0' || strchr(opt, '=') == NULL) {
+ if (opt != NULL && *opt != '\0') {
+ char *v = get_param_option(opt);
+ opt = Sprintf("%s=%s", opt, v ? v : "")->ptr;
+ }
+ opt = inputStrHist("Set option: ", opt, TextHist);
+ if (opt == NULL || *opt == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ if (set_param_option(opt))
+ sync_with_option();
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+/* error message list */
+DEFUN(msgs, MSGS, "Display error messages")
+{
+ cmd_loadBuffer(message_list_panel(), BP_NO_URL, LB_NOLINK);
+}
+
+/* page info */
+DEFUN(pginfo, INFO, "View info of current document")
+{
+ Buffer *buf;
+
+ if ((buf = Currentbuf->linkBuffer[LB_N_INFO]) != NULL) {
+ Currentbuf = buf;
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ if ((buf = Currentbuf->linkBuffer[LB_INFO]) != NULL)
+ delBuffer(buf);
+ buf = page_info_panel(Currentbuf);
+ cmd_loadBuffer(buf, BP_NORMAL, LB_INFO);
+}
+
+void
+follow_map(struct parsed_tagarg *arg)
+{
+ char *name = tag_get_value(arg, "link");
+#if defined(MENU_MAP) || defined(USE_IMAGE)
+ Anchor *an;
+ MapArea *a;
+ int x, y;
+ ParsedURL p_url;
+
+ an = retrieveCurrentImg(Currentbuf);
+ x = Currentbuf->cursorX + Currentbuf->rootX;
+ y = Currentbuf->cursorY + Currentbuf->rootY;
+ a = follow_map_menu(Currentbuf, name, an, x, y);
+ if (a == NULL || a->url == NULL || *(a->url) == '\0') {
+#endif
+#ifndef MENU_MAP
+ Buffer *buf = follow_map_panel(Currentbuf, name);
+
+ if (buf != NULL)
+ cmd_loadBuffer(buf, BP_NORMAL, LB_NOLINK);
+#endif
+#if defined(MENU_MAP) || defined(USE_IMAGE)
+ return;
+ }
+ if (*(a->url) == '#') {
+ gotoLabel(a->url + 1);
+ return;
+ }
+ parseURL2(a->url, &p_url, baseURL(Currentbuf));
+ pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
+ if (check_target && open_tab_blank && a->target &&
+ (!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) {
+ Buffer *buf;
+
+ _newT();
+ buf = Currentbuf;
+ cmd_loadURL(a->url, baseURL(Currentbuf),
+ parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL);
+ if (buf != Currentbuf)
+ delBuffer(buf);
+ else
+ deleteTab(CurrentTab);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+ }
+ cmd_loadURL(a->url, baseURL(Currentbuf),
+ parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL);
+#endif
+}
+
+#ifdef USE_MENU
+/* link menu */
+DEFUN(linkMn, LINK_MENU, "Popup link element menu")
+{
+ LinkList *l = link_menu(Currentbuf);
+ ParsedURL p_url;
+
+ if (!l || !l->url)
+ return;
+ if (*(l->url) == '#') {
+ gotoLabel(l->url + 1);
+ return;
+ }
+ parseURL2(l->url, &p_url, baseURL(Currentbuf));
+ pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
+ cmd_loadURL(l->url, baseURL(Currentbuf),
+ parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL);
+}
+
+static void
+anchorMn(Anchor *(*menu_func) (Buffer *), int go)
+{
+ Anchor *a;
+ BufferPoint *po;
+
+ if (!Currentbuf->href || !Currentbuf->hmarklist)
+ return;
+ a = menu_func(Currentbuf);
+ if (!a || a->hseq < 0)
+ return;
+ po = &Currentbuf->hmarklist->marks[a->hseq];
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+ if (go)
+ followA();
+}
+
+/* accesskey */
+DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu")
+{
+ anchorMn(accesskey_menu, TRUE);
+}
+
+/* list menu */
+DEFUN(listMn, LIST_MENU, "Popup link list menu and go to selected link")
+{
+ anchorMn(list_menu, TRUE);
+}
+
+DEFUN(movlistMn, MOVE_LIST_MENU,
+ "Popup link list menu and move cursor to selected link")
+{
+ anchorMn(list_menu, FALSE);
+}
+#endif
+
+/* link,anchor,image list */
+DEFUN(linkLst, LIST, "Show all links and images")
+{
+ Buffer *buf;
+
+ buf = link_list_panel(Currentbuf);
+ if (buf != NULL) {
+#ifdef USE_M17N
+ buf->document_charset = Currentbuf->document_charset;
+#endif
+ cmd_loadBuffer(buf, BP_NORMAL, LB_NOLINK);
+ }
+}
+
+#ifdef USE_COOKIE
+/* cookie list */
+DEFUN(cooLst, COOKIE, "View cookie list")
+{
+ Buffer *buf;
+
+ buf = cookie_list_panel();
+ if (buf != NULL)
+ cmd_loadBuffer(buf, BP_NO_URL, LB_NOLINK);
+}
+#endif /* USE_COOKIE */
+
+#ifdef USE_HISTORY
+/* History page */
+DEFUN(ldHist, HISTORY, "View history of URL")
+{
+ cmd_loadBuffer(historyBuffer(URLHist), BP_NO_URL, LB_NOLINK);
+}
+#endif /* USE_HISTORY */
+
+/* download HREF link */
+DEFUN(svA, SAVE_LINK, "Save link to file")
+{
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ do_download = TRUE;
+ followA();
+ do_download = FALSE;
+}
+
+/* download IMG link */
+DEFUN(svI, SAVE_IMAGE, "Save image to file")
+{
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ do_download = TRUE;
+ followI();
+ do_download = FALSE;
+}
+
+/* save buffer */
+DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file")
+{
+ char *qfile = NULL, *file;
+ FILE *f;
+ int is_pipe;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ file = searchKeyData();
+ if (file == NULL || *file == '\0') {
+ /* FIXME: gettextize? */
+ qfile = inputLineHist("Save buffer to: ", NULL, IN_COMMAND, SaveHist);
+ if (qfile == NULL || *qfile == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ file = conv_to_system(qfile ? qfile : file);
+ if (*file == '|') {
+ is_pipe = TRUE;
+ f = popen(file + 1, "w");
+ }
+ else {
+ if (qfile) {
+ file = unescape_spaces(Strnew_charp(qfile))->ptr;
+ file = conv_to_system(file);
+ }
+ file = expandPath(file);
+ if (checkOverWrite(file) < 0) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ f = fopen(file, "w");
+ is_pipe = FALSE;
+ }
+ if (f == NULL) {
+ /* FIXME: gettextize? */
+ char *emsg = Sprintf("Can't open %s", conv_from_system(file))->ptr;
+ disp_err_message(emsg, TRUE);
+ return;
+ }
+ saveBuffer(Currentbuf, f, TRUE);
+ if (is_pipe)
+ pclose(f);
+ else
+ fclose(f);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* save source */
+DEFUN(svSrc, DOWNLOAD SAVE, "Save document source to file")
+{
+ char *file;
+
+ if (Currentbuf->sourcefile == NULL)
+ return;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ PermitSaveToPipe = TRUE;
+ if (Currentbuf->real_scheme == SCM_LOCAL)
+ file = conv_from_system(guess_save_name(NULL,
+ Currentbuf->currentURL.
+ real_file));
+ else
+ file = guess_save_name(Currentbuf, Currentbuf->currentURL.file);
+ doFileCopy(Currentbuf->sourcefile, file);
+ PermitSaveToPipe = FALSE;
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+static void
+_peekURL(int only_img)
+{
+
+ Anchor *a;
+ ParsedURL pu;
+ static Str s = NULL;
+#ifdef USE_M17N
+ static Lineprop *p = NULL;
+ Lineprop *pp;
+#endif
+ static int offset = 0, n;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (CurrentKey == prev_key && s != NULL) {
+ if (s->length - offset >= COLS)
+ offset++;
+ else if (s->length <= offset) /* bug ? */
+ offset = 0;
+ goto disp;
+ }
+ else {
+ offset = 0;
+ }
+ s = NULL;
+ a = (only_img ? NULL : retrieveCurrentAnchor(Currentbuf));
+ if (a == NULL) {
+ a = (only_img ? NULL : retrieveCurrentForm(Currentbuf));
+ if (a == NULL) {
+ a = retrieveCurrentImg(Currentbuf);
+ if (a == NULL)
+ return;
+ }
+ else
+ s = Strnew_charp(form2str((FormItemList *)a->url));
+ }
+ if (s == NULL) {
+ parseURL2(a->url, &pu, baseURL(Currentbuf));
+ s = parsedURL2Str(&pu);
+ }
+ if (DecodeURL)
+ s = Strnew_charp(url_unquote_conv
+ (s->ptr, Currentbuf->document_charset));
+#ifdef USE_M17N
+ s = checkType(s, &pp, NULL);
+ p = NewAtom_N(Lineprop, s->length);
+ bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop));
+#endif
+ disp:
+ n = searchKeyNum();
+ if (n > 1 && s->length > (n - 1) * (COLS - 1))
+ offset = (n - 1) * (COLS - 1);
+#ifdef USE_M17N
+ while (offset < s->length && p[offset] & PC_WCHAR2)
+ offset++;
+#endif
+ disp_message_nomouse(&s->ptr[offset], TRUE);
+}
+
+/* peek URL */
+DEFUN(peekURL, PEEK_LINK, "Peek link URL")
+{
+ _peekURL(0);
+}
+
+/* peek URL of image */
+DEFUN(peekIMG, PEEK_IMG, "Peek image URL")
+{
+ _peekURL(1);
+}
+
+/* show current URL */
+static Str
+currentURL(void)
+{
+ if (Currentbuf->bufferprop & BP_INTERNAL)
+ return Strnew_size(0);
+ return parsedURL2Str(&Currentbuf->currentURL);
+}
+
+DEFUN(curURL, PEEK, "Peek current URL")
+{
+ static Str s = NULL;
+#ifdef USE_M17N
+ static Lineprop *p = NULL;
+ Lineprop *pp;
+#endif
+ static int offset = 0, n;
+
+ if (Currentbuf->bufferprop & BP_INTERNAL)
+ return;
+ if (CurrentKey == prev_key && s != NULL) {
+ if (s->length - offset >= COLS)
+ offset++;
+ else if (s->length <= offset) /* bug ? */
+ offset = 0;
+ }
+ else {
+ offset = 0;
+ s = currentURL();
+ if (DecodeURL)
+ s = Strnew_charp(url_unquote_conv(s->ptr, 0));
+#ifdef USE_M17N
+ s = checkType(s, &pp, NULL);
+ p = NewAtom_N(Lineprop, s->length);
+ bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop));
+#endif
+ }
+ n = searchKeyNum();
+ if (n > 1 && s->length > (n - 1) * (COLS - 1))
+ offset = (n - 1) * (COLS - 1);
+#ifdef USE_M17N
+ while (offset < s->length && p[offset] & PC_WCHAR2)
+ offset++;
+#endif
+ disp_message_nomouse(&s->ptr[offset], TRUE);
+}
+/* view HTML source */
+
+DEFUN(vwSrc, SOURCE VIEW, "View HTML source")
+{
+ Buffer *buf;
+
+ if (Currentbuf->type == NULL || Currentbuf->bufferprop & BP_FRAME)
+ return;
+ if ((buf = Currentbuf->linkBuffer[LB_SOURCE]) != NULL ||
+ (buf = Currentbuf->linkBuffer[LB_N_SOURCE]) != NULL) {
+ Currentbuf = buf;
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ if (Currentbuf->sourcefile == NULL) {
+ if (Currentbuf->pagerSource &&
+ !strcasecmp(Currentbuf->type, "text/plain")) {
+#ifdef USE_M17N
+ wc_ces old_charset;
+ wc_bool old_fix_width_conv;
+#endif
+ FILE *f;
+ Str tmpf = tmpfname(TMPF_SRC, NULL);
+ f = fopen(tmpf->ptr, "w");
+ if (f == NULL)
+ return;
+#ifdef USE_M17N
+ old_charset = DisplayCharset;
+ old_fix_width_conv = WcOption.fix_width_conv;
+ DisplayCharset = (Currentbuf->document_charset != WC_CES_US_ASCII)
+ ? Currentbuf->document_charset : 0;
+ WcOption.fix_width_conv = WC_FALSE;
+#endif
+ saveBufferBody(Currentbuf, f, TRUE);
+#ifdef USE_M17N
+ DisplayCharset = old_charset;
+ WcOption.fix_width_conv = old_fix_width_conv;
+#endif
+ fclose(f);
+ Currentbuf->sourcefile = tmpf->ptr;
+ }
+ else {
+ return;
+ }
+ }
+
+ buf = newBuffer(INIT_BUFFER_WIDTH);
+
+ if (!strcasecmp(Currentbuf->type, "text/html")) {
+ buf->type = "text/plain";
+ if (Currentbuf->real_type &&
+ !strcasecmp(Currentbuf->real_type, "text/html"))
+ buf->real_type = "text/plain";
+ else
+ buf->real_type = Currentbuf->real_type;
+ buf->buffername = Sprintf("source of %s", Currentbuf->buffername)->ptr;
+ buf->linkBuffer[LB_N_SOURCE] = Currentbuf;
+ Currentbuf->linkBuffer[LB_SOURCE] = buf;
+ }
+ else if (!strcasecmp(Currentbuf->type, "text/plain")) {
+ buf->type = "text/html";
+ if (Currentbuf->real_type &&
+ !strcasecmp(Currentbuf->real_type, "text/plain"))
+ buf->real_type = "text/html";
+ else
+ buf->real_type = Currentbuf->real_type;
+ buf->buffername = Sprintf("HTML view of %s",
+ Currentbuf->buffername)->ptr;
+ buf->linkBuffer[LB_SOURCE] = Currentbuf;
+ Currentbuf->linkBuffer[LB_N_SOURCE] = buf;
+ }
+ else {
+ return;
+ }
+ buf->currentURL = Currentbuf->currentURL;
+ buf->real_scheme = Currentbuf->real_scheme;
+ buf->filename = Currentbuf->filename;
+ buf->sourcefile = Currentbuf->sourcefile;
+ buf->header_source = Currentbuf->header_source;
+ buf->search_header = Currentbuf->search_header;
+#ifdef USE_M17N
+ buf->document_charset = Currentbuf->document_charset;
+#endif
+ buf->clone = Currentbuf->clone;
+ (*buf->clone)++;
+
+ buf->need_reshape = TRUE;
+ reshapeBuffer(buf);
+ pushBuffer(buf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+/* reload */
+DEFUN(reload, RELOAD, "Reload buffer")
+{
+ Buffer *buf, *fbuf = NULL, sbuf;
+#ifdef USE_M17N
+ wc_ces old_charset;
+#endif
+ Str url;
+ FormList *request;
+ int multipart;
+
+ if (Currentbuf->bufferprop & BP_INTERNAL) {
+ if (!strcmp(Currentbuf->buffername, DOWNLOAD_LIST_TITLE)) {
+ ldDL();
+ return;
+ }
+ /* FIXME: gettextize? */
+ disp_err_message("Can't reload...", TRUE);
+ return;
+ }
+ if (Currentbuf->currentURL.scheme == SCM_LOCAL &&
+ !strcmp(Currentbuf->currentURL.file, "-")) {
+ /* file is std input */
+ /* FIXME: gettextize? */
+ disp_err_message("Can't reload stdin", TRUE);
+ return;
+ }
+ copyBuffer(&sbuf, Currentbuf);
+ if (Currentbuf->bufferprop & BP_FRAME &&
+ (fbuf = Currentbuf->linkBuffer[LB_N_FRAME])) {
+ if (fmInitialized) {
+ message("Rendering frame", 0, 0);
+ refresh();
+ }
+ if (!(buf = renderFrame(fbuf, 1))) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ if (fbuf->linkBuffer[LB_FRAME]) {
+ if (buf->sourcefile &&
+ fbuf->linkBuffer[LB_FRAME]->sourcefile &&
+ !strcmp(buf->sourcefile,
+ fbuf->linkBuffer[LB_FRAME]->sourcefile))
+ fbuf->linkBuffer[LB_FRAME]->sourcefile = NULL;
+ delBuffer(fbuf->linkBuffer[LB_FRAME]);
+ }
+ fbuf->linkBuffer[LB_FRAME] = buf;
+ buf->linkBuffer[LB_N_FRAME] = fbuf;
+ pushBuffer(buf);
+ Currentbuf = buf;
+ if (Currentbuf->firstLine)
+ restorePosition(Currentbuf, &sbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+ }
+ else if (Currentbuf->frameset != NULL)
+ fbuf = Currentbuf->linkBuffer[LB_FRAME];
+ multipart = 0;
+ if (Currentbuf->form_submit) {
+ request = Currentbuf->form_submit->parent;
+ if (request->method == FORM_METHOD_POST
+ && request->enctype == FORM_ENCTYPE_MULTIPART) {
+ Str query;
+ struct stat st;
+ multipart = 1;
+ query_from_followform(&query, Currentbuf->form_submit, multipart);
+ stat(request->body, &st);
+ request->length = st.st_size;
+ }
+ }
+ else {
+ request = NULL;
+ }
+ url = parsedURL2Str(&Currentbuf->currentURL);
+ /* FIXME: gettextize? */
+ message("Reloading...", 0, 0);
+ refresh();
+#ifdef USE_M17N
+ old_charset = DocumentCharset;
+ if (Currentbuf->document_charset != WC_CES_US_ASCII)
+ DocumentCharset = Currentbuf->document_charset;
+#endif
+ SearchHeader = Currentbuf->search_header;
+ DefaultType = Currentbuf->real_type;
+ buf = loadGeneralFile(url->ptr, NULL, NO_REFERER, RG_NOCACHE, request);
+#ifdef USE_M17N
+ DocumentCharset = old_charset;
+#endif
+ SearchHeader = FALSE;
+ DefaultType = NULL;
+
+ if (multipart)
+ unlink(request->body);
+ if (buf == NULL) {
+ /* FIXME: gettextize? */
+ disp_err_message("Can't reload...", TRUE);
+ return;
+ }
+ else if (buf == NO_BUFFER) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ if (fbuf != NULL)
+ Firstbuf = deleteBuffer(Firstbuf, fbuf);
+ repBuffer(Currentbuf, buf);
+ if ((buf->type != NULL) && (sbuf.type != NULL) &&
+ ((!strcasecmp(buf->type, "text/plain") &&
+ !strcasecmp(sbuf.type, "text/html")) ||
+ (!strcasecmp(buf->type, "text/html") &&
+ !strcasecmp(sbuf.type, "text/plain")))) {
+ vwSrc();
+ if (Currentbuf != buf)
+ Firstbuf = deleteBuffer(Firstbuf, buf);
+ }
+ Currentbuf->search_header = sbuf.search_header;
+ Currentbuf->form_submit = sbuf.form_submit;
+ if (Currentbuf->firstLine)
+ restorePosition(Currentbuf, &sbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* reshape */
+DEFUN(reshape, RESHAPE, "Re-render buffer")
+{
+ Currentbuf->need_reshape = TRUE;
+ reshapeBuffer(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+#ifdef USE_M17N
+static void
+_docCSet(wc_ces charset)
+{
+ if (Currentbuf->bufferprop & BP_INTERNAL)
+ return;
+ if (Currentbuf->sourcefile == NULL) {
+ disp_message("Can't reload...", FALSE);
+ return;
+ }
+ Currentbuf->document_charset = charset;
+ Currentbuf->need_reshape = TRUE;
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+void
+change_charset(struct parsed_tagarg *arg)
+{
+ Buffer *buf = Currentbuf->linkBuffer[LB_N_INFO];
+ wc_ces charset;
+
+ if (buf == NULL)
+ return;
+ delBuffer(Currentbuf);
+ Currentbuf = buf;
+ if (Currentbuf->bufferprop & BP_INTERNAL)
+ return;
+ charset = Currentbuf->document_charset;
+ for (; arg; arg = arg->next) {
+ if (!strcmp(arg->arg, "charset"))
+ charset = atoi(arg->value);
+ }
+ _docCSet(charset);
+}
+
+DEFUN(docCSet, CHARSET, "Change the current document charset")
+{
+ char *cs;
+ wc_ces charset;
+
+ cs = searchKeyData();
+ if (cs == NULL || *cs == '\0')
+ /* FIXME: gettextize? */
+ cs = inputStr("Document charset: ",
+ wc_ces_to_charset(Currentbuf->document_charset));
+ charset = wc_guess_charset_short(cs, 0);
+ if (charset == 0) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ _docCSet(charset);
+}
+
+DEFUN(defCSet, DEFAULT_CHARSET, "Change the default document charset")
+{
+ char *cs;
+ wc_ces charset;
+
+ cs = searchKeyData();
+ if (cs == NULL || *cs == '\0')
+ /* FIXME: gettextize? */
+ cs = inputStr("Default document charset: ",
+ wc_ces_to_charset(DocumentCharset));
+ charset = wc_guess_charset_short(cs, 0);
+ if (charset != 0)
+ DocumentCharset = charset;
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+#endif
+
+/* mark URL-like patterns as anchors */
+void
+chkURLBuffer(Buffer *buf)
+{
+ static char *url_like_pat[] = {
+ "https?://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./?=~_\\&+@#,\\$;]*[a-zA-Z0-9_/=\\-]",
+ "file:/[a-zA-Z0-9:%\\-\\./=_\\+@#,\\$;]*",
+#ifdef USE_GOPHER
+ "gopher://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./_]*",
+#endif /* USE_GOPHER */
+ "ftp://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./=_+@#,\\$]*[a-zA-Z0-9_/]",
+#ifdef USE_NNTP
+ "news:[^<> ][^<> ]*",
+ "nntp://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./_]*",
+#endif /* USE_NNTP */
+#ifndef USE_W3MMAILER /* see also chkExternalURIBuffer() */
+ "mailto:[^<> ][^<> ]*@[a-zA-Z0-9][a-zA-Z0-9\\-\\._]*[a-zA-Z0-9]",
+#endif
+#ifdef INET6
+ "https?://[a-zA-Z0-9:%\\-\\./_@]*\\[[a-fA-F0-9:][a-fA-F0-9:\\.]*\\][a-zA-Z0-9:%\\-\\./?=~_\\&+@#,\\$;]*",
+ "ftp://[a-zA-Z0-9:%\\-\\./_@]*\\[[a-fA-F0-9:][a-fA-F0-9:\\.]*\\][a-zA-Z0-9:%\\-\\./=_+@#,\\$]*",
+#endif /* INET6 */
+ NULL
+ };
+ int i;
+ for (i = 0; url_like_pat[i]; i++) {
+ reAnchor(buf, url_like_pat[i]);
+ }
+#ifdef USE_EXTERNAL_URI_LOADER
+ chkExternalURIBuffer(buf);
+#endif
+ buf->check_url |= CHK_URL;
+}
+
+DEFUN(chkURL, MARK_URL, "Mark URL-like strings as anchors")
+{
+ chkURLBuffer(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(chkWORD, MARK_WORD, "Mark current word as anchor")
+{
+ char *p;
+ int spos, epos;
+ p = getCurWord(Currentbuf, &spos, &epos, ":\"\'`<>()[]{}&|;*?$");
+ if (p == NULL)
+ return;
+ reAnchorWord(Currentbuf, Currentbuf->currentLine, spos, epos);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+#ifdef USE_NNTP
+/* mark Message-ID-like patterns as NEWS anchors */
+void
+chkNMIDBuffer(Buffer *buf)
+{
+ static char *url_like_pat[] = {
+ "<[!-;=?-~]+@[a-zA-Z0-9\\.\\-_]+>",
+ NULL,
+ };
+ int i;
+ for (i = 0; url_like_pat[i]; i++) {
+ reAnchorNews(buf, url_like_pat[i]);
+ }
+ buf->check_url |= CHK_NMID;
+}
+
+DEFUN(chkNMID, MARK_MID, "Mark Message-ID-like strings as anchors")
+{
+ chkNMIDBuffer(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+#endif /* USE_NNTP */
+
+/* render frame */
+DEFUN(rFrame, FRAME, "Render frame")
+{
+ Buffer *buf;
+
+ if ((buf = Currentbuf->linkBuffer[LB_FRAME]) != NULL) {
+ Currentbuf = buf;
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ if (Currentbuf->frameset == NULL) {
+ if ((buf = Currentbuf->linkBuffer[LB_N_FRAME]) != NULL) {
+ Currentbuf = buf;
+ displayBuffer(Currentbuf, B_NORMAL);
+ }
+ return;
+ }
+ if (fmInitialized) {
+ message("Rendering frame", 0, 0);
+ refresh();
+ }
+ buf = renderFrame(Currentbuf, 0);
+ if (buf == NULL) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ buf->linkBuffer[LB_N_FRAME] = Currentbuf;
+ Currentbuf->linkBuffer[LB_FRAME] = buf;
+ pushBuffer(buf);
+ if (fmInitialized && display_ok)
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+/* spawn external browser */
+static void
+invoke_browser(char *url)
+{
+ Str cmd;
+ char *browser = NULL;
+ int bg = 0, len;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ browser = searchKeyData();
+ if (browser == NULL || *browser == '\0') {
+ switch (prec_num) {
+ case 0:
+ case 1:
+ browser = ExtBrowser;
+ break;
+ case 2:
+ browser = ExtBrowser2;
+ break;
+ case 3:
+ browser = ExtBrowser3;
+ break;
+ }
+ if (browser == NULL || *browser == '\0') {
+ browser = inputStr("Browse command: ", NULL);
+ if (browser != NULL)
+ browser = conv_to_system(browser);
+ }
+ }
+ else {
+ browser = conv_to_system(browser);
+ }
+ if (browser == NULL || *browser == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+
+ if ((len = strlen(browser)) >= 2 && browser[len - 1] == '&' &&
+ browser[len - 2] != '\\') {
+ browser = allocStr(browser, len - 2);
+ bg = 1;
+ }
+ cmd = myExtCommand(browser, shell_quote(url), FALSE);
+ Strremovetrailingspaces(cmd);
+ fmTerm();
+ mySystem(cmd->ptr, bg);
+ fmInit();
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(extbrz, EXTERN, "Execute external browser")
+{
+ if (Currentbuf->bufferprop & BP_INTERNAL) {
+ /* FIXME: gettextize? */
+ disp_err_message("Can't browse...", TRUE);
+ return;
+ }
+ if (Currentbuf->currentURL.scheme == SCM_LOCAL &&
+ !strcmp(Currentbuf->currentURL.file, "-")) {
+ /* file is std input */
+ /* FIXME: gettextize? */
+ disp_err_message("Can't browse stdin", TRUE);
+ return;
+ }
+ invoke_browser(parsedURL2Str(&Currentbuf->currentURL)->ptr);
+}
+
+DEFUN(linkbrz, EXTERN_LINK, "View current link using external browser")
+{
+ Anchor *a;
+ ParsedURL pu;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ a = retrieveCurrentAnchor(Currentbuf);
+ if (a == NULL)
+ return;
+ parseURL2(a->url, &pu, baseURL(Currentbuf));
+ invoke_browser(parsedURL2Str(&pu)->ptr);
+}
+
+/* show current line number and number of lines in the entire document */
+DEFUN(curlno, LINE_INFO, "Show current line number")
+{
+ Line *l = Currentbuf->currentLine;
+ Str tmp;
+ int cur = 0, all = 0, col = 0, len = 0;
+
+ if (l != NULL) {
+ cur = l->real_linenumber;
+ col = l->bwidth + Currentbuf->currentColumn + Currentbuf->cursorX + 1;
+ while (l->next && l->next->bpos)
+ l = l->next;
+ if (l->width < 0)
+ l->width = COLPOS(l, l->len);
+ len = l->bwidth + l->width;
+ }
+ if (Currentbuf->lastLine)
+ all = Currentbuf->lastLine->real_linenumber;
+ if (Currentbuf->pagerSource && !(Currentbuf->bufferprop & BP_CLOSE))
+ tmp = Sprintf("line %d col %d/%d", cur, col, len);
+ else
+ tmp = Sprintf("line %d/%d (%d%%) col %d/%d", cur, all,
+ (int)((double)cur * 100.0 / (double)(all ? all : 1)
+ + 0.5), col, len);
+#ifdef USE_M17N
+ Strcat_charp(tmp, " ");
+ Strcat_charp(tmp, wc_ces_to_charset_desc(Currentbuf->document_charset));
+#endif
+
+ disp_message(tmp->ptr, FALSE);
+}
+
+#ifdef USE_IMAGE
+DEFUN(dispI, DISPLAY_IMAGE, "Restart loading and drawing of images")
+{
+ if (!displayImage)
+ initImage();
+ if (!activeImage)
+ return;
+ displayImage = TRUE;
+ /*
+ * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html")))
+ * return;
+ */
+ Currentbuf->image_flag = IMG_FLAG_AUTO;
+ Currentbuf->need_reshape = TRUE;
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+DEFUN(stopI, STOP_IMAGE, "Stop loading and drawing of images")
+{
+ if (!activeImage)
+ return;
+ /*
+ * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html")))
+ * return;
+ */
+ Currentbuf->image_flag = IMG_FLAG_SKIP;
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+#endif
+
+#ifdef USE_MOUSE
+
+static int
+mouse_scroll_line(void)
+{
+ if (relative_wheel_scroll)
+ return (relative_wheel_scroll_ratio * LASTLINE + 99) / 100;
+ else
+ return fixed_wheel_scroll_count;
+}
+
+static TabBuffer *
+posTab(int x, int y)
+{
+ TabBuffer *tab;
+
+ if (mouse_action.menu_str && x < mouse_action.menu_width && y == 0)
+ return NO_TABBUFFER;
+ if (y > LastTab->y)
+ return NULL;
+ for (tab = FirstTab; tab; tab = tab->nextTab) {
+ if (tab->x1 <= x && x <= tab->x2 && tab->y == y)
+ return tab;
+ }
+ return NULL;
+}
+
+static void
+do_mouse_action(int btn, int x, int y)
+{
+ MouseActionMap *map = NULL;
+ int ny = -1;
+
+ if (nTab > 1 || mouse_action.menu_str)
+ ny = LastTab->y + 1;
+
+ switch (btn) {
+ case MOUSE_BTN1_DOWN:
+ btn = 0;
+ break;
+ case MOUSE_BTN2_DOWN:
+ btn = 1;
+ break;
+ case MOUSE_BTN3_DOWN:
+ btn = 2;
+ break;
+ default:
+ return;
+ }
+ if (y < ny) {
+ if (mouse_action.menu_str && x >= 0 && x < mouse_action.menu_width) {
+ if (mouse_action.menu_map[btn])
+ map = &mouse_action.menu_map[btn][x];
+ }
+ else
+ map = &mouse_action.tab_map[btn];
+ }
+ else if (y == LASTLINE) {
+ if (mouse_action.lastline_str && x >= 0 &&
+ x < mouse_action.lastline_width) {
+ if (mouse_action.lastline_map[btn])
+ map = &mouse_action.lastline_map[btn][x];
+ }
+ }
+ else if (y > ny) {
+ if (y == Currentbuf->cursorY + Currentbuf->rootY &&
+ (x == Currentbuf->cursorX + Currentbuf->rootX
+#ifdef USE_M17N
+ || (WcOption.use_wide && Currentbuf->currentLine != NULL &&
+ (CharType(Currentbuf->currentLine->propBuf[Currentbuf->pos])
+ == PC_KANJI1)
+ && x == Currentbuf->cursorX + Currentbuf->rootX + 1)
+#endif
+ )) {
+ if (retrieveCurrentAnchor(Currentbuf) ||
+ retrieveCurrentForm(Currentbuf)) {
+ map = &mouse_action.active_map[btn];
+ if (!(map && map->func))
+ map = &mouse_action.anchor_map[btn];
+ }
+ }
+ else {
+ int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY;
+ cursorXY(Currentbuf, x - Currentbuf->rootX, y - Currentbuf->rootY);
+ if (y == Currentbuf->cursorY + Currentbuf->rootY &&
+ (x == Currentbuf->cursorX + Currentbuf->rootX
+#ifdef USE_M17N
+ || (WcOption.use_wide && Currentbuf->currentLine != NULL &&
+ (CharType(Currentbuf->currentLine->
+ propBuf[Currentbuf->pos]) == PC_KANJI1)
+ && x == Currentbuf->cursorX + Currentbuf->rootX + 1)
+#endif
+ ) &&
+ (retrieveCurrentAnchor(Currentbuf) ||
+ retrieveCurrentForm(Currentbuf)))
+ map = &mouse_action.anchor_map[btn];
+ cursorXY(Currentbuf, cx, cy);
+ }
+ }
+ if (!(map && map->func))
+ map = &mouse_action.default_map[btn];
+ if (map && map->func) {
+ mouse_action.in_action = TRUE;
+ mouse_action.cursorX = x;
+ mouse_action.cursorY = y;
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ CurrentCmdData = map->data;
+ (*map->func) ();
+ CurrentCmdData = NULL;
+ }
+}
+
+static void
+process_mouse(int btn, int x, int y)
+{
+ int delta_x, delta_y, i;
+ static int press_btn = MOUSE_BTN_RESET, press_x, press_y;
+ TabBuffer *t;
+ int ny = -1;
+
+ if (nTab > 1 || mouse_action.menu_str)
+ ny = LastTab->y + 1;
+ if (btn == MOUSE_BTN_UP) {
+ switch (press_btn) {
+ case MOUSE_BTN1_DOWN:
+ if (press_y == y && press_x == x)
+ do_mouse_action(press_btn, x, y);
+ else if (ny > 0 && y < ny) {
+ if (press_y < ny) {
+ moveTab(posTab(press_x, press_y), posTab(x, y),
+ (press_y == y) ? (press_x < x) : (press_y < y));
+ return;
+ }
+ else if (press_x >= Currentbuf->rootX) {
+ Buffer *buf = Currentbuf;
+ int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY;
+
+ t = posTab(x, y);
+ if (t == NULL)
+ return;
+ if (t == NO_TABBUFFER)
+ t = NULL; /* open new tab */
+ cursorXY(Currentbuf, press_x - Currentbuf->rootX,
+ press_y - Currentbuf->rootY);
+ if (Currentbuf->cursorY == press_y - Currentbuf->rootY &&
+ (Currentbuf->cursorX == press_x - Currentbuf->rootX
+#ifdef USE_M17N
+ || (WcOption.use_wide &&
+ Currentbuf->currentLine != NULL &&
+ (CharType(Currentbuf->currentLine->
+ propBuf[Currentbuf->pos]) == PC_KANJI1)
+ && Currentbuf->cursorX == press_x
+ - Currentbuf->rootX - 1)
+#endif
+ )) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ followTab(t);
+ }
+ if (buf == Currentbuf)
+ cursorXY(Currentbuf, cx, cy);
+ }
+ return;
+ }
+ else {
+ delta_x = x - press_x;
+ delta_y = y - press_y;
+
+ if (abs(delta_x) < abs(delta_y) / 3)
+ delta_x = 0;
+ if (abs(delta_y) < abs(delta_x) / 3)
+ delta_y = 0;
+ if (reverse_mouse) {
+ delta_y = -delta_y;
+ delta_x = -delta_x;
+ }
+ if (delta_y > 0) {
+ prec_num = delta_y;
+ ldown1();
+ }
+ else if (delta_y < 0) {
+ prec_num = -delta_y;
+ lup1();
+ }
+ if (delta_x > 0) {
+ prec_num = delta_x;
+ col1L();
+ }
+ else if (delta_x < 0) {
+ prec_num = -delta_x;
+ col1R();
+ }
+ }
+ break;
+ case MOUSE_BTN2_DOWN:
+ case MOUSE_BTN3_DOWN:
+ if (press_y == y && press_x == x)
+ do_mouse_action(press_btn, x, y);
+ break;
+ case MOUSE_BTN4_DOWN_RXVT:
+ for (i = 0; i < mouse_scroll_line(); i++)
+ ldown1();
+ break;
+ case MOUSE_BTN5_DOWN_RXVT:
+ for (i = 0; i < mouse_scroll_line(); i++)
+ lup1();
+ break;
+ }
+ }
+ else if (btn == MOUSE_BTN4_DOWN_XTERM) {
+ for (i = 0; i < mouse_scroll_line(); i++)
+ ldown1();
+ }
+ else if (btn == MOUSE_BTN5_DOWN_XTERM) {
+ for (i = 0; i < mouse_scroll_line(); i++)
+ lup1();
+ }
+
+ if (btn != MOUSE_BTN4_DOWN_RXVT || press_btn == MOUSE_BTN_RESET) {
+ press_btn = btn;
+ press_x = x;
+ press_y = y;
+ }
+ else {
+ press_btn = MOUSE_BTN_RESET;
+ }
+}
+
+DEFUN(msToggle, MOUSE_TOGGLE, "Toggle activity of mouse")
+{
+ if (use_mouse) {
+ use_mouse = FALSE;
+ }
+ else {
+ use_mouse = TRUE;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(mouse, MOUSE, "mouse operation")
+{
+ int btn, x, y;
+
+ btn = (unsigned char)getch() - 32;
+#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
+ if (cygwin_mouse_btn_swapped) {
+ if (btn == MOUSE_BTN2_DOWN)
+ btn = MOUSE_BTN3_DOWN;
+ else if (btn == MOUSE_BTN3_DOWN)
+ btn = MOUSE_BTN2_DOWN;
+ }
+#endif
+ x = (unsigned char)getch() - 33;
+ if (x < 0)
+ x += 0x100;
+ y = (unsigned char)getch() - 33;
+ if (y < 0)
+ y += 0x100;
+
+ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
+ return;
+ process_mouse(btn, x, y);
+}
+
+#ifdef USE_GPM
+int
+gpm_process_mouse(Gpm_Event * event, void *data)
+{
+ int btn = MOUSE_BTN_RESET, x, y;
+ if (event->type & GPM_UP)
+ btn = MOUSE_BTN_UP;
+ else if (event->type & GPM_DOWN) {
+ switch (event->buttons) {
+ case GPM_B_LEFT:
+ btn = MOUSE_BTN1_DOWN;
+ break;
+ case GPM_B_MIDDLE:
+ btn = MOUSE_BTN2_DOWN;
+ break;
+ case GPM_B_RIGHT:
+ btn = MOUSE_BTN3_DOWN;
+ break;
+ }
+ }
+ else {
+ GPM_DRAWPOINTER(event);
+ return 0;
+ }
+ x = event->x;
+ y = event->y;
+ process_mouse(btn, x - 1, y - 1);
+ return 0;
+}
+#endif /* USE_GPM */
+
+#ifdef USE_SYSMOUSE
+int
+sysm_process_mouse(int x, int y, int nbs, int obs)
+{
+ int btn;
+ int bits;
+
+ if (obs & ~nbs)
+ btn = MOUSE_BTN_UP;
+ else if (nbs & ~obs) {
+ bits = nbs & ~obs;
+ btn = bits & 0x1 ? MOUSE_BTN1_DOWN :
+ (bits & 0x2 ? MOUSE_BTN2_DOWN :
+ (bits & 0x4 ? MOUSE_BTN3_DOWN : 0));
+ }
+ else /* nbs == obs */
+ return 0;
+ process_mouse(btn, x, y);
+ return 0;
+}
+#endif /* USE_SYSMOUSE */
+
+DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse cursor (for mouse action)")
+{
+ if (!mouse_action.in_action)
+ return;
+ if ((nTab > 1 || mouse_action.menu_str) &&
+ mouse_action.cursorY < LastTab->y + 1)
+ return;
+ else if (mouse_action.cursorX >= Currentbuf->rootX &&
+ mouse_action.cursorY < LASTLINE) {
+ cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX,
+ mouse_action.cursorY - Currentbuf->rootY);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+#ifdef USE_MENU
+#ifdef KANJI_SYMBOLS
+#define FRAME_WIDTH 2
+#else
+#define FRAME_WIDTH 1
+#endif
+
+DEFUN(menuMs, MENU_MOUSE, "Popup menu at mouse cursor (for mouse action)")
+{
+ if (!mouse_action.in_action)
+ return;
+ if ((nTab > 1 || mouse_action.menu_str) &&
+ mouse_action.cursorY < LastTab->y + 1)
+ mouse_action.cursorX -= FRAME_WIDTH + 1;
+ else if (mouse_action.cursorX >= Currentbuf->rootX &&
+ mouse_action.cursorY < LASTLINE) {
+ cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX,
+ mouse_action.cursorY - Currentbuf->rootY);
+ displayBuffer(Currentbuf, B_NORMAL);
+ }
+ mainMn();
+}
+#endif
+
+DEFUN(tabMs, TAB_MOUSE, "Move to tab on mouse cursor (for mouse action)")
+{
+ TabBuffer *tab;
+
+ if (!mouse_action.in_action)
+ return;
+ tab = posTab(mouse_action.cursorX, mouse_action.cursorY);
+ if (!tab || tab == NO_TABBUFFER)
+ return;
+ CurrentTab = tab;
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(closeTMs, CLOSE_TAB_MOUSE,
+ "Close tab on mouse cursor (for mouse action)")
+{
+ TabBuffer *tab;
+
+ if (!mouse_action.in_action)
+ return;
+ tab = posTab(mouse_action.cursorX, mouse_action.cursorY);
+ if (!tab || tab == NO_TABBUFFER)
+ return;
+ deleteTab(tab);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+#endif /* USE_MOUSE */
+
+DEFUN(dispVer, VERSION, "Display version of w3m")
+{
+ disp_message(Sprintf("w3m version %s", w3m_version)->ptr, TRUE);
+}
+
+DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrap search mode")
+{
+ if (WrapSearch) {
+ WrapSearch = FALSE;
+ /* FIXME: gettextize? */
+ disp_message("Wrap search off", TRUE);
+ }
+ else {
+ WrapSearch = TRUE;
+ /* FIXME: gettextize? */
+ disp_message("Wrap search on", TRUE);
+ }
+}
+
+static int
+is_wordchar(int c, const char *badchars)
+{
+ if (badchars)
+ return !(IS_SPACE(c) || strchr(badchars, c));
+ else
+ return IS_ALPHA(c);
+}
+
+static char *
+getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars)
+{
+ char *p;
+ Line *l = buf->currentLine;
+ int b, e;
+
+ *spos = 0;
+ *epos = 0;
+ if (l == NULL)
+ return NULL;
+ p = l->lineBuf;
+ e = buf->pos;
+ while (e > 0 && !is_wordchar(p[e], badchars))
+ e--;
+ if (!is_wordchar(p[e], badchars))
+ return NULL;
+ b = e;
+ while (b > 0 && is_wordchar(p[b - 1], badchars))
+ b--;
+ while (e < l->len && is_wordchar(p[e], badchars))
+ e++;
+ *spos = b;
+ *epos = e;
+ return &p[b];
+}
+
+static char *
+GetWord(Buffer *buf)
+{
+ int b, e;
+ char *p;
+
+ if ((p = getCurWord(buf, &b, &e, 0)) != NULL) {
+ return Strnew_charp_n(p, e - b)->ptr;
+ }
+ return NULL;
+}
+
+#ifdef USE_DICT
+static void
+execdict(char *word)
+{
+ char *w, *dictcmd;
+ Buffer *buf;
+
+ if (!UseDictCommand || word == NULL || *word == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ w = conv_to_system(word);
+ if (*w == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ dictcmd = Sprintf("%s?%s", DictCommand,
+ Str_form_quote(Strnew_charp(w))->ptr)->ptr;
+ buf = loadGeneralFile(dictcmd, NULL, NO_REFERER, 0, NULL);
+ if (buf == NULL) {
+ disp_message("Execution failed", TRUE);
+ return;
+ }
+ else {
+ buf->filename = w;
+ buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr;
+ if (buf->type == NULL)
+ buf->type = "text/plain";
+ pushBuffer(buf);
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(dictword, DICT_WORD, "Execute dictionary command (see README.dict)")
+{
+ execdict(inputStr("(dictionary)!", ""));
+}
+
+DEFUN(dictwordat, DICT_WORD_AT,
+ "Execute dictionary command for word at cursor")
+{
+ execdict(GetWord(Currentbuf));
+}
+#endif /* USE_DICT */
+
+void
+set_buffer_environ(Buffer *buf)
+{
+ static Buffer *prev_buf = NULL;
+ static Line *prev_line = NULL;
+ static int prev_pos = -1;
+ Line *l;
+
+ if (buf == NULL)
+ return;
+ if (buf != prev_buf) {
+ set_environ("W3M_SOURCEFILE", buf->sourcefile);
+ set_environ("W3M_FILENAME", buf->filename);
+ set_environ("W3M_TITLE", buf->buffername);
+ set_environ("W3M_URL", parsedURL2Str(&buf->currentURL)->ptr);
+ set_environ("W3M_TYPE", buf->real_type ? buf->real_type : "unknown");
+#ifdef USE_M17N
+ set_environ("W3M_CHARSET", wc_ces_to_charset(buf->document_charset));
+#endif
+ }
+ l = buf->currentLine;
+ if (l && (buf != prev_buf || l != prev_line || buf->pos != prev_pos)) {
+ Anchor *a;
+ ParsedURL pu;
+ char *s = GetWord(buf);
+ set_environ("W3M_CURRENT_WORD", s ? s : "");
+ a = retrieveCurrentAnchor(buf);
+ if (a) {
+ parseURL2(a->url, &pu, baseURL(buf));
+ set_environ("W3M_CURRENT_LINK", parsedURL2Str(&pu)->ptr);
+ }
+ else
+ set_environ("W3M_CURRENT_LINK", "");
+ a = retrieveCurrentImg(buf);
+ if (a) {
+ parseURL2(a->url, &pu, baseURL(buf));
+ set_environ("W3M_CURRENT_IMG", parsedURL2Str(&pu)->ptr);
+ }
+ else
+ set_environ("W3M_CURRENT_IMG", "");
+ a = retrieveCurrentForm(buf);
+ if (a)
+ set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));
+ else
+ set_environ("W3M_CURRENT_FORM", "");
+ set_environ("W3M_CURRENT_LINE", Sprintf("%d",
+ l->real_linenumber)->ptr);
+ set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",
+ buf->currentColumn +
+ buf->cursorX + 1)->ptr);
+ }
+ else if (!l) {
+ set_environ("W3M_CURRENT_WORD", "");
+ set_environ("W3M_CURRENT_LINK", "");
+ set_environ("W3M_CURRENT_IMG", "");
+ set_environ("W3M_CURRENT_FORM", "");
+ set_environ("W3M_CURRENT_LINE", "0");
+ set_environ("W3M_CURRENT_COLUMN", "0");
+ }
+ prev_buf = buf;
+ prev_line = l;
+ prev_pos = buf->pos;
+}
+
+char *
+searchKeyData(void)
+{
+ char *data = NULL;
+
+ if (CurrentKeyData != NULL && *CurrentKeyData != '\0')
+ data = CurrentKeyData;
+ else if (CurrentCmdData != NULL && *CurrentCmdData != '\0')
+ data = CurrentCmdData;
+ else if (CurrentKey >= 0)
+ data = getKeyData(CurrentKey);
+ CurrentKeyData = NULL;
+ CurrentCmdData = NULL;
+ if (data == NULL || *data == '\0')
+ return NULL;
+ return allocStr(data, -1);
+}
+
+static int
+searchKeyNum(void)
+{
+ char *d;
+ int n = 1;
+
+ d = searchKeyData();
+ if (d != NULL)
+ n = atoi(d);
+ return n * PREC_NUM;
+}
+
+#ifdef __EMX__
+#ifdef USE_M17N
+static char *
+getCodePage(void)
+{
+ unsigned long CpList[8], CpSize;
+
+ if (!getenv("WINDOWID") && !DosQueryCp(sizeof(CpList), CpList, &CpSize))
+ return Sprintf("CP%d", *CpList)->ptr;
+ return NULL;
+}
+#endif
+#endif
+
+void
+deleteFiles()
+{
+ Buffer *buf;
+ char *f;
+
+ for (CurrentTab = FirstTab; CurrentTab; CurrentTab = CurrentTab->nextTab) {
+ while (Firstbuf && Firstbuf != NO_BUFFER) {
+ buf = Firstbuf->nextBuffer;
+ discardBuffer(Firstbuf);
+ Firstbuf = buf;
+ }
+ }
+ while ((f = popText(fileToDelete)) != NULL)
+ unlink(f);
+}
+
+void
+w3m_exit(int i)
+{
+#ifdef USE_MIGEMO
+ init_migemo(); /* close pipe to migemo */
+#endif
+ stopDownload();
+ deleteFiles();
+#ifdef USE_SSL
+ free_ssl_ctx();
+#endif
+ disconnectFTP();
+#ifdef USE_NNTP
+ disconnectNews();
+#endif
+ exit(i);
+}
+
+DEFUN(execCmd, COMMAND, "Execute w3m command(s)")
+{
+ char *data, *p;
+ int cmd;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ data = searchKeyData();
+ if (data == NULL || *data == '\0') {
+ data = inputStrHist("command [; ...]: ", "", TextHist);
+ if (data == NULL) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ /* data: FUNC [DATA] [; FUNC [DATA] ...] */
+ while (*data) {
+ SKIP_BLANKS(data);
+ if (*data == ';') {
+ data++;
+ continue;
+ }
+ p = getWord(&data);
+ cmd = getFuncList(p);
+ if (cmd < 0)
+ break;
+ p = getQWord(&data);
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ CurrentCmdData = *p ? p : NULL;
+#ifdef USE_MOUSE
+ if (use_mouse)
+ mouse_inactive();
+#endif
+ w3mFuncList[cmd].func();
+#ifdef USE_MOUSE
+ if (use_mouse)
+ mouse_active();
+#endif
+ CurrentCmdData = NULL;
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+#ifdef USE_ALARM
+static MySignalHandler
+SigAlarm(SIGNAL_ARG)
+{
+ char *data;
+
+ if (CurrentAlarm->sec > 0) {
+ CurrentKey = -1;
+ CurrentKeyData = NULL;
+ CurrentCmdData = data = (char *)CurrentAlarm->data;
+#ifdef USE_MOUSE
+ if (use_mouse)
+ mouse_inactive();
+#endif
+ w3mFuncList[CurrentAlarm->cmd].func();
+#ifdef USE_MOUSE
+ if (use_mouse)
+ mouse_active();
+#endif
+ CurrentCmdData = NULL;
+ if (CurrentAlarm->status == AL_IMPLICIT_ONCE) {
+ CurrentAlarm->sec = 0;
+ CurrentAlarm->status = AL_UNSET;
+ }
+ if (Currentbuf->event) {
+ if (Currentbuf->event->status != AL_UNSET)
+ CurrentAlarm = Currentbuf->event;
+ else
+ Currentbuf->event = NULL;
+ }
+ if (!Currentbuf->event)
+ CurrentAlarm = &DefaultAlarm;
+ if (CurrentAlarm->sec > 0) {
+ mySignal(SIGALRM, SigAlarm);
+ alarm(CurrentAlarm->sec);
+ }
+ }
+ SIGNAL_RETURN;
+}
+
+
+DEFUN(setAlarm, ALARM, "Set alarm")
+{
+ char *data;
+ int sec = 0, cmd = -1;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ data = searchKeyData();
+ if (data == NULL || *data == '\0') {
+ data = inputStrHist("(Alarm)sec command: ", "", TextHist);
+ if (data == NULL) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ if (*data != '\0') {
+ sec = atoi(getWord(&data));
+ if (sec > 0)
+ cmd = getFuncList(getWord(&data));
+ }
+ if (cmd >= 0) {
+ data = getQWord(&data);
+ setAlarmEvent(&DefaultAlarm, sec, AL_EXPLICIT, cmd, data);
+ disp_message_nsec(Sprintf("%dsec %s %s", sec, w3mFuncList[cmd].id,
+ data)->ptr, FALSE, 1, FALSE, TRUE);
+ }
+ else {
+ setAlarmEvent(&DefaultAlarm, 0, AL_UNSET, FUNCNAME_nulcmd, NULL);
+ }
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+AlarmEvent *
+setAlarmEvent(AlarmEvent * event, int sec, short status, int cmd, void *data)
+{
+ if (event == NULL)
+ event = New(AlarmEvent);
+ event->sec = sec;
+ event->status = status;
+ event->cmd = cmd;
+ event->data = data;
+ return event;
+}
+#endif
+
+DEFUN(reinit, REINIT, "Reload configuration files")
+{
+ char *resource = searchKeyData();
+
+ if (resource == NULL) {
+ init_rc();
+ sync_with_option();
+#ifdef USE_COOKIE
+ initCookie();
+#endif
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+ return;
+ }
+
+ if (!strcasecmp(resource, "CONFIG") || !strcasecmp(resource, "RC")) {
+ init_rc();
+ sync_with_option();
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+ return;
+ }
+
+#ifdef USE_COOKIE
+ if (!strcasecmp(resource, "COOKIE")) {
+ initCookie();
+ return;
+ }
+#endif
+
+ if (!strcasecmp(resource, "KEYMAP")) {
+ initKeymap(TRUE);
+ return;
+ }
+
+ if (!strcasecmp(resource, "MAILCAP")) {
+ initMailcap();
+ return;
+ }
+
+#ifdef USE_MOUSE
+ if (!strcasecmp(resource, "MOUSE")) {
+ initMouseAction();
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+ return;
+ }
+#endif
+
+#ifdef USE_MENU
+ if (!strcasecmp(resource, "MENU")) {
+ initMenu();
+ return;
+ }
+#endif
+
+ if (!strcasecmp(resource, "MIMETYPES")) {
+ initMimeTypes();
+ return;
+ }
+
+#ifdef USE_EXTERNAL_URI_LOADER
+ if (!strcasecmp(resource, "URIMETHODS")) {
+ initURIMethods();
+ return;
+ }
+#endif
+
+ disp_err_message(Sprintf("Don't know how to reinitialize '%s'", resource)->
+ ptr, FALSE);
+}
+
+DEFUN(defKey, DEFINE_KEY,
+ "Define a binding between a key stroke and a user command")
+{
+ char *data;
+
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
+ data = searchKeyData();
+ if (data == NULL || *data == '\0') {
+ data = inputStrHist("Key definition: ", "", TextHist);
+ if (data == NULL || *data == '\0') {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ }
+ setKeymap(allocStr(data, -1), -1, TRUE);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
+TabBuffer *
+newTab(void)
+{
+ TabBuffer *n;
+
+ n = New(TabBuffer);
+ if (n == NULL)
+ return NULL;
+ n->nextTab = NULL;
+ n->currentBuffer = NULL;
+ n->firstBuffer = NULL;
+ return n;
+}
+
+static void
+_newT(void)
+{
+ TabBuffer *tag;
+ Buffer *buf;
+ int i;
+
+ tag = newTab();
+ if (!tag)
+ return;
+
+ buf = newBuffer(Currentbuf->width);
+ copyBuffer(buf, Currentbuf);
+ buf->nextBuffer = NULL;
+ for (i = 0; i < MAX_LB; i++)
+ buf->linkBuffer[i] = NULL;
+ (*buf->clone)++;
+ tag->firstBuffer = tag->currentBuffer = buf;
+
+ tag->nextTab = CurrentTab->nextTab;
+ tag->prevTab = CurrentTab;
+ if (CurrentTab->nextTab)
+ CurrentTab->nextTab->prevTab = tag;
+ else
+ LastTab = tag;
+ CurrentTab->nextTab = tag;
+ CurrentTab = tag;
+ nTab++;
+}
+
+DEFUN(newT, NEW_TAB, "Open new tab")
+{
+ _newT();
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+static TabBuffer *
+numTab(int n)
+{
+ TabBuffer *tab;
+ int i;
+
+ if (n == 0)
+ return CurrentTab;
+ if (n == 1)
+ return FirstTab;
+ if (nTab <= 1)
+ return NULL;
+ for (tab = FirstTab, i = 1; tab && i < n; tab = tab->nextTab, i++) ;
+ return tab;
+}
+
+void
+calcTabPos(void)
+{
+ TabBuffer *tab;
+#if 0
+ int lcol = 0, rcol = 2, col;
+#else
+ int lcol = 0, rcol = 0, col;
+#endif
+ int n1, n2, na, nx, ny, ix, iy;
+
+#ifdef USE_MOUSE
+ lcol = mouse_action.menu_str ? mouse_action.menu_width : 0;
+#endif
+
+ if (nTab <= 0)
+ return;
+ n1 = (COLS - rcol - lcol) / TabCols;
+ if (n1 >= nTab) {
+ n2 = 1;
+ ny = 1;
+ }
+ else {
+ if (n1 < 0)
+ n1 = 0;
+ n2 = COLS / TabCols;
+ if (n2 == 0)
+ n2 = 1;
+ ny = (nTab - n1 - 1) / n2 + 2;
+ }
+ na = n1 + n2 * (ny - 1);
+ n1 -= (na - nTab) / ny;
+ if (n1 < 0)
+ n1 = 0;
+ na = n1 + n2 * (ny - 1);
+ tab = FirstTab;
+ for (iy = 0; iy < ny && tab; iy++) {
+ if (iy == 0) {
+ nx = n1;
+ col = COLS - rcol - lcol;
+ }
+ else {
+ nx = n2 - (na - nTab + (iy - 1)) / (ny - 1);
+ col = COLS;
+ }
+ for (ix = 0; ix < nx && tab; ix++, tab = tab->nextTab) {
+ tab->x1 = col * ix / nx;
+ tab->x2 = col * (ix + 1) / nx - 1;
+ tab->y = iy;
+ if (iy == 0) {
+ tab->x1 += lcol;
+ tab->x2 += lcol;
+ }
+ }
+ }
+}
+
+TabBuffer *
+deleteTab(TabBuffer * tab)
+{
+ Buffer *buf, *next;
+
+ if (nTab <= 1)
+ return FirstTab;
+ if (tab->prevTab) {
+ if (tab->nextTab)
+ tab->nextTab->prevTab = tab->prevTab;
+ else
+ LastTab = tab->prevTab;
+ tab->prevTab->nextTab = tab->nextTab;
+ if (tab == CurrentTab)
+ CurrentTab = tab->prevTab;
+ }
+ else { /* tab == FirstTab */
+ tab->nextTab->prevTab = NULL;
+ FirstTab = tab->nextTab;
+ if (tab == CurrentTab)
+ CurrentTab = tab->nextTab;
+ }
+ nTab--;
+ buf = tab->firstBuffer;
+ while (buf && buf != NO_BUFFER) {
+ next = buf->nextBuffer;
+ discardBuffer(buf);
+ buf = next;
+ }
+ return FirstTab;
+}
+
+DEFUN(closeT, CLOSE_TAB, "Close current tab")
+{
+ TabBuffer *tab;
+
+ if (nTab <= 1)
+ return;
+ if (prec_num)
+ tab = numTab(PREC_NUM);
+ else
+ tab = CurrentTab;
+ if (tab)
+ deleteTab(tab);
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+DEFUN(nextT, NEXT_TAB, "Move to next tab")
+{
+ int i;
+
+ if (nTab <= 1)
+ return;
+ for (i = 0; i < PREC_NUM; i++) {
+ if (CurrentTab->nextTab)
+ CurrentTab = CurrentTab->nextTab;
+ else
+ CurrentTab = FirstTab;
+ }
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+DEFUN(prevT, PREV_TAB, "Move to previous tab")
+{
+ int i;
+
+ if (nTab <= 1)
+ return;
+ for (i = 0; i < PREC_NUM; i++) {
+ if (CurrentTab->prevTab)
+ CurrentTab = CurrentTab->prevTab;
+ else
+ CurrentTab = LastTab;
+ }
+ displayBuffer(Currentbuf, B_REDRAW_IMAGE);
+}
+
+void
+followTab(TabBuffer * tab)
+{
+ Buffer *buf;
+ Anchor *a;
+
+#ifdef USE_IMAGE
+ a = retrieveCurrentImg(Currentbuf);
+ if (!(a && a->image && a->image->map))
+#endif
+ a = retrieveCurrentAnchor(Currentbuf);
+ if (a == NULL)
+ return;
+
+ if (tab == CurrentTab) {
+ check_target = FALSE;
+ followA();
+ check_target = TRUE;
+ return;
+ }
+ _newT();
+ buf = Currentbuf;
+ check_target = FALSE;
+ followA();
+ check_target = TRUE;
+ if (tab == NULL) {
+ if (buf != Currentbuf)
+ delBuffer(buf);
+ else
+ deleteTab(CurrentTab);
+ }
+ else if (buf != Currentbuf) {
+ /* buf <- p <- ... <- Currentbuf = c */
+ Buffer *c, *p;
+
+ c = Currentbuf;
+ p = prevBuffer(c, buf);
+ p->nextBuffer = NULL;
+ Firstbuf = buf;
+ deleteTab(CurrentTab);
+ CurrentTab = tab;
+ for (buf = p; buf; buf = p) {
+ p = prevBuffer(c, buf);
+ pushBuffer(buf);
+ }
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(tabA, TAB_LINK, "Open current link on new tab")
+{
+ followTab(prec_num ? numTab(PREC_NUM) : NULL);
+}
+
+static void
+tabURL0(TabBuffer * tab, char *prompt, int relative)
+{
+ Buffer *buf;
+
+ if (tab == CurrentTab) {
+ goURL0(prompt, relative);
+ return;
+ }
+ _newT();
+ buf = Currentbuf;
+ goURL0(prompt, relative);
+ if (tab == NULL) {
+ if (buf != Currentbuf)
+ delBuffer(buf);
+ else
+ deleteTab(CurrentTab);
+ }
+ else if (buf != Currentbuf) {
+ /* buf <- p <- ... <- Currentbuf = c */
+ Buffer *c, *p;
+
+ c = Currentbuf;
+ p = prevBuffer(c, buf);
+ p->nextBuffer = NULL;
+ Firstbuf = buf;
+ deleteTab(CurrentTab);
+ CurrentTab = tab;
+ for (buf = p; buf; buf = p) {
+ p = prevBuffer(c, buf);
+ pushBuffer(buf);
+ }
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(tabURL, TAB_GOTO, "Open URL on new tab")
+{
+ tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
+ "Goto URL on new tab: ", FALSE);
+}
+
+DEFUN(tabrURL, TAB_GOTO_RELATIVE, "Open relative URL on new tab")
+{
+ tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
+ "Goto relative URL on new tab: ", TRUE);
+}
+
+void
+moveTab(TabBuffer * t, TabBuffer * t2, int right)
+{
+ if (t2 == NO_TABBUFFER)
+ t2 = FirstTab;
+ if (!t || !t2 || t == t2 || t == NO_TABBUFFER)
+ return;
+ if (t->prevTab) {
+ if (t->nextTab)
+ t->nextTab->prevTab = t->prevTab;
+ else
+ LastTab = t->prevTab;
+ t->prevTab->nextTab = t->nextTab;
+ }
+ else {
+ t->nextTab->prevTab = NULL;
+ FirstTab = t->nextTab;
+ }
+ if (right) {
+ t->nextTab = t2->nextTab;
+ t->prevTab = t2;
+ if (t2->nextTab)
+ t2->nextTab->prevTab = t;
+ else
+ LastTab = t;
+ t2->nextTab = t;
+ }
+ else {
+ t->prevTab = t2->prevTab;
+ t->nextTab = t2;
+ if (t2->prevTab)
+ t2->prevTab->nextTab = t;
+ else
+ FirstTab = t;
+ t2->prevTab = t;
+ }
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(tabR, TAB_RIGHT, "Move current tab right")
+{
+ TabBuffer *tab;
+ int i;
+
+ for (tab = CurrentTab, i = 0; tab && i < PREC_NUM;
+ tab = tab->nextTab, i++) ;
+ moveTab(CurrentTab, tab ? tab : LastTab, TRUE);
+}
+
+DEFUN(tabL, TAB_LEFT, "Move current tab left")
+{
+ TabBuffer *tab;
+ int i;
+
+ for (tab = CurrentTab, i = 0; tab && i < PREC_NUM;
+ tab = tab->prevTab, i++) ;
+ moveTab(CurrentTab, tab ? tab : FirstTab, FALSE);
+}
+
+void
+addDownloadList(pid_t pid, char *url, char *save, char *lock, clen_t size)
+{
+ DownloadList *d;
+
+ d = New(DownloadList);
+ d->pid = pid;
+ d->url = url;
+ if (save[0] != '/' && save[0] != '~')
+ save = Strnew_m_charp(CurrentDir, "/", save, NULL)->ptr;
+ d->save = expandPath(save);
+ d->lock = lock;
+ d->size = size;
+ d->time = time(0);
+ d->ok = FALSE;
+ d->next = NULL;
+ d->prev = LastDL;
+ if (LastDL)
+ LastDL->next = d;
+ else
+ FirstDL = d;
+ LastDL = d;
+ add_download_list = TRUE;
+}
+
+int
+checkDownloadList(void)
+{
+ DownloadList *d;
+ struct stat st;
+
+ if (!FirstDL)
+ return FALSE;
+ for (d = FirstDL; d != NULL; d = d->next) {
+ if (!d->ok && !lstat(d->lock, &st))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static char *
+convert_size3(clen_t size)
+{
+ Str tmp = Strnew();
+ int n;
+
+ do {
+ n = size % 1000;
+ size /= 1000;
+ tmp = Sprintf(size ? ",%.3d%s" : "%d%s", n, tmp->ptr);
+ } while (size);
+ return tmp->ptr;
+}
+
+static Buffer *
+DownloadListBuffer(void)
+{
+ DownloadList *d;
+ Str src = NULL;
+ struct stat st;
+ time_t cur_time;
+ int duration, rate, eta;
+ size_t size;
+
+ if (!FirstDL)
+ return NULL;
+ cur_time = time(0);
+ /* FIXME: gettextize? */
+ src = Strnew_charp("<html><head><title>" DOWNLOAD_LIST_TITLE
+ "</title></head>\n<body><h1 align=center>"
+ DOWNLOAD_LIST_TITLE "</h1>\n"
+ "<form method=internal action=download><hr>\n");
+ for (d = LastDL; d != NULL; d = d->prev) {
+ if (lstat(d->lock, &st))
+ d->ok = TRUE;
+ Strcat_charp(src, "<pre>\n");
+ Strcat(src, Sprintf("%s\n --&gt; %s\n ", html_quote(d->url),
+ html_quote(conv_from_system(d->save))));
+ duration = cur_time - d->time;
+ if (!stat(d->save, &st)) {
+ size = st.st_size;
+ if (d->ok) {
+ d->size = size;
+ duration = st.st_mtime - d->time;
+ }
+ }
+ else
+ size = 0;
+ if (d->size) {
+ int i, l = COLS - 6;
+ if (size < d->size)
+ i = 1.0 * l * size / d->size;
+ else
+ i = l;
+ l -= i;
+ while (i-- > 0)
+ Strcat_char(src, '#');
+ while (l-- > 0)
+ Strcat_char(src, '_');
+ Strcat_char(src, '\n');
+ }
+ if (!d->ok && size < d->size)
+ Strcat(src, Sprintf(" %s / %s bytes (%d%%)",
+ convert_size3(size), convert_size3(d->size),
+ (int)(100.0 * size / d->size)));
+ else
+ Strcat(src, Sprintf(" %s bytes loaded", convert_size3(size)));
+ if (duration > 0) {
+ rate = size / duration;
+ Strcat(src, Sprintf(" %02d:%02d:%02d rate %s/sec",
+ duration / (60 * 60), (duration / 60) % 60,
+ duration % 60, convert_size(rate, 1)));
+ if (!d->ok && size < d->size && rate) {
+ eta = (d->size - size) / rate;
+ Strcat(src, Sprintf(" eta %02d:%02d:%02d", eta / (60 * 60),
+ (eta / 60) % 60, eta % 60));
+ }
+ }
+ Strcat_char(src, '\n');
+ if (d->ok) {
+ Strcat(src, Sprintf("<input type=submit name=ok%d value=OK>",
+ d->pid));
+ if (size < d->size)
+ Strcat_charp(src, " Download incompleted");
+ else
+ Strcat_charp(src, " Download completed");
+ }
+ else
+ Strcat(src, Sprintf("<input type=submit name=stop%d value=STOP>",
+ d->pid));
+ Strcat_charp(src, "\n</pre><hr>\n");
+ }
+ Strcat_charp(src, "</form></body></html>");
+ return loadHTMLString(src);
+}
+
+void
+download_action(struct parsed_tagarg *arg)
+{
+ DownloadList *d;
+ pid_t pid;
+
+ for (; arg; arg = arg->next) {
+ if (!strncmp(arg->arg, "stop", 4)) {
+ pid = (pid_t) atoi(&arg->arg[4]);
+ kill(pid, SIGKILL);
+ }
+ else if (!strncmp(arg->arg, "ok", 2))
+ pid = (pid_t) atoi(&arg->arg[2]);
+ else
+ continue;
+ for (d = FirstDL; d; d = d->next) {
+ if (d->pid == pid) {
+ unlink(d->lock);
+ if (d->prev)
+ d->prev->next = d->next;
+ else
+ FirstDL = d->next;
+ if (d->next)
+ d->next->prev = d->prev;
+ else
+ LastDL = d->prev;
+ break;
+ }
+ }
+ }
+ ldDL();
+}
+
+void
+stopDownload(void)
+{
+ DownloadList *d;
+
+ if (!FirstDL)
+ return;
+ for (d = FirstDL; d != NULL; d = d->next) {
+ if (d->ok)
+ continue;
+ kill(d->pid, SIGKILL);
+ unlink(d->lock);
+ }
+}
+
+/* download panel */
+DEFUN(ldDL, DOWNLOAD_LIST, "Display download list panel")
+{
+ Buffer *buf;
+ int replace = FALSE, new_tab = FALSE;
+#ifdef USE_ALARM
+ int reload;
+#endif
+
+ if (Currentbuf->bufferprop & BP_INTERNAL &&
+ !strcmp(Currentbuf->buffername, DOWNLOAD_LIST_TITLE))
+ replace = TRUE;
+ if (!FirstDL) {
+ if (replace) {
+ if (Currentbuf == Firstbuf && Currentbuf->nextBuffer == NULL) {
+ if (nTab > 1)
+ deleteTab(CurrentTab);
+ }
+ else
+ delBuffer(Currentbuf);
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ }
+ return;
+ }
+#ifdef USE_ALARM
+ reload = checkDownloadList();
+#endif
+ buf = DownloadListBuffer();
+ if (!buf) {
+ displayBuffer(Currentbuf, B_NORMAL);
+ return;
+ }
+ buf->bufferprop |= (BP_INTERNAL | BP_NO_URL);
+ if (replace)
+ restorePosition(buf, Currentbuf);
+ if (!replace && open_tab_dl_list) {
+ _newT();
+ new_tab = TRUE;
+ }
+ pushBuffer(buf);
+ if (replace || new_tab)
+ deletePrevBuf();
+#ifdef USE_ALARM
+ if (reload)
+ Currentbuf->event = setAlarmEvent(Currentbuf->event, 1, AL_IMPLICIT,
+ FUNCNAME_reload, NULL);
+#endif
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+static void
+save_buffer_position(Buffer *buf)
+{
+ BufferPos *b = buf->undo;
+
+ if (!buf->firstLine)
+ return;
+ if (b && b->top_linenumber == TOP_LINENUMBER(buf) &&
+ b->cur_linenumber == CUR_LINENUMBER(buf) &&
+ b->currentColumn == buf->currentColumn && b->pos == buf->pos)
+ return;
+ b = New(BufferPos);
+ b->top_linenumber = TOP_LINENUMBER(buf);
+ b->cur_linenumber = CUR_LINENUMBER(buf);
+ b->currentColumn = buf->currentColumn;
+ b->pos = buf->pos;
+ b->bpos = buf->currentLine ? buf->currentLine->bpos : 0;
+ b->next = NULL;
+ b->prev = buf->undo;
+ if (buf->undo)
+ buf->undo->next = b;
+ buf->undo = b;
+}
+
+static void
+resetPos(BufferPos * b)
+{
+ Buffer buf;
+ Line top, cur;
+
+ top.linenumber = b->top_linenumber;
+ cur.linenumber = b->cur_linenumber;
+ cur.bpos = b->bpos;
+ buf.topLine = &top;
+ buf.currentLine = &cur;
+ buf.pos = b->pos;
+ buf.currentColumn = b->currentColumn;
+ restorePosition(Currentbuf, &buf);
+ Currentbuf->undo = b;
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+}
+
+DEFUN(undoPos, UNDO, "Cancel the last cursor movement")
+{
+ BufferPos *b = Currentbuf->undo;
+ int i;
+
+ if (!Currentbuf->firstLine)
+ return;
+ if (!b || !b->prev)
+ return;
+ for (i = 0; i < PREC_NUM && b->prev; i++, b = b->prev) ;
+ resetPos(b);
+}
+
+DEFUN(redoPos, REDO, "Cancel the last undo")
+{
+ BufferPos *b = Currentbuf->undo;
+ int i;
+
+ if (!Currentbuf->firstLine)
+ return;
+ if (!b || !b->next)
+ return;
+ for (i = 0; i < PREC_NUM && b->next; i++, b = b->next) ;
+ resetPos(b);
+}
diff --git a/ABOUT-NLS b/ABOUT-NLS
index 47d5e39..b1de1b6 100644
--- a/ABOUT-NLS
+++ b/ABOUT-NLS
@@ -1,10 +1,11 @@
-Notes on the Free Translation Project
-*************************************
+1 Notes on the Free Translation Project
+***************************************
- Free software is going international! The Free Translation Project
-is a way to get maintainers of free software, translators, and users all
-together, so that will gradually become able to speak many languages.
-A few packages already provide translations for their messages.
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
@@ -15,78 +16,33 @@ this package with messages translated.
Installers will find here some useful hints. These notes also
explain how users should proceed for getting the programs to use the
available translations. They tell how people wanting to contribute and
-work at translations should contact the appropriate team.
+work on translations can contact the appropriate team.
- When reporting bugs in the `intl/' directory or bugs which may be
-related to internationalization, you should tell about the version of
-`gettext' which is used. The information can be found in the
-`intl/VERSION' file, in internationalized packages.
+1.1 INSTALL Matters
+===================
-Quick configuration advice
-==========================
-
- If you want to exploit the full power of internationalization, you
-should configure it using
-
- ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed. So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation. Future versions of GNU `gettext' will
-very likely convey even more functionality. So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
- So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-INSTALL Matters
-===============
-
- Some packages are "localizable" when properly installed; the
-programs they contain can be made to speak your own native language.
-Most such packages use GNU `gettext'. Other packages have their own
-ways to internationalization, predating GNU `gettext'.
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
By default, this package will be installed to allow translation of
messages. It will automatically detect whether the system already
-provides the GNU `gettext' functions. If not, the GNU `gettext' own
-library will be used. This library is wholly contained within this
-package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is _not_ required. Installers may use
-special options at configuration time for changing the default
-behaviour. The commands:
-
- ./configure --with-included-gettext
+provides the GNU `gettext' functions. Installers may use special
+options at configuration time for changing the default behaviour. The
+command:
+
./configure --disable-nls
-will respectively bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
+will _totally_ disable translation of messages.
When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
-probably detect the previously built and installed `libintl.a' file and
-will decide to use this. This might be not what is desirable. You
-should use the more recent version of the GNU `gettext' library. I.e.
-if the file `intl/VERSION' shows that the library which comes with this
-package is more recent, you should use
-
- ./configure --with-included-gettext
+probably detect the previously built and installed `libintl' library
+and will decide to use it. If not, you may have to to use the
+`--with-libintl-prefix' option to tell `configure' where to look for it.
-to prevent auto-detection.
-
- The configuration process will not test for the `catgets' function
-and therefore it will not be used. The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
-
- Internationalized packages have usually many `po/LL.po' files, where
+ Internationalized packages usually have many `po/LL.po' files, where
LL gives an ISO 639 two-letter code identifying the language. Unless
translations have been forbidden at `configure' time by using the
`--disable-nls' switch, all available translations are installed
@@ -95,13 +51,16 @@ may be set, prior to configuration, to limit the installed set.
`LINGUAS' should then contain a space separated list of two-letter
codes, stating which languages are allowed.
-Using This Package
-==================
+1.2 Using This Package
+======================
- As a user, if your language has been installed for this package, you
+As a user, if your language has been installed for this package, you
only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code. For example, let's
+`LL_CC' combination. If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect. Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code. For example, let's
suppose that you speak German and live in Germany. At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
@@ -117,8 +76,8 @@ country code serves to distinguish the dialects.
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
-locales supported by your system for your country by running the command
-`locale -a | grep '^LL''.
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
Not all programs have translations for all languages. By default, an
English message is shown in place of a nonexistent translation. If you
@@ -131,22 +90,28 @@ system libraries. For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect. For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.
-Translating Teams
-=================
+1.3 Translating Teams
+=====================
- For the Free Translation Project to be a success, we need interested
+For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list. The up-to-date list of
teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
+`http://translationproject.org/', in the "Teams" area.
If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
@@ -160,433 +125,1125 @@ message to `sv-request@li.org', having this message body:
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around. If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
-coordinator for all translator teams.
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
The English team is special. It works at improving and uniformizing
-the terminology in use. Proven linguistic skill are praised more than
-programming skill, here.
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
-Available Packages
-==================
+1.4 Available Packages
+======================
- Languages are not equally supported in all packages. The following
-matrix shows the current state of internationalization, as of May 2003.
-The matrix shows, in regard of each package, for which languages PO
-files have been submitted to translation coordination, with a
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of June
+2010. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
translation percentage of at least 50%.
- Ready PO files am az be bg ca cs da de el en en_GB eo es
- +-------------------------------------------+
- a2ps | [] [] [] [] |
- aegis | () |
- anubis | |
- ap-utils | |
- bash | [] [] [] |
- batchelor | |
- bfd | [] [] |
- binutils | [] [] |
- bison | [] [] [] |
- bluez-pin | [] [] |
- clisp | |
- clisp | [] [] [] |
- coreutils | [] [] [] [] |
- cpio | [] [] [] |
- darkstat | () [] |
- diffutils | [] [] [] [] [] [] [] |
- e2fsprogs | [] [] |
- enscript | [] [] [] [] |
- error | [] [] [] [] [] |
- fetchmail | [] () [] [] [] [] |
- fileutils | [] [] [] |
- findutils | [] [] [] [] [] [] |
- flex | [] [] [] [] |
- gas | [] |
- gawk | [] [] [] [] |
- gcal | [] |
- gcc | [] [] |
- gettext | [] [] [] [] [] |
- gettext-runtime | [] [] [] [] [] |
- gettext-tools | [] [] |
- gimp-print | [] [] [] [] [] |
- gliv | |
- glunarclock | [] [] [] |
- gnucash | () [] |
- gnucash-glossary | [] () [] |
- gnupg | [] () [] [] [] [] |
- gpe-calendar | [] |
- gpe-conf | [] |
- gpe-contacts | [] |
- gpe-edit | |
- gpe-login | [] |
- gpe-ownerinfo | [] |
- gpe-sketchbook | [] |
- gpe-timesheet | |
- gpe-today | [] |
- gpe-todo | [] |
- gphoto2 | [] [] [] [] |
- gprof | [] [] |
- gpsdrive | () () () |
- grep | [] [] [] [] [] |
- gretl | [] |
- hello | [] [] [] [] [] [] |
- id-utils | [] [] |
- indent | [] [] [] [] |
- jpilot | [] [] [] [] |
- jwhois | [] |
- kbd | [] [] [] [] [] |
- ld | [] [] |
- libc | [] [] [] [] [] [] |
- libgpewidget | [] |
- libiconv | [] [] [] [] [] |
- lifelines | [] () |
- lilypond | [] |
- lingoteach | |
- lingoteach_lessons | () () |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] |
- mailutils | [] [] |
- make | [] [] [] |
- man-db | [] () [] [] () |
- mysecretdiary | [] [] [] |
- nano | [] () [] [] [] |
- nano_1_0 | [] () [] [] [] |
- opcodes | [] [] |
- parted | [] [] [] [] [] |
- ptx | [] [] [] [] [] |
- python | |
- radius | |
- recode | [] [] [] [] [] [] |
- screem | |
- sed | [] [] [] [] [] |
- sh-utils | [] [] [] |
- sharutils | [] [] [] [] [] [] |
- sketch | [] () [] |
- soundtracker | [] [] [] |
- sp | [] |
- tar | [] [] [] [] |
- texinfo | [] [] [] [] |
- textutils | [] [] [] [] |
- tin | () () |
- util-linux | [] [] [] [] [] |
- vorbis-tools | [] [] [] |
- wastesedge | () |
- wdiff | [] [] [] [] |
- wget | [] [] [] [] [] [] [] |
- xchat | [] [] [] |
- xpad | |
- +-------------------------------------------+
- am az be bg ca cs da de el en en_GB eo es
- 0 1 4 2 31 17 54 60 14 1 4 12 56
-
- et fa fi fr ga gl he hr hu id it ja ko
- +----------------------------------------+
- a2ps | [] [] [] () () |
- aegis | |
- anubis | [] |
- ap-utils | [] |
- bash | [] [] |
- batchelor | [] |
- bfd | [] [] |
- binutils | [] [] |
- bison | [] [] [] [] |
- bluez-pin | [] [] [] [] |
- clisp | |
- clisp | [] |
- coreutils | [] [] [] [] |
- cpio | [] [] [] [] |
- darkstat | () [] [] [] |
- diffutils | [] [] [] [] [] [] [] |
- e2fsprogs | |
- enscript | [] [] |
- error | [] [] [] [] |
- fetchmail | [] |
- fileutils | [] [] [] [] [] |
- findutils | [] [] [] [] [] [] [] [] [] [] [] |
- flex | [] [] |
- gas | [] |
- gawk | [] [] |
- gcal | [] |
- gcc | [] |
- gettext | [] [] [] |
- gettext-runtime | [] [] [] [] |
- gettext-tools | [] |
- gimp-print | [] [] |
- gliv | () |
- glunarclock | [] [] [] [] |
- gnucash | [] |
- gnucash-glossary | [] |
- gnupg | [] [] [] [] [] [] [] |
- gpe-calendar | [] |
- gpe-conf | |
- gpe-contacts | [] |
- gpe-edit | [] [] |
- gpe-login | [] |
- gpe-ownerinfo | [] [] [] |
- gpe-sketchbook | [] |
- gpe-timesheet | [] [] [] |
- gpe-today | [] [] |
- gpe-todo | [] [] |
- gphoto2 | [] [] [] |
- gprof | [] [] |
- gpsdrive | () [] () () |
- grep | [] [] [] [] [] [] [] [] [] [] [] |
- gretl | [] |
- hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] |
- indent | [] [] [] [] [] [] [] [] |
- jpilot | [] () |
- jwhois | [] [] [] [] |
- kbd | [] |
- ld | [] |
- libc | [] [] [] [] [] [] |
- libgpewidget | [] [] [] |
- libiconv | [] [] [] [] [] [] [] [] |
- lifelines | () |
- lilypond | [] |
- lingoteach | [] [] |
- lingoteach_lessons | |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] |
- mailutils | |
- make | [] [] [] [] [] [] |
- man-db | [] () () |
- mysecretdiary | [] [] |
- nano | [] [] [] [] |
- nano_1_0 | [] [] [] [] |
- opcodes | [] [] |
- parted | [] [] [] |
- ptx | [] [] [] [] [] [] [] |
- python | |
- radius | |
- recode | [] [] [] [] [] [] |
- screem | |
- sed | [] [] [] [] [] [] [] [] |
- sh-utils | [] [] [] [] [] [] |
- sharutils | [] [] [] [] [] |
- sketch | [] |
- soundtracker | [] [] [] |
- sp | [] () |
- tar | [] [] [] [] [] [] [] [] [] |
- texinfo | [] [] [] [] |
- textutils | [] [] [] [] [] |
- tin | [] () |
- util-linux | [] [] [] [] () [] |
- vorbis-tools | [] |
- wastesedge | () |
- wdiff | [] [] [] [] [] |
- wget | [] [] [] [] [] [] [] [] |
- xchat | [] [] [] |
- xpad | |
- +----------------------------------------+
- et fa fi fr ga gl he hr hu id it ja ko
- 20 1 15 73 14 24 8 10 30 31 19 31 9
-
- lg lt lv ms nb nl nn no pl pt pt_BR ro
- +----------------------------------------+
- a2ps | [] [] () () () [] [] |
- aegis | () |
- anubis | [] [] |
- ap-utils | () |
- bash | [] |
- batchelor | |
- bfd | |
- binutils | |
- bison | [] [] [] [] |
- bluez-pin | [] |
- clisp | |
- clisp | [] |
- coreutils | [] |
- cpio | [] [] [] |
- darkstat | [] [] [] [] |
- diffutils | [] [] [] |
- e2fsprogs | |
- enscript | [] [] |
- error | [] [] |
- fetchmail | () () |
- fileutils | [] |
- findutils | [] [] [] [] |
- flex | [] |
- gas | |
- gawk | [] |
- gcal | |
- gcc | |
- gettext | [] |
- gettext-runtime | [] |
- gettext-tools | |
- gimp-print | [] |
- gliv | [] |
- glunarclock | [] |
- gnucash | |
- gnucash-glossary | [] [] |
- gnupg | |
- gpe-calendar | [] [] |
- gpe-conf | [] [] |
- gpe-contacts | [] |
- gpe-edit | [] [] |
- gpe-login | [] [] |
- gpe-ownerinfo | [] [] |
- gpe-sketchbook | [] [] |
- gpe-timesheet | [] [] |
- gpe-today | [] [] |
- gpe-todo | [] [] |
- gphoto2 | |
- gprof | [] |
- gpsdrive | () () () |
- grep | [] [] [] [] |
- gretl | |
- hello | [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] |
- indent | [] [] [] |
- jpilot | () () |
- jwhois | [] [] [] |
- kbd | |
- ld | |
- libc | [] [] [] [] |
- libgpewidget | [] [] |
- libiconv | [] [] |
- lifelines | |
- lilypond | [] |
- lingoteach | |
- lingoteach_lessons | |
- lynx | [] [] |
- m4 | [] [] [] [] |
- mailutils | |
- make | [] [] |
- man-db | [] |
- mysecretdiary | [] |
- nano | [] [] [] [] |
- nano_1_0 | [] [] [] [] |
- opcodes | [] [] [] |
- parted | [] [] [] |
- ptx | [] [] [] [] [] [] [] |
- python | |
- radius | |
- recode | [] [] [] |
- screem | |
- sed | [] [] |
- sh-utils | [] |
- sharutils | [] |
- sketch | [] |
- soundtracker | |
- sp | |
- tar | [] [] [] [] [] [] |
- texinfo | [] |
- textutils | [] |
- tin | |
- util-linux | [] [] |
- vorbis-tools | [] [] |
- wastesedge | |
- wdiff | [] [] [] [] |
- wget | [] [] [] |
- xchat | [] [] |
- xpad | [] |
- +----------------------------------------+
- lg lt lv ms nb nl nn no pl pt pt_BR ro
- 0 0 2 11 7 26 3 4 18 15 34 34
-
- ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
- +-------------------------------------------+
- a2ps | [] [] [] [] [] | 16
- aegis | () | 0
- anubis | [] [] | 5
- ap-utils | () | 1
- bash | [] | 7
- batchelor | | 1
- bfd | [] [] [] | 7
- binutils | [] [] [] | 7
- bison | [] [] | 13
- bluez-pin | | 7
- clisp | | 0
- clisp | | 5
- coreutils | [] [] [] [] [] | 14
- cpio | [] [] [] | 13
- darkstat | [] () () | 9
- diffutils | [] [] [] [] | 21
- e2fsprogs | [] | 3
- enscript | [] [] [] | 11
- error | [] [] [] | 14
- fetchmail | [] | 7
- fileutils | [] [] [] [] [] [] | 15
- findutils | [] [] [] [] [] [] | 27
- flex | [] [] [] | 10
- gas | [] | 3
- gawk | [] [] | 9
- gcal | [] [] | 4
- gcc | [] | 4
- gettext | [] [] [] [] [] [] | 15
- gettext-runtime | [] [] [] [] [] [] | 16
- gettext-tools | [] [] | 5
- gimp-print | [] [] | 10
- gliv | | 1
- glunarclock | [] [] [] | 11
- gnucash | [] [] | 4
- gnucash-glossary | [] [] [] | 8
- gnupg | [] [] [] [] | 16
- gpe-calendar | [] | 5
- gpe-conf | | 3
- gpe-contacts | [] | 4
- gpe-edit | [] | 5
- gpe-login | [] | 5
- gpe-ownerinfo | [] | 7
- gpe-sketchbook | [] | 5
- gpe-timesheet | [] | 6
- gpe-today | [] | 6
- gpe-todo | [] | 6
- gphoto2 | [] [] | 9
- gprof | [] [] | 7
- gpsdrive | [] [] | 3
- grep | [] [] [] [] | 24
- gretl | | 2
- hello | [] [] [] [] [] | 33
- id-utils | [] [] [] | 11
- indent | [] [] [] [] | 19
- jpilot | [] [] [] [] [] | 10
- jwhois | () () [] [] | 10
- kbd | [] [] | 8
- ld | [] [] | 5
- libc | [] [] [] [] | 20
- libgpewidget | | 6
- libiconv | [] [] [] [] [] [] | 21
- lifelines | [] | 2
- lilypond | [] | 4
- lingoteach | | 2
- lingoteach_lessons | () | 0
- lynx | [] [] [] [] | 14
- m4 | [] [] [] | 15
- mailutils | | 2
- make | [] [] [] [] | 15
- man-db | [] | 6
- mysecretdiary | [] [] | 8
- nano | [] [] [] | 15
- nano_1_0 | [] [] [] | 15
- opcodes | [] [] | 9
- parted | [] [] | 13
- ptx | [] [] [] | 22
- python | | 0
- radius | | 0
- recode | [] [] [] [] | 19
- screem | [] | 1
- sed | [] [] [] [] [] | 20
- sh-utils | [] [] [] | 13
- sharutils | [] [] [] [] | 16
- sketch | [] | 5
- soundtracker | [] | 7
- sp | [] | 3
- tar | [] [] [] [] [] | 24
- texinfo | [] [] [] [] | 13
- textutils | [] [] [] [] [] | 15
- tin | | 1
- util-linux | [] [] | 14
- vorbis-tools | [] | 7
- wastesedge | | 0
- wdiff | [] [] [] [] | 17
- wget | [] [] [] [] [] [] [] | 25
- xchat | [] [] [] | 11
- xpad | | 1
- +-------------------------------------------+
- 50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
- 97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913
+ Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca
+ +--------------------------------------------------+
+ a2ps | [] [] |
+ aegis | |
+ ant-phone | |
+ anubis | |
+ aspell | [] [] |
+ bash | |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | |
+ bison-runtime | [] |
+ bluez-pin | [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] |
+ cryptsetup | |
+ dfarc | |
+ dialog | [] [] |
+ dico | |
+ diffutils | [] |
+ dink | |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ exif | |
+ fetchmail | [] |
+ findutils | [] |
+ flex | [] |
+ freedink | |
+ gas | |
+ gawk | [] [] |
+ gcal | [] |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] |
+ gettext-tools | [] [] |
+ gip | [] |
+ gjay | |
+ gliv | [] |
+ glunarclock | [] [] |
+ gnubiff | |
+ gnucash | [] |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | |
+ gold | |
+ gpe-aerial | |
+ gpe-beam | |
+ gpe-bluetooth | |
+ gpe-calendar | |
+ gpe-clock | [] |
+ gpe-conf | |
+ gpe-contacts | |
+ gpe-edit | |
+ gpe-filemanager | |
+ gpe-go | |
+ gpe-login | |
+ gpe-ownerinfo | [] |
+ gpe-package | |
+ gpe-sketchbook | |
+ gpe-su | [] |
+ gpe-taskmanager | [] |
+ gpe-timesheet | [] |
+ gpe-today | [] |
+ gpe-todo | |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | [] [] |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] |
+ gst-plugins-ugly | [] |
+ gstreamer | [] [] [] |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] |
+ gutenprint | |
+ hello | [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | |
+ iso_639 | [] [] [] [] |
+ iso_639_3 | |
+ jwhois | |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] |
+ libc | [] [] |
+ libexif | () |
+ libextractor | |
+ libgnutls | |
+ libgpewidget | |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | [] |
+ libidn | |
+ lifelines | |
+ liferea | [] [] |
+ lilypond | |
+ linkdr | [] |
+ lordsawar | |
+ lprng | |
+ lynx | [] |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | |
+ man-db | |
+ man-db-manpages | |
+ minicom | |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | |
+ psmisc | |
+ pspp | [] |
+ pwdutils | |
+ radius | [] |
+ recode | [] [] |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] |
+ sharutils | [] [] |
+ shishi | |
+ skencil | |
+ solfege | |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | |
+ tar | [] |
+ texinfo | |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] [] |
+ wyslij-po | |
+ xchat | [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] |
+ +--------------------------------------------------+
+ af am an ar as ast az be be@latin bg bn_IN bs ca
+ 6 0 1 2 3 19 1 10 3 28 3 1 38
+
+ crh cs da de el en en_GB en_ZA eo es et eu fa
+ +-------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] () |
+ anubis | [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] [] |
+ bfd | [] |
+ bibshelf | [] [] [] |
+ binutils | [] |
+ bison | [] [] |
+ bison-runtime | [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] |
+ bombono-dvd | [] |
+ buzztard | [] [] [] |
+ cflow | [] [] |
+ clisp | [] [] [] [] |
+ coreutils | [] [] [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] [] [] |
+ cryptsetup | [] |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] |
+ dink | [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ exif | () [] [] |
+ fetchmail | [] [] () [] [] [] |
+ findutils | [] [] [] |
+ flex | [] [] |
+ freedink | [] [] [] |
+ gas | [] |
+ gawk | [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gip | [] [] [] [] |
+ gjay | [] |
+ gliv | [] [] [] |
+ glunarclock | [] [] |
+ gnubiff | () |
+ gnucash | [] () () () () |
+ gnuedu | [] [] |
+ gnulib | [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] |
+ gpe-aerial | [] [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] [] [] |
+ gpe-contacts | [] [] [] |
+ gpe-edit | [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] |
+ gpe-package | [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] [] |
+ gphoto2 | [] [] () [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] |
+ grub | [] [] |
+ gsasl | [] |
+ gss | |
+ gst-plugins-bad | [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] () [] |
+ gtkam | [] [] () [] [] |
+ gtkorphan | [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] |
+ hello | [] [] [] [] |
+ help2man | [] |
+ hylafax | [] [] |
+ idutils | [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | [] () [] [] |
+ iso_3166 | [] [] [] [] () [] [] [] () |
+ iso_3166_2 | () |
+ iso_4217 | [] [] [] () [] [] |
+ iso_639 | [] [] [] [] () [] [] |
+ iso_639_3 | [] |
+ jwhois | [] |
+ kbd | [] [] [] [] [] |
+ keytouch | [] [] |
+ keytouch-editor | [] [] |
+ keytouch-keyboa... | [] |
+ klavaro | [] [] [] [] |
+ latrine | [] () |
+ ld | [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] () |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] () |
+ libgphoto2_port | [] () [] |
+ libgsasl | |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] [] |
+ lifelines | [] () |
+ liferea | [] [] [] [] [] |
+ lilypond | [] [] [] |
+ linkdr | [] [] [] |
+ lordsawar | [] |
+ lprng | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] |
+ make | [] [] [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] [] [] [] |
+ mkisofs | |
+ myserver | |
+ nano | [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] |
+ pies | |
+ popt | [] [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | [] |
+ pwdutils | [] |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rosegarden | () () () |
+ rpm | [] [] [] |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] |
+ sed | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | |
+ skencil | [] () [] |
+ solfege | [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ sysstat | [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] |
+ tin | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] |
+ vice | () () |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] [] |
+ wyslij-po | |
+ xchat | [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] [] |
+ +-------------------------------------------------+
+ crh cs da de el en en_GB en_ZA eo es et eu fa
+ 5 64 105 117 18 1 8 0 28 89 18 19 0
+
+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn
+ +----------------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] [] |
+ aspell | [] [] [] [] |
+ bash | [] [] [] [] |
+ bfd | [] [] [] |
+ bibshelf | [] [] [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] |
+ bison-runtime | [] [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ bombono-dvd | [] |
+ buzztard | [] |
+ cflow | [] [] [] |
+ clisp | [] |
+ coreutils | [] [] [] [] [] |
+ cpio | [] [] [] [] |
+ cppi | [] [] |
+ cpplib | [] [] [] |
+ cryptsetup | [] [] [] |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ dink | [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ exif | [] [] [] [] [] [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] [] |
+ flex | [] [] [] |
+ freedink | [] [] [] |
+ gas | [] [] |
+ gawk | [] [] [] [] () [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] |
+ gip | [] [] [] [] [] [] |
+ gjay | [] |
+ gliv | [] () |
+ glunarclock | [] [] [] [] |
+ gnubiff | () [] () |
+ gnucash | () () () () () [] |
+ gnuedu | [] [] |
+ gnulib | [] [] [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] [] |
+ gpe-aerial | [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-bluetooth | [] [] [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] [] |
+ gpe-go | [] [] [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] |
+ gphoto2 | [] [] [] [] [] [] |
+ gprof | [] [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] [] |
+ grub | [] [] [] [] |
+ gsasl | [] [] [] [] [] |
+ gss | [] [] [] [] [] |
+ gst-plugins-bad | [] [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] [] [] |
+ gtkam | [] [] [] [] [] |
+ gtkorphan | [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] [] |
+ hello | [] [] [] |
+ help2man | [] [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] |
+ iso_15924 | [] () [] [] |
+ iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | () [] [] [] |
+ iso_4217 | [] () [] [] [] [] |
+ iso_639 | [] () [] [] [] [] [] [] [] |
+ iso_639_3 | () [] [] |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] [] [] [] [] [] |
+ keytouch-editor | [] [] [] [] [] |
+ keytouch-keyboa... | [] [] [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] [] () |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] [] |
+ libidn | [] [] [] [] |
+ lifelines | () |
+ liferea | [] [] [] [] |
+ lilypond | [] [] |
+ linkdr | [] [] [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] [] [] |
+ m4 | [] [] [] [] [] [] |
+ mailfromd | |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] [] |
+ man-db | [] [] |
+ man-db-manpages | [] |
+ minicom | [] [] [] [] [] |
+ mkisofs | [] [] [] [] |
+ myserver | |
+ nano | [] [] [] [] [] [] |
+ opcodes | [] [] [] [] |
+ parted | [] [] [] [] |
+ pies | |
+ popt | [] [] [] [] [] [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | |
+ pwdutils | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rosegarden | () () () () () |
+ rpm | [] [] |
+ rush | |
+ sarg | [] |
+ screem | [] [] |
+ scrollkeeper | [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] [] |
+ shishi | [] |
+ skencil | [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] |
+ sp | [] () |
+ sysstat | [] [] [] [] [] |
+ tar | [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux-ng | [] [] [] [] [] [] |
+ vice | () () () |
+ vmm | [] |
+ vorbis-tools | [] |
+ wastesedge | () () |
+ wdiff | [] |
+ wget | [] [] [] [] [] [] [] [] |
+ wyslij-po | [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] |
+ +----------------------------------------------------+
+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn
+ 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4
+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ +-----------------------------------------------+
+ a2ps | [] |
+ aegis | |
+ ant-phone | |
+ anubis | [] [] |
+ aspell | [] |
+ bash | |
+ bfd | |
+ bibshelf | [] [] |
+ binutils | |
+ bison | [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] |
+ cpio | |
+ cppi | |
+ cpplib | |
+ cryptsetup | |
+ dfarc | [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] |
+ dink | |
+ doodle | |
+ e2fsprogs | |
+ enscript | |
+ exif | [] |
+ fetchmail | |
+ findutils | |
+ flex | |
+ freedink | [] |
+ gas | |
+ gawk | |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] |
+ gettext-tools | [] |
+ gip | [] [] |
+ gjay | |
+ gliv | |
+ glunarclock | [] |
+ gnubiff | |
+ gnucash | () () () () |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gold | |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] |
+ gpe-timesheet | [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | |
+ hello | [] [] [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | |
+ iso_15924 | [] [] |
+ iso_3166 | [] [] () [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] |
+ iso_639 | [] [] |
+ iso_639_3 | [] |
+ jwhois | [] |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] [] |
+ libc | [] |
+ libexif | |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | |
+ libidn | |
+ lifelines | |
+ liferea | |
+ lilypond | |
+ linkdr | |
+ lordsawar | |
+ lprng | |
+ lynx | |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | [] [] [] |
+ psmisc | |
+ pspp | |
+ pwdutils | |
+ radius | |
+ recode | |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] |
+ sed | |
+ sharutils | |
+ shishi | |
+ skencil | |
+ solfege | [] |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | [] |
+ tar | [] |
+ texinfo | [] |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] |
+ wyslij-po | |
+ xchat | [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +-----------------------------------------------+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1
+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] |
+ bfd | [] |
+ bibshelf | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ bombono-dvd | [] () |
+ buzztard | [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cppi | [] |
+ cpplib | [] |
+ cryptsetup | [] |
+ dfarc | [] |
+ dialog | [] [] [] [] |
+ dico | [] |
+ diffutils | [] [] [] [] [] [] |
+ dink | () |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ exif | [] [] [] () [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ freedink | [] [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gcal | |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] |
+ gip | [] [] [] [] [] |
+ gjay | |
+ gliv | [] [] [] [] [] [] |
+ glunarclock | [] [] [] [] [] |
+ gnubiff | [] () |
+ gnucash | [] () () () |
+ gnuedu | [] |
+ gnulib | [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] [] |
+ gold | |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] [] |
+ gphoto2 | [] [] [] [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] |
+ grub | [] [] [] |
+ gsasl | [] [] [] [] |
+ gss | [] [] [] |
+ gst-plugins-bad | [] [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] |
+ hello | [] [] [] [] |
+ help2man | [] [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | [] [] [] [] |
+ iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] [] [] |
+ iso_4217 | [] [] [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] [] [] |
+ iso_639_3 | [] [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] [] [] |
+ keytouch-keyboa... | [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] |
+ ld | |
+ leafpad | [] [] [] [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] () [] |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] |
+ lifelines | [] [] |
+ liferea | [] [] [] [] [] () () [] |
+ lilypond | [] |
+ linkdr | [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] |
+ make | [] [] [] [] |
+ man-db | [] [] [] |
+ man-db-manpages | [] [] [] |
+ minicom | [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | |
+ nano | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ pies | [] |
+ popt | [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | [] [] |
+ pwdutils | [] |
+ radius | [] [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rosegarden | () () |
+ rpm | [] [] [] |
+ rush | [] [] |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] [] |
+ soundtracker | [] |
+ sp | |
+ sysstat | [] [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] [] |
+ vice | [] |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] [] [] [] [] [] |
+ wyslij-po | [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +---------------------------------------------------+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37
+
+ sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] | 27
+ aegis | [] | 9
+ ant-phone | [] [] [] [] | 9
+ anubis | [] [] [] [] | 15
+ aspell | [] [] [] | 20
+ bash | [] [] [] | 12
+ bfd | [] | 6
+ bibshelf | [] [] [] | 16
+ binutils | [] [] | 8
+ bison | [] [] | 12
+ bison-runtime | [] [] [] [] [] [] | 29
+ bluez-pin | [] [] [] [] [] [] [] [] | 37
+ bombono-dvd | [] | 4
+ buzztard | [] | 7
+ cflow | [] [] [] | 9
+ clisp | | 10
+ coreutils | [] [] [] [] | 22
+ cpio | [] [] [] [] [] [] | 13
+ cppi | [] [] | 5
+ cpplib | [] [] [] [] [] [] | 14
+ cryptsetup | [] [] | 7
+ dfarc | [] | 9
+ dialog | [] [] [] [] [] [] [] | 30
+ dico | [] | 2
+ diffutils | [] [] [] [] [] [] | 30
+ dink | | 4
+ doodle | [] [] | 7
+ e2fsprogs | [] [] [] | 11
+ enscript | [] [] [] [] | 17
+ exif | [] [] [] | 16
+ fetchmail | [] [] [] | 17
+ findutils | [] [] [] [] [] | 20
+ flex | [] [] [] [] | 15
+ freedink | [] | 10
+ gas | [] | 4
+ gawk | [] [] [] [] | 18
+ gcal | [] [] | 5
+ gcc | [] [] [] | 7
+ gettext-examples | [] [] [] [] [] [] [] | 34
+ gettext-runtime | [] [] [] [] [] [] [] | 29
+ gettext-tools | [] [] [] [] [] [] | 22
+ gip | [] [] [] [] | 22
+ gjay | [] | 3
+ gliv | [] [] [] | 14
+ glunarclock | [] [] [] [] [] | 19
+ gnubiff | [] [] | 4
+ gnucash | () [] () [] () | 10
+ gnuedu | [] [] | 7
+ gnulib | [] [] [] [] | 16
+ gnunet | [] | 1
+ gnunet-gtk | [] [] [] | 5
+ gnutls | [] [] [] | 10
+ gold | [] | 4
+ gpe-aerial | [] [] [] | 18
+ gpe-beam | [] [] [] | 19
+ gpe-bluetooth | [] [] [] | 13
+ gpe-calendar | [] [] [] [] | 12
+ gpe-clock | [] [] [] [] [] | 28
+ gpe-conf | [] [] [] [] | 20
+ gpe-contacts | [] [] [] | 17
+ gpe-edit | [] [] [] | 12
+ gpe-filemanager | [] [] [] [] | 16
+ gpe-go | [] [] [] [] [] | 25
+ gpe-login | [] [] [] | 11
+ gpe-ownerinfo | [] [] [] [] [] | 25
+ gpe-package | [] [] [] | 13
+ gpe-sketchbook | [] [] [] | 20
+ gpe-su | [] [] [] [] [] | 30
+ gpe-taskmanager | [] [] [] [] [] | 29
+ gpe-timesheet | [] [] [] [] [] | 25
+ gpe-today | [] [] [] [] [] [] | 30
+ gpe-todo | [] [] [] [] | 17
+ gphoto2 | [] [] [] [] [] | 24
+ gprof | [] [] [] | 15
+ gpsdrive | [] [] [] | 11
+ gramadoir | [] [] [] | 11
+ grep | [] [] [] | 10
+ grub | [] [] [] | 14
+ gsasl | [] [] [] [] | 14
+ gss | [] [] [] | 11
+ gst-plugins-bad | [] [] [] [] | 26
+ gst-plugins-base | [] [] [] [] [] | 24
+ gst-plugins-good | [] [] [] [] | 24
+ gst-plugins-ugly | [] [] [] [] [] | 29
+ gstreamer | [] [] [] [] | 22
+ gtick | [] [] [] | 13
+ gtkam | [] [] [] | 20
+ gtkorphan | [] [] [] | 14
+ gtkspell | [] [] [] [] [] [] [] [] [] | 45
+ gutenprint | [] | 10
+ hello | [] [] [] [] [] [] | 21
+ help2man | [] [] | 7
+ hylafax | [] | 5
+ idutils | [] [] [] [] | 17
+ indent | [] [] [] [] [] [] | 30
+ iso_15924 | () [] () [] [] | 16
+ iso_3166 | [] [] () [] [] () [] [] [] () | 53
+ iso_3166_2 | () [] () [] | 9
+ iso_4217 | [] () [] [] () [] [] | 26
+ iso_639 | [] [] [] () [] () [] [] [] [] | 38
+ iso_639_3 | [] () | 8
+ jwhois | [] [] [] [] [] | 16
+ kbd | [] [] [] [] [] | 15
+ keytouch | [] [] [] | 16
+ keytouch-editor | [] [] [] | 14
+ keytouch-keyboa... | [] [] [] | 14
+ klavaro | [] | 11
+ latrine | [] [] [] | 10
+ ld | [] [] [] [] | 11
+ leafpad | [] [] [] [] [] [] | 33
+ libc | [] [] [] [] [] | 21
+ libexif | [] () | 7
+ libextractor | [] | 1
+ libgnutls | [] [] [] | 9
+ libgpewidget | [] [] [] | 14
+ libgpg-error | [] [] [] | 9
+ libgphoto2 | [] [] | 8
+ libgphoto2_port | [] [] [] [] | 14
+ libgsasl | [] [] [] | 13
+ libiconv | [] [] [] [] | 21
+ libidn | () [] [] | 11
+ lifelines | [] | 4
+ liferea | [] [] [] | 21
+ lilypond | [] | 7
+ linkdr | [] [] [] [] [] | 17
+ lordsawar | | 1
+ lprng | [] | 3
+ lynx | [] [] [] [] | 17
+ m4 | [] [] [] [] | 19
+ mailfromd | [] [] | 3
+ mailutils | [] | 5
+ make | [] [] [] [] | 21
+ man-db | [] [] [] | 8
+ man-db-manpages | | 4
+ minicom | [] [] | 16
+ mkisofs | [] [] | 9
+ myserver | | 0
+ nano | [] [] [] [] | 21
+ opcodes | [] [] [] | 11
+ parted | [] [] [] [] [] | 15
+ pies | [] [] | 3
+ popt | [] [] [] [] [] [] | 27
+ psmisc | [] [] | 11
+ pspp | | 4
+ pwdutils | [] [] | 6
+ radius | [] [] | 9
+ recode | [] [] [] [] | 28
+ rosegarden | () | 0
+ rpm | [] [] [] | 11
+ rush | [] [] | 4
+ sarg | | 1
+ screem | [] | 3
+ scrollkeeper | [] [] [] [] [] | 27
+ sed | [] [] [] [] [] | 30
+ sharutils | [] [] [] [] [] | 22
+ shishi | [] | 3
+ skencil | [] [] | 7
+ solfege | [] [] [] [] | 16
+ solfege-manual | [] | 8
+ soundtracker | [] [] [] | 9
+ sp | [] | 3
+ sysstat | [] [] | 15
+ tar | [] [] [] [] [] [] | 23
+ texinfo | [] [] [] [] [] | 17
+ tin | | 4
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux-ng | [] [] [] [] | 20
+ vice | () () | 1
+ vmm | [] | 4
+ vorbis-tools | [] | 6
+ wastesedge | | 2
+ wdiff | [] [] | 7
+ wget | [] [] [] [] [] | 26
+ wyslij-po | [] [] | 8
+ xchat | [] [] [] [] [] [] | 36
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63
+ xkeyboard-config | [] [] [] | 22
+ +---------------------------------------------------+
+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618
Some counters in the preceding matrix are higher than the number of
visible blocks let us expect. This is because a few extra PO files are
@@ -599,15 +1256,15 @@ distributed as such by its maintainer. There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.
- If May 2003 seems to be old, you may fetch a more recent copy of
+ If June 2010 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+`http://translationproject.org/extra/matrix.html'.
-Using `gettext' in new packages
-===============================
+1.5 Using `gettext' in new packages
+===================================
- If you are writing a freely available program and want to
+If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package. Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library. This means
@@ -620,6 +1277,6 @@ the use of `gettext' the only thing missing are the translations. The
Free Translation Project is also available for packages which are not
developed inside the GNU project. Therefore the information given above
applies also for every other Free Software Project. Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
diff --git a/Bonus/CVS/Entries b/Bonus/CVS/Entries
new file mode 100644
index 0000000..b22f196
--- /dev/null
+++ b/Bonus/CVS/Entries
@@ -0,0 +1,15 @@
+/2ch.cgi/1.3/Sat Apr 26 17:01:02 2003//
+/README/1.4/Wed Jan 15 15:51:29 2003//
+/README.eng/1.4/Wed Jan 15 15:51:30 2003//
+/backslash_to_slash.cgi/1.1/Tue Apr 15 14:46:23 2003//
+/goodict.cgi/1.2/Sat Apr 12 14:28:56 2003//
+/google.cgi/1.1/Fri Jan 10 16:24:01 2003//
+/html2latex/1.2/Fri Nov 9 04:59:18 2001//
+/htmldump/1.1.1.1/Thu Nov 8 05:16:01 2001//
+/makeref/1.1.1.1/Thu Nov 8 05:16:01 2001//
+/oldconfigure.sh/1.3/Wed Mar 12 17:20:47 2003//
+/scanhist.rb/1.1.1.1/Thu Nov 8 05:16:01 2001//
+/smb.cgi/1.3/Fri Jan 31 16:25:12 2003//
+/utf8.cgi/1.1/Thu Feb 27 15:14:42 2003//
+/wrap3m/1.1.1.1/Thu Nov 8 05:16:01 2001//
+D
diff --git a/Bonus/CVS/Repository b/Bonus/CVS/Repository
new file mode 100644
index 0000000..a8a0516
--- /dev/null
+++ b/Bonus/CVS/Repository
@@ -0,0 +1 @@
+w3m/Bonus
diff --git a/Bonus/CVS/Root b/Bonus/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/Bonus/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/CVS/Entries b/CVS/Entries
new file mode 100644
index 0000000..55c22e0
--- /dev/null
+++ b/CVS/Entries
@@ -0,0 +1,114 @@
+/.cvsignore/1.12/Fri Sep 26 20:45:53 2003//
+/README/1.1.1.1/Thu Nov 8 05:14:08 2001//
+/Str.c/1.8/Tue Dec 24 17:20:46 2002//
+/Str.h/1.6/Fri Apr 7 13:35:35 2006//
+/TODO/1.21/Sun Apr 4 16:47:20 2004//
+/anchor.c/1.33/Sat Apr 8 11:33:16 2006//
+/charset-list/1.1/Mon Sep 22 21:02:16 2003//
+/config.guess/1.2/Wed Aug 4 17:32:27 2004//
+/config.h.dist/1.36/Fri Apr 9 17:18:49 2004//
+/config.sub/1.2/Wed Aug 4 17:32:27 2004//
+/ctrlcode.h/1.3/Mon Sep 22 21:02:17 2003//
+/entity.c/1.7/Wed Sep 24 18:48:59 2003//
+/entity.tab/1.1/Fri Nov 9 04:59:17 2001//
+/form.h/1.6/Mon Sep 22 21:02:18 2003//
+/frame.c/1.34/Fri Sep 26 17:59:51 2003//
+/frame.h/1.6/Sat Jan 25 17:42:17 2003//
+/func.c/1.27/Fri Sep 26 17:59:51 2003//
+/func.h/1.4/Tue Dec 3 16:01:33 2002//
+/funcname0.awk/1.1.1.1/Thu Nov 8 05:14:56 2001//
+/funcname1.awk/1.1.1.1/Thu Nov 8 05:14:56 2001//
+/funcname2.awk/1.1.1.1/Thu Nov 8 05:14:56 2001//
+/functable.awk/1.1/Mon Dec 10 17:02:44 2001//
+/hash.c/1.5/Mon Apr 7 16:27:10 2003//
+/hash.h/1.6/Wed Sep 24 18:48:59 2003//
+/history.c/1.11/Fri Sep 26 17:59:51 2003//
+/history.h/1.5/Sat Jan 26 17:24:01 2002//
+/indep.h/1.16/Mon Sep 22 21:02:19 2003//
+/inflate.c/1.7/Thu Jan 31 18:28:24 2002//
+/islang.c/1.3/Sat Feb 26 17:06:44 2005//
+/istream.h/1.12/Mon Oct 20 16:41:56 2003//
+/local.h/1.3/Tue Nov 20 17:49:23 2001//
+/map.c/1.30/Wed Sep 24 18:49:00 2003//
+/matrix.c/1.8/Mon Apr 7 16:27:10 2003//
+/matrix.h/1.7/Thu Jul 18 14:59:02 2002//
+/menu.h/1.2/Tue Nov 20 17:49:23 2001//
+/mimehead.c/1.10/Sun Oct 5 18:52:51 2003//
+/mkinstalldirs/1.1/Tue Sep 23 18:42:25 2003//
+/myctype.c/1.7/Mon Sep 22 21:02:20 2003//
+/myctype.h/1.6/Mon Sep 22 21:02:20 2003//
+/news.c/1.17/Sun Oct 5 18:52:51 2003//
+/parsetag.c/1.4/Tue Nov 20 17:49:23 2001//
+/parsetag.h/1.2/Tue Nov 20 17:49:23 2001//
+/parsetagx.h/1.4/Sat Nov 24 02:01:26 2001//
+/posubst.in/1.1/Thu Sep 25 18:15:47 2003//
+/regex.h/1.6/Mon Sep 22 21:02:21 2003//
+/scrsize.c/1.2/Sat Nov 24 02:01:26 2001//
+/search.c/1.31/Tue Mar 23 16:44:02 2004//
+/table.h/1.12/Mon Sep 22 21:02:21 2003//
+/terms.h/1.10/Thu Jul 15 16:32:39 2004//
+/textlist.c/1.6/Mon Apr 7 16:27:11 2003//
+/textlist.h/1.6/Mon Jan 20 15:30:22 2003//
+/w3mhelp-lynx_en.html.in/1.1/Fri Dec 21 22:02:39 2001//
+/w3mhelp-lynx_ja.html.in/1.1/Fri Dec 21 22:02:39 2001//
+/w3mhelp-w3m_en.html.in/1.1/Fri Dec 21 22:02:39 2001//
+/w3mhelp-w3m_ja.html.in/1.1/Fri Dec 21 22:02:39 2001//
+D/Bonus////
+D/Patches////
+D/Symbols////
+D/doc////
+D/doc-jp////
+D/gc////
+D/intl////
+D/libwc////
+D/po////
+D/scripts////
+D/w3m-doc////
+D/w3mimg////
+/keybind.c/1.10/Sat Jun 10 09:52:18 2006//
+/keybind_lynx.c/1.8/Sat Jun 10 09:52:18 2006//
+/parsetagx.c/1.18/Sat Jun 10 09:52:18 2006//
+/mailcap.c/1.13/Tue Jan 23 12:24:11 2007//
+/Makefile.in/1.44/Tue Jan 4 09:22:18 2011//
+/acinclude.m4/1.45/Tue Jan 4 09:22:18 2011//
+/aclocal.m4/1.46/Tue Jan 4 09:22:18 2011//
+/backend.c/1.15/Tue Jan 4 09:22:19 2011//
+/buffer.c/1.30/Tue Jan 4 09:22:19 2011//
+/config.h.in/1.21/Tue Jan 4 09:22:19 2011//
+/cookie.c/1.11/Tue Jan 4 09:22:20 2011//
+/display.c/1.71/Tue Jan 4 09:22:20 2011//
+/etc.c/1.81/Tue Jan 4 09:22:20 2011//
+/file.c/1.265/Tue Jan 4 09:22:21 2011//
+/fm.h/1.149/Tue Jan 4 09:22:21 2011//
+/form.c/1.35/Tue Jan 4 09:22:21 2011//
+/ftp.c/1.42/Tue Jan 4 09:22:21 2011//
+/html.c/1.32/Tue Jan 4 09:22:21 2011//
+/html.h/1.31/Tue Jan 4 09:22:21 2011//
+/image.c/1.37/Tue Jan 4 09:22:22 2011//
+/indep.c/1.38/Tue Jan 4 09:22:22 2011//
+/istream.c/1.27/Tue Jan 4 09:22:22 2011//
+/linein.c/1.35/Tue Jan 4 09:22:22 2011//
+/local.c/1.35/Tue Jan 4 09:22:22 2011//
+/menu.c/1.46/Tue Jan 4 09:22:23 2011//
+/mktable.c/1.16/Tue Jan 4 09:22:23 2011//
+/proto.h/1.104/Tue Jan 4 09:22:23 2011//
+/rc.c/1.116/Tue Jan 4 09:22:23 2011//
+/regex.c/1.23/Tue Jan 4 09:22:23 2011//
+/symbol.c/1.4/Tue Jan 4 09:22:23 2011//
+/table.c/1.58/Tue Jan 4 09:22:23 2011//
+/tagtable.tab/1.14/Tue Jan 4 09:22:23 2011//
+/terms.c/1.63/Tue Jan 4 09:22:23 2011//
+/url.c/1.100/Tue Jan 4 09:22:24 2011//
+/w3mbookmark.c/1.12/Tue Jan 4 09:22:24 2011//
+/w3mhelperpanel.c/1.14/Tue Jan 4 09:22:24 2011//
+/w3mimgdisplay.c/1.19/Tue Jan 4 09:22:24 2011//
+/main.c/1.270/Tue Jan 4 09:42:19 2011//
+/ABOUT-NLS/1.2/Tue Jan 4 12:39:27 2011//
+/config.rpath/1.2/Tue Jan 4 12:39:29 2011//
+/entity.h/1.6/Tue Jan 4 12:39:29 2011//
+/install-sh/1.8/Tue Jan 4 12:39:29 2011//
+/ChangeLog/1.1050/Sat Jan 15 07:52:48 2011//
+/NEWS/1.80/Sat Jan 15 03:01:36 2011//
+/configure/1.164/Sat Jan 15 03:04:22 2011//
+/configure.ac/1.12/Sat Jan 15 03:01:55 2011//
+/version.c.in/1.48/Sat Jan 15 07:52:48 2011//
diff --git a/CVS/Repository b/CVS/Repository
new file mode 100644
index 0000000..625add0
--- /dev/null
+++ b/CVS/Repository
@@ -0,0 +1 @@
+w3m
diff --git a/CVS/Root b/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/ChangeLog b/ChangeLog
index d4264f1..347c5d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,386 @@
+2011-01-15 Dai Sato <satodai@w3m.jp>
+
+ * w3m 0.5.2
+ * version.c.in: update
+ * doc/README: version 0.5.2, release date, maintainer
+ * doc-jp/README: ditto
+ * po/w3m.pot, ja.po: ditto
+ * NEWS: update
+ * configure.ac: version 0.5.2
+ * configure: regenerated
+
+2011-01-05 SAKAI Kiyotaka <kiyotaka.sakai@ntt-at.co.jp>
+
+ * [w3m-dev 04445] Re: Update documents (README.cookie)
+ * doc-jp/README.cookie: refer to RFC 2109.
+ * doc/README.cookie: diito.
+
+2011-01-05 SAKAI Kiyotaka <kiyotaka.sakai@ntt-at.co.jp>
+
+ * [w3m-dev 04444] Re: error when 'make install'
+ * w3mimg/win/.cvsignore: added.
+
+2011-01-04 SAKAI Kiyotaka <kiyotaka.sakai@ntt-at.co.jp>
+
+ * [w3m-dev 04441] error when 'make install'
+ * update followig files. ABOUT-NLS Makefile.in acinclude.m4
+ aclocal.m4 config.rpath configure configure.ac entity.h install-sh
+ po/ChangeLog po/Makefile.in.in po/Rules-quot po/boldquot.sed
+ po/en@boldquot.header po/en@quot.header po/insert-header.sin
+ po/quot.sed po/remove-potcdate.sin
+
+2010-12-28 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04440] Update documents (README.cookie)
+ * doc/README.cookie: added.
+ * doc-jp/README.cookie: add document about cookie_avoid_wrong_number_of_dots.
+
+2010-12-24 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04439] Update documents (README.m17n)
+ * doc-jp/README.m17n: add documents for options "east_asian_width", "gb18030_as_ucs" and "simple_preserve_space".
+ * doc/README.m17n: ditto.
+
+2010-12-24 AIDA Shinra <shinra@j10n.org>
+
+ * [w3m-dev 04437] Re: Windows版w3mimgã€ä»–
+ * w3mimg/win/win_w3mimg.cpp: remove unused ifdefs.
+ (load, animate): support "-anim" option.
+ (show): support "image_scale".
+
+2010-12-20 AIDA Shinra <shinra@j10n.org>
+
+ * [w3m-dev 04425] Re: Windows版w3mimgã€ä»–
+ * w3mimgdisplay: supports Windows console (http://www.j10n.org/files/w3m-cvs-1.1040-misc.patch).
+ * image.c: ditto.
+ * configure.ac: ditto.
+ * config.h.in: ditto.
+ * acinclude.m4: ditto.
+ * Makefile.in: ditto.
+ * w3mimg/w3mimg.h: ditto.
+ * w3mimg/w3mimg.c: ditto.
+ * w3mimg/Makefile.in: ditto.
+ * doc/README.img: ditto.
+ * doc-jp/README.img: ditto.
+ * w3mimgdisplay.c (main): call "w_op->close(w_op)" before exit.
+ * w3mimg/win/win_w3mimg.cpp: added.
+ * w3mimg/win/Makefile.in: added.
+
+2010-12-20 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * doc/README.img: add documents about some options.
+ * doc-jp/README.img: ditto.
+
+2010-12-15 AIDA Shinra <shinra@j10n.org>
+
+ * [w3m-dev 04424] Windows版w3mimgã€ä»–
+ * scripts/w3mman/Makefile.in (DESTDIR): removed.
+ * scripts/multipart/Makefile.in (DESTDIR): removed.
+ * scripts/Makefile.in (DESTDIR): removed.
+ * url.c (add_index_file): can specify multiple files as an index file for directories.
+ * mktable.c (defhashfunc): fi indent of output.
+ * ftp.c (ftp_login): support IPv6.
+ * file.c (is_text_type): check if the type is "application/xhtml".
+ * Makefile.in (DESTDIR): removed.
+ (GC_LIBS): added.
+ (EXT_LIBS): use "GC_LIBS".
+ (entity.h): depend on entity.tab and mktable$(EXT).
+ (indep.o): depend on entity.h
+ (mktable$(EXT)): depend on Str.o, hash.o and myctype.o instead of $(ALIB).
+
+2010-12-15 Kazuhiko <kazuhiko@fdiary.net>
+
+ * [w3m-dev 04419] AC_W3M_EXTLIBS does not check /lib64
+ * acinclude.m4 (AC_W3M_EXTLIBS): search /lib64 and /usr/lib64.
+
+2010-12-11 theme.of.n@gmail.com
+
+ * [w3m-dev 04421] Patch to prevent sending `Referer: ' header from HTTPS to HTTP
+ * url.c (otherinfo): Don't send Referer: if https:// -> http://
+
+2010-10-11 d+w3m@vdr.jp
+
+ * [w3m-dev 04414] Re: "normal" bugs from bugs.debian.org
+ * doc/w3m.1: add documents about some options.
+ * doc/FAQ.html: fix typo.
+
+2010-08-24 Karsten Schoelzel <kuser@gmx.de>
+
+ * [w3m-dev 04393] [patch] locale-related character management
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=313365
+ * libwc/map/ucs_isalpha.map: added
+ * libwc/map/ucs_islower.map: added
+ * libwc/map/ucs_isupper.map: added
+ * libwc/map/mk_ucs_case_map.pl: added
+ * libwc/map/ucs_case.map: added
+ * libwc/map/mk_ucs_isdigit_map.pl: added
+ * libwc/map/ucs_isdigit.map: added
+ * libwc/ucs.c (wc_any_to_ucs): ceck if cc.ccs == WC_CCS_US_ASCII
+ (wc_is_ucs_alpha, wc_is_ucs_digit, wc_is_ucs_alnum)
+ (wc_is_ucs_lower, wc_is_ucs_upper, wc_ucs_toupper)
+ (wc_ucs_tolower, wc_ucs_totitle): added
+ * regex.c (match_longchar, match_range_longchar): use wc_any_to_ucs(), wc_ucs_tolower(), wc_ucs_toupper() and wc_ucs_totitle()
+ * main.c (nextChar, prevChar, getChar, is_wordchar): added
+ (movLW): use prevChar() and is_wordchar()
+ (movRW): use nextChar() and is_wordchar()
+ (getCurWord): remove 4th parameter
+ (getCurWord): use prevChar(), nextChar() and is_wordchar()
+
+2010-08-20 Karsten Schoelzel <kuser@gmx.de>
+
+ * [w3m-dev 04401] Re: mailto with options handling
+ * rc.c: Introduce option mailto_options
+ * main.c (handleMailto): added
+ (followA, cmd_loadURL): use handleMailto()
+ * fm.h (MAILTO_OPTIONS_USE_W3MMAILER, MAILTO_OPTIONS_IGNORE)
+ (MAILTO_OPTIONS_USE_MAILTO_URL): added
+
+2010-08-20 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04402] Re: "normal" bugs from bugs.debian.org
+ * terms.c (reset_exit_with_value, reset_error_exit): added
+ (reset_exit): use reset_exit_with_value()
+ (ttymode_set, ttymode_reset, set_cc, getTCstr)
+ (sleep_till_anykey): use reset_error_exit() instead of reset_exit()
+
+2010-08-14 "Adam C. Emerson" <azure@azureprime.com>
+
+ * [w3m-dev 04390]
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=573789
+ * html.c: All elements have the id attribute.
+
+2010-08-12 Peter J. R. Moulder
+
+ * [w3m-dev 04384]
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=2987194&group_id=39518&atid=425441
+ * html.c: some tags have ALST_NOP attribute
+ * tagtable.tab: add <span> and </span>
+ * html.h (HTML_SPAN, HTML_N_SPAN): added
+
+2010-08-11 SAKAI Kiyotaka <kiyotaka.sakai@ntt-at.co.jp>
+
+ * [w3m-dev 04381] Re: check socklen_t
+ * ftp.c: fix condition (#ifndef HAVE_SOCKLEN_T)
+
+2010-08-10 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04379] check socklen_t
+ * configure.ac: check socklen_t
+ * ftp.c (ftp_login, ftp_pasv): use socklen_t instead of int
+
+2010-08-09 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04374] Re: "important" bugs from bugs.debian.org
+ * table.c (feed_table_tag): don't show message when rowspan is greater than ATTR_ROWSPAN_MAX
+ * [w3m-dev 04376] Re: "important" bugs from bugs.debian.org
+ * table.c (feed_table_tag): fix indent
+
+2010-08-08 Steven Harms <ZXB01226@nifty.com>
+
+ * [w3m-dev 04371] Re: "important" bugs from bugs.debian.org
+ * https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/131993
+ * table.c (ATTR_ROWSPAN_MAX): added
+ (feed_table_tag): maximum value of rowspan is ATTR_ROWSPAN_MAX
+
+2010-08-08 d+w3m@vdr.jp
+
+ * [w3m-dev 04360] Re: "important" bugs from bugs.debian.org
+ * main.c (main): use DEFAULT_COLS
+ (main): the maximum value of the -cols option is MAXIMUM_COLS
+ * backend.c (backend): use DEFAULT_COLS
+ * fm.h (MAXIMUM_COLS, DEFAULT_COLS): added
+
+2010-08-04 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04369] Re: w3m's bugs from bugs.debian.org
+ * terms.c (graph_ok): fix condition (UseGraphicChar != GRAPHIC_CHAR_DEC)
+ * symbol.c (get_symbol): fix condition (UseGraphicChar != GRAPHIC_CHAR_ASCII)
+ * rc.c (params1): type of graphic_char option is PI_SEL_C
+ * main.c (main): use GRAPHIC_CHAR_ASCII and GRAPHIC_CHAR_DEC instead of FALSE and TRUE
+ * fm.h (GRAPHIC_CHAR_ASCII, GRAPHIC_CHAR_DEC, GRAPHIC_CHAR_CHARSET): added
+
+2010-08-03 d+w3m@vdr.jp
+
+ * [w3m-dev 04363] Re: w3m's bugs from bugs.debian.org
+ * doc/w3m.1: revert option -S
+ * doc-jp/w3m.1: revert option -S, -e, -j and -s
+ * main.c: remove codes for Debian
+
+2010-08-03 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04343]
+ * file.c (loadGeneralFile): register user name and password for proxy authentication.
+ * url.c (HTTPrequest): unused variable seen_proxy_auth was removed
+ * fm.h: global variables proxy_auth_cookie and pauth are removed
+ * main.c (main): remove option -pauth
+ * doc/MANUAL.html: ditto
+ * doc-jp/MANUAL.html: ditto
+ * doc-jp/w3m.1: ditto
+ * doc/w3m.1: ditto
+ * doc/README.passwd: added
+ * doc-jp/README.passwd: added
+
+2010-07-31 Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
+
+ * [w3m-dev 04350] Re: w3m's bugs from bugs.debian.org
+ * file.c (process_img): Revert the change of using ATTR_TITLE if ATTR_ALT is empty.
+
+2010-07-30 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04348] Re: "important" bugs from bugs.debian.org
+ * file.c (TEXTAREA_ATTR_COL_MAX, TEXTAREA_ATTR_ROWS_MAX): added.
+ (process_textarea): check cur_textarea_size > TEXTAREA_ATTR_COL_MAX and cur_textarea_rows > TEXTAREA_ATTR_ROWS_MAX
+
+2010-07-30 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04345] Re: "important" bugs from bugs.debian.org
+ * file.c (HR_ATTR_WIDTH_MAX): added.
+ (process_hr): check w > HR_ATTR_WIDTH_MAX
+
+2010-07-26 d+w3m@vdr.jp
+
+ * [w3m-dev 04237] [patch] cookie avoid [wrong number of dots]
+ * rc.c: Introduce option cookie_avoid_wrong_number_of_dots.
+ * fm.h: add global variables cookie_avoid_wrong_number_of_dots and Cookie_avoid_wrong_number_of_dots_domains.
+ * cookie.c (check_avoid_wrong_number_of_dots_domain): added.
+ (add_cookie): use check_avoid_wrong_number_of_dots_domain().
+
+2010-07-26 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * acinclude.m4: define AC_W3M_SSL_DIGEST_AUTH
+
+2010-07-25 AIDA Shinra <shinra@j10n.org>
+
+ * [w3m-dev 04049] Ctrl-C safe resolver
+ * fm.h (GRAPHIC_CHAR_ASCII, GRAPHIC_CHAR_CHARSET, GRAPHIC_CHAR_ALL): removed.
+ * fm.h: UseGraphicChar is initialized as FALSE.
+ * main.c (sig_chld): use TRUE and FALSE instead of GRAPHIC_CHAR_ALL and GRAPHIC_CHAR_ASCII.
+ * merge ambiguous width patch ( http://www.j10n.org/files/w3m-cvs-1.914-ambwidth.patch ).
+
+2010-07-24 Ito Hiroyuki <ZXB01226@nifty.com>
+
+ * [w3m-dev 04326] suppress compile warnings
+ * file.c (digest_hex): type of the parameter s is "unsigned char *".
+ (AuthDigestCred): use unsigned char.
+ (ex_efct): type of the function is "static int".
+
+2010-07-20 Sascha Silbe <sascha-debian-bugs-w3m-1@silbe.org>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523159#5
+ * url.c (openSSLHandle): add support for TLS SNI (Server Name Indication)
+
+2010-07-19 Karsten Schoelzel <kuser@gmx.de>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329862#20
+ * table.c (feed_table_tag): check displayLinkNumber.
+ * proto.h: add getLinkNumberStr().
+ * main.c (do_dump): check displayLinkNumber.
+ * fm.h: add global variable displayLinkNumber.
+ * file.c (getLinkNumberStr): added.
+ (process_input, process_select, HTMLtagproc1): check displayLinkNumber.
+
+2010-07-19 Karsten Schoelzel <kuser@gmx.de>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329863#8
+ * rc.c: Introduce option pseudo_inlines.
+ * fm.h: add global variable pseudoInlines.
+ * file.c (process_img): check q.
+
+2010-07-19 "Trent W. Buck" <twb@cybersource.com.au>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537706#10
+ * rc.c (interpret_rc): check line->length before call Strchop().
+
+2010-07-19 Karsten Schoelzel <kuser@gmx.de>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=366284#5
+ * rc.c (init_rc): check config_file is NULL or not.
+ (panel_set_option): check config_file instead of no_rc_dir.
+
+2010-07-19 Karsten Schoelzel <kuser@gmx.de>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=261174#10
+ * terms.c (graph_ok): check UseGraphicChar is GRAPHIC_CHAR_ALL or not.
+ * symbol.c (get_symbol): check UseGraphicChar.
+ * rc.c (graphic_char_str): added.
+ * main.c (sig_chld): use GRAPHIC_CHAR_ASCII and GRAPHIC_CHAR_ALL.
+ * fm.h (GRAPHIC_CHAR_ASCII, GRAPHIC_CHAR_CHARSET, GRAPHIC_CHAR_ALL): added.
+ * fm.h: UseGraphicChar is initialized as GRAPHIC_CHAR_ASCII.
+
+2010-07-19 Karsten Schoelzel <kuser@gmx.de>
+
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=185006#22
+ * main.c (sig_chld): save exit code to d->err.
+ (addDownloadList): initialize d->running and d->err.
+ (DownloadListBuffer): check d->err.
+
+ * fm.h (_DownloadList): add running and err.
+
+ * file.c (save2tmp): check returned value of Strfputs().
+ (doFileSave): exit code is depend on the returned value of save2tmp().
+
+2010-07-19 d+w3m@vdr.jp
+
+ * [w3m-dev 04238] [patch] simple preserve space
+ * rc.c: Introduce option simple_preserve_space.
+ * fm.h: add global variable SimplePreserveSpace.
+ * file.c (HTMLlineproc0): check SimplePreserveSpace.
+
+2010-07-18 Karsten Schoelzel <kuser@gmx.de>
+
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=242599#21
+ * file.c (is_html_type): added.
+ (examineFile, loadGeneralFile, _saveBuffer)
+ (openGeneralPagerBuffer, reloadBuffer): use is_html_type() instead
+ of strcasecmp().
+ (loadGeneralFile): set f.guess_tupe
+ * display.c (displayBuffer): use is_html_type() instead of strcasecmp().
+ * buffer.c (reshapeBuffer): use is_html_type() instead of strcasecmp().
+ * backend.c (internal_get): use is_html_type() instead of strcasecmp().
+ * main.c (vwSrc, reload, dispI, stopI): use is_html_type() instead of strcasecmp().
+ * proto.h: add is_html_type()
+ * url.c: add "xhtml" to DefaultGuess.
+
+2010-07-18 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+
+ * [w3m-dev 04286] Re: break textform when buffer back
+ * form.c (form_update_line): set line->size
+
+2010-07-18 d+w3m@vdr.jp
+
+ * [w3m-dev 04319] Re: w3m's bugs from bugs.debian.org
+ * doc/w3m.1: fix typo.
+ * doc-jp/w3m.1: update
+
+2010-07-18 Petr Salinger <Petr.Salinger@seznam.cz>
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=493486
+ * terms.c: fix version check logic for FreeBSD
+
+2010-07-18 Colin Watson <cjwatson@ubuntu.com>
+ * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=325699
+ * scripts/w3mman/w3mman2html.cgi.in (Content-Type): "MAN_KEEP_FORMATTING=1"
+
+2010-07-18 Ludwig Nussel <ludwig.nussel@...e.de>
+ * http://www.openwall.com/lists/oss-security/2010/06/14/4
+ * istream.c (ssl_check_cert_ident): replace \0 to make full string
+ visible to user (CVE-2010-2074).
+
+2007-06-07 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
+
+ * [w3m-dev 04279] charset
+ * libwc/ces.h, libwc/charset.c: set charset to Shift_JIS, when locale
+ is japanese, jp_JP.PCK, ja_JP.IBM-932, ja_JP.IBM-943, or windows-31j.
+
+2007-06-07 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
+
+ * [w3m-dev 04278] Re: segfault on CentOS4.5/libgc6.8
+ * term.c: add handling xterm-incompatible terminals without gpm.
+
+2007-06-04 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
+
+ * [w3m-dev 04271] vi_prec_num
+ * main.c: make number prefixes working when vi_prec_num=0.
+
2007-05-31 Dai Sato <satodai@w3m.jp>
* w3m 0.5.2
@@ -8917,4 +9300,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1
* import w3m-0.2.1
-$Id: ChangeLog,v 1.998 2007/05/31 12:17:05 inu Exp $
+$Id: ChangeLog,v 1.1050 2011/01/15 07:52:48 inu Exp $
diff --git a/Makefile.in b/Makefile.in
index ab81d30..0137211 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -27,7 +27,6 @@ sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
top_builddir = .
VPATH = $(top_srcdir):.
-DESTDIR =
CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
@@ -46,7 +45,8 @@ DEFS = @DEFS@ -DAUXBIN_DIR=\"$(AUXBIN_DIR)\" \
-DLOCALEDIR=\"$(localedir)\"
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-EXT_LIBS = -L. -lindep @LIBINTL@ @LIBGC@
+GC_LIBS = @LIBGC@
+EXT_LIBS = -L. -lindep @LIBINTL@ $(GC_LIBS)
W3M_LIBS = @W3M_LIBS@
WCTARGET = @WCTARGET@
NLSTARGET = @NLSTARGET@
@@ -58,10 +58,12 @@ MAKE_ARGS = PERL='$(PERL)' MKDIR='$(MKDIR)' \
CONF_DIR='$(CONF_DIR)' \
RC_DIR='$(RC_DIR)' DESTDIR='$(DESTDIR)' KEYBIND_SRC='$(KEYBIND_SRC)'
-IMGCFLAGS = @IMGX11CFLAGS@ @IMGFBCFLAGS@
-IMGLDFLAGS = @IMGX11LDFLAGS@ @IMGFBLDFLAGS@
+IMGCFLAGS = @IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
+IMGLDFLAGS = @IMGX11LDFLAGS@ @IMGFBLDFLAGS@ @IMGWINLDFLAGS@
CC0 = @CC@
+CXX = @CXX@
+IMGLINK = @IMGLINK@
CC = @POSUBST@ $(CC0)
CPP = @CPP@
RANLIB=@RANLIB@
@@ -136,7 +138,11 @@ $(OBJS) $(LOBJS): fm.h funcname1.h
tagtable.c: tagtable.tab mktable$(EXT) html.h
./mktable$(EXT) 100 $(srcdir)/tagtable.tab > $@
-indep.o: indep.c fm.h funcname1.h
+entity.h: entity.tab mktable$(EXT)
+ echo '/* $$I''d$$ */' > $@
+ ./mktable$(EXT) 100 $(srcdir)/entity.tab >> $@
+
+indep.o: indep.c fm.h funcname1.h entity.h
func.o: funcname.c functable.c funcname1.h
keybind.o: funcname2.h
keybind_lynx.o: funcname2.h
@@ -170,8 +176,8 @@ functable.c: funcname.tab mktable$(EXT)
./mktable$(EXT) 100 functable.tab > $@
-rm -f functable.tab
-mktable$(EXT): mktable.o dummy.o $(ALIB)
- $(CC) $(CFLAGS) -o mktable mktable.o dummy.o $(LDFLAGS) $(LIBS) $(EXT_LIBS)
+mktable$(EXT): mktable.o dummy.o Str.o hash.o myctype.o
+ $(CC) $(CFLAGS) -o mktable mktable.o dummy.o Str.o hash.o myctype.o $(LDFLAGS) $(LIBS) $(GC_LIBS)
$(BOOKMARKER): w3mbookmark.o dummy.o $(ALIB)
$(CC) $(CFLAGS) -o $(BOOKMARKER) w3mbookmark.o dummy.o $(LDFLAGS) $(LIBS) $(EXT_LIBS)
@@ -193,7 +199,7 @@ dummy.o: entity.c
$(CC) $(CFLAGS) -DDUMMY -c -o $@ $?
$(IMGDISPLAY): w3mimgdisplay.o $(ALIB) w3mimg/w3mimg.a
- $(CC) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS)
+ $(IMGLINK) $(CFLAGS) -o $(IMGDISPLAY) w3mimgdisplay.o w3mimg/w3mimg.a $(LDFLAGS) $(LIBS) $(IMGLDFLAGS)
w3mimgdisplay.o: w3mimgdisplay.c w3mimg/w3mimg.h
$(CC) $(CFLAGS) $(IMGCFLAGS) -o $@ -c $(srcdir)/w3mimgdisplay.c
diff --git a/NEWS b/NEWS
index 54731c6..66e309d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,19 @@
+w3m 0.5.3 - 2011-01-15
+
+* security fix
+ - fix vulnerabilities indicated by bugs.debian.org.
+ - suppress sending Referer, if https:// -> http://
+* new features
+ - adapt w3mimg to native windows on MS Windows.
+ - support xterm-incompatible terminals without gpm.
+ - add "xhtml" to default guess.
+ - introduce option pseudo_inlines.
+ - add option to avoid "wrong number of dots" error in cookies.
+* other bug fixes
+ - fix "important" bugs from bugs.debian.org
+ - preserve spaces in multibyte context.
+ - fix proxy authentication.
+
w3m 0.5.2 - 2007-05-31
* security fix
diff --git a/Patches/CVS/Entries b/Patches/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/Patches/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/Patches/CVS/Repository b/Patches/CVS/Repository
new file mode 100644
index 0000000..cd4278c
--- /dev/null
+++ b/Patches/CVS/Repository
@@ -0,0 +1 @@
+w3m/Patches
diff --git a/Patches/CVS/Root b/Patches/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/Patches/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/Symbols/CVS/Entries b/Symbols/CVS/Entries
new file mode 100644
index 0000000..dc12f1a
--- /dev/null
+++ b/Symbols/CVS/Entries
@@ -0,0 +1,11 @@
+/alt.sym/1.1/Mon Sep 22 21:02:22 2003//
+/big5.sym/1.1/Mon Sep 22 21:02:22 2003//
+/cp850.sym/1.1/Mon Sep 22 21:02:22 2003//
+/euccn.sym/1.1/Mon Sep 22 21:02:22 2003//
+/eucjp.sym/1.1/Mon Sep 22 21:02:22 2003//
+/euckr.sym/1.1/Mon Sep 22 21:02:22 2003//
+/euctw.sym/1.1/Mon Sep 22 21:02:22 2003//
+/graph.sym/1.1/Mon Sep 22 21:02:22 2003//
+/sym.pl/1.1/Mon Sep 22 21:02:22 2003//
+/utf8.sym/1.1/Mon Sep 22 21:02:22 2003//
+D
diff --git a/Symbols/CVS/Repository b/Symbols/CVS/Repository
new file mode 100644
index 0000000..9d32bc6
--- /dev/null
+++ b/Symbols/CVS/Repository
@@ -0,0 +1 @@
+w3m/Symbols
diff --git a/Symbols/CVS/Root b/Symbols/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/Symbols/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/acinclude.m4 b/acinclude.m4
index e10b7ed..e4ccc3d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -283,18 +283,6 @@ AC_DEFUN([AC_W3M_KEYMAP],
AC_DEFINE_UNQUOTED(KEYBIND, $enable_keymap)])
#
# ----------------------------------------------------------------
-# AC_W3M_DIGEST_AUTH
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_DIGEST_AUTH],
-[AC_SUBST(USE_DIGEST_AUTH)
- AC_MSG_CHECKING(if digest auth is enabled)
- AC_ARG_ENABLE(digest_auth,
- [ --disable-digest-auth disable digest auth],,
- [enable_digest_auth="yes"])
- test x"$enable_digest_auth" = xyes && AC_DEFINE(USE_DIGEST_AUTH)
- AC_MSG_RESULT($enable_digest_auth)])
-#
-# ----------------------------------------------------------------
# AC_W3M_MIGEMO
# ----------------------------------------------------------------
AC_DEFUN([AC_W3M_MIGEMO],
@@ -394,7 +382,7 @@ AC_DEFUN([AC_W3M_EXTLIBS],
[lib=$1
AC_MSG_CHECKING(for -l$lib)
extlib="not found"
- for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib
+ for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib /lib64 /usr/lib64
do
if test -f $dir/lib$lib.a -o -f $dir/lib$lib.so ; then
LIBS="$LIBS -l$lib"
@@ -426,6 +414,7 @@ AC_ARG_WITH(termlib,
# ----------------------------------------------------------------
AC_DEFUN([AC_W3M_GC],
[AC_MSG_CHECKING(GC library exists)
+AC_SUBST(LIBGC)
AC_ARG_WITH(gc,
[ --with-gc[=PREFIX] libgc PREFIX],
[test x"$with_gc" = xno && AC_MSG_ERROR([You can not build w3m without gc])],
@@ -456,7 +445,7 @@ AC_ARG_WITH(gc,
fi
fi
unset ac_cv_lib_gc_GC_init
- AC_CHECK_LIB(gc, GC_init, [LIBS="$LIBS -lgc"])
+ AC_CHECK_LIB(gc, GC_init, [LIBGC="-lgc"])
if test x"$ac_cv_lib_gc_GC_init" = xno; then
AC_MSG_CHECKING(GC library location)
AC_MSG_RESULT($with_gc)
@@ -466,7 +455,7 @@ AC_ARG_WITH(gc,
LDFLAGS="$LDFLAGS -L$dir/lib"
AC_MSG_CHECKING($dir)
unset ac_cv_lib_gc_GC_init
- AC_CHECK_LIB(gc, GC_init, [gclibdir="$dir/lib"; LIBS="$LIBS -L$dir/lib -lgc"; break])
+ AC_CHECK_LIB(gc, GC_init, [gclibdir="$dir/lib"; LIBGC="-L$dir/lib -lgc"; break])
LDFLAGS="$ldflags"
done
if test x"$gclibdir" = xno; then
@@ -475,9 +464,9 @@ AC_ARG_WITH(gc,
fi])
#
# ----------------------------------------------------------------
-# AC_W3M_SSL
+# AC_W3M_SSL_DIGEST_AUTH
# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_SSL],
+AC_DEFUN([AC_W3M_SSL_DIGEST_AUTH],
[AC_SUBST(USE_SSL)
AC_SUBST(USE_SSL_VERIFY)
AC_MSG_CHECKING(if SSL is suported)
@@ -519,7 +508,19 @@ if test x"$with_ssl" != xno; then
test x"$enable_sslverify" = xyes && AC_DEFINE(USE_SSL_VERIFY)
AC_MSG_RESULT($enable_sslverify)
fi
-fi])
+fi
+AC_SUBST(USE_DIGEST_AUTH)
+AC_MSG_CHECKING(if digest auth is enabled)
+AC_ARG_ENABLE(digest_auth,
+ [ --disable-digest-auth disable digest auth],,
+ [enable_digest_auth="yes"])
+if test x"$enable_digest_auth" = xyes -a x"$w3m_ssl" = xfound; then
+ AC_DEFINE(USE_DIGEST_AUTH)
+else
+ enable_digest_auth="no"
+fi
+AC_MSG_RESULT($enable_digest_auth)
+])
#
# ----------------------------------------------------------------
# AC_W3M_ALARM
@@ -568,6 +569,8 @@ AC_DEFUN([AC_W3M_IMAGE],
[AC_SUBST(USE_IMAGE)
AC_SUBST(USE_W3MIMG_X11)
AC_SUBST(USE_W3MIMG_FB)
+ AC_SUBST(USE_W3MIMG_WIN)
+ AC_SUBST(IMGLINK)
AC_SUBST(W3MIMGDISPLAY_SETUID)
AC_SUBST(INSTALL_W3MIMGDISPLAY)
INSTALL_W3MIMGDISPLAY='${INSTALL_PROGRAM}'
@@ -582,10 +585,12 @@ AC_DEFUN([AC_W3M_IMAGE],
AC_SUBST(IMGX11LDFLAGS)
AC_SUBST(IMGFBCFLAGS)
AC_SUBST(IMGFBLDFLAGS)
+ AC_SUBST(IMGWINCFLAGS)
+ AC_SUBST(IMGWINLDFLAGS)
AC_MSG_CHECKING(if image is enabled)
AC_ARG_ENABLE(image,
[ --enable-image[=DEVS] enable inline image handler for DEVS
- DEVS may be comma separeted: x11,fb,fb+s
+ DEVS may be comma separeted: x11,fb,fb+s,win
default: autodetected.
'no' means disable inline image],,
[enable_image="yes"])
@@ -599,10 +604,14 @@ AC_DEFUN([AC_W3M_IMAGE],
if test -c /dev/fb0; then
enable_image=x11,fb
fi;;
+ CYGWIN*)
+ enable_image=x11,win;;
esac
fi
save_ifs="$IFS"; IFS=",";
- for img in $enable_image; do
+ set x $enable_image; shift
+ IFS="$save_ifs"
+ for img in "$[]@"; do
case $img in
x11) x11=yes;;
fb) fb=yes;;
@@ -610,9 +619,9 @@ AC_DEFUN([AC_W3M_IMAGE],
AC_DEFINE(W3MIMGDISPLAY_SETUID)
INSTALL_W3MIMGDISPLAY='${INSTALL} -o root -m 4755 -s'
AC_DEFINE(INSTALL_W3MIMGDISPLAY, $INSTALL_W3MIMGDISPLAY);;
+ win) win=yes;;
esac
done
- IFS="$save_ifs"
enable_image=yes
AC_DEFINE(USE_IMAGE)
AC_MSG_CHECKING(image library)
@@ -658,6 +667,7 @@ AC_DEFUN([AC_W3M_IMAGE],
esac
done
IMGTARGETS=""
+ IMGLINK='$(CC)'
if test x"$with_gtk2" = xyes; then
AC_W3M_CHECK_VER([GdkPixbuf],
[`$PKG_CONFIG --modversion gdk-pixbuf-2.0 2>/dev/null`],
@@ -751,12 +761,23 @@ AC_DEFUN([AC_W3M_IMAGE],
AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
fi
fi
+ if test x"$win" = xyes; then
+ AC_DEFINE(USE_W3MIMG_WIN)
+ IMGOBJS="$IMGOBJS win/win_w3mimg.o"
+ IMGTARGETS="${IMGTARGETS} win"
+ IMGWINCFLAGS="-I/usr/include/w32api"
+ IMGWINLDFLAGS="-lgdiplus -lgdi32 -luser32"
+ IMGLINK='$(CXX)'
+ fi
AC_DEFINE(IMGTARGETS, "$IMGTARGETS")
AC_DEFINE(IMGOBJS, "$IMGOBJS")
AC_DEFINE(IMGX11CFLAGS, "$IMGX11CFLAGS")
AC_DEFINE(IMGX11LDFLAGS, "$IMGX11LDFLAGS")
AC_DEFINE(IMGFBCFLAGS, "$IMGFBCFLAGS")
- AC_DEFINE(IMGFBLDFLAGS, "$IMGLDFLAGS")
+ AC_DEFINE(IMGFBLDFLAGS, "$IMGFBLDFLAGS")
+ AC_DEFINE(IMGLINK, "$IMGLINK")
+ AC_DEFINE(IMGWINCFLAGS, "$IMGWINCFLAGS")
+ AC_DEFINE(IMGWINLDFLAGS, "$IMGWINLDFLAGS")
fi])
# ----------------------------------------------------------------
# AC_W3M_XFACE
diff --git a/aclocal.m4 b/aclocal.m4
index dca6dda..eb6e2a8 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,1107 +1,863 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# codeset.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 2000-2002, 2006, 2008-2010 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
+dnl From Bruno Haible.
-dnl w3m autoconf macros
-#
-# ----------------------------------------------------------------
-# AC_W3M_VERSION
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_VERSION],
-[AC_SUBST(CURRENT_VERSION)
- cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog`
- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
- CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`])
-#
-# ----------------------------------------------------------------
-# AC_W3M_COLOR
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_COLOR],
-[AC_SUBST(USE_COLOR)
-AC_MSG_CHECKING(if color escape sequence for kterm/pxvt is enabled)
-AC_ARG_ENABLE(color,
- [ --disable-color disable color for vt100 terminal],,
- [enable_color="yes"])
-test x"$enable_color" = xyes && AC_DEFINE(USE_COLOR)
-AC_MSG_RESULT($enable_color)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_ANSI_COLOR
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_ANSI_COLOR],
-[AC_SUBST(USE_ANSI_COLOR)
-AC_MSG_CHECKING(if ansi color escape sequence support is enabled)
-AC_ARG_ENABLE(ansi_color,
- [ --disable-ansi-color disable ansi color escape sequence],,
- [enable_ansi_color="$enable_color"])
- test x"$enable_ansi_color" = xyes && AC_DEFINE(USE_ANSI_COLOR)
- AC_MSG_RESULT($enable_ansi_color)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_BG_COLOR
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_BG_COLOR],
-[AC_SUBST(USE_BG_COLOR)
-AC_MSG_CHECKING(if background color support is enabled)
-AC_ARG_ENABLE(bgcolor,
- [ --disable-bgcolor disable to set background color],,
- [enable_bgcolor="$enable_color"])
- test x"$enable_bgcolor" = xyes && AC_DEFINE(USE_BG_COLOR)
-AC_MSG_RESULT($enable_bgcolor)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_MENU
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_MENU],
-[AC_SUBST(USE_MENU)
-AC_MSG_CHECKING(if popup menu is enabled)
-AC_ARG_ENABLE(menu,
- [ --disable-menu disable popup menu],,
- [enable_menu="yes"])
- test x"$enable_menu" = xyes && AC_DEFINE(USE_MENU)
- AC_MSG_RESULT($enable_menu)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_MOUSE
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_MOUSE],
-[AC_SUBST(USE_MOUSE)
-AC_MSG_CHECKING(if mouse operation enabled)
-AC_ARG_ENABLE(mouse,
- [ --disable-mouse disable mouse operation],,
- [enable_mouse="yes"])
-test x"$enable_mouse" = xyes && AC_DEFINE(USE_MOUSE)
-AC_MSG_RESULT($enable_mouse)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_COOKIE
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_COOKIE],
-[AC_SUBST(USE_COOKIE)
-AC_MSG_CHECKING(if cookie is enabled)
-AC_ARG_ENABLE(cookie,
- [ --disable-cookie disable cookie],,
- [enable_cookie="yes"])
-test x"$enable_cookie" = xyes && AC_DEFINE(USE_COOKIE)
-AC_MSG_RESULT($enable_cookie)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_DICT
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_DICT],
-[AC_SUBST(USE_DICT)
-AC_MSG_CHECKING(if dictionary lookup is enabled)
-AC_ARG_ENABLE(dict,
- [ --disable-dict disable dictionary lookup (see README.dict)],,
- [enable_dict="yes"])
- test x"$enable_dict" = xyes && AC_DEFINE(USE_DICT)
- AC_MSG_RESULT($enable_dict)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_HISTORY
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_HISTORY],
-[AC_SUBST(USE_HISTORY)
-AC_MSG_CHECKING(if URL history is enabled)
-AC_ARG_ENABLE(history,
- [ --disable-history disable URL history],,
- [enable_history="yes"])
- test x"$enable_history" = xyes && AC_DEFINE(USE_HISTORY)
- AC_MSG_RESULT($enable_history)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_NNTP
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_NNTP],
-[AC_SUBST(USE_NNTP)
- AC_MSG_CHECKING(if nntp is enabled)
- AC_ARG_ENABLE(nntp,
- [ --disable-nntp disable NNTP],,
- [enable_nntp="yes"])
- test x"$enable_nntp" = xyes && AC_DEFINE(USE_NNTP)
- AC_MSG_RESULT($enable_nntp)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_GOPHER
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_GOPHER],
-[AC_SUBST(USE_GOPHER)
- AC_MSG_CHECKING(if gopher is enabled)
- AC_ARG_ENABLE(gopher,
- [ --enable-gopher enable GOPHER],,
- [enable_gopher="no"])
- test x"$enable_gopher" = xyes && AC_DEFINE(USE_GOPHER)
- AC_MSG_RESULT($enable_gopher)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_M17N
-# ----------------------------------------------------------------
-# m17n enable?
-AC_DEFUN([AC_W3M_M17N],
-[AC_SUBST(USE_M17N)
-AC_SUBST(USE_UNICODE)
-AC_SUBST(WCTARGET)
-AC_SUBST(WCCFLAGS)
-AC_SUBST(DISPLAY_CHARSET)
-AC_SUBST(SYSTEM_CHARSET)
-AC_SUBST(DOCUMENT_CHARSET)
-AC_SUBST(POSUBST)
-AC_SUBST(POLANG)
-WCTARGET=""; WCCFLAGS=""; wcinclude=""; wclib=""
-AC_MSG_CHECKING(if m17n support is enabled)
-AC_ARG_ENABLE(m17n,
- [ --disable-m17n do not use m17n],,
- [enable_m17n="yes"])
-AC_MSG_RESULT($enable_m17n)
-if test x"$enable_m17n" = xno; then
- w3m_lang="en"
- WCTARGET=""
- WCCFLAGS=""
- wcinclude=""
- wclib=""
- display_charset='WC_CES_US_ASCII'
- system_charset='WC_CES_US_ASCII'
- document_charset='WC_CES_US_ASCII'
-else
- AC_DEFINE(USE_M17N)
- WCTARGET="libwc/libwc.a"
- WCCFLAGS='-I$(srcdir) -I$(srcdir)/..'
- wcinclude='-I$(srcdir)/libwc'
- wclib="-L./libwc -lwc"
- AC_MSG_CHECKING(if unicode support is enabled)
- AC_ARG_ENABLE(unicode,
- [ --disable-unicode do not use unicode],,
- [enable_unicode="yes"])
- AC_MSG_RESULT($enable_unicode)
- if test x"$enable_m17n" = xyes; then
- charset=US-ASCII
- else
- charset=$enable_m17n
- fi
- if test x"$enable_unicode" = xyes; then
- WCCFLAGS="-DUSE_UNICODE $WCCFLAGS"
- if test x"$charset" = xUS-ASCII; then
- charset=UTF-8
- fi
- AC_DEFINE(USE_UNICODE)
- fi
- AC_MSG_CHECKING(if message l10n)
- AC_ARG_ENABLE(messagel10n,
- [ --enable-messagel10n=LL message l10n instead of NLS],,
- [enable_messagel10n="no"])
- if test x$enable_messagel10n = xyes; then
- enable_messagel10n="ja";
- fi
- AC_MSG_RESULT($enable_messagel10n)
- if test x$enable_messagel10n = xno; then
- :
- else
- POSUBST="\$(top_srcdir)/posubst"
- POLANG="$enable_messagel10n"
- fi
- AC_MSG_CHECKING(if japanese support is enabled)
- AC_ARG_ENABLE(japanese,
- [ --enable-japanese=CODE support Japanese CODE=(S|E|J|U)],,
- [enable_japanese="no"])
- AC_MSG_RESULT($enable_japanese)
- if test x"$enable_japanese" = xno; then
- w3m_lang="en"
- else
- w3m_lang="ja"
- case "$enable_japanese" in
- E*) charset=EUC-JP;;
- S*) charset=Shift_JIS;;
- J*) charset=ISO-2022-JP;;
- U*) charset=UTF-8;;
- esac
- fi
- display_charset=$charset
- AC_MSG_CHECKING(which charset is used for display)
- AC_ARG_WITH(charset,
- [ --with-charset=CHARSET],
- [test x"with_charset" = xyes || display_charset="$with_charset"])
- AC_MSG_RESULT($display_charset)
- display_charset=`awk '$[1] == "'$display_charset'" {print $[2]}' $srcdir/charset-list`
- case "$display_charset" in
- WC_CES_ISO_2022_JP*)
- system_charset=WC_CES_EUC_JP
- document_charset=WC_CES_EUC_JP
- ;;
- WC_CES_SHIFT_JIS)
- system_charset=$display_charset
- # for auto-detect
- document_charset=WC_CES_EUC_JP
- ;;
- WC_CES_ISO_2022_CN|WC_CES_HZ_GB_2312)
- system_charset=WC_CES_EUC_CN
- document_charset=WC_CES_EUC_CN
- ;;
- WC_CES_BIG5)
- system_charset=$display_charset
- # for auto-detect
- document_charset=WC_CES_EUC_TW
- ;;
- WC_CES_ISO_2022_KR)
- system_charset=WC_CES_EUC_KR
- document_charset=WC_CES_EUC_KR
- ;;
- *)
- system_charset=$display_charset
- document_charset=$display_charset
- ;;
- esac
-fi
-W3M_LANGDEF=`echo $w3m_lang | tr 'a-z' 'A-Z'`
-W3M_LANG=$W3M_LANGDEF
-AC_DEFINE_UNQUOTED(W3M_LANG, $W3M_LANG)
-AC_DEFINE_UNQUOTED(WCTARGET, "$WCTARGET")
-AC_DEFINE_UNQUOTED(WCCFLAGS, "$WCCFLAGS")
-CFLAGS="$CFLAGS $wcinclude"
-W3M_LIBS="$W3M_LIBS $wclib"
-AC_DEFINE_UNQUOTED(DISPLAY_CHARSET, $display_charset)
-AC_DEFINE_UNQUOTED(SYSTEM_CHARSET, $system_charset)
-AC_DEFINE_UNQUOTED(DOCUMENT_CHARSET, $document_charset)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_KEYMAP
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_KEYMAP],
-[AC_SUBST(KEYMAP_FILE)
- AC_MSG_CHECKING(default keymap)
- AC_ARG_ENABLE(keymap,
- [ --enable-keymap[=w3m|lynx] default keybind style(w3m or lynx)],,
- [enable_keymap="w3m"])
- AC_MSG_RESULT($enable_keymap)
- case x"$enable_keymap" in
- xw3m)
- KEYMAP_FILE="keybind";;
- xlynx)
- KEYMAP_FILE="keybind_lynx";;
- *)
- AC_MSG_ERROR([keymap should be either w3m or lynx.]);;
- esac
- AC_SUBST(HELP_FILE)
- HELP_FILE=w3mhelp-${enable_keymap}_$w3m_lang.html
- AC_DEFINE_UNQUOTED(HELP_FILE, "$HELP_FILE")
- AC_SUBST(KEYBIND)
- AC_DEFINE_UNQUOTED(KEYBIND, $enable_keymap)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_MIGEMO
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_MIGEMO],
-[AC_SUBST(USE_MIGEMO)
- AC_SUBST(DEF_MIGEMO_COMMAND)
- migemo_command="migemo -t egrep /usr/local/share/migemo/migemo-dict"
- AC_MSG_CHECKING(if migemo is supported with)
- AC_ARG_WITH(migemo,
- [ --with-migemo=MIGEMO_COMMAND migemo command],
- [test x"$with_migemo" = xyes || migemo_command="$with_migemo"])
- if test "${with_migemo+set}" = set -a "$with_migemo" != "no"; then
- AC_DEFINE(USE_MIGEMO)
- fi
- AC_MSG_RESULT($migemo_command)
- AC_DEFINE_UNQUOTED(DEF_MIGEMO_COMMAND, "$migemo_command")])
-#
-# ----------------------------------------------------------------
-# AC_W3M_EDITOR
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_EDITOR],
-[AC_SUBST(DEF_EDITOR)
-w3m_editor="/usr/bin/vi"
-AC_MSG_CHECKING(which editor is used by default)
-AC_ARG_WITH(editor,
- [ --with-editor=EDITOR default editor (/usr/bin/vi)],
- [w3m_editor="$with_editor"])
-AC_MSG_RESULT($w3m_editor)
-AC_DEFINE_UNQUOTED(DEF_EDITOR, "$w3m_editor")])
-#
-# ----------------------------------------------------------------
-# AC_W3M_MAILER
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_MAILER],
-[AC_SUBST(DEF_MAILER)
-w3m_mailer="/usr/bin/mail"
-AC_MSG_CHECKING(which mailer is used by default)
-AC_ARG_WITH(mailer,
- [ --with-mailer=MAILER default mailer (/usr/bin/mail)],
- [w3m_mailer="$with_mailer"])
-AC_MSG_RESULT($w3m_mailer)
-AC_DEFINE_UNQUOTED(DEF_MAILER, "$w3m_mailer")])
-#
-# ----------------------------------------------------------------
-# AC_W3M_EXT_BROWSER
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_EXT_BROWSER],
-[AC_SUBST(DEF_EXT_BROWSER)
-w3m_browser="/usr/bin/mozilla"
-AC_MSG_CHECKING(which external browser is used by default)
-AC_ARG_WITH(browser,
- [ --with-browser=BROWSER default browser (/usr/bin/mozilla)],
- [w3m_browser="$with_browser"])
-AC_MSG_RESULT($w3m_browser)
-AC_DEFINE_UNQUOTED(DEF_EXT_BROWSER, "$w3m_browser")])
-#
-# ----------------------------------------------------------------
-# AC_W3M_HELP_CGI
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_HELP_CGI],
-[AC_SUBST(USE_HELP_CGI)
- AC_MSG_CHECKING(if help cgi is enabled)
- AC_ARG_ENABLE(help_cgi,
- [ --disable-help-cgi disable help cgi],,
- [enable_help_cgi="yes"])
- test x"$enable_help_cgi" = xyes && AC_DEFINE(USE_HELP_CGI)
- AC_MSG_RESULT($enable_help_cgi)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_EXTERNAL_URI_LOADER
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_EXTERNAL_URI_LOADER],
-[AC_SUBST(USE_EXTERNAL_URI_LOADER)
- AC_MSG_CHECKING(if external URI loader is enabled)
- AC_ARG_ENABLE(external_uri_loader,
- [ --disable-external-uri-loader disable external URI loader],,
- [enable_external_uri_loader="yes"])
- test x"$enable_external_uri_loader" = xyes && AC_DEFINE(USE_EXTERNAL_URI_LOADER)
- AC_MSG_RESULT($enable_external_uri_loader)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_W3MMAILER
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_W3MMAILER],
-[AC_SUBST(USE_W3MMAILER)
- AC_MSG_CHECKING(if w3mmail is used)
- AC_ARG_ENABLE(w3mmailer,
- [ --disable-w3mmailer disable w3mmailer],,
- [enable_w3mmailer="$enable_external_uri_loader"])
- test x"$enable_external_uri_loader" = xno && enable_w3mmailer=no
- test x"$enable_w3mmailer" = xyes && AC_DEFINE(USE_W3MMAILER)
- AC_MSG_RESULT($enable_w3mmailer)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_EXTLIBS(libs)
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_EXTLIBS],
-[lib=$1
- AC_MSG_CHECKING(for -l$lib)
- extlib="not found"
- for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib
- do
- if test -f $dir/lib$lib.a -o -f $dir/lib$lib.so ; then
- LIBS="$LIBS -l$lib"
- extlib="found at $dir"
- break
- fi
- done
- AC_MSG_RESULT($extlib)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_TERMLIB
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_TERMLIB],
-[AC_MSG_CHECKING(terminal library)
-AC_ARG_WITH(termlib,
- [ --with-termlib[=LIBS] terminal library
- LIBS is space separated list of:
- terminfo mytinfo termcap ncurses curses],,
- [with_termlib="yes"])
- AC_MSG_RESULT($with_termlib)
- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
- for lib in $with_termlib; do
- AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break])
- done
-])
-#
-# ----------------------------------------------------------------
-# AC_W3M_GC
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_GC],
-[AC_MSG_CHECKING(GC library exists)
-AC_SUBST(LIBGC)
-AC_ARG_WITH(gc,
- [ --with-gc[=PREFIX] libgc PREFIX],
- [test x"$with_gc" = xno && AC_MSG_ERROR([You can not build w3m without gc])],
- [with_gc="yes"])
- AC_MSG_RESULT($with_gc)
- test x"$with_gc" = xyes && with_gc="/usr /usr/local ${HOME}"
- unset ac_cv_header_gc_h
- AC_CHECK_HEADER(gc.h)
- if test x"$ac_cv_header_gc_h" = xno; then
- AC_MSG_CHECKING(GC header location)
- AC_MSG_RESULT($with_gc)
- gcincludedir=no
- for dir in $with_gc; do
- for inc in include include/gc; do
- cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -I$dir/$inc"
- AC_MSG_CHECKING($dir/$inc)
- unset ac_cv_header_gc_h
- AC_CHECK_HEADER(gc.h, [gcincludedir="$dir/$inc"; CFLAGS="$CFLAGS -I$dir/$inc"; break])
- CPPFLAGS="$cppflags"
- done
- if test x"$gcincludedir" != xno; then
- break;
- fi
- done
- if test x"$gcincludedir" = xno; then
- AC_MSG_ERROR([gc.h not found])
- fi
- fi
- unset ac_cv_lib_gc_GC_init
- AC_CHECK_LIB(gc, GC_init, [LIBGC="-lgc"])
- if test x"$ac_cv_lib_gc_GC_init" = xno; then
- AC_MSG_CHECKING(GC library location)
- AC_MSG_RESULT($with_gc)
- gclibdir=no
- for dir in $with_gc; do
- ldflags="$LDFLAGS"
- LDFLAGS="$LDFLAGS -L$dir/lib"
- AC_MSG_CHECKING($dir)
- unset ac_cv_lib_gc_GC_init
- AC_CHECK_LIB(gc, GC_init, [gclibdir="$dir/lib"; LIBGC="-L$dir/lib -lgc"; break])
- LDFLAGS="$ldflags"
- done
- if test x"$gclibdir" = xno; then
- AC_MSG_ERROR([libgc not found])
- fi
- fi])
-#
-# ----------------------------------------------------------------
-# AC_W3M_SSL_DIGEST_AUTH
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_SSL_DIGEST_AUTH],
-[AC_SUBST(USE_SSL)
-AC_SUBST(USE_SSL_VERIFY)
-AC_MSG_CHECKING(if SSL is suported)
-AC_ARG_WITH(ssl,
- [ --with-ssl[=PREFIX] support https protocol],,
- [with_ssl="yes"])
-AC_MSG_RESULT($with_ssl)
-if test x"$with_ssl" != xno; then
- PKG_CHECK_MODULES(SSL, openssl,,[
- AC_MSG_CHECKING(for SSL library/header)
- test x"$with_ssl" = xyes && with_ssl="/usr/openssl /usr/ssl /usr /usr/local/openssl /usr/local/ssl /usr/local"
- AC_MSG_RESULT($with_ssl)
- for dir in $with_ssl
- do
- if test -f "$dir/include/openssl/ssl.h"; then
- SSL_CFLAGS="$SSL_CFLAGS -I$dir/include/openssl"
- if test "$dir" != "/usr"; then
- SSL_CFLAGS="$SSL_CFLAGS -I$dir/include"
- fi
- elif test "$dir" != "/usr" -a -f "$dir/include/ssl.h"; then
- SSL_CFLAGS="$SSL_CFLAGS -I$dir/include"
- fi
- if test "$dir" != "/usr" -a -f "$dir/lib/libssl.a"; then
- SSL_LIBS="$SSL_LIBS -L$dir/lib"
- fi
- done
- ])
- AC_CHECK_LIB(ssl, SSL_new,
- [w3m_ssl="found"; CFLAGS="$CFLAGS $SSL_CFLAGS" W3M_LIBS="$W3M_LIBS $SSL_LIBS -lssl -lcrypto"],
- [w3m_ssl="not found"],
- [$SSL_LIBS -lcrypto])
-
- if test x"$w3m_ssl" = xfound; then
- AC_DEFINE(USE_SSL)
- AC_MSG_CHECKING(if SSL certificate verify is enabled)
- AC_ARG_ENABLE(sslverify,
- [ --disable-sslverify verify SSL certificate],,
- [enable_sslverify="yes"])
- test x"$enable_sslverify" = xyes && AC_DEFINE(USE_SSL_VERIFY)
- AC_MSG_RESULT($enable_sslverify)
- fi
-fi
-AC_SUBST(USE_DIGEST_AUTH)
-AC_MSG_CHECKING(if digest auth is enabled)
-AC_ARG_ENABLE(digest_auth,
- [ --disable-digest-auth disable digest auth],,
- [enable_digest_auth="yes"])
-if test x"$enable_digest_auth" = xyes -a x"$w3m_ssl" = xfound; then
- AC_DEFINE(USE_DIGEST_AUTH)
-else
- enable_digest_auth="no"
-fi
-AC_MSG_RESULT($enable_digest_auth)
-])
-#
-# ----------------------------------------------------------------
-# AC_W3M_ALARM
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_ALARM],
-[AC_SUBST(USE_ALARM)
- AC_MSG_CHECKING(if alarm is enabled)
- AC_ARG_ENABLE(alarm,
- [ --disable-alarm disable alarm],,
- [enable_alarm="yes"])
- AC_MSG_RESULT($enable_alarm)
- if test x"$enable_alarm" = xyes; then
- AC_TRY_COMPILE(
- [#include <unistd.h>
-#include <signal.h>],
- [int sa = SIGALRM;
- void (*a) = alarm;],
- [AC_DEFINE(USE_ALARM)])
- fi])
-#
-# ----------------------------------------------------------------
-# AC_W3M_CHECK_VER(name, version, major, minor, micro,
-# action-if-ok, message-if-badver, action-if-nover)
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_CHECK_VER],
-[version="$2"
- if test x"$version" != x; then
- AC_MSG_CHECKING($1 version)
- AC_MSG_RESULT($version)
- set -- `echo "$version" | sed 's/[[^0-9]]/ /g'`
- if test "$[1]" -ne "$3" -o "$[2]" -lt "$4" || test "$[2]" -eq "$4" -a "$[3]" -lt "$5"; then
- AC_MSG_WARN([$1 is too old. Install $1 (version >= $3.$4.$5)])
- $7
- else
- $6
- fi
- else
- AC_MSG_WARN([$1 is not installed. Install $1 (version >= $3.$4.$5)])
- $7
- fi])
-#
-# ----------------------------------------------------------------
-# AC_W3M_IMAGE
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_IMAGE],
-[AC_SUBST(USE_IMAGE)
- AC_SUBST(USE_W3MIMG_X11)
- AC_SUBST(USE_W3MIMG_FB)
- AC_SUBST(W3MIMGDISPLAY_SETUID)
- AC_SUBST(INSTALL_W3MIMGDISPLAY)
- INSTALL_W3MIMGDISPLAY='${INSTALL_PROGRAM}'
- AC_DEFINE(INSTALL_W3MIMGDISPLAY, $INSTALL_W3MIMGDISPLAY)
- AC_SUBST(USE_GDKPIXBUF)
- AC_SUBST(USE_GTK2)
- AC_SUBST(USE_IMLIB)
- AC_SUBST(USE_IMLIB2)
- AC_SUBST(IMGTARGETS)
- AC_SUBST(IMGOBJS)
- AC_SUBST(IMGX11CFLAGS)
- AC_SUBST(IMGX11LDFLAGS)
- AC_SUBST(IMGFBCFLAGS)
- AC_SUBST(IMGFBLDFLAGS)
- AC_MSG_CHECKING(if image is enabled)
- AC_ARG_ENABLE(image,
- [ --enable-image[=DEVS] enable inline image handler for DEVS
- DEVS may be comma separeted: x11,fb,fb+s
- default: autodetected.
- 'no' means disable inline image],,
- [enable_image="yes"])
- AC_MSG_RESULT($enable_image)
- if test x"$enable_image" != xno; then
- IMGOBJS=w3mimg.o
- if test x"$enable_image" = xyes; then
- enable_image=x11
- case "`uname -s`" in
- Linux|linux|LINUX)
- if test -c /dev/fb0; then
- enable_image=x11,fb
- fi;;
- esac
- fi
- save_ifs="$IFS"; IFS=",";
- for img in $enable_image; do
- case $img in
- x11) x11=yes;;
- fb) fb=yes;;
- fb+s) fb=yes
- AC_DEFINE(W3MIMGDISPLAY_SETUID)
- INSTALL_W3MIMGDISPLAY='${INSTALL} -o root -m 4755 -s'
- AC_DEFINE(INSTALL_W3MIMGDISPLAY, $INSTALL_W3MIMGDISPLAY);;
- esac
- done
- IFS="$save_ifs"
- enable_image=yes
- AC_DEFINE(USE_IMAGE)
- AC_MSG_CHECKING(image library)
- AC_ARG_WITH(imagelib,
- [ --with-imagelib=IMAGELIBS image library
- IMAGELIBS may be space separeted list of:
- gtk2 gdk-pixbuf imlib imlib2],,
-
- [with_imagelib="yes"])
- if test x"$with_imagelib" = xyes; then
- with_imagelib="gtk2 gdk-pixbuf imlib imlib2"
- fi
- AC_MSG_RESULT($with_imagelib)
- with_imlib=no
- with_imlib2=no
- with_gdkpixbuf=no
- with_gtk2=no
- for imagelib in $with_imagelib
- do
- case "$imagelib" in
- imlib)
- with_imlib="yes"
- if test x"$IMLIB_CONFIG" = x; then
- IMLIB_CONFIG=imlib-config
- fi;;
- imlib2)
- with_imlib2="yes"
- if test x"$IMLIB2_CONFIG" = x; then
- IMLIB2_CONFIG=imlib2-config
- fi;;
- gdk-pixbuf)
- with_gdkpixbuf="yes"
- if test x"$GDKPIXBUF_CONFIG" = x; then
- GDKPIXBUF_CONFIG=gdk-pixbuf-config
- fi;;
- gtk2)
- with_gtk2="yes"
- if test x"$PKG_CONFIG" = x; then
- PKG_CONFIG=pkg-config
- else
- PKG_CONFIG=:
- fi;;
- esac
- done
- IMGTARGETS=""
- if test x"$with_gtk2" = xyes; then
- AC_W3M_CHECK_VER([GdkPixbuf],
- [`$PKG_CONFIG --modversion gdk-pixbuf-2.0 2>/dev/null`],
- 2, 0, 0,
- [have_gdkpixbuf="yes"; have_gtk2="yes"],
- [have_gdkpixbuf="no"; have_gtk2="no"])
- fi
- if test x"$with_gdkpixbuf" = xyes; then
- if test x"$have_gdkpixbuf" != xyes; then
- AC_W3M_CHECK_VER([GdkPixbuf],
- [`$GDKPIXBUF_CONFIG --version 2>/dev/null`],
- 0, 16, 0,
- [have_gdkpixbuf="yes"],
- [have_gdkpixbuf="no"])
- fi
- fi
- if test x"$with_imlib" = xyes; then
- AC_W3M_CHECK_VER([Imlib],
- [`$IMLIB_CONFIG --version 2>/dev/null`],
- 1, 9, 8,
- [have_imlib="yes"],
- [have_imlib="no"])
- fi
- if test x"$with_imlib2" = xyes; then
- AC_W3M_CHECK_VER([Imlib2],
- [`$IMLIB2_CONFIG --version 2>/dev/null`],
- 1, 0, 5,
- [have_imlib2="yes"],
- [have_imlib2="no"])
- fi
- if test x"$x11" = xyes; then
- if test x"$have_gtk2" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
- IMGTARGETS="x11"
- AC_DEFINE(USE_GDKPIXBUF)
- AC_DEFINE(USE_GTK2)
- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
- IMGTARGETS="x11"
- AC_DEFINE(USE_GDKPIXBUF)
- IMGX11CFLAGS="`${GDKPIXBUF_CONFIG} --cflags`"
- IMGX11LDFLAGS="`${GDKPIXBUF_CONFIG} --libs` -lgdk_pixbuf_xlib"
- elif test x"$have_imlib" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
- IMGTARGETS="x11"
- AC_DEFINE(USE_IMLIB)
- IMGX11CFLAGS="`${IMLIB_CONFIG} --cflags`"
- IMGX11LDFLAGS="`${IMLIB_CONFIG} --libs`"
- IMGTARGETS="x11"
- elif test x"$have_imlib2" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
- IMGTARGETS="x11"
- AC_DEFINE(USE_IMLIB2)
- IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
- else
- AC_MSG_WARN([unable to build w3mimgdisplay with X11 support])
- fi
- fi
- if test x"$fb" = xyes; then
- if test x"$have_gtk2" = xyes; then
- AC_DEFINE(USE_W3MIMG_FB)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGTARGETS="${IMGTARGETS} fb"
- AC_DEFINE(USE_GDKPIXBUF)
- AC_DEFINE(USE_GTK2)
- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- AC_DEFINE(USE_W3MIMG_FB)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGTARGETS="${IMGTARGETS} fb"
- AC_DEFINE(USE_GDKPIXBUF)
- IMGFBCFLAGS="`${GDKPIXBUF_CONFIG} --cflags`"
- IMGFBLDFLAGS="`${GDKPIXBUF_CONFIG} --libs`"
- elif test x"$have_imlib2" = xyes; then
- AC_DEFINE(USE_W3MIMG_FB)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGTARGETS="${IMGTARGETS} fb"
- AC_DEFINE(USE_IMLIB2)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
- else
- AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
- fi
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
+ [AC_TRY_LINK([#include <langinfo.h>],
+ [char* cs = nl_langinfo(CODESET); return !cs;],
+ [am_cv_langinfo_codeset=yes],
+ [am_cv_langinfo_codeset=no])
+ ])
+ if test $am_cv_langinfo_codeset = yes; then
+ AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
fi
- AC_DEFINE(IMGTARGETS, "$IMGTARGETS")
- AC_DEFINE(IMGOBJS, "$IMGOBJS")
- AC_DEFINE(IMGX11CFLAGS, "$IMGX11CFLAGS")
- AC_DEFINE(IMGX11LDFLAGS, "$IMGX11LDFLAGS")
- AC_DEFINE(IMGFBCFLAGS, "$IMGFBCFLAGS")
- AC_DEFINE(IMGFBLDFLAGS, "$IMGLDFLAGS")
- fi])
-# ----------------------------------------------------------------
-# AC_W3M_XFACE
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_XFACE],
-[AC_SUBST(USE_XFACE)
- AC_MSG_CHECKING(if xface is enabled)
- AC_ARG_ENABLE(xface,
- [ --disable-xface disable xface support],,
- [enable_xface="$enable_image"])
- test x"$enable_xface" = xyes && AC_DEFINE(USE_XFACE)
- AC_MSG_RESULT($enable_xface)
- AC_CHECK_PROG(uncompface, uncompface, "yes", "no")
- test "$uncompface" = "no" && AC_MSG_WARN([uncompface is not installed.])
])
-#
-# ----------------------------------------------------------------
-# AC_W3M_IPv6
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_IPv6],
-[AC_MSG_CHECKING(if IPv6 support is enabled)
-AC_ARG_ENABLE(ipv6,
- [ --disable-ipv6 disable IPv6],,
- [enable_ipv6="yes"])
-AC_MSG_RESULT($enable_ipv6)
-
-if test x"$enable_ipv6" = xyes; then
- AC_MSG_CHECKING(if IPv6 API available)
- AC_SUBST(INET6)
- AC_CHECK_FUNC(getaddrinfo,
- [enable_ipv6="yes"],
- [enable_ipv6="no"])
- if test x"$enable_ipv6" = xno; then
- AC_MSG_CHECKING(for libinet6)
- for dir in /usr/local/v6/lib /usr/local/lib /usr/lib
- do
- if test -f $dir/libinet6.a; then
- if test $dir != "/usr/lib"; then
- W3M_LIBS="$W3M_LIBS -L$dir"
- fi
- AC_CHECK_LIB(inet6, getaddrinfo,
- [enable_ipv6="yes"
- use_libinet6="found"; W3M_LIBS="$W3M_LIBS -linet6"; break],
- [use_libinet6="not found"])
- fi
- done
- AC_MSG_RESULT($use_libinet6)
- fi
- if test x"$enable_ipv6" = xyes; then
- AC_SUBST(HAVE_OLD_SS_FAMILY)
- AC_MSG_CHECKING(if struct sockaddr_storage has an ss_family member)
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
- ], [
- struct sockaddr_storage ss;
- int i = ss.ss_family;
- ],
- [AC_MSG_RESULT(yes)],
- [AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
- ],
- [
- struct sockaddr_storage ss;
- int i = ss.__ss_family;
- ],
- [AC_MSG_RESULT(no, but __ss_family exists)
- AC_DEFINE(HAVE_OLD_SS_FAMILY)],
- [AC_MSG_RESULT(no)
- AC_MSG_WARN(IPv6 support is disabled)
- enable_ipv6="no"])
- ])
- fi
- if test x"$enable_ipv6" = xyes; then
- AC_DEFINE(INET6)
- fi
-fi])
-#
-# ----------------------------------------------------------------
-# AC_W3M_SYS_ERRLIST
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_SYS_ERRLIST],
-[AC_SUBST(HAVE_SYS_ERRLIST)
-AC_MSG_CHECKING(for sys_errlist)
-AC_TRY_COMPILE(
-changequote(<<,>>)dnl
-<<extern char *sys_errlist[];>>,
-<<printf(sys_errlist[0]);>>,
-changequote([,])dnl
-[have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)],
-[have_sys_errlist="no"])
-AC_MSG_RESULT($have_sys_errlist)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_SIGSETJMP
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_SIGSETJMP],
-[AC_SUBST(HAVE_SIGSETJMP)
-AC_MSG_CHECKING(for sigsetjmp)
-AC_TRY_COMPILE(
-[#include <setjmp.h>],
-[ jmp_buf env;
- if (sigsetjmp(env, 1) != 0) { exit(0); } siglongjmp(env, 1);],
-[have_sigsetjmp="yes"; AC_DEFINE(HAVE_SIGSETJMP)],
-[have_sigsetjmp="no"])
-AC_MSG_RESULT($have_sigsetjmp)])
-#
-# ----------------------------------------------------------------
-# AC_W3M_SIGNAL_RETURN
-# ----------------------------------------------------------------
-AC_DEFUN([AC_W3M_SIGNAL],
-[AC_TYPE_SIGNAL
- AC_SUBST(RETSIGTYPE)
- AC_SUBST(SIGNAL_RETURN)
- if test x"$ac_cv_type_signal" = xvoid; then
- AC_DEFINE(SIGNAL_RETURN,return)
- else
- AC_DEFINE(SIGNAL_RETURN,return 0)
- fi])
-# lib-prefix.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# gettext.m4 serial 63 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
-dnl From Bruno Haible.
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+dnl Macro to add for using GNU gettext.
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
fi
fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
fi
+ AC_MSG_RESULT([$gt_source])
fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
])
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
else
- acl_final_prefix="$prefix"
+ am_func_iconv=no am_cv_lib_iconv=no
fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
else
- acl_final_exec_prefix="$exec_prefix"
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
])
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ fi
])
-# lib-link.m4 serial 4 (gettext-0.12)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# intlmacosx.m4 serial 3 (gettext-0.18)
+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
+AC_PREREQ([2.54])
+
dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
AC_LIB_LINKFLAGS_BODY([$1], [$2])
ac_cv_lib[]Name[]_libs="$LIB[]NAME"
ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
])
LIB[]NAME="$ac_cv_lib[]Name[]_libs"
LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
dnl results of this search when this library appears as a dependency.
HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
+ popdef([NAME])
+ popdef([Name])
])
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
dnl searches for libname and the libraries corresponding to explicit and
dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
dnl accordingly.
@@ -1115,13 +871,25 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_TRY_LINK([$3], [$4],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
LIBS="$ac_save_LIBS"
])
if test "$ac_cv_lib[]Name" = yes; then
HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
AC_MSG_CHECKING([how to link with lib[]$1])
AC_MSG_RESULT([$LIB[]NAME])
else
@@ -1131,24 +899,32 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
CPPFLAGS="$ac_save_CPPFLAGS"
LIB[]NAME=
LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
fi
AC_SUBST([HAVE_LIB]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
])
dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
AC_DEFUN([AC_LIB_RPATH],
[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
. ./conftest.sh
@@ -1156,34 +932,66 @@ AC_DEFUN([AC_LIB_RPATH],
acl_cv_rpath=done
])
wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
+ AC_ARG_ENABLE([rpath],
[ --disable-rpath do not hardcode runtime library paths],
:, enable_rpath=yes)
])
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
[
if test "X$withval" = "Xno"; then
use_additional=no
@@ -1195,7 +1003,11 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
])
else
additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
fi
fi
])
@@ -1204,6 +1016,10 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
LIB[]NAME=
LTLIB[]NAME=
INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
rpathdirs=
ltrpathdirs=
names_already_handled=
@@ -1243,22 +1059,55 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
found_la=
found_so=
found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIB[]NAME; do
@@ -1266,21 +1115,46 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
;;
esac
if test "X$found_dir" != "X"; then
@@ -1295,7 +1169,9 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
dnl Linking with a shared library. We attempt to hardcode its
dnl directory into the executable's runpath, unless it's the
dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
dnl No hardcoding is needed.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
@@ -1314,12 +1190,12 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
ltrpathdirs="$ltrpathdirs $found_dir"
fi
dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
+ if test "$acl_hardcode_direct" = yes; then
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
dnl resulting binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
@@ -1350,13 +1226,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
if test -z "$haveit"; then
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
fi
- if test "$hardcode_minus_L" != no; then
+ if test "$acl_hardcode_minus_L" != no; then
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
dnl here, because this doesn't fit in flags passed to the
dnl compiler. So give up. No hardcoding. This affects only
dnl very old systems.
@@ -1381,8 +1257,18 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
dnl Assume the include files are nearby.
additional_includedir=
case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
additional_includedir="$basedir/include"
;;
esac
@@ -1399,7 +1285,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -1443,12 +1329,14 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
dnl 3. if it's already present in $LDFLAGS or the already
dnl constructed $LIBNAME,
dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -1544,18 +1432,18 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
done
done
if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
dnl Weird platform: only the last -rpath option counts, the user must
dnl pass all path elements in one option. We can arrange that for a
dnl single library, but not when more than one $LIBNAMEs are used.
alldirs=
for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
acl_save_libdir="$libdir"
libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
else
@@ -1563,7 +1451,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
done
@@ -1576,6 +1464,11 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
done
fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
])
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
@@ -1599,184 +1492,315 @@ AC_DEFUN([AC_LIB_APPENDTOVAR],
done
])
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN(PKG_CHECK_MODULES, [
- succeeded=no
-
- if test -z "$PKG_CONFIG"; then
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi
+ AC_SUBST([$1])
+])
- if test "$PKG_CONFIG" = "no" ; then
- echo "*** The pkg-config script could not be found. Make sure it is"
- echo "*** in your path, or set the PKG_CONFIG environment variable"
- echo "*** to the full path to pkg-config."
- echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
- else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- AC_MSG_CHECKING(for $2)
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
- if $PKG_CONFIG --exists "$2" ; then
- AC_MSG_RESULT(yes)
- succeeded=yes
+dnl From Bruno Haible.
- AC_MSG_CHECKING($1_CFLAGS)
- $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
- AC_MSG_RESULT($$1_CFLAGS)
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
- AC_MSG_CHECKING($1_LIBS)
- $1_LIBS=`$PKG_CONFIG --libs "$2"`
- AC_MSG_RESULT($$1_LIBS)
- else
- $1_CFLAGS=""
- $1_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
- $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
- ifelse([$4], ,echo $$1_PKG_ERRORS,)
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
fi
-
- AC_SUBST($1_CFLAGS)
- AC_SUBST($1_LIBS)
- else
- echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
- echo "*** See http://www.freedesktop.org/software/pkgconfig"
- fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
fi
+])
- if test $succeeded = yes; then
- ifelse([$3], , :, [$3])
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
else
- ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
])
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
-# gettext.m4 serial 28 (gettext-0.13)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
dnl
dnl This file can can be used in projects which are not available under
dnl the GNU General Public License or the GNU Library General Public
@@ -1791,480 +1815,182 @@ dnl Authors:
dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-dnl Macro to add for using GNU gettext.
+AC_PREREQ([2.50])
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl default (if it is not specified or empty) is 'no-libtool'.
-dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
+AC_DEFUN([AM_NLS],
[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
- define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
- dnl documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Set USE_NLS.
- AM_NLS
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- dnl Add a version number to the cache macros.
- define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
- define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
- define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-
- AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
- [AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
- gt_cv_func_gnugettext_libc=yes,
- gt_cv_func_gnugettext_libc=no)])
-
- if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- gt_cv_func_gnugettext_libintl,
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- gt_cv_func_gnugettext_libintl=yes,
- gt_cv_func_gnugettext_libintl=no)
- dnl Now see whether libintl exists and depends on libiconv.
- if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- gt_cv_func_gnugettext_libintl=yes
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if test "$gt_cv_func_gnugettext_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE(ENABLE_NLS, 1,
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE(HAVE_GETTEXT, 1,
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE(HAVE_DCGETTEXT, 1,
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
- dnl to 'yes' because some of the testsuite requires it.
- if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
- BUILD_INCLUDED_LIBINTL=yes
- fi
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(BUILD_INCLUDED_LIBINTL)
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATOBJEXT)
-
- dnl For backward compatibility. Some configure.ins may be using this.
- nls_cv_header_intl=
- nls_cv_header_libgt=
-
- dnl For backward compatibility. Some Makefiles may be using this.
- DATADIRNAME=share
- AC_SUBST(DATADIRNAME)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INSTOBJEXT=.mo
- AC_SUBST(INSTOBJEXT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- GENCAT=gencat
- AC_SUBST(GENCAT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- if test "$USE_INCLUDED_LIBINTL" = yes; then
- INTLOBJS="\$(GETTOBJS)"
- fi
- AC_SUBST(INTLOBJS)
-
- dnl Enable libtool support if the surrounding package wishes it.
- INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
- AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
- ])
+ AC_SUBST([USE_NLS])
+])
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST(INTLLIBS)
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
- dnl Make all documented variables known to autoconf.
- AC_SUBST(LIBINTL)
- AC_SUBST(LTLIBINTL)
- AC_SUBST(POSUB)
-])
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-AC_DEFUN([AM_INTL_SUBDIR],
-[
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_ISC_POSIX])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
- AC_REQUIRE([AC_C_CONST])dnl
- AC_REQUIRE([bh_C_SIGNED])dnl
- AC_REQUIRE([AC_C_INLINE])dnl
- AC_REQUIRE([AC_TYPE_OFF_T])dnl
- AC_REQUIRE([AC_TYPE_SIZE_T])dnl
- AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl
- AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
- AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
- AC_REQUIRE([gt_TYPE_WINT_T])dnl
- AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
- AC_REQUIRE([jm_AC_HEADER_STDINT_H])
- AC_REQUIRE([gt_TYPE_INTMAX_T])
- AC_REQUIRE([gt_PRINTF_POSIX])
- AC_REQUIRE([AC_FUNC_ALLOCA])dnl
- AC_REQUIRE([AC_FUNC_MMAP])dnl
- AC_REQUIRE([jm_GLIBC21])dnl
- AC_REQUIRE([gt_INTDIV0])dnl
- AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
- AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
- AC_REQUIRE([gt_INTTYPES_PRI])dnl
- AC_REQUIRE([gl_XSIZE])dnl
-
- AC_CHECK_TYPE([ptrdiff_t], ,
- [AC_DEFINE([ptrdiff_t], [long],
- [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
- ])
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
-stdlib.h string.h unistd.h sys/param.h])
- AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
-mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
-strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
-__fsetlocking])
-
- dnl Use the _snprintf function only if it is declared (because on NetBSD it
- dnl is defined as a weak alias of snprintf; we prefer to use the latter).
- gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
- gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
-
- dnl Use the *_unlocked functions only if they are declared.
- dnl (because some of them were defined without being declared in Solaris
- dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
- dnl on Solaris 2.5.1 to run on Solaris 2.6).
- dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
- gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
- gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
- gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
-
- case $gt_cv_func_printf_posix in
- *yes) HAVE_POSIX_PRINTF=1 ;;
- *) HAVE_POSIX_PRINTF=0 ;;
- esac
- AC_SUBST([HAVE_POSIX_PRINTF])
- if test "$ac_cv_func_asprintf" = yes; then
- HAVE_ASPRINTF=1
- else
- HAVE_ASPRINTF=0
- fi
- AC_SUBST([HAVE_ASPRINTF])
- if test "$ac_cv_func_snprintf" = yes; then
- HAVE_SNPRINTF=1
- else
- HAVE_SNPRINTF=0
- fi
- AC_SUBST([HAVE_SNPRINTF])
- if test "$ac_cv_func_wprintf" = yes; then
- HAVE_WPRINTF=1
- else
- HAVE_WPRINTF=0
- fi
- AC_SUBST([HAVE_WPRINTF])
- AM_ICONV
- AM_LANGINFO_CODESET
- if test $ac_cv_header_locale_h = yes; then
- AM_LC_MESSAGES
- fi
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
- dnl intl/plural.c is generated from intl/plural.y. It requires bison,
- dnl because plural.y uses bison specific features. It requires at least
- dnl bison-1.26 because earlier versions generate a plural.c that doesn't
- dnl compile.
- dnl bison is only needed for the maintainer (who touches plural.y). But in
- dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
- dnl the rule in general Makefile. Now, some people carelessly touch the
- dnl files or have a broken "make" program, hence the plural.c rule will
- dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
- dnl present or too old.
- AC_CHECK_PROGS([INTLBISON], [bison])
- if test -z "$INTLBISON"; then
- ac_verc_fail=yes
- else
- dnl Found it, now check the version.
- AC_MSG_CHECKING([version of bison])
-changequote(<<,>>)dnl
- ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
- case $ac_prog_version in
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-changequote([,])dnl
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
- esac
- AC_MSG_RESULT([$ac_prog_version])
- fi
- if test $ac_verc_fail = yes; then
- INTLBISON=:
- fi
-])
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+$$1_PKG_ERRORS
-dnl gt_CHECK_DECL(FUNC, INCLUDES)
-dnl Check whether a function is declared.
-AC_DEFUN([gt_CHECK_DECL],
-[
- AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
- [AC_TRY_COMPILE([$2], [
-#ifndef $1
- char *p = (char *) $1;
-#endif
-], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
- if test $ac_cv_have_decl_$1 = yes; then
- gt_value=1
- else
- gt_value=0
- fi
- AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
- [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
-])
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+_PKG_TEXT
-# po.m4 serial 3 (gettext-0.14)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# po.m4 serial 17 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
dnl
dnl This file can can be used in projects which are not available under
dnl the GNU General Public License or the GNU Library General Public
@@ -2279,14 +2005,20 @@ dnl Authors:
dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+AC_PREREQ([2.50])
+
dnl Checks for all prerequisites of the po subdirectory.
AC_DEFUN([AM_PO_SUBDIRS],
[
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
AC_REQUIRE([AM_NLS])dnl
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
dnl Perform the following tests also if --disable-nls has been given,
dnl because they are needed for "make dist" to work.
@@ -2294,59 +2026,61 @@ AC_DEFUN([AM_PO_SUBDIRS],
dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
dnl The second test excludes FreeBSD msgfmt.
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
(if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
:)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
dnl Search for GNU xgettext 0.12 or newer in the PATH.
dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
dnl The second test excludes FreeBSD xgettext.
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
(if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
:)
dnl Remove leftover from FreeBSD xgettext call.
rm -f messages.po
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
dnl Search for GNU msgmerge 0.11 or newer in the PATH.
AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
-
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU msgfmt.
- if test "$GMSGFMT" != ":"; then
- dnl If it is no GNU msgfmt we define it as : so that the
- dnl Makefiles still can work.
- if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
- (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
- AC_MSG_RESULT(
- [found $GMSGFMT program is not GNU msgfmt; ignore it])
- GMSGFMT=":"
- fi
- fi
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is no GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext program is not GNU xgettext; ignore it])
- XGETTEXT=":"
- fi
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
- fi
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
- AC_OUTPUT_COMMANDS([
+ AC_CONFIG_COMMANDS([po-directories], [[
for ac_file in $CONFIG_FILES; do
# Support "outfile[:infile[:infile...]]"
case "$ac_file" in
@@ -2366,6 +2100,9 @@ AC_DEFUN([AM_PO_SUBDIRS],
/*) top_srcdir="$ac_given_srcdir" ;;
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
rm -f "$ac_dir/POTFILES"
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
@@ -2379,12 +2116,13 @@ AC_DEFUN([AM_PO_SUBDIRS],
if test -n "$OBSOLETE_ALL_LINGUAS"; then
test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
fi
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
else
# The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
fi
# Compute POFILES
@@ -2454,10 +2192,10 @@ AC_DEFUN([AM_PO_SUBDIRS],
fi
;;
esac
- done],
+ done]],
[# Capture the value of obsolete ALL_LINGUAS because we need it to compute
# POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
- # from automake.
+ # from automake < 1.5.
eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
# Capture the value of LINGUAS because we need it to compute CATALOGS.
LINGUAS="${LINGUAS-%UNSET%}"
@@ -2543,7 +2281,7 @@ x
changequote([,])dnl
# Set POTFILES to the value of the Makefile variable POTFILES.
- sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
# Compute POTFILES_DEPS as
# $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
@@ -2558,14 +2296,14 @@ changequote([,])dnl
fi
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
# The LINGUAS file contains the set of available languages.
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
else
# Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
- sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
fi
- # Hide the ALL_LINGUAS assigment from automake.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
# Compute POFILES
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
@@ -2608,7 +2346,7 @@ changequote([,])dnl
QMFILES="$QMFILES $srcdirpre$lang.qm"
frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
done
# CATALOGS depends on both $ac_dir and the user's LINGUAS
@@ -2649,7 +2387,7 @@ changequote([,])dnl
QTCATALOGS="$QTCATALOGS $lang.qm"
frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
done
fi
@@ -2669,7 +2407,7 @@ EOF
if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
# Add dependencies that cannot be formulated as a simple suffix rule.
for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
cat >> "$ac_file.tmp" <<EOF
$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
@@ -2685,63 +2423,24 @@ EOF
mv "$ac_file.tmp" "$ac_file"
])
-# nls.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_DEFUN([AM_NLS],
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
[
- AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
+ XGETTEXT_EXTRA_OPTIONS=
])
-AC_DEFUN([AM_MKINSTALLDIRS],
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
[
- dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
- dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
- dnl Try to locate it.
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- case "$ac_aux_dir" in
- /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
- *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
- esac
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
- fi
- AC_SUBST(MKINSTALLDIRS)
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
])
-# progtest.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
+# progtest.m4 serial 6 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
dnl
dnl This file can can be used in projects which are not available under
dnl the GNU General Public License or the GNU Library General Public
@@ -2755,6 +2454,8 @@ dnl They are *not* in the public domain.
dnl Authors:
dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+AC_PREREQ([2.50])
+
# Search path for a program which passes the given test.
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
@@ -2792,7 +2493,7 @@ rm -f conf$$.file
# Extract the first word of "$2", so it can be a program name with args.
set dummy $2; ac_word=[$]2
AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
+AC_CACHE_VAL([ac_cv_path_$1],
[case "[$]$1" in
[[\\/]]* | ?:[[\\/]]*)
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
@@ -2804,6 +2505,7 @@ AC_CACHE_VAL(ac_cv_path_$1,
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
if [$3]; then
ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
break 2
@@ -2820,762 +2522,37 @@ ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
esac])dnl
$1="$ac_cv_path_$1"
if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$]$1)
+ AC_MSG_RESULT([$][$1])
else
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT([no])
fi
-AC_SUBST($1)dnl
-])
-
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
+AC_SUBST([$1])dnl
])
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_func_iconv=yes)
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_lib_iconv=yes
- am_cv_func_iconv=yes)
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST(LIBICONV)
- AC_SUBST(LTLIBICONV)
-])
-
-AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL(am_cv_proto_iconv, [
- AC_TRY_COMPILE([
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([$]{ac_t:-
- }[$]am_cv_proto_iconv)
- AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
- [Define as const if the declaration of iconv() needs const.])
- fi
-])
-
-# isc-posix.m4 serial 2 (gettext-0.11.2)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
-
-# This test replaces the one in autoconf.
-# Currently this macro should have the same name as the autoconf macro
-# because gettext's gettext.m4 (distributed in the automake package)
-# still uses it. Otherwise, the use in gettext.m4 makes autoheader
-# give these diagnostics:
-# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-
-undefine([AC_ISC_POSIX])
-
-AC_DEFUN([AC_ISC_POSIX],
- [
- dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
- AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
- ]
-)
-
-# signed.m4 serial 1 (gettext-0.10.40)
-dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([bh_C_SIGNED],
-[
- AC_CACHE_CHECK([for signed], bh_cv_c_signed,
- [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
- if test $bh_cv_c_signed = no; then
- AC_DEFINE(signed, ,
- [Define to empty if the C compiler doesn't support this keyword.])
- fi
-])
-
-# longlong.m4 serial 4
-dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG if 'long long' works.
-
-AC_DEFUN([jm_AC_TYPE_LONG_LONG],
-[
- AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
- [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
- [long long llmax = (long long) -1;
- return ll << i | ll >> i | llmax / ll | llmax % ll;],
- ac_cv_type_long_long=yes,
- ac_cv_type_long_long=no)])
- if test $ac_cv_type_long_long = yes; then
- AC_DEFINE(HAVE_LONG_LONG, 1,
- [Define if you have the 'long long' type.])
- fi
-])
-
-# longdouble.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-dnl Test whether the compiler supports the 'long double' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_LONGDOUBLE],
-[
- AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
- [if test "$GCC" = yes; then
- gt_cv_c_long_double=yes
- else
- AC_TRY_COMPILE([
- /* The Stardent Vistra knows sizeof(long double), but does not support it. */
- long double foo = 0.0;
- /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
- int array [2*(sizeof(long double) >= sizeof(double)) - 1];
- ], ,
- gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
- fi])
- if test $gt_cv_c_long_double = yes; then
- AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
- fi
-])
-
-# wchar_t.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-dnl Test whether <stddef.h> has the 'wchar_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WCHAR_T],
-[
- AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
- [AC_TRY_COMPILE([#include <stddef.h>
- wchar_t foo = (wchar_t)'\0';], ,
- gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
- if test $gt_cv_c_wchar_t = yes; then
- AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
- fi
-])
-
-# wint_t.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-dnl Test whether <wchar.h> has the 'wint_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WINT_T],
-[
- AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
- [AC_TRY_COMPILE([#include <wchar.h>
- wint_t foo = (wchar_t)'\0';], ,
- gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
- if test $gt_cv_c_wint_t = yes; then
- AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
- fi
-])
-
-# inttypes_h.m4 serial 5 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
- [AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <inttypes.h>],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_inttypes_h=yes,
- jm_ac_cv_header_inttypes_h=no)])
- if test $jm_ac_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
- [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
- and declares uintmax_t. ])
- fi
-])
-
-# stdint_h.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_STDINT_H],
-[
- AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
- [AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <stdint.h>],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_stdint_h=yes,
- jm_ac_cv_header_stdint_h=no)])
- if test $jm_ac_cv_header_stdint_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
- [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
- and declares uintmax_t. ])
- fi
-])
-
-# intmax.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-dnl Test whether the system has the 'intmax_t' type, but don't attempt to
-dnl find a replacement if it is lacking.
-
-AC_DEFUN([gt_TYPE_INTMAX_T],
-[
- AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
- AC_REQUIRE([jm_AC_HEADER_STDINT_H])
- AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
- [AC_TRY_COMPILE([
-#include <stddef.h>
-#include <stdlib.h>
-#if HAVE_STDINT_H_WITH_UINTMAX
-#include <stdint.h>
-#endif
-#if HAVE_INTTYPES_H_WITH_UINTMAX
-#include <inttypes.h>
-#endif
-], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
- if test $gt_cv_c_intmax_t = yes; then
- AC_DEFINE(HAVE_INTMAX_T, 1,
- [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
- fi
-])
-
-# printf-posix.m4 serial 2 (gettext-0.13.1)
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-dnl Test whether the printf() function supports POSIX/XSI format strings with
-dnl positions.
-
-AC_DEFUN([gt_PRINTF_POSIX],
-[
- AC_REQUIRE([AC_PROG_CC])
- AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
- gt_cv_func_printf_posix,
- [
- AC_TRY_RUN([
-#include <stdio.h>
-#include <string.h>
-/* The string "%2$d %1$d", with dollar characters protected from the shell's
- dollar expansion (possibly an autoconf bug). */
-static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
-static char buf[100];
-int main ()
-{
- sprintf (buf, format, 33, 55);
- return (strcmp (buf, "55 33") != 0);
-}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
- [
- AC_EGREP_CPP(notposix, [
-#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
- notposix
-#endif
- ], gt_cv_func_printf_posix="guessing no",
- gt_cv_func_printf_posix="guessing yes")
- ])
- ])
- case $gt_cv_func_printf_posix in
- *yes)
- AC_DEFINE(HAVE_POSIX_PRINTF, 1,
- [Define if your printf() function supports format strings with positions.])
- ;;
- esac
-])
-
-# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# Test for the GNU C Library, version 2.1 or newer.
-# From Bruno Haible.
-
-AC_DEFUN([jm_GLIBC21],
- [
- AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
- ac_cv_gnu_library_2_1,
- [AC_EGREP_CPP([Lucky GNU user],
- [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
- Lucky GNU user
- #endif
-#endif
- ],
- ac_cv_gnu_library_2_1=yes,
- ac_cv_gnu_library_2_1=no)
- ]
- )
- AC_SUBST(GLIBC21)
- GLIBC21="$ac_cv_gnu_library_2_1"
- ]
-)
-
-# intdiv0.m4 serial 1 (gettext-0.11.3)
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gt_INTDIV0],
-[
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
- AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
- gt_cv_int_divbyzero_sigfpe,
- [
- AC_TRY_RUN([
-#include <stdlib.h>
-#include <signal.h>
-
-static void
-#ifdef __cplusplus
-sigfpe_handler (int sig)
-#else
-sigfpe_handler (sig) int sig;
-#endif
-{
- /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
- exit (sig != SIGFPE);
-}
-
-int x = 1;
-int y = 0;
-int z;
-int nan;
-
-int main ()
-{
- signal (SIGFPE, sigfpe_handler);
-/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
-#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
- signal (SIGTRAP, sigfpe_handler);
-#endif
-/* Linux/SPARC yields signal SIGILL. */
-#if defined (__sparc__) && defined (__linux__)
- signal (SIGILL, sigfpe_handler);
-#endif
-
- z = x / y;
- nan = y / y;
- exit (1);
-}
-], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
- [
- # Guess based on the CPU.
- case "$host_cpu" in
- alpha* | i[34567]86 | m68k | s390*)
- gt_cv_int_divbyzero_sigfpe="guessing yes";;
- *)
- gt_cv_int_divbyzero_sigfpe="guessing no";;
- esac
- ])
- ])
- case "$gt_cv_int_divbyzero_sigfpe" in
- *yes) value=1;;
- *) value=0;;
- esac
- AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
- [Define if integer division by zero raises signal SIGFPE.])
-])
-
-# uintmax_t.m4 serial 7 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-AC_PREREQ(2.13)
-
-# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-# if it is not already defined in <stdint.h> or <inttypes.h>.
-
-AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
-[
- AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
- AC_REQUIRE([jm_AC_HEADER_STDINT_H])
- if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
- AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
- test $ac_cv_type_unsigned_long_long = yes \
- && ac_type='unsigned long long' \
- || ac_type='unsigned long'
- AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
- [Define to unsigned long or unsigned long long
- if <stdint.h> and <inttypes.h> don't define.])
- else
- AC_DEFINE(HAVE_UINTMAX_T, 1,
- [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
- fi
-])
-
-# ulonglong.m4 serial 3
-dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
-
-AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
-[
- AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
- [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
- [unsigned long long ullmax = (unsigned long long) -1;
- return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
- ac_cv_type_unsigned_long_long=yes,
- ac_cv_type_unsigned_long_long=no)])
- if test $ac_cv_type_unsigned_long_long = yes; then
- AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
- [Define if you have the 'unsigned long long' type.])
- fi
-])
-
-# inttypes.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
-# <sys/types.h>.
-
-AC_DEFUN([gt_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
- [
- AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <inttypes.h>],
- [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
- ])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
- [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
- fi
-])
-
-# inttypes-pri.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-# macros to non-string values. This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
- AC_REQUIRE([gt_HEADER_INTTYPES_H])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
- gt_cv_inttypes_pri_broken,
- [
- AC_TRY_COMPILE([#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
- ])
- fi
- if test "$gt_cv_inttypes_pri_broken" = yes; then
- AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
- [Define if <inttypes.h> exists and defines unusable PRI* macros.])
- fi
-])
-
-# xsize.m4 serial 2
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-AC_DEFUN([gl_XSIZE],
-[
- dnl Prerequisites of lib/xsize.h.
- AC_REQUIRE([gl_SIZE_MAX])
- AC_CHECK_HEADERS(stdint.h)
-])
-
-# size_max.m4 serial 2
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gl_SIZE_MAX],
-[
- AC_CHECK_HEADERS(stdint.h)
- dnl First test whether the system already has SIZE_MAX.
- AC_MSG_CHECKING([for SIZE_MAX])
- result=
- AC_EGREP_CPP([Found it], [
-#include <limits.h>
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef SIZE_MAX
-Found it
-#endif
-], result=yes)
- if test -z "$result"; then
- dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
- dnl than the type 'unsigned long'.
- dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
- dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
- _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
- [#include <stddef.h>], result=?)
- _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
- [#include <stddef.h>], result=?)
- _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
- [#include <stddef.h>], result=?)
- if test "$fits_in_uint" = 1; then
- dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
- dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
- AC_TRY_COMPILE([#include <stddef.h>
- extern size_t foo;
- extern unsigned long foo;
- ], [], fits_in_uint=0)
- fi
- if test -z "$result"; then
- if test "$fits_in_uint" = 1; then
- result="$res_hi$res_lo"U
- else
- result="$res_hi$res_lo"UL
- fi
- else
- dnl Shouldn't happen, but who knows...
- result='~(size_t)0'
- fi
- fi
- AC_MSG_RESULT([$result])
- if test "$result" != yes; then
- AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
- [Define as the maximum value of type 'size_t', if the system doesn't define it.])
- fi
-])
-
-# codeset.m4 serial AM1 (gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
- AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
- [AC_TRY_LINK([#include <langinfo.h>],
- [char* cs = nl_langinfo(CODESET);],
- am_cv_langinfo_codeset=yes,
- am_cv_langinfo_codeset=no)
- ])
- if test $am_cv_langinfo_codeset = yes; then
- AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
- [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
- fi
-])
-
-# lcmessage.m4 serial 3 (gettext-0.11.3)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-
-AC_DEFUN([AM_LC_MESSAGES],
-[
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your <locale.h> file defines LC_MESSAGES.])
- fi
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
])
+m4_include([acinclude.m4])
diff --git a/backend.c b/backend.c
index 101e67e..70406fd 100644
--- a/backend.c
+++ b/backend.c
@@ -1,4 +1,4 @@
-/* $Id: backend.c,v 1.13 2003/09/22 21:02:16 ukai Exp $ */
+/* $Id: backend.c,v 1.15 2010/08/08 09:53:42 htrb Exp $ */
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
@@ -95,7 +95,7 @@ internal_get(char *url, int flag, FormList *request)
buf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
do_download = FALSE;
if (buf != NULL && buf != NO_BUFFER) {
- if (!strcasecmp(buf->type, "text/html") && backend_halfdump_buf) {
+ if (is_html_type(buf->type) && backend_halfdump_buf) {
TextLineListItem *p;
Str first, last;
int len = 0;
@@ -294,7 +294,7 @@ backend(void)
w3m_dump = 0;
if (COLS == 0)
- COLS = 80;
+ COLS = DEFAULT_COLS;
#ifdef USE_MOUSE
use_mouse = FALSE;
#endif /* USE_MOUSE */
diff --git a/buffer.c b/buffer.c
index f258dd6..5afc26a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -1,4 +1,4 @@
-/* $Id: buffer.c,v 1.29 2003/09/26 17:59:51 ukai Exp $ */
+/* $Id: buffer.c,v 1.30 2010/07/18 14:10:09 htrb Exp $ */
#include "fm.h"
#ifdef USE_MOUSE
@@ -558,7 +558,7 @@ reshapeBuffer(Buffer *buf)
WcOption.auto_detect = WC_OPT_DETECT_OFF;
UseContentCharset = FALSE;
#endif
- if (!strcasecmp(buf->type, "text/html"))
+ if (is_html_type(buf->type))
loadHTMLBuffer(&f, buf);
else
loadBuffer(&f, buf);
@@ -590,7 +590,7 @@ reshapeBuffer(Buffer *buf)
gotoLine(buf, cur->linenumber);
}
buf->pos -= buf->currentLine->bpos;
- if (FoldLine && strcasecmp(buf->type, "text/html"))
+ if (FoldLine && !is_html_type(buf->type))
buf->currentColumn = 0;
else
buf->currentColumn = sbuf.currentColumn;
diff --git a/config.h.in b/config.h.in
index 313616c..2f41eed 100644
--- a/config.h.in
+++ b/config.h.in
@@ -69,6 +69,7 @@
#undef USE_IMAGE
#undef USE_W3MIMG_X11
#undef USE_W3MIMG_FB
+#undef USE_W3MIMG_WIN
#undef W3MIMGDISPLAY_SETUID
#undef USE_IMLIB
#undef USE_GDKPIXBUF
@@ -81,6 +82,7 @@
#define ID_EXT
#undef CLEAR_BUF
#undef INET6
+#undef HAVE_SOCKLEN_T
#undef HAVE_OLD_SS_FAMILY
#define USE_EGD
#define ENABLE_REMOVE_TRAILINGSPACES
diff --git a/config.rpath b/config.rpath
index fa24bfc..17298f2 100755
--- a/config.rpath
+++ b/config.rpath
@@ -2,28 +2,13 @@
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
-# Copyright 1996-2003 Free Software Foundation, Inc.
+# Copyright 1996-2010 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
-# This program 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 of the License, or
-# (at your option) any later version.
-#
-# This program 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
@@ -40,7 +25,7 @@
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
-# All known linkers require a `.a' archive for static linking (except M$VC,
+# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
shrext=.so
@@ -50,7 +35,19 @@ host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
@@ -60,7 +57,14 @@ else
aix*)
wl='-Wl,'
;;
- mingw* | pw32* | os2*)
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
@@ -70,20 +74,39 @@ else
;;
newsos6)
;;
- linux*)
- case $CC in
- icc|ecc)
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
wl='-Wl,'
;;
- ccc)
+ icc* | ifort*)
wl='-Wl,'
;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
- sco3.2v5*)
+ rdos*)
;;
solaris*)
wl='-Wl,'
@@ -91,17 +114,23 @@ else
sunos4*)
wl='-Qoption ld '
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
wl='-Wl,'
;;
sysv4*MP*)
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
uts4*)
;;
esac
fi
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
@@ -109,7 +138,7 @@ hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
@@ -117,6 +146,10 @@ case "$host_os" in
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -124,8 +157,14 @@ esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
case "$host_os" in
- aix3* | aix4* | aix5*)
+ aix[3-9]*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
@@ -138,18 +177,18 @@ if test "$with_gnu_ld" = yes; then
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
+ # behavior of shared libraries on other platforms, we cannot use
# them.
ld_shlibs=no
;;
beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
@@ -159,32 +198,55 @@ if test "$with_gnu_ld" = yes; then
ld_shlibs=no
fi
;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
netbsd*)
;;
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
sunos4*)
hardcode_direct=yes
;;
*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
- if test "$ld_shlibs" = yes; then
- # Unlike libtool, we use -rpath here, not --rpath, since the documented
- # option of GNU ld is called -rpath, not --rpath.
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
fi
else
case "$host_os" in
@@ -198,7 +260,7 @@ else
hardcode_direct=unsupported
fi
;;
- aix4* | aix5*)
+ aix[4-9]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -208,13 +270,14 @@ else
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
+ ;;
esac
fi
hardcode_direct=yes
@@ -226,7 +289,7 @@ else
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- hardcode_direct=yes
+ :
else
# We have old collect2
hardcode_direct=unsupported
@@ -234,6 +297,7 @@ else
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
+ ;;
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
@@ -266,9 +330,9 @@ else
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
- bsdi4*)
+ bsdi[45]*)
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
@@ -277,8 +341,17 @@ else
libext=lib
;;
darwin* | rhapsody*)
- if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
- hardcode_direct=no
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
fi
;;
dgux*)
@@ -295,7 +368,7 @@ else
hardcode_direct=yes
hardcode_minus_L=yes
;;
- freebsd*)
+ freebsd* | dragonfly*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
@@ -307,24 +380,25 @@ else
# but as the default location of the library.
hardcode_minus_L=yes
;;
- hpux10* | hpux11*)
+ hpux10*)
if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=no
- ;;
- ia64*)
- hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
hardcode_direct=no
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
;;
*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
@@ -347,18 +421,22 @@ else
hardcode_libdir_separator=:
;;
openbsd*)
- hardcode_direct=yes
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
else
- case "$host_os" in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
+ ld_shlibs=no
fi
;;
os2*)
@@ -378,8 +456,6 @@ else
fi
hardcode_libdir_separator=:
;;
- sco3.2v5*)
- ;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
@@ -408,14 +484,11 @@ else
ld_shlibs=yes
fi
;;
- sysv4.2uw2*)
- hardcode_direct=yes
- hardcode_minus_L=no
- ;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
;;
- sysv5*)
- hardcode_libdir_flag_spec=
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
@@ -427,35 +500,55 @@ else
fi
# Check dynamic linker characteristics
-# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
libname_spec='lib$name'
case "$host_os" in
aix3*)
+ library_names_spec='$libname.a'
;;
- aix4* | aix5*)
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
;;
amigaos*)
+ library_names_spec='$libname.a'
;;
beos*)
+ library_names_spec='$libname$shrext'
;;
- bsdi4*)
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
;;
darwin* | rhapsody*)
shrext=.dylib
+ library_names_spec='$libname$shrext'
;;
dgux*)
+ library_names_spec='$libname$shrext'
;;
freebsd1*)
;;
- freebsd*)
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
;;
gnu*)
+ library_names_spec='$libname$shrext'
;;
hpux9* | hpux10* | hpux11*)
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext=.so
;;
@@ -466,8 +559,13 @@ case "$host_os" in
shrext=.sl
;;
esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
;;
irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
@@ -484,42 +582,62 @@ case "$host_os" in
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
- linux*)
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
;;
netbsd*)
+ library_names_spec='$libname$shrext'
;;
newsos6)
+ library_names_spec='$libname$shrext'
;;
- nto-qnx)
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
;;
openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
;;
os2*)
libname_spec='$name'
shrext=.dll
+ library_names_spec='$libname.a'
;;
osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
;;
- sco3.2v5*)
+ rdos*)
;;
solaris*)
+ library_names_spec='$libname$shrext'
;;
sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
;;
sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
;;
uts4*)
+ library_names_spec='$libname$shrext'
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
@@ -530,6 +648,12 @@ libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
diff --git a/configure b/configure
index 7d1ac7f..4c1bc06 100755
--- a/configure
+++ b/configure
@@ -1,62 +1,85 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for w3m 0.5.2.
+# Generated by GNU Autoconf 2.67 for w3m 0.5.3.
#
# Report bugs to <satodai@w3m.jp>.
#
+#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
esac
-
fi
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
else
- PATH_SEPARATOR=:
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
fi
- rm -f conf$$.sh
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
fi
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
fi
@@ -65,20 +88,18 @@ fi
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
-as_nl='
-'
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
IFS=$as_save_IFS
;;
@@ -89,354 +110,322 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
fi
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
# CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
else
- as_have_required=no
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
else
- exitcode=1
- echo positional parameters were not saved.
+ as_have_required=no
fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- case $as_dir in
+ as_found=:
+ case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
done;;
esac
+ as_found=false
done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
IFS=$as_save_IFS
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
fi
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and satodai@w3m.jp
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
}
+as_unset=as_fn_unset
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
-if as_func_ret_success; then
- :
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
-exitcode=0
-if as_func_success; then
- :
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
+ as_expr=false
fi
-if as_func_ret_success; then
- :
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
+ as_basename=false
fi
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
else
- exitcode=1
- echo positional parameters were not saved.
+ as_dirname=false
fi
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell autoconf@gnu.org about your system,
- echo including any error possibly output before this
- echo message
-}
-
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
@@ -453,8 +442,7 @@ test \$exitcode = 0") || {
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
@@ -464,49 +452,40 @@ test \$exitcode = 0") || {
exit
}
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
-n*)
- case `echo 'x\c'` in
+ case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
+ fi
else
as_ln_s='cp -p'
fi
@@ -514,7 +493,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
+ as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
@@ -531,12 +510,12 @@ else
as_test_x='
eval sh -c '\''
if test -d "$1"; then
- test -d "$1/.";
+ test -d "$1/.";
else
- case $1 in
- -*)set "./$1";;
+ case $1 in #(
+ -*)set "./$1";;
esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
???[sx]*):;;*)false;;esac;fi
'\'' sh
'
@@ -550,11 +529,11 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
@@ -569,15 +548,16 @@ cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='w3m'
PACKAGE_TARNAME='w3m'
-PACKAGE_VERSION='0.5.2'
-PACKAGE_STRING='w3m 0.5.2'
+PACKAGE_VERSION='0.5.3'
+PACKAGE_STRING='w3m 0.5.3'
PACKAGE_BUGREPORT='satodai@w3m.jp'
+PACKAGE_URL=''
+gt_needs=
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -614,177 +594,245 @@ ac_includes_default="\
# 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
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-PACKAGE
-VERSION
-W3M
-W3M_LANG
-AWK
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-LN_S
-SET_MAKE
-RANLIB
-PERL
-NKF
-MAN
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-W3M_TARGET
-W3M_LIBS
-USE_M17N
-USE_UNICODE
-WCTARGET
-WCCFLAGS
-DISPLAY_CHARSET
-SYSTEM_CHARSET
-DOCUMENT_CHARSET
-POSUBST
-POLANG
-MKINSTALLDIRS
-USE_NLS
-MSGFMT
-GMSGFMT
-XGETTEXT
-MSGMERGE
-LIBICONV
-LTLIBICONV
-INTLLIBS
-LIBINTL
-LTLIBINTL
-POSUB
-INTLTARGET
-NLSTARGET
-USE_COLOR
-USE_ANSI_COLOR
-USE_BG_COLOR
-USE_IMAGE
-USE_W3MIMG_X11
-USE_W3MIMG_FB
-W3MIMGDISPLAY_SETUID
-INSTALL_W3MIMGDISPLAY
-USE_GDKPIXBUF
-USE_GTK2
-USE_IMLIB
-USE_IMLIB2
-IMGTARGETS
-IMGOBJS
-IMGX11CFLAGS
-IMGX11LDFLAGS
-IMGFBCFLAGS
-IMGFBLDFLAGS
-USE_XFACE
-uncompface
-KEYMAP_FILE
-HELP_FILE
-KEYBIND
-USE_MENU
-USE_MOUSE
-USE_HISTORY
-USE_ALARM
-USE_COOKIE
-USE_NNTP
-USE_GOPHER
-USE_DICT
-USE_HELP_CGI
-USE_EXTERNAL_URI_LOADER
-USE_W3MMAILER
-USE_MIGEMO
-DEF_MIGEMO_COMMAND
-DEF_EDITOR
-DEF_MAILER
-DEF_EXT_BROWSER
-INET6
-HAVE_OLD_SS_FAMILY
-USE_SSL
-USE_SSL_VERIFY
-PKG_CONFIG
-SSL_CFLAGS
-SSL_LIBS
-USE_DIGEST_AUTH
-USE_W3M
-USE_SYSMOUSE
-AUXBIN_TARGETS
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+CURRENT_VERSION
+DOCDIRS
+RC_DIR
+HELP_DIR
+SIGNAL_RETURN
+RETSIGTYPE
+HAVE_SIGSETJMP
+HAVE_SYS_ERRLIST
+USE_BINMODE_STREAM
LIBGC
-GREP
+AUXBIN_TARGETS
+USE_SYSMOUSE
+USE_W3M
+USE_DIGEST_AUTH
+SSL_LIBS
+SSL_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+USE_SSL_VERIFY
+USE_SSL
+HAVE_OLD_SS_FAMILY
+INET6
+DEF_EXT_BROWSER
+DEF_MAILER
+DEF_EDITOR
+DEF_MIGEMO_COMMAND
+USE_MIGEMO
+USE_W3MMAILER
+USE_EXTERNAL_URI_LOADER
+USE_HELP_CGI
+USE_DICT
+USE_GOPHER
+USE_NNTP
+USE_COOKIE
+USE_ALARM
+USE_HISTORY
+USE_MOUSE
+USE_MENU
+KEYBIND
+HELP_FILE
+KEYMAP_FILE
+uncompface
+USE_XFACE
+IMGWINLDFLAGS
+IMGWINCFLAGS
+IMGFBLDFLAGS
+IMGFBCFLAGS
+IMGX11LDFLAGS
+IMGX11CFLAGS
+IMGOBJS
+IMGTARGETS
+USE_IMLIB2
+USE_IMLIB
+USE_GTK2
+USE_GDKPIXBUF
+INSTALL_W3MIMGDISPLAY
+W3MIMGDISPLAY_SETUID
+IMGLINK
+USE_W3MIMG_WIN
+USE_W3MIMG_FB
+USE_W3MIMG_X11
+USE_IMAGE
+USE_BG_COLOR
+USE_ANSI_COLOR
+USE_COLOR
+NLSTARGET
+INTLTARGET
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
EGREP
-USE_BINMODE_STREAM
-HAVE_SYS_ERRLIST
-HAVE_SIGSETJMP
-RETSIGTYPE
-SIGNAL_RETURN
-HELP_DIR
-RC_DIR
-DOCDIRS
-CURRENT_VERSION
-LIBOBJS
-LTLIBOBJS'
+GREP
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+mkdir_p
+MKDIR_P
+POLANG
+POSUBST
+DOCUMENT_CHARSET
+SYSTEM_CHARSET
+DISPLAY_CHARSET
+WCCFLAGS
+WCTARGET
+USE_UNICODE
+USE_M17N
+W3M_LIBS
+W3M_TARGET
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+MAN
+NKF
+PERL
+RANLIB
+SET_MAKE
+LN_S
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+CPP
+ac_ct_CC
+CFLAGS
+CC
+AWK
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+W3M_LANG
+W3M
+VERSION
+PACKAGE
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_m17n
+enable_unicode
+enable_messagel10n
+enable_japanese
+with_charset
+enable_nls
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+enable_color
+enable_ansi_color
+enable_bgcolor
+enable_image
+with_imagelib
+enable_xface
+enable_keymap
+enable_menu
+enable_mouse
+enable_history
+enable_alarm
+enable_cookie
+enable_nntp
+enable_gopher
+enable_dict
+enable_help_cgi
+enable_external_uri_loader
+enable_w3mmailer
+with_migemo
+with_editor
+with_mailer
+with_browser
+enable_ipv6
+with_ssl
+enable_sslverify
+enable_digest_auth
+with_termlib
+with_gc
+'
ac_precious_vars='build_alias
host_alias
target_alias
-CC
-CFLAGS
+CXX
+CXXFLAGS
LDFLAGS
LIBS
CPPFLAGS
-CPP'
+CCC
+CC
+CFLAGS
+CPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+SSL_CFLAGS
+SSL_LIBS'
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
@@ -840,8 +888,9 @@ do
fi
case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
@@ -883,13 +932,20 @@ do
datarootdir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=no ;;
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
-docdir | --docdir | --docdi | --doc | --do)
ac_prev=docdir ;;
@@ -902,13 +958,20 @@ do
dvidir=$ac_optarg ;;
-enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=\$ac_optarg ;;
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1099,22 +1162,36 @@ do
ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=\$ac_optarg ;;
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
-without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=no ;;
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
--x)
# Obsolete; use --with-x.
@@ -1134,25 +1211,25 @@ do
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
;;
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
@@ -1161,23 +1238,36 @@ done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
fi
-# Be sure to have absolute directory names.
+# Check all directory arguments for consistency.
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
libdir localedir mandir
do
eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
case $ac_val in
[\\/$]* | ?:[\\/]* ) continue;;
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
- { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
# There might be people who depend on the old broken behavior: `$host'
@@ -1191,8 +1281,8 @@ target=$target_alias
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
@@ -1207,23 +1297,21 @@ test "$silent" = yes && exec 6>/dev/null
ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
+ as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
+ as_fn_error $? "pwd does not report name of working directory"
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1250,13 +1338,11 @@ else
fi
if test ! -r "$srcdir/$ac_unique_file"; then
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1282,7 +1368,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures w3m 0.5.2 to adapt to many kinds of systems.
+\`configure' configures w3m 0.5.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1296,7 +1382,7 @@ Configuration:
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
+ -q, --quiet, --silent do not print \`checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for \`--cache-file=config.cache'
-n, --no-create do not create output files
@@ -1304,9 +1390,9 @@ Configuration:
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
+ [$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
+ [PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
@@ -1316,25 +1402,25 @@ for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/w3m]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/w3m]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
@@ -1347,11 +1433,12 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of w3m 0.5.2:";;
+ short | recursive ) echo "Configuration of w3m 0.5.3:";;
esac
cat <<\_ACEOF
Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-m17n do not use m17n
@@ -1364,7 +1451,7 @@ Optional Features:
--disable-ansi-color disable ansi color escape sequence
--disable-bgcolor disable to set background color
--enable-image=DEVS enable inline image handler for DEVS
- DEVS may be comma separeted: x11,fb,fb+s
+ DEVS may be comma separeted: x11,fb,fb+s,win
default: autodetected.
'no' means disable inline image
--disable-xface disable xface support
@@ -1407,14 +1494,23 @@ Optional Packages:
--with-gc=PREFIX libgc PREFIX
Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
+ CC C compiler command
+ CFLAGS C compiler flags
CPP C preprocessor
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ SSL_CFLAGS C compiler flags for SSL, overriding pkg-config
+ SSL_LIBS linker flags for SSL, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1427,15 +1523,17 @@ fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" || continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1471,7 +1569,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1480,22 +1578,647 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-w3m configure 0.5.2
-generated by GNU Autoconf 2.61
+w3m configure 0.5.3
+generated by GNU Autoconf 2.67
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
exit
fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval "test \"\${$3+set}\"" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ----------------------------- ##
+## Report this to satodai@w3m.jp ##
+## ----------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by w3m $as_me 0.5.2, which was
-generated by GNU Autoconf 2.61. Invocation command line was
+It was created by w3m $as_me 0.5.3, which was
+generated by GNU Autoconf 2.67. Invocation command line was
$ $0 $@
@@ -1531,8 +2254,8 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
+ $as_echo "PATH: $as_dir"
+ done
IFS=$as_save_IFS
} >&5
@@ -1566,12 +2289,12 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ as_fn_append ac_configure_args1 " '$ac_arg'"
if test $ac_must_keep_next = true; then
ac_must_keep_next=false # Got value, back to normal.
else
@@ -1587,13 +2310,13 @@ do
-* ) ac_must_keep_next=true ;;
esac
fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
+ as_fn_append ac_configure_args " '$ac_arg'"
;;
esac
done
done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
@@ -1605,11 +2328,9 @@ trap 'exit_status=$?
{
echo
- cat <<\_ASBOX
-## ---------------- ##
+ $as_echo "## ---------------- ##
## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
echo
# The following way of writing the cache mishandles newlines in values,
(
@@ -1618,12 +2339,13 @@ _ASBOX
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
@@ -1642,131 +2364,140 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
)
echo
- cat <<\_ASBOX
-## ----------------- ##
+ $as_echo "## ----------------- ##
## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
echo
for ac_var in $ac_subst_vars
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- echo "$ac_var='\''$ac_val'\''"
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
+ $as_echo "## ------------------- ##
## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
echo
for ac_var in $ac_subst_files
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- echo "$ac_var='\''$ac_val'\''"
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
+ $as_echo "## ----------- ##
## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
echo
cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
+$as_echo "/* confdefs.h */" > confdefs.h
+
# Predefined preprocessor variables.
cat >>confdefs.h <<_ACEOF
#define PACKAGE_NAME "$PACKAGE_NAME"
_ACEOF
-
cat >>confdefs.h <<_ACEOF
#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
_ACEOF
-
cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION "$PACKAGE_VERSION"
_ACEOF
-
cat >>confdefs.h <<_ACEOF
#define PACKAGE_STRING "$PACKAGE_STRING"
_ACEOF
-
cat >>confdefs.h <<_ACEOF
#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
_ACEOF
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- set x "$CONFIG_SITE"
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
elif test "x$prefix" != xNONE; then
- set x "$prefix/share/config.site" "$prefix/etc/config.site"
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
else
- set x "$ac_default_prefix/share/config.site" \
- "$ac_default_prefix/etc/config.site"
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
fi
-shift
-for ac_site_file
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
do
- if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
done
if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+gt_needs="$gt_needs "
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -1777,108 +2508,601 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
*" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
esac
fi
done
if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+PACKAGE=w3m
+VERSION=0.5.3
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+W3M=w3m
+$as_echo "#define W3M w3m" >>confdefs.h
+W3M_LANG=${LC_ALL:-$LANG}
+ac_config_headers="$ac_config_headers config.h"
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ test -n "$ac_ct_CXX" && break
+done
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
-PACKAGE=w3m
-VERSION=0.5.2
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int
+main ()
+{
-W3M=w3m
-cat >>confdefs.h <<\_ACEOF
-#define W3M w3m
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int
+main ()
+{
-W3M_LANG=${LC_ALL:-$LANG}
-ac_config_headers="$ac_config_headers config.h"
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -1888,25 +3112,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_AWK="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
- { echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -1921,10 +3145,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1934,25 +3158,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -1961,10 +3185,10 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1974,25 +3198,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2000,12 +3224,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2018,10 +3238,10 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2031,25 +3251,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -2058,10 +3278,10 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2072,18 +3292,18 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
@@ -2102,11 +3322,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -2117,10 +3337,10 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2130,25 +3350,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -2161,10 +3381,10 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2174,25 +3394,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -2204,12 +3424,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2219,299 +3435,42 @@ fi
fi
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort. b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions. Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link_default") 2>&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
fi
-fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
-
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -2525,54 +3484,34 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_compiler_gnu=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -2583,34 +3522,11 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -2621,35 +3537,12 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_compile "$LINENO"; then :
- ac_c_werror_flag=$ac_save_c_werror_flag
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -2660,42 +3553,18 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
@@ -2711,18 +3580,14 @@ else
CFLAGS=
fi
fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_cv_prog_cc_c89=no
ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdarg.h>
#include <stdio.h>
@@ -2779,31 +3644,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_c89=$ac_arg
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
-
rm -f core conftest.err conftest.$ac_objext
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
@@ -2814,17 +3657,19 @@ fi
# AC_CACHE_VAL
case "x$ac_cv_prog_cc_c89" in
x)
- { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
xno)
- { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
*)
CC="$CC $ac_cv_prog_cc_c89"
- { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -2837,15 +3682,15 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ if test "${ac_cv_prog_CPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
# Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -2859,11 +3704,7 @@ do
# <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __STDC__
# include <limits.h>
@@ -2872,76 +3713,34 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
+else
# Broken: fails on valid input.
continue
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
# Broken: success on invalid input.
continue
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
# Passes both tests.
ac_preproc_ok=:
break
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
break
fi
@@ -2953,8 +3752,8 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
@@ -2964,11 +3763,7 @@ do
# <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __STDC__
# include <limits.h>
@@ -2977,83 +3772,40 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
+else
# Broken: fails on valid input.
continue
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
# Broken: success on invalid input.
continue
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
# Passes both tests.
ac_preproc_ok=:
break
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
fi
ac_ext=c
@@ -3079,9 +3831,7 @@ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
fi
done
if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
fi
# These three variables are undocumented and unsupported,
@@ -3106,22 +3856,23 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
/etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
/usr/ucb/* ) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
@@ -3139,17 +3890,29 @@ case $as_dir/ in
# program-specific install script used by HP pwplus--don't use.
:
else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
fi
fi
done
done
;;
esac
-done
+
+ done
IFS=$as_save_IFS
+rm -rf conftest.one conftest.two conftest.dir
fi
if test "${ac_cv_path_install+set}" = set; then
@@ -3162,8 +3925,8 @@ fi
INSTALL=$ac_install_sh
fi
fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -3173,29 +3936,30 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
fi
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
else
cat >conftest.make <<\_ACEOF
SHELL = /bin/sh
all:
@echo '@@@%%%=$(MAKE)=@@@%%%'
_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
case `${MAKE-make} -f conftest.make 2>/dev/null` in
*@@@%%%=?*=@@@%%%*)
eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3205,22 +3969,22 @@ esac
rm -f conftest.make
fi
if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
SET_MAKE=
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3230,25 +3994,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3257,10 +4021,10 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -3270,25 +4034,25 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_RANLIB" = x; then
@@ -3296,12 +4060,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
RANLIB=$ac_ct_RANLIB
@@ -3314,10 +4074,10 @@ for ac_prog in perl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_PERL+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PERL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case $PERL in
[\\/]* | ?:[\\/]*)
@@ -3329,14 +4089,14 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
;;
@@ -3344,11 +4104,11 @@ esac
fi
PERL=$ac_cv_path_PERL
if test -n "$PERL"; then
- { echo "$as_me:$LINENO: result: $PERL" >&5
-echo "${ECHO_T}$PERL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3360,10 +4120,10 @@ for ac_prog in nkf
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_NKF+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_NKF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case $NKF in
[\\/]* | ?:[\\/]*)
@@ -3375,14 +4135,14 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_NKF="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
;;
@@ -3390,11 +4150,11 @@ esac
fi
NKF=$ac_cv_path_NKF
if test -n "$NKF"; then
- { echo "$as_me:$LINENO: result: $NKF" >&5
-echo "${ECHO_T}$NKF" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NKF" >&5
+$as_echo "$NKF" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3406,10 +4166,10 @@ for ac_prog in man
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MAN+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MAN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case $MAN in
[\\/]* | ?:[\\/]*)
@@ -3421,14 +4181,14 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_MAN="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
;;
@@ -3436,11 +4196,11 @@ esac
fi
MAN=$ac_cv_path_MAN
if test -n "$MAN"; then
- { echo "$as_me:$LINENO: result: $MAN" >&5
-echo "${ECHO_T}$MAN" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAN" >&5
+$as_echo "$MAN" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3450,35 +4210,27 @@ test -n "$MAN" || MAN="/usr/bin/man"
# Make sure we can run config.sub.
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
test "x$ac_build_alias" = x &&
- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
esac
build=$ac_cv_build
ac_save_IFS=$IFS; IFS='-'
@@ -3494,28 +4246,24 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
esac
host=$ac_cv_host
ac_save_IFS=$IFS; IFS='-'
@@ -3555,17 +4303,17 @@ _ACEOF
WCTARGET=""; WCCFLAGS=""; wcinclude=""; wclib=""
-{ echo "$as_me:$LINENO: checking if m17n support is enabled" >&5
-echo $ECHO_N "checking if m17n support is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if m17n support is enabled" >&5
+$as_echo_n "checking if m17n support is enabled... " >&6; }
# Check whether --enable-m17n was given.
-if test "${enable_m17n+set}" = set; then
+if test "${enable_m17n+set}" = set; then :
enableval=$enable_m17n;
else
enable_m17n="yes"
fi
-{ echo "$as_me:$LINENO: result: $enable_m17n" >&5
-echo "${ECHO_T}$enable_m17n" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_m17n" >&5
+$as_echo "$enable_m17n" >&6; }
if test x"$enable_m17n" = xno; then
w3m_lang="en"
WCTARGET=""
@@ -3576,25 +4324,23 @@ if test x"$enable_m17n" = xno; then
system_charset='WC_CES_US_ASCII'
document_charset='WC_CES_US_ASCII'
else
- cat >>confdefs.h <<\_ACEOF
-#define USE_M17N 1
-_ACEOF
+ $as_echo "#define USE_M17N 1" >>confdefs.h
WCTARGET="libwc/libwc.a"
WCCFLAGS='-I$(srcdir) -I$(srcdir)/..'
wcinclude='-I$(srcdir)/libwc'
wclib="-L./libwc -lwc"
- { echo "$as_me:$LINENO: checking if unicode support is enabled" >&5
-echo $ECHO_N "checking if unicode support is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if unicode support is enabled" >&5
+$as_echo_n "checking if unicode support is enabled... " >&6; }
# Check whether --enable-unicode was given.
-if test "${enable_unicode+set}" = set; then
+if test "${enable_unicode+set}" = set; then :
enableval=$enable_unicode;
else
enable_unicode="yes"
fi
- { echo "$as_me:$LINENO: result: $enable_unicode" >&5
-echo "${ECHO_T}$enable_unicode" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_unicode" >&5
+$as_echo "$enable_unicode" >&6; }
if test x"$enable_m17n" = xyes; then
charset=US-ASCII
else
@@ -3605,15 +4351,13 @@ echo "${ECHO_T}$enable_unicode" >&6; }
if test x"$charset" = xUS-ASCII; then
charset=UTF-8
fi
- cat >>confdefs.h <<\_ACEOF
-#define USE_UNICODE 1
-_ACEOF
+ $as_echo "#define USE_UNICODE 1" >>confdefs.h
fi
- { echo "$as_me:$LINENO: checking if message l10n" >&5
-echo $ECHO_N "checking if message l10n... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if message l10n" >&5
+$as_echo_n "checking if message l10n... " >&6; }
# Check whether --enable-messagel10n was given.
-if test "${enable_messagel10n+set}" = set; then
+if test "${enable_messagel10n+set}" = set; then :
enableval=$enable_messagel10n;
else
enable_messagel10n="no"
@@ -3622,25 +4366,25 @@ fi
if test x$enable_messagel10n = xyes; then
enable_messagel10n="ja";
fi
- { echo "$as_me:$LINENO: result: $enable_messagel10n" >&5
-echo "${ECHO_T}$enable_messagel10n" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_messagel10n" >&5
+$as_echo "$enable_messagel10n" >&6; }
if test x$enable_messagel10n = xno; then
:
else
POSUBST="\$(top_srcdir)/posubst"
POLANG="$enable_messagel10n"
fi
- { echo "$as_me:$LINENO: checking if japanese support is enabled" >&5
-echo $ECHO_N "checking if japanese support is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if japanese support is enabled" >&5
+$as_echo_n "checking if japanese support is enabled... " >&6; }
# Check whether --enable-japanese was given.
-if test "${enable_japanese+set}" = set; then
+if test "${enable_japanese+set}" = set; then :
enableval=$enable_japanese;
else
enable_japanese="no"
fi
- { echo "$as_me:$LINENO: result: $enable_japanese" >&5
-echo "${ECHO_T}$enable_japanese" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_japanese" >&5
+$as_echo "$enable_japanese" >&6; }
if test x"$enable_japanese" = xno; then
w3m_lang="en"
else
@@ -3653,16 +4397,16 @@ echo "${ECHO_T}$enable_japanese" >&6; }
esac
fi
display_charset=$charset
- { echo "$as_me:$LINENO: checking which charset is used for display" >&5
-echo $ECHO_N "checking which charset is used for display... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which charset is used for display" >&5
+$as_echo_n "checking which charset is used for display... " >&6; }
# Check whether --with-charset was given.
-if test "${with_charset+set}" = set; then
+if test "${with_charset+set}" = set; then :
withval=$with_charset; test x"with_charset" = xyes || display_charset="$with_charset"
fi
- { echo "$as_me:$LINENO: result: $display_charset" >&5
-echo "${ECHO_T}$display_charset" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $display_charset" >&5
+$as_echo "$display_charset" >&6; }
display_charset=`awk '$1 == "'$display_charset'" {print $2}' $srcdir/charset-list`
case "$display_charset" in
WC_CES_ISO_2022_JP*)
@@ -3722,35 +4466,73 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
if test x$enable_messagel10n = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- case "$ac_aux_dir" in
- /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
- *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
- esac
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
- { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
# Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then
+if test "${enable_nls+set}" = set; then :
enableval=$enable_nls; USE_NLS=$enableval
else
USE_NLS=yes
fi
- { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+ GETTEXT_MACRO_VERSION=0.18
+
+
# Prepare PATH_SEPARATOR.
@@ -3783,10 +4565,10 @@ rm -f conf$$.file
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MSGFMT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case "$MSGFMT" in
[\\/]* | ?:[\\/]*)
@@ -3799,7 +4581,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
(if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
break 2
@@ -3814,19 +4597,19 @@ esac
fi
MSGFMT="$ac_cv_path_MSGFMT"
if test "$MSGFMT" != ":"; then
- { echo "$as_me:$LINENO: result: $MSGFMT" >&5
-echo "${ECHO_T}$MSGFMT" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_GMSGFMT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case $GMSGFMT in
[\\/]* | ?:[\\/]*)
@@ -3838,14 +4621,14 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
@@ -3854,15 +4637,26 @@ esac
fi
GMSGFMT=$ac_cv_path_GMSGFMT
if test -n "$GMSGFMT"; then
- { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
# Prepare PATH_SEPARATOR.
# The user is always right.
@@ -3894,10 +4688,10 @@ rm -f conf$$.file
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_XGETTEXT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case "$XGETTEXT" in
[\\/]* | ?:[\\/]*)
@@ -3910,7 +4704,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
(if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
break 2
@@ -3925,15 +4720,21 @@ esac
fi
XGETTEXT="$ac_cv_path_XGETTEXT"
if test "$XGETTEXT" != ":"; then
- { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
rm -f messages.po
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
# Prepare PATH_SEPARATOR.
# The user is always right.
@@ -3965,10 +4766,10 @@ rm -f conf$$.file
# Extract the first word of "msgmerge", so it can be a program name with args.
set dummy msgmerge; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MSGMERGE+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case "$MSGMERGE" in
[\\/]* | ?:[\\/]*)
@@ -3981,7 +4782,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
break 2
fi
@@ -3995,39 +4797,21 @@ esac
fi
MSGMERGE="$ac_cv_path_MSGMERGE"
if test "$MSGMERGE" != ":"; then
- { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
-echo "${ECHO_T}$MSGMERGE" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
- if test "$GMSGFMT" != ":"; then
- if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
- (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
- { echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
-echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
- GMSGFMT=":"
- fi
- fi
+ test -n "$localedir" || localedir='${datadir}/locale'
- if test "$XGETTEXT" != ":"; then
- if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- { echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
-echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; }
- XGETTEXT=":"
- fi
- rm -f messages.po
- fi
- ac_config_commands="$ac_config_commands default-1"
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
@@ -4048,7 +4832,7 @@ echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; }
# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
+if test "${with_gnu_ld+set}" = set; then :
withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
@@ -4070,8 +4854,8 @@ fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -4086,7 +4870,7 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -4100,14 +4884,14 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
;;
esac
elif test "$with_gnu_ld" = yes; then
- { echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
else
- { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
fi
-if test "${acl_cv_path_LD+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "${acl_cv_path_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -z "$LD"; then
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
@@ -4120,9 +4904,9 @@ else
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
*GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
+ test "$with_gnu_ld" != no && break ;;
*)
- test "$with_gnu_ld" != yes && break ;;
+ test "$with_gnu_ld" != yes && break ;;
esac
fi
done
@@ -4134,19 +4918,17 @@ fi
LD="$acl_cv_path_LD"
if test -n "$LD"; then
- { echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
-if test "${acl_cv_prog_gnu_ld+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
@@ -4156,16 +4938,17 @@ case `$LD -v 2>&1 </dev/null` in
acl_cv_prog_gnu_ld=no ;;
esac
fi
-{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$acl_cv_prog_gnu_ld
- { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
-echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
-if test "${acl_cv_rpath+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
@@ -4175,17 +4958,19 @@ else
acl_cv_rpath=done
fi
-{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
-echo "${ECHO_T}$acl_cv_rpath" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
# Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then
+if test "${enable_rpath+set}" = set; then :
enableval=$enable_rpath; :
else
enable_rpath=yes
@@ -4194,6 +4979,206 @@ fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if test "${gl_cv_solaris_64bit+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+ gl_cv_solaris_64bit=yes
+else
+ gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
@@ -4213,7 +5198,7 @@ fi
# Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then
+if test "${with_libiconv_prefix+set}" = set; then :
withval=$with_libiconv_prefix;
if test "X$withval" = "Xno"; then
use_additional=no
@@ -4233,7 +5218,11 @@ if test "${with_libiconv_prefix+set}" = set; then
else
additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
fi
fi
@@ -4242,6 +5231,8 @@ fi
LIBICONV=
LTLIBICONV=
INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
rpathdirs=
ltrpathdirs=
names_already_handled=
@@ -4275,22 +5266,52 @@ fi
found_la=
found_so=
found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIBICONV; do
@@ -4306,21 +5327,44 @@ fi
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
;;
esac
if test "X$found_dir" != "X"; then
@@ -4331,7 +5375,9 @@ fi
if test "X$found_dir" != "X"; then
LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
haveit=
@@ -4344,10 +5390,10 @@ fi
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
- if test "$hardcode_direct" = yes; then
+ if test "$acl_hardcode_direct" = yes; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
haveit=
for x in $rpathdirs; do
@@ -4379,7 +5425,7 @@ fi
if test -z "$haveit"; then
LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
fi
- if test "$hardcode_minus_L" != no; then
+ if test "$acl_hardcode_minus_L" != no; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
@@ -4396,8 +5442,18 @@ fi
fi
additional_includedir=
case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
additional_includedir="$basedir/include"
;;
esac
@@ -4407,7 +5463,7 @@ fi
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -4446,12 +5502,14 @@ fi
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/lib"; then
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -4548,21 +5606,21 @@ fi
done
done
if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
alldirs=
for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
acl_save_libdir="$libdir"
libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
else
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
done
@@ -4592,17 +5650,92 @@ fi
- { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
- # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then
- enableval=$enable_nls; USE_NLS=$enableval
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- USE_NLS=yes
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ gt_cv_func_CFPreferencesCopyAppValue=no
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
- { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
@@ -4611,70 +5744,67 @@ echo "${ECHO_T}$USE_NLS" >&6; }
LTLIBINTL=
POSUB=
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
if test "$USE_NLS" = "yes"; then
gt_use_preinstalled_gnugettext=no
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
-
-
-
- { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
-echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
-if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval "test \"\${$gt_func_gnugettext_libc+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern int *_nl_domain_bindings;
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- gt_cv_func_gnugettext1_libc=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$gt_func_gnugettext_libc=yes"
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- gt_cv_func_gnugettext1_libc=no
+ eval "$gt_func_gnugettext_libc=no"
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6; }
+eval ac_res=\$$gt_func_gnugettext_libc
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
- if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
@@ -4705,19 +5835,15 @@ echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6; }
done
- { echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
-if test "${am_cv_func_iconv+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
#include <iconv.h>
@@ -4731,42 +5857,15 @@ iconv_t cd = iconv_open("","");
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
am_cv_func_iconv=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
if test "$am_cv_func_iconv" != yes; then
am_save_LIBS="$LIBS"
LIBS="$LIBS $LIBICONV"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
#include <iconv.h>
@@ -4780,53 +5879,145 @@ iconv_t cd = iconv_open("","");
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if test "${am_cv_func_iconv_works+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes; then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ am_cv_func_iconv_works=yes
+else
+ am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
LIBS="$am_save_LIBS"
- fi
fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6; }
- if test "$am_cv_func_iconv" = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ICONV 1
-_ACEOF
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
fi
if test "$am_cv_lib_iconv" = yes; then
- { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
else
CPPFLAGS="$am_save_CPPFLAGS"
LIBICONV=
@@ -4838,6 +6029,11 @@ echo "${ECHO_T}$LIBICONV" >&6; }
+
+
+
+
+
use_additional=yes
acl_save_prefix="$prefix"
@@ -4853,7 +6049,7 @@ echo "${ECHO_T}$LIBICONV" >&6; }
# Check whether --with-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then
+if test "${with_libintl_prefix+set}" = set; then :
withval=$with_libintl_prefix;
if test "X$withval" = "Xno"; then
use_additional=no
@@ -4873,7 +6069,11 @@ if test "${with_libintl_prefix+set}" = set; then
else
additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
fi
fi
@@ -4882,6 +6082,8 @@ fi
LIBINTL=
LTLIBINTL=
INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
rpathdirs=
ltrpathdirs=
names_already_handled=
@@ -4915,22 +6117,52 @@ fi
found_la=
found_so=
found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIBINTL; do
@@ -4946,21 +6178,44 @@ fi
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
;;
esac
if test "X$found_dir" != "X"; then
@@ -4971,7 +6226,9 @@ fi
if test "X$found_dir" != "X"; then
LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
haveit=
@@ -4984,10 +6241,10 @@ fi
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
- if test "$hardcode_direct" = yes; then
+ if test "$acl_hardcode_direct" = yes; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
haveit=
for x in $rpathdirs; do
@@ -5019,7 +6276,7 @@ fi
if test -z "$haveit"; then
LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
fi
- if test "$hardcode_minus_L" != no; then
+ if test "$acl_hardcode_minus_L" != no; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
@@ -5036,8 +6293,18 @@ fi
fi
additional_includedir=
case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
additional_includedir="$basedir/include"
;;
esac
@@ -5047,7 +6314,7 @@ fi
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -5086,12 +6353,14 @@ fi
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/lib"; then
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -5188,21 +6457,21 @@ fi
done
done
if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
alldirs=
for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
acl_save_libdir="$libdir"
libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
else
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
done
@@ -5214,130 +6483,86 @@ fi
done
fi
- { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
-echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
-if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval "test \"\${$gt_func_gnugettext_libintl+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
else
gt_save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $INCINTL"
gt_save_LIBS="$LIBS"
LIBS="$LIBS $LIBINTL"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
-const char *_nl_expand_alias ();
+const char *_nl_expand_alias (const char *);
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- gt_cv_func_gnugettext1_libintl=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$gt_func_gnugettext_libintl=yes"
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- gt_cv_func_gnugettext1_libintl=no
+ eval "$gt_func_gnugettext_libintl=no"
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
LIBS="$LIBS $LIBICONV"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
-const char *_nl_expand_alias ();
+const char *_nl_expand_alias (const char *);
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
LIBINTL="$LIBINTL $LIBICONV"
LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- gt_cv_func_gnugettext1_libintl=yes
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+ eval "$gt_func_gnugettext_libintl=yes"
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
CPPFLAGS="$gt_save_CPPFLAGS"
LIBS="$gt_save_LIBS"
fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6; }
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
fi
- if test "$gt_cv_func_gnugettext1_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
&& test "$PACKAGE" != gettext-runtime \
&& test "$PACKAGE" != gettext-tools; }; then
gt_use_preinstalled_gnugettext=yes
@@ -5349,27 +6574,33 @@ echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6; }
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
if test "$gt_use_preinstalled_gnugettext" = "yes" \
|| test "$nls_cv_use_gnu_gettext" = "yes"; then
-cat >>confdefs.h <<\_ACEOF
-#define ENABLE_NLS 1
-_ACEOF
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
else
USE_NLS=no
fi
fi
- { echo "$as_me:$LINENO: checking whether to use NLS" >&5
-echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
if test "$USE_NLS" = "yes"; then
- { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
-echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
gt_source="external libintl"
else
gt_source="libc"
@@ -5377,18 +6608,18 @@ echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
else
gt_source="included intl directory"
fi
- { echo "$as_me:$LINENO: result: $gt_source" >&5
-echo "${ECHO_T}$gt_source" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
fi
if test "$USE_NLS" = "yes"; then
if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
- { echo "$as_me:$LINENO: checking how to link with libintl" >&5
-echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $LIBINTL" >&5
-echo "${ECHO_T}$LIBINTL" >&6; }
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
for element in $INCINTL; do
haveit=
@@ -5415,14 +6646,10 @@ echo "${ECHO_T}$LIBINTL" >&6; }
fi
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DCGETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
fi
@@ -5448,53 +6675,49 @@ fi
-{ echo "$as_me:$LINENO: checking if color escape sequence for kterm/pxvt is enabled" >&5
-echo $ECHO_N "checking if color escape sequence for kterm/pxvt is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if color escape sequence for kterm/pxvt is enabled" >&5
+$as_echo_n "checking if color escape sequence for kterm/pxvt is enabled... " >&6; }
# Check whether --enable-color was given.
-if test "${enable_color+set}" = set; then
+if test "${enable_color+set}" = set; then :
enableval=$enable_color;
else
enable_color="yes"
fi
-test x"$enable_color" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_COLOR 1
-_ACEOF
+test x"$enable_color" = xyes && $as_echo "#define USE_COLOR 1" >>confdefs.h
-{ echo "$as_me:$LINENO: result: $enable_color" >&5
-echo "${ECHO_T}$enable_color" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_color" >&5
+$as_echo "$enable_color" >&6; }
-{ echo "$as_me:$LINENO: checking if ansi color escape sequence support is enabled" >&5
-echo $ECHO_N "checking if ansi color escape sequence support is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ansi color escape sequence support is enabled" >&5
+$as_echo_n "checking if ansi color escape sequence support is enabled... " >&6; }
# Check whether --enable-ansi_color was given.
-if test "${enable_ansi_color+set}" = set; then
+if test "${enable_ansi_color+set}" = set; then :
enableval=$enable_ansi_color;
else
enable_ansi_color="$enable_color"
fi
- test x"$enable_ansi_color" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_ANSI_COLOR 1
-_ACEOF
+ test x"$enable_ansi_color" = xyes && $as_echo "#define USE_ANSI_COLOR 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_ansi_color" >&5
-echo "${ECHO_T}$enable_ansi_color" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ansi_color" >&5
+$as_echo "$enable_ansi_color" >&6; }
-{ echo "$as_me:$LINENO: checking if background color support is enabled" >&5
-echo $ECHO_N "checking if background color support is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if background color support is enabled" >&5
+$as_echo_n "checking if background color support is enabled... " >&6; }
# Check whether --enable-bgcolor was given.
-if test "${enable_bgcolor+set}" = set; then
+if test "${enable_bgcolor+set}" = set; then :
enableval=$enable_bgcolor;
else
enable_bgcolor="$enable_color"
fi
- test x"$enable_bgcolor" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_BG_COLOR 1
-_ACEOF
+ test x"$enable_bgcolor" = xyes && $as_echo "#define USE_BG_COLOR 1" >>confdefs.h
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bgcolor" >&5
+$as_echo "$enable_bgcolor" >&6; }
+
-{ echo "$as_me:$LINENO: result: $enable_bgcolor" >&5
-echo "${ECHO_T}$enable_bgcolor" >&6; }
@@ -5502,9 +6725,9 @@ echo "${ECHO_T}$enable_bgcolor" >&6; }
INSTALL_W3MIMGDISPLAY='${INSTALL_PROGRAM}'
- cat >>confdefs.h <<\_ACEOF
-#define INSTALL_W3MIMGDISPLAY $INSTALL_W3MIMGDISPLAY
-_ACEOF
+ $as_echo "#define INSTALL_W3MIMGDISPLAY \$INSTALL_W3MIMGDISPLAY" >>confdefs.h
+
+
@@ -5516,17 +6739,17 @@ _ACEOF
- { echo "$as_me:$LINENO: checking if image is enabled" >&5
-echo $ECHO_N "checking if image is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if image is enabled" >&5
+$as_echo_n "checking if image is enabled... " >&6; }
# Check whether --enable-image was given.
-if test "${enable_image+set}" = set; then
+if test "${enable_image+set}" = set; then :
enableval=$enable_image;
else
enable_image="yes"
fi
- { echo "$as_me:$LINENO: result: $enable_image" >&5
-echo "${ECHO_T}$enable_image" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_image" >&5
+$as_echo "$enable_image" >&6; }
if test x"$enable_image" != xno; then
IMGOBJS=w3mimg.o
if test x"$enable_image" = xyes; then
@@ -5536,36 +6759,34 @@ echo "${ECHO_T}$enable_image" >&6; }
if test -c /dev/fb0; then
enable_image=x11,fb
fi;;
+ CYGWIN*)
+ enable_image=x11,win;;
esac
fi
save_ifs="$IFS"; IFS=",";
- for img in $enable_image; do
+ set x $enable_image; shift
+ IFS="$save_ifs"
+ for img in "$@"; do
case $img in
x11) x11=yes;;
fb) fb=yes;;
fb+s) fb=yes
- cat >>confdefs.h <<\_ACEOF
-#define W3MIMGDISPLAY_SETUID 1
-_ACEOF
+ $as_echo "#define W3MIMGDISPLAY_SETUID 1" >>confdefs.h
INSTALL_W3MIMGDISPLAY='${INSTALL} -o root -m 4755 -s'
- cat >>confdefs.h <<\_ACEOF
-#define INSTALL_W3MIMGDISPLAY $INSTALL_W3MIMGDISPLAY
-_ACEOF
+ $as_echo "#define INSTALL_W3MIMGDISPLAY \$INSTALL_W3MIMGDISPLAY" >>confdefs.h
;;
+ win) win=yes;;
esac
done
- IFS="$save_ifs"
enable_image=yes
- cat >>confdefs.h <<\_ACEOF
-#define USE_IMAGE 1
-_ACEOF
+ $as_echo "#define USE_IMAGE 1" >>confdefs.h
- { echo "$as_me:$LINENO: checking image library" >&5
-echo $ECHO_N "checking image library... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking image library" >&5
+$as_echo_n "checking image library... " >&6; }
# Check whether --with-imagelib was given.
-if test "${with_imagelib+set}" = set; then
+if test "${with_imagelib+set}" = set; then :
withval=$with_imagelib;
else
with_imagelib="yes"
@@ -5574,8 +6795,8 @@ fi
if test x"$with_imagelib" = xyes; then
with_imagelib="gtk2 gdk-pixbuf imlib imlib2"
fi
- { echo "$as_me:$LINENO: result: $with_imagelib" >&5
-echo "${ECHO_T}$with_imagelib" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_imagelib" >&5
+$as_echo "$with_imagelib" >&6; }
with_imlib=no
with_imlib2=no
with_gdkpixbuf=no
@@ -5608,24 +6829,25 @@ echo "${ECHO_T}$with_imagelib" >&6; }
esac
done
IMGTARGETS=""
+ IMGLINK='$(CC)'
if test x"$with_gtk2" = xyes; then
version="`$PKG_CONFIG --modversion gdk-pixbuf-2.0 2>/dev/null`"
if test x"$version" != x; then
- { echo "$as_me:$LINENO: checking GdkPixbuf version" >&5
-echo $ECHO_N "checking GdkPixbuf version... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $version" >&5
-echo "${ECHO_T}$version" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking GdkPixbuf version" >&5
+$as_echo_n "checking GdkPixbuf version... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version" >&5
+$as_echo "$version" >&6; }
set -- `echo "$version" | sed 's/[^0-9]/ /g'`
if test "$1" -ne "2" -o "$2" -lt "0" || test "$2" -eq "0" -a "$3" -lt "0"; then
- { echo "$as_me:$LINENO: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 2.0.0)" >&5
-echo "$as_me: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 2.0.0)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 2.0.0)" >&5
+$as_echo "$as_me: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 2.0.0)" >&2;}
have_gdkpixbuf="no"; have_gtk2="no"
else
have_gdkpixbuf="yes"; have_gtk2="yes"
fi
else
- { echo "$as_me:$LINENO: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 2.0.0)" >&5
-echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 2.0.0)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 2.0.0)" >&5
+$as_echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 2.0.0)" >&2;}
have_gdkpixbuf="no"; have_gtk2="no"
fi
fi
@@ -5633,21 +6855,21 @@ echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >
if test x"$have_gdkpixbuf" != xyes; then
version="`$GDKPIXBUF_CONFIG --version 2>/dev/null`"
if test x"$version" != x; then
- { echo "$as_me:$LINENO: checking GdkPixbuf version" >&5
-echo $ECHO_N "checking GdkPixbuf version... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $version" >&5
-echo "${ECHO_T}$version" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking GdkPixbuf version" >&5
+$as_echo_n "checking GdkPixbuf version... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version" >&5
+$as_echo "$version" >&6; }
set -- `echo "$version" | sed 's/[^0-9]/ /g'`
if test "$1" -ne "0" -o "$2" -lt "16" || test "$2" -eq "16" -a "$3" -lt "0"; then
- { echo "$as_me:$LINENO: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 0.16.0)" >&5
-echo "$as_me: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 0.16.0)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 0.16.0)" >&5
+$as_echo "$as_me: WARNING: GdkPixbuf is too old. Install GdkPixbuf (version >= 0.16.0)" >&2;}
have_gdkpixbuf="no"
else
have_gdkpixbuf="yes"
fi
else
- { echo "$as_me:$LINENO: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 0.16.0)" >&5
-echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 0.16.0)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 0.16.0)" >&5
+$as_echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >= 0.16.0)" >&2;}
have_gdkpixbuf="no"
fi
fi
@@ -5655,207 +6877,176 @@ echo "$as_me: WARNING: GdkPixbuf is not installed. Install GdkPixbuf (version >
if test x"$with_imlib" = xyes; then
version="`$IMLIB_CONFIG --version 2>/dev/null`"
if test x"$version" != x; then
- { echo "$as_me:$LINENO: checking Imlib version" >&5
-echo $ECHO_N "checking Imlib version... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $version" >&5
-echo "${ECHO_T}$version" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Imlib version" >&5
+$as_echo_n "checking Imlib version... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version" >&5
+$as_echo "$version" >&6; }
set -- `echo "$version" | sed 's/[^0-9]/ /g'`
if test "$1" -ne "1" -o "$2" -lt "9" || test "$2" -eq "9" -a "$3" -lt "8"; then
- { echo "$as_me:$LINENO: WARNING: Imlib is too old. Install Imlib (version >= 1.9.8)" >&5
-echo "$as_me: WARNING: Imlib is too old. Install Imlib (version >= 1.9.8)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Imlib is too old. Install Imlib (version >= 1.9.8)" >&5
+$as_echo "$as_me: WARNING: Imlib is too old. Install Imlib (version >= 1.9.8)" >&2;}
have_imlib="no"
else
have_imlib="yes"
fi
else
- { echo "$as_me:$LINENO: WARNING: Imlib is not installed. Install Imlib (version >= 1.9.8)" >&5
-echo "$as_me: WARNING: Imlib is not installed. Install Imlib (version >= 1.9.8)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Imlib is not installed. Install Imlib (version >= 1.9.8)" >&5
+$as_echo "$as_me: WARNING: Imlib is not installed. Install Imlib (version >= 1.9.8)" >&2;}
have_imlib="no"
fi
fi
if test x"$with_imlib2" = xyes; then
version="`$IMLIB2_CONFIG --version 2>/dev/null`"
if test x"$version" != x; then
- { echo "$as_me:$LINENO: checking Imlib2 version" >&5
-echo $ECHO_N "checking Imlib2 version... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $version" >&5
-echo "${ECHO_T}$version" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking Imlib2 version" >&5
+$as_echo_n "checking Imlib2 version... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version" >&5
+$as_echo "$version" >&6; }
set -- `echo "$version" | sed 's/[^0-9]/ /g'`
if test "$1" -ne "1" -o "$2" -lt "0" || test "$2" -eq "0" -a "$3" -lt "5"; then
- { echo "$as_me:$LINENO: WARNING: Imlib2 is too old. Install Imlib2 (version >= 1.0.5)" >&5
-echo "$as_me: WARNING: Imlib2 is too old. Install Imlib2 (version >= 1.0.5)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Imlib2 is too old. Install Imlib2 (version >= 1.0.5)" >&5
+$as_echo "$as_me: WARNING: Imlib2 is too old. Install Imlib2 (version >= 1.0.5)" >&2;}
have_imlib2="no"
else
have_imlib2="yes"
fi
else
- { echo "$as_me:$LINENO: WARNING: Imlib2 is not installed. Install Imlib2 (version >= 1.0.5)" >&5
-echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= 1.0.5)" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Imlib2 is not installed. Install Imlib2 (version >= 1.0.5)" >&5
+$as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >= 1.0.5)" >&2;}
have_imlib2="no"
fi
fi
if test x"$x11" = xyes; then
if test x"$have_gtk2" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_X11 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
IMGTARGETS="x11"
- cat >>confdefs.h <<\_ACEOF
-#define USE_GDKPIXBUF 1
-_ACEOF
+ $as_echo "#define USE_GDKPIXBUF 1" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define USE_GTK2 1
-_ACEOF
+ $as_echo "#define USE_GTK2 1" >>confdefs.h
IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_X11 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
IMGTARGETS="x11"
- cat >>confdefs.h <<\_ACEOF
-#define USE_GDKPIXBUF 1
-_ACEOF
+ $as_echo "#define USE_GDKPIXBUF 1" >>confdefs.h
IMGX11CFLAGS="`${GDKPIXBUF_CONFIG} --cflags`"
IMGX11LDFLAGS="`${GDKPIXBUF_CONFIG} --libs` -lgdk_pixbuf_xlib"
elif test x"$have_imlib" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_X11 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
IMGTARGETS="x11"
- cat >>confdefs.h <<\_ACEOF
-#define USE_IMLIB 1
-_ACEOF
+ $as_echo "#define USE_IMLIB 1" >>confdefs.h
IMGX11CFLAGS="`${IMLIB_CONFIG} --cflags`"
IMGX11LDFLAGS="`${IMLIB_CONFIG} --libs`"
IMGTARGETS="x11"
elif test x"$have_imlib2" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_X11 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
IMGTARGETS="x11"
- cat >>confdefs.h <<\_ACEOF
-#define USE_IMLIB2 1
-_ACEOF
+ $as_echo "#define USE_IMLIB2 1" >>confdefs.h
IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
else
- { echo "$as_me:$LINENO: WARNING: unable to build w3mimgdisplay with X11 support" >&5
-echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5
+$as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
fi
fi
if test x"$fb" = xyes; then
if test x"$have_gtk2" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_FB 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGTARGETS="${IMGTARGETS} fb"
- cat >>confdefs.h <<\_ACEOF
-#define USE_GDKPIXBUF 1
-_ACEOF
+ $as_echo "#define USE_GDKPIXBUF 1" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define USE_GTK2 1
-_ACEOF
+ $as_echo "#define USE_GTK2 1" >>confdefs.h
IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_FB 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGTARGETS="${IMGTARGETS} fb"
- cat >>confdefs.h <<\_ACEOF
-#define USE_GDKPIXBUF 1
-_ACEOF
+ $as_echo "#define USE_GDKPIXBUF 1" >>confdefs.h
IMGFBCFLAGS="`${GDKPIXBUF_CONFIG} --cflags`"
IMGFBLDFLAGS="`${GDKPIXBUF_CONFIG} --libs`"
elif test x"$have_imlib2" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_W3MIMG_FB 1
-_ACEOF
+ $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGTARGETS="${IMGTARGETS} fb"
- cat >>confdefs.h <<\_ACEOF
-#define USE_IMLIB2 1
-_ACEOF
+ $as_echo "#define USE_IMLIB2 1" >>confdefs.h
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
else
- { echo "$as_me:$LINENO: WARNING: unable to build w3mimgdisplay with FB support" >&5
-echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5
+$as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
fi
fi
- cat >>confdefs.h <<\_ACEOF
-#define IMGTARGETS "$IMGTARGETS"
-_ACEOF
+ if test x"$win" = xyes; then
+ $as_echo "#define USE_W3MIMG_WIN 1" >>confdefs.h
+
+ IMGOBJS="$IMGOBJS win/win_w3mimg.o"
+ IMGTARGETS="${IMGTARGETS} win"
+ IMGWINCFLAGS="-I/usr/include/w32api"
+ IMGWINLDFLAGS="-lgdiplus -lgdi32 -luser32"
+ IMGLINK='$(CXX)'
+ fi
+ $as_echo "#define IMGTARGETS \"\$IMGTARGETS\"" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define IMGOBJS "$IMGOBJS"
-_ACEOF
+ $as_echo "#define IMGOBJS \"\$IMGOBJS\"" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define IMGX11CFLAGS "$IMGX11CFLAGS"
-_ACEOF
+ $as_echo "#define IMGX11CFLAGS \"\$IMGX11CFLAGS\"" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define IMGX11LDFLAGS "$IMGX11LDFLAGS"
-_ACEOF
+ $as_echo "#define IMGX11LDFLAGS \"\$IMGX11LDFLAGS\"" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define IMGFBCFLAGS "$IMGFBCFLAGS"
-_ACEOF
+ $as_echo "#define IMGFBCFLAGS \"\$IMGFBCFLAGS\"" >>confdefs.h
- cat >>confdefs.h <<\_ACEOF
-#define IMGFBLDFLAGS "$IMGLDFLAGS"
-_ACEOF
+ $as_echo "#define IMGFBLDFLAGS \"\$IMGFBLDFLAGS\"" >>confdefs.h
+
+ $as_echo "#define IMGLINK \"\$IMGLINK\"" >>confdefs.h
+
+ $as_echo "#define IMGWINCFLAGS \"\$IMGWINCFLAGS\"" >>confdefs.h
+
+ $as_echo "#define IMGWINLDFLAGS \"\$IMGWINLDFLAGS\"" >>confdefs.h
fi
if test x"$enable_image" != xno; then
AUXBIN_TARGETS="$AUXBIN_TARGETS w3mimgdisplay\$(EXT)"
- { echo "$as_me:$LINENO: checking if xface is enabled" >&5
-echo $ECHO_N "checking if xface is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if xface is enabled" >&5
+$as_echo_n "checking if xface is enabled... " >&6; }
# Check whether --enable-xface was given.
-if test "${enable_xface+set}" = set; then
+if test "${enable_xface+set}" = set; then :
enableval=$enable_xface;
else
enable_xface="$enable_image"
fi
- test x"$enable_xface" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_XFACE 1
-_ACEOF
+ test x"$enable_xface" = xyes && $as_echo "#define USE_XFACE 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_xface" >&5
-echo "${ECHO_T}$enable_xface" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_xface" >&5
+$as_echo "$enable_xface" >&6; }
# Extract the first word of "uncompface", so it can be a program name with args.
set dummy uncompface; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_uncompface+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_uncompface+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
if test -n "$uncompface"; then
ac_cv_prog_uncompface="$uncompface" # Let the user override the test.
@@ -5865,14 +7056,14 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_uncompface=""yes""
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
test -z "$ac_cv_prog_uncompface" && ac_cv_prog_uncompface=""no""
@@ -5880,40 +7071,38 @@ fi
fi
uncompface=$ac_cv_prog_uncompface
if test -n "$uncompface"; then
- { echo "$as_me:$LINENO: result: $uncompface" >&5
-echo "${ECHO_T}$uncompface" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $uncompface" >&5
+$as_echo "$uncompface" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
- test "$uncompface" = "no" && { echo "$as_me:$LINENO: WARNING: uncompface is not installed." >&5
-echo "$as_me: WARNING: uncompface is not installed." >&2;}
+ test "$uncompface" = "no" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: uncompface is not installed." >&5
+$as_echo "$as_me: WARNING: uncompface is not installed." >&2;}
fi
- { echo "$as_me:$LINENO: checking default keymap" >&5
-echo $ECHO_N "checking default keymap... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking default keymap" >&5
+$as_echo_n "checking default keymap... " >&6; }
# Check whether --enable-keymap was given.
-if test "${enable_keymap+set}" = set; then
+if test "${enable_keymap+set}" = set; then :
enableval=$enable_keymap;
else
enable_keymap="w3m"
fi
- { echo "$as_me:$LINENO: result: $enable_keymap" >&5
-echo "${ECHO_T}$enable_keymap" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_keymap" >&5
+$as_echo "$enable_keymap" >&6; }
case x"$enable_keymap" in
xw3m)
KEYMAP_FILE="keybind";;
xlynx)
KEYMAP_FILE="keybind_lynx";;
*)
- { { echo "$as_me:$LINENO: error: keymap should be either w3m or lynx." >&5
-echo "$as_me: error: keymap should be either w3m or lynx." >&2;}
- { (exit 1); exit 1; }; };;
+ as_fn_error $? "keymap should be either w3m or lynx." "$LINENO" 5 ;;
esac
HELP_FILE=w3mhelp-${enable_keymap}_$w3m_lang.html
@@ -5927,71 +7116,61 @@ _ACEOF
_ACEOF
-{ echo "$as_me:$LINENO: checking if popup menu is enabled" >&5
-echo $ECHO_N "checking if popup menu is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if popup menu is enabled" >&5
+$as_echo_n "checking if popup menu is enabled... " >&6; }
# Check whether --enable-menu was given.
-if test "${enable_menu+set}" = set; then
+if test "${enable_menu+set}" = set; then :
enableval=$enable_menu;
else
enable_menu="yes"
fi
- test x"$enable_menu" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_MENU 1
-_ACEOF
+ test x"$enable_menu" = xyes && $as_echo "#define USE_MENU 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_menu" >&5
-echo "${ECHO_T}$enable_menu" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_menu" >&5
+$as_echo "$enable_menu" >&6; }
-{ echo "$as_me:$LINENO: checking if mouse operation enabled" >&5
-echo $ECHO_N "checking if mouse operation enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if mouse operation enabled" >&5
+$as_echo_n "checking if mouse operation enabled... " >&6; }
# Check whether --enable-mouse was given.
-if test "${enable_mouse+set}" = set; then
+if test "${enable_mouse+set}" = set; then :
enableval=$enable_mouse;
else
enable_mouse="yes"
fi
-test x"$enable_mouse" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_MOUSE 1
-_ACEOF
+test x"$enable_mouse" = xyes && $as_echo "#define USE_MOUSE 1" >>confdefs.h
-{ echo "$as_me:$LINENO: result: $enable_mouse" >&5
-echo "${ECHO_T}$enable_mouse" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_mouse" >&5
+$as_echo "$enable_mouse" >&6; }
-{ echo "$as_me:$LINENO: checking if URL history is enabled" >&5
-echo $ECHO_N "checking if URL history is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if URL history is enabled" >&5
+$as_echo_n "checking if URL history is enabled... " >&6; }
# Check whether --enable-history was given.
-if test "${enable_history+set}" = set; then
+if test "${enable_history+set}" = set; then :
enableval=$enable_history;
else
enable_history="yes"
fi
- test x"$enable_history" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_HISTORY 1
-_ACEOF
+ test x"$enable_history" = xyes && $as_echo "#define USE_HISTORY 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_history" >&5
-echo "${ECHO_T}$enable_history" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_history" >&5
+$as_echo "$enable_history" >&6; }
- { echo "$as_me:$LINENO: checking if alarm is enabled" >&5
-echo $ECHO_N "checking if alarm is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alarm is enabled" >&5
+$as_echo_n "checking if alarm is enabled... " >&6; }
# Check whether --enable-alarm was given.
-if test "${enable_alarm+set}" = set; then
+if test "${enable_alarm+set}" = set; then :
enableval=$enable_alarm;
else
enable_alarm="yes"
fi
- { echo "$as_me:$LINENO: result: $enable_alarm" >&5
-echo "${ECHO_T}$enable_alarm" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_alarm" >&5
+$as_echo "$enable_alarm" >&6; }
if test x"$enable_alarm" = xyes; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <unistd.h>
#include <signal.h>
@@ -6004,218 +7183,178 @@ int sa = SIGALRM;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_ALARM 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ $as_echo "#define USE_ALARM 1" >>confdefs.h
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: checking if cookie is enabled" >&5
-echo $ECHO_N "checking if cookie is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if cookie is enabled" >&5
+$as_echo_n "checking if cookie is enabled... " >&6; }
# Check whether --enable-cookie was given.
-if test "${enable_cookie+set}" = set; then
+if test "${enable_cookie+set}" = set; then :
enableval=$enable_cookie;
else
enable_cookie="yes"
fi
-test x"$enable_cookie" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_COOKIE 1
-_ACEOF
+test x"$enable_cookie" = xyes && $as_echo "#define USE_COOKIE 1" >>confdefs.h
-{ echo "$as_me:$LINENO: result: $enable_cookie" >&5
-echo "${ECHO_T}$enable_cookie" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cookie" >&5
+$as_echo "$enable_cookie" >&6; }
- { echo "$as_me:$LINENO: checking if nntp is enabled" >&5
-echo $ECHO_N "checking if nntp is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if nntp is enabled" >&5
+$as_echo_n "checking if nntp is enabled... " >&6; }
# Check whether --enable-nntp was given.
-if test "${enable_nntp+set}" = set; then
+if test "${enable_nntp+set}" = set; then :
enableval=$enable_nntp;
else
enable_nntp="yes"
fi
- test x"$enable_nntp" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_NNTP 1
-_ACEOF
+ test x"$enable_nntp" = xyes && $as_echo "#define USE_NNTP 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_nntp" >&5
-echo "${ECHO_T}$enable_nntp" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_nntp" >&5
+$as_echo "$enable_nntp" >&6; }
- { echo "$as_me:$LINENO: checking if gopher is enabled" >&5
-echo $ECHO_N "checking if gopher is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gopher is enabled" >&5
+$as_echo_n "checking if gopher is enabled... " >&6; }
# Check whether --enable-gopher was given.
-if test "${enable_gopher+set}" = set; then
+if test "${enable_gopher+set}" = set; then :
enableval=$enable_gopher;
else
enable_gopher="no"
fi
- test x"$enable_gopher" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_GOPHER 1
-_ACEOF
+ test x"$enable_gopher" = xyes && $as_echo "#define USE_GOPHER 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_gopher" >&5
-echo "${ECHO_T}$enable_gopher" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gopher" >&5
+$as_echo "$enable_gopher" >&6; }
-{ echo "$as_me:$LINENO: checking if dictionary lookup is enabled" >&5
-echo $ECHO_N "checking if dictionary lookup is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if dictionary lookup is enabled" >&5
+$as_echo_n "checking if dictionary lookup is enabled... " >&6; }
# Check whether --enable-dict was given.
-if test "${enable_dict+set}" = set; then
+if test "${enable_dict+set}" = set; then :
enableval=$enable_dict;
else
enable_dict="yes"
fi
- test x"$enable_dict" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_DICT 1
-_ACEOF
+ test x"$enable_dict" = xyes && $as_echo "#define USE_DICT 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_dict" >&5
-echo "${ECHO_T}$enable_dict" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dict" >&5
+$as_echo "$enable_dict" >&6; }
- { echo "$as_me:$LINENO: checking if help cgi is enabled" >&5
-echo $ECHO_N "checking if help cgi is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if help cgi is enabled" >&5
+$as_echo_n "checking if help cgi is enabled... " >&6; }
# Check whether --enable-help_cgi was given.
-if test "${enable_help_cgi+set}" = set; then
+if test "${enable_help_cgi+set}" = set; then :
enableval=$enable_help_cgi;
else
enable_help_cgi="yes"
fi
- test x"$enable_help_cgi" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_HELP_CGI 1
-_ACEOF
+ test x"$enable_help_cgi" = xyes && $as_echo "#define USE_HELP_CGI 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_help_cgi" >&5
-echo "${ECHO_T}$enable_help_cgi" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_help_cgi" >&5
+$as_echo "$enable_help_cgi" >&6; }
- { echo "$as_me:$LINENO: checking if external URI loader is enabled" >&5
-echo $ECHO_N "checking if external URI loader is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if external URI loader is enabled" >&5
+$as_echo_n "checking if external URI loader is enabled... " >&6; }
# Check whether --enable-external_uri_loader was given.
-if test "${enable_external_uri_loader+set}" = set; then
+if test "${enable_external_uri_loader+set}" = set; then :
enableval=$enable_external_uri_loader;
else
enable_external_uri_loader="yes"
fi
- test x"$enable_external_uri_loader" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_EXTERNAL_URI_LOADER 1
-_ACEOF
+ test x"$enable_external_uri_loader" = xyes && $as_echo "#define USE_EXTERNAL_URI_LOADER 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_external_uri_loader" >&5
-echo "${ECHO_T}$enable_external_uri_loader" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_external_uri_loader" >&5
+$as_echo "$enable_external_uri_loader" >&6; }
- { echo "$as_me:$LINENO: checking if w3mmail is used" >&5
-echo $ECHO_N "checking if w3mmail is used... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if w3mmail is used" >&5
+$as_echo_n "checking if w3mmail is used... " >&6; }
# Check whether --enable-w3mmailer was given.
-if test "${enable_w3mmailer+set}" = set; then
+if test "${enable_w3mmailer+set}" = set; then :
enableval=$enable_w3mmailer;
else
enable_w3mmailer="$enable_external_uri_loader"
fi
test x"$enable_external_uri_loader" = xno && enable_w3mmailer=no
- test x"$enable_w3mmailer" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_W3MMAILER 1
-_ACEOF
+ test x"$enable_w3mmailer" = xyes && $as_echo "#define USE_W3MMAILER 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_w3mmailer" >&5
-echo "${ECHO_T}$enable_w3mmailer" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_w3mmailer" >&5
+$as_echo "$enable_w3mmailer" >&6; }
migemo_command="migemo -t egrep /usr/local/share/migemo/migemo-dict"
- { echo "$as_me:$LINENO: checking if migemo is supported with" >&5
-echo $ECHO_N "checking if migemo is supported with... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if migemo is supported with" >&5
+$as_echo_n "checking if migemo is supported with... " >&6; }
# Check whether --with-migemo was given.
-if test "${with_migemo+set}" = set; then
+if test "${with_migemo+set}" = set; then :
withval=$with_migemo; test x"$with_migemo" = xyes || migemo_command="$with_migemo"
fi
if test "${with_migemo+set}" = set -a "$with_migemo" != "no"; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_MIGEMO 1
-_ACEOF
+ $as_echo "#define USE_MIGEMO 1" >>confdefs.h
fi
- { echo "$as_me:$LINENO: result: $migemo_command" >&5
-echo "${ECHO_T}$migemo_command" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $migemo_command" >&5
+$as_echo "$migemo_command" >&6; }
cat >>confdefs.h <<_ACEOF
#define DEF_MIGEMO_COMMAND "$migemo_command"
_ACEOF
w3m_editor="/usr/bin/vi"
-{ echo "$as_me:$LINENO: checking which editor is used by default" >&5
-echo $ECHO_N "checking which editor is used by default... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which editor is used by default" >&5
+$as_echo_n "checking which editor is used by default... " >&6; }
# Check whether --with-editor was given.
-if test "${with_editor+set}" = set; then
+if test "${with_editor+set}" = set; then :
withval=$with_editor; w3m_editor="$with_editor"
fi
-{ echo "$as_me:$LINENO: result: $w3m_editor" >&5
-echo "${ECHO_T}$w3m_editor" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $w3m_editor" >&5
+$as_echo "$w3m_editor" >&6; }
cat >>confdefs.h <<_ACEOF
#define DEF_EDITOR "$w3m_editor"
_ACEOF
w3m_mailer="/usr/bin/mail"
-{ echo "$as_me:$LINENO: checking which mailer is used by default" >&5
-echo $ECHO_N "checking which mailer is used by default... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which mailer is used by default" >&5
+$as_echo_n "checking which mailer is used by default... " >&6; }
# Check whether --with-mailer was given.
-if test "${with_mailer+set}" = set; then
+if test "${with_mailer+set}" = set; then :
withval=$with_mailer; w3m_mailer="$with_mailer"
fi
-{ echo "$as_me:$LINENO: result: $w3m_mailer" >&5
-echo "${ECHO_T}$w3m_mailer" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $w3m_mailer" >&5
+$as_echo "$w3m_mailer" >&6; }
cat >>confdefs.h <<_ACEOF
#define DEF_MAILER "$w3m_mailer"
_ACEOF
w3m_browser="/usr/bin/mozilla"
-{ echo "$as_me:$LINENO: checking which external browser is used by default" >&5
-echo $ECHO_N "checking which external browser is used by default... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which external browser is used by default" >&5
+$as_echo_n "checking which external browser is used by default... " >&6; }
# Check whether --with-browser was given.
-if test "${with_browser+set}" = set; then
+if test "${with_browser+set}" = set; then :
withval=$with_browser; w3m_browser="$with_browser"
fi
-{ echo "$as_me:$LINENO: result: $w3m_browser" >&5
-echo "${ECHO_T}$w3m_browser" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $w3m_browser" >&5
+$as_echo "$w3m_browser" >&6; }
cat >>confdefs.h <<_ACEOF
#define DEF_EXT_BROWSER "$w3m_browser"
_ACEOF
@@ -6224,10 +7363,10 @@ _ACEOF
for lib in bsd BSD 44bsd socket nsl dld dl
do
lib=$lib
- { echo "$as_me:$LINENO: checking for -l$lib" >&5
-echo $ECHO_N "checking for -l$lib... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$lib" >&5
+$as_echo_n "checking for -l$lib... " >&6; }
extlib="not found"
- for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib
+ for dir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib /lib64 /usr/lib64
do
if test -f $dir/lib$lib.a -o -f $dir/lib$lib.so ; then
LIBS="$LIBS -l$lib"
@@ -6235,134 +7374,50 @@ echo $ECHO_N "checking for -l$lib... $ECHO_C" >&6; }
break
fi
done
- { echo "$as_me:$LINENO: result: $extlib" >&5
-echo "${ECHO_T}$extlib" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extlib" >&5
+$as_echo "$extlib" >&6; }
done
-{ echo "$as_me:$LINENO: checking if IPv6 support is enabled" >&5
-echo $ECHO_N "checking if IPv6 support is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if IPv6 support is enabled" >&5
+$as_echo_n "checking if IPv6 support is enabled... " >&6; }
# Check whether --enable-ipv6 was given.
-if test "${enable_ipv6+set}" = set; then
+if test "${enable_ipv6+set}" = set; then :
enableval=$enable_ipv6;
else
enable_ipv6="yes"
fi
-{ echo "$as_me:$LINENO: result: $enable_ipv6" >&5
-echo "${ECHO_T}$enable_ipv6" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ipv6" >&5
+$as_echo "$enable_ipv6" >&6; }
if test x"$enable_ipv6" = xyes; then
- { echo "$as_me:$LINENO: checking if IPv6 API available" >&5
-echo $ECHO_N "checking if IPv6 API available... $ECHO_C" >&6; }
-
- { echo "$as_me:$LINENO: checking for getaddrinfo" >&5
-echo $ECHO_N "checking for getaddrinfo... $ECHO_C" >&6; }
-if test "${ac_cv_func_getaddrinfo+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define getaddrinfo to an innocuous variant, in case <limits.h> declares getaddrinfo.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define getaddrinfo innocuous_getaddrinfo
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char getaddrinfo (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef getaddrinfo
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char getaddrinfo ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_getaddrinfo || defined __stub___getaddrinfo
-choke me
-#endif
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IPv6 API available" >&5
+$as_echo_n "checking if IPv6 API available... " >&6; }
-int
-main ()
-{
-return getaddrinfo ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_getaddrinfo=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_getaddrinfo=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_getaddrinfo" >&5
-echo "${ECHO_T}$ac_cv_func_getaddrinfo" >&6; }
-if test $ac_cv_func_getaddrinfo = yes; then
+ ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo"
+if test "x$ac_cv_func_getaddrinfo" = x""yes; then :
enable_ipv6="yes"
else
enable_ipv6="no"
fi
if test x"$enable_ipv6" = xno; then
- { echo "$as_me:$LINENO: checking for libinet6" >&5
-echo $ECHO_N "checking for libinet6... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libinet6" >&5
+$as_echo_n "checking for libinet6... " >&6; }
for dir in /usr/local/v6/lib /usr/local/lib /usr/lib
do
if test -f $dir/libinet6.a; then
if test $dir != "/usr/lib"; then
W3M_LIBS="$W3M_LIBS -L$dir"
fi
- { echo "$as_me:$LINENO: checking for getaddrinfo in -linet6" >&5
-echo $ECHO_N "checking for getaddrinfo in -linet6... $ECHO_C" >&6; }
-if test "${ac_cv_lib_inet6_getaddrinfo+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo in -linet6" >&5
+$as_echo_n "checking for getaddrinfo in -linet6... " >&6; }
+if test "${ac_cv_lib_inet6_getaddrinfo+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-linet6 $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -6380,39 +7435,18 @@ return getaddrinfo ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_inet6_getaddrinfo=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_inet6_getaddrinfo=no
+ ac_cv_lib_inet6_getaddrinfo=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_inet6_getaddrinfo" >&5
-echo "${ECHO_T}$ac_cv_lib_inet6_getaddrinfo" >&6; }
-if test $ac_cv_lib_inet6_getaddrinfo = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet6_getaddrinfo" >&5
+$as_echo "$ac_cv_lib_inet6_getaddrinfo" >&6; }
+if test "x$ac_cv_lib_inet6_getaddrinfo" = x""yes; then :
enable_ipv6="yes"
use_libinet6="found"; W3M_LIBS="$W3M_LIBS -linet6"; break
else
@@ -6421,18 +7455,14 @@ fi
fi
done
- { echo "$as_me:$LINENO: result: $use_libinet6" >&5
-echo "${ECHO_T}$use_libinet6" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_libinet6" >&5
+$as_echo "$use_libinet6" >&6; }
fi
if test x"$enable_ipv6" = xyes; then
- { echo "$as_me:$LINENO: checking if struct sockaddr_storage has an ss_family member" >&5
-echo $ECHO_N "checking if struct sockaddr_storage has an ss_family member... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if struct sockaddr_storage has an ss_family member" >&5
+$as_echo_n "checking if struct sockaddr_storage has an ss_family member... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
@@ -6449,34 +7479,11 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
@@ -6493,78 +7500,42 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_OLD_SS_FAMILY 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ $as_echo "#define HAVE_OLD_SS_FAMILY 1" >>confdefs.h
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- { echo "$as_me:$LINENO: WARNING: IPv6 support is disabled" >&5
-echo "$as_me: WARNING: IPv6 support is disabled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IPv6 support is disabled" >&5
+$as_echo "$as_me: WARNING: IPv6 support is disabled" >&2;}
enable_ipv6="no"
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
if test x"$enable_ipv6" = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define INET6 1
-_ACEOF
+ $as_echo "#define INET6 1" >>confdefs.h
fi
fi
-{ echo "$as_me:$LINENO: checking if SSL is suported" >&5
-echo $ECHO_N "checking if SSL is suported... $ECHO_C" >&6; }
-# Check whether --with-ssl was given.
-if test "${with_ssl+set}" = set; then
- withval=$with_ssl;
-else
- with_ssl="yes"
-fi
-{ echo "$as_me:$LINENO: result: $with_ssl" >&5
-echo "${ECHO_T}$with_ssl" >&6; }
-if test x"$with_ssl" != xno; then
- succeeded=no
- if test -z "$PKG_CONFIG"; then
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
case $PKG_CONFIG in
[\\/]* | ?:[\\/]*)
@@ -6576,85 +7547,178 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
-done
+ done
IFS=$as_save_IFS
- test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
if test -n "$PKG_CONFIG"; then
- { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+ done
+IFS=$as_save_IFS
- if test "$PKG_CONFIG" = "no" ; then
- echo "*** The pkg-config script could not be found. Make sure it is"
- echo "*** in your path, or set the PKG_CONFIG environment variable"
- echo "*** to the full path to pkg-config."
- echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- { echo "$as_me:$LINENO: checking for openssl" >&5
-echo $ECHO_N "checking for openssl... $ECHO_C" >&6; }
-
- if $PKG_CONFIG --exists "openssl" ; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
- succeeded=yes
-
- { echo "$as_me:$LINENO: checking SSL_CFLAGS" >&5
-echo $ECHO_N "checking SSL_CFLAGS... $ECHO_C" >&6; }
- SSL_CFLAGS=`$PKG_CONFIG --cflags "openssl"`
- { echo "$as_me:$LINENO: result: $SSL_CFLAGS" >&5
-echo "${ECHO_T}$SSL_CFLAGS" >&6; }
-
- { echo "$as_me:$LINENO: checking SSL_LIBS" >&5
-echo $ECHO_N "checking SSL_LIBS... $ECHO_C" >&6; }
- SSL_LIBS=`$PKG_CONFIG --libs "openssl"`
- { echo "$as_me:$LINENO: result: $SSL_LIBS" >&5
-echo "${ECHO_T}$SSL_LIBS" >&6; }
- else
- SSL_CFLAGS=""
- SSL_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
- SSL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "openssl"`
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
- fi
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if SSL is suported" >&5
+$as_echo_n "checking if SSL is suported... " >&6; }
- else
- echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
- echo "*** See http://www.freedesktop.org/software/pkgconfig"
- fi
- fi
+# Check whether --with-ssl was given.
+if test "${with_ssl+set}" = set; then :
+ withval=$with_ssl;
+else
+ with_ssl="yes"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ssl" >&5
+$as_echo "$with_ssl" >&6; }
+if test x"$with_ssl" != xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL" >&5
+$as_echo_n "checking for SSL... " >&6; }
+
+if test -n "$SSL_CFLAGS"; then
+ pkg_cv_SSL_CFLAGS="$SSL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SSL_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SSL_LIBS"; then
+ pkg_cv_SSL_LIBS="$SSL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SSL_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
- if test $succeeded = yes; then
- :
- else
- { echo "$as_me:$LINENO: checking for SSL library/header" >&5
-echo $ECHO_N "checking for SSL library/header... $ECHO_C" >&6; }
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "openssl" 2>&1`
+ else
+ SSL_PKG_ERRORS=`$PKG_CONFIG --print-errors "openssl" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SSL_PKG_ERRORS" >&5
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL library/header" >&5
+$as_echo_n "checking for SSL library/header... " >&6; }
test x"$with_ssl" = xyes && with_ssl="/usr/openssl /usr/ssl /usr /usr/local/openssl /usr/local/ssl /usr/local"
- { echo "$as_me:$LINENO: result: $with_ssl" >&5
-echo "${ECHO_T}$with_ssl" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ssl" >&5
+$as_echo "$with_ssl" >&6; }
for dir in $with_ssl
do
if test -f "$dir/include/openssl/ssl.h"; then
@@ -6670,20 +7734,45 @@ echo "${ECHO_T}$with_ssl" >&6; }
fi
done
- fi
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL library/header" >&5
+$as_echo_n "checking for SSL library/header... " >&6; }
+ test x"$with_ssl" = xyes && with_ssl="/usr/openssl /usr/ssl /usr /usr/local/openssl /usr/local/ssl /usr/local"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ssl" >&5
+$as_echo "$with_ssl" >&6; }
+ for dir in $with_ssl
+ do
+ if test -f "$dir/include/openssl/ssl.h"; then
+ SSL_CFLAGS="$SSL_CFLAGS -I$dir/include/openssl"
+ if test "$dir" != "/usr"; then
+ SSL_CFLAGS="$SSL_CFLAGS -I$dir/include"
+ fi
+ elif test "$dir" != "/usr" -a -f "$dir/include/ssl.h"; then
+ SSL_CFLAGS="$SSL_CFLAGS -I$dir/include"
+ fi
+ if test "$dir" != "/usr" -a -f "$dir/lib/libssl.a"; then
+ SSL_LIBS="$SSL_LIBS -L$dir/lib"
+ fi
+ done
- { echo "$as_me:$LINENO: checking for SSL_new in -lssl" >&5
-echo $ECHO_N "checking for SSL_new in -lssl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ SSL_CFLAGS=$pkg_cv_SSL_CFLAGS
+ SSL_LIBS=$pkg_cv_SSL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_new in -lssl" >&5
+$as_echo_n "checking for SSL_new in -lssl... " >&6; }
+if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lssl $SSL_LIBS -lcrypto $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -6701,39 +7790,18 @@ return SSL_new ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_ssl_SSL_new=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ssl_SSL_new=no
+ ac_cv_lib_ssl_SSL_new=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new" >&5
-echo "${ECHO_T}$ac_cv_lib_ssl_SSL_new" >&6; }
-if test $ac_cv_lib_ssl_SSL_new = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_new" >&5
+$as_echo "$ac_cv_lib_ssl_SSL_new" >&6; }
+if test "x$ac_cv_lib_ssl_SSL_new" = x""yes; then :
w3m_ssl="found"; CFLAGS="$CFLAGS $SSL_CFLAGS" W3M_LIBS="$W3M_LIBS $SSL_LIBS -lssl -lcrypto"
else
w3m_ssl="not found"
@@ -6741,146 +7809,55 @@ fi
if test x"$w3m_ssl" = xfound; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_SSL 1
-_ACEOF
+ $as_echo "#define USE_SSL 1" >>confdefs.h
- { echo "$as_me:$LINENO: checking if SSL certificate verify is enabled" >&5
-echo $ECHO_N "checking if SSL certificate verify is enabled... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if SSL certificate verify is enabled" >&5
+$as_echo_n "checking if SSL certificate verify is enabled... " >&6; }
# Check whether --enable-sslverify was given.
-if test "${enable_sslverify+set}" = set; then
+if test "${enable_sslverify+set}" = set; then :
enableval=$enable_sslverify;
else
enable_sslverify="yes"
fi
- test x"$enable_sslverify" = xyes && cat >>confdefs.h <<\_ACEOF
-#define USE_SSL_VERIFY 1
-_ACEOF
+ test x"$enable_sslverify" = xyes && $as_echo "#define USE_SSL_VERIFY 1" >>confdefs.h
- { echo "$as_me:$LINENO: result: $enable_sslverify" >&5
-echo "${ECHO_T}$enable_sslverify" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_sslverify" >&5
+$as_echo "$enable_sslverify" >&6; }
fi
fi
-{ echo "$as_me:$LINENO: checking if digest auth is enabled" >&5
-echo $ECHO_N "checking if digest auth is enabled... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if digest auth is enabled" >&5
+$as_echo_n "checking if digest auth is enabled... " >&6; }
# Check whether --enable-digest_auth was given.
-if test "${enable_digest_auth+set}" = set; then
+if test "${enable_digest_auth+set}" = set; then :
enableval=$enable_digest_auth;
else
enable_digest_auth="yes"
fi
if test x"$enable_digest_auth" = xyes -a x"$w3m_ssl" = xfound; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_DIGEST_AUTH 1
-_ACEOF
+ $as_echo "#define USE_DIGEST_AUTH 1" >>confdefs.h
else
enable_digest_auth="no"
fi
-{ echo "$as_me:$LINENO: result: $enable_digest_auth" >&5
-echo "${ECHO_T}$enable_digest_auth" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_digest_auth" >&5
+$as_echo "$enable_digest_auth" >&6; }
-{ echo "$as_me:$LINENO: checking for sqrt" >&5
-echo $ECHO_N "checking for sqrt... $ECHO_C" >&6; }
-if test "${ac_cv_func_sqrt+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define sqrt to an innocuous variant, in case <limits.h> declares sqrt.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define sqrt innocuous_sqrt
+ac_fn_c_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt"
+if test "x$ac_cv_func_sqrt" = x""yes; then :
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char sqrt (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef sqrt
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sqrt ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_sqrt || defined __stub___sqrt
-choke me
-#endif
-
-int
-main ()
-{
-return sqrt ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_sqrt=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_sqrt=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_sqrt" >&5
-echo "${ECHO_T}$ac_cv_func_sqrt" >&6; }
-if test $ac_cv_func_sqrt = yes; then
- :
else
-
-{ echo "$as_me:$LINENO: checking for sqrt in -lm" >&5
-echo $ECHO_N "checking for sqrt in -lm... $ECHO_C" >&6; }
-if test "${ac_cv_lib_m_sqrt+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5
+$as_echo_n "checking for sqrt in -lm... " >&6; }
+if test "${ac_cv_lib_m_sqrt+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -6898,39 +7875,18 @@ return sqrt ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_m_sqrt=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_m_sqrt=no
+ ac_cv_lib_m_sqrt=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrt" >&5
-echo "${ECHO_T}$ac_cv_lib_m_sqrt" >&6; }
-if test $ac_cv_lib_m_sqrt = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5
+$as_echo "$ac_cv_lib_m_sqrt" >&6; }
+if test "x$ac_cv_lib_m_sqrt" = x""yes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBM 1
_ACEOF
@@ -6943,18 +7899,14 @@ fi
if test x"$enable_mouse" = xyes; then
- { echo "$as_me:$LINENO: checking for Gpm_Open in -lgpm" >&5
-echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6; }
-if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gpm_Open in -lgpm" >&5
+$as_echo_n "checking for Gpm_Open in -lgpm... " >&6; }
+if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgpm $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -6972,150 +7924,70 @@ return Gpm_Open ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_gpm_Gpm_Open=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_gpm_Gpm_Open=no
+ ac_cv_lib_gpm_Gpm_Open=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_gpm_Gpm_Open" >&5
-echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6; }
-if test $ac_cv_lib_gpm_Gpm_Open = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_GPM 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gpm_Gpm_Open" >&5
+$as_echo "$ac_cv_lib_gpm_Gpm_Open" >&6; }
+if test "x$ac_cv_lib_gpm_Gpm_Open" = x""yes; then :
+ $as_echo "#define USE_GPM 1" >>confdefs.h
W3M_LIBS="$W3M_LIBS -lgpm"
fi
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/consio.h>
MOUSE_GETINFO
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_SYSMOUSE 1
-_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ $as_echo "#define USE_SYSMOUSE 1" >>confdefs.h
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <machine/console.h>
MOUSE_GETINFO
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_SYSMOUSE 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+if ac_fn_c_try_cpp "$LINENO"; then :
+ $as_echo "#define USE_SYSMOUSE 1" >>confdefs.h
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: checking terminal library" >&5
-echo $ECHO_N "checking terminal library... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking terminal library" >&5
+$as_echo_n "checking terminal library... " >&6; }
# Check whether --with-termlib was given.
-if test "${with_termlib+set}" = set; then
+if test "${with_termlib+set}" = set; then :
withval=$with_termlib;
else
with_termlib="yes"
fi
- { echo "$as_me:$LINENO: result: $with_termlib" >&5
-echo "${ECHO_T}$with_termlib" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5
+$as_echo "$with_termlib" >&6; }
test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
for lib in $with_termlib; do
- as_ac_Lib=`echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for tgetent in -l$lib" >&5
-echo $ECHO_N "checking for tgetent in -l$lib... $ECHO_C" >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5
+$as_echo_n "checking for tgetent in -l$lib... " >&6; }
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$lib $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -7133,217 +8005,30 @@ return tgetent ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Lib=no"
+ eval "$as_ac_Lib=no"
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-ac_res=`eval echo '${'$as_ac_Lib'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
W3M_LIBS="$W3M_LIBS -l$lib"; break
fi
done
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
- # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_GREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_GREP=$GREP
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
- # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_EGREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
-
- fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
#include <stdarg.h>
@@ -7358,47 +8043,23 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_header_stdc=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
+ ac_cv_header_stdc=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <string.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
else
ac_cv_header_stdc=no
fi
@@ -7408,18 +8069,14 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
+ $EGREP "free" >/dev/null 2>&1; then :
+
else
ac_cv_header_stdc=no
fi
@@ -7429,14 +8086,10 @@ fi
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
+ if test "$cross_compiling" = yes; then :
:
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <ctype.h>
#include <stdlib.h>
@@ -7463,113 +8116,35 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_run "$LINENO"; then :
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+ ac_cv_header_stdc=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
fi
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
if test $ac_cv_header_stdc = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
fi
@@ -7577,299 +8152,42 @@ fi
done
-{ echo "$as_me:$LINENO: checking GC library exists" >&5
-echo $ECHO_N "checking GC library exists... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking GC library exists" >&5
+$as_echo_n "checking GC library exists... " >&6; }
# Check whether --with-gc was given.
-if test "${with_gc+set}" = set; then
- withval=$with_gc; test x"$with_gc" = xno && { { echo "$as_me:$LINENO: error: You can not build w3m without gc" >&5
-echo "$as_me: error: You can not build w3m without gc" >&2;}
- { (exit 1); exit 1; }; }
+if test "${with_gc+set}" = set; then :
+ withval=$with_gc; test x"$with_gc" = xno && as_fn_error $? "You can not build w3m without gc" "$LINENO" 5
else
with_gc="yes"
fi
- { echo "$as_me:$LINENO: result: $with_gc" >&5
-echo "${ECHO_T}$with_gc" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gc" >&5
+$as_echo "$with_gc" >&6; }
test x"$with_gc" = xyes && with_gc="/usr /usr/local ${HOME}"
unset ac_cv_header_gc_h
- if test "${ac_cv_header_gc_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for gc.h" >&5
-echo $ECHO_N "checking for gc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_gc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_gc_h" >&5
-echo "${ECHO_T}$ac_cv_header_gc_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking gc.h usability" >&5
-echo $ECHO_N "checking gc.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <gc.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking gc.h presence" >&5
-echo $ECHO_N "checking gc.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <gc.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: gc.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: gc.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: gc.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: gc.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: gc.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: gc.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: gc.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: gc.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: gc.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: gc.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for gc.h" >&5
-echo $ECHO_N "checking for gc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_gc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_gc_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_gc_h" >&5
-echo "${ECHO_T}$ac_cv_header_gc_h" >&6; }
+ ac_fn_c_check_header_mongrel "$LINENO" "gc.h" "ac_cv_header_gc_h" "$ac_includes_default"
+if test "x$ac_cv_header_gc_h" = x""yes; then :
fi
if test x"$ac_cv_header_gc_h" = xno; then
- { echo "$as_me:$LINENO: checking GC header location" >&5
-echo $ECHO_N "checking GC header location... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $with_gc" >&5
-echo "${ECHO_T}$with_gc" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking GC header location" >&5
+$as_echo_n "checking GC header location... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gc" >&5
+$as_echo "$with_gc" >&6; }
gcincludedir=no
for dir in $with_gc; do
for inc in include include/gc; do
cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I$dir/$inc"
- { echo "$as_me:$LINENO: checking $dir/$inc" >&5
-echo $ECHO_N "checking $dir/$inc... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $dir/$inc" >&5
+$as_echo_n "checking $dir/$inc... " >&6; }
unset ac_cv_header_gc_h
- if test "${ac_cv_header_gc_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for gc.h" >&5
-echo $ECHO_N "checking for gc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_gc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_gc_h" >&5
-echo "${ECHO_T}$ac_cv_header_gc_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking gc.h usability" >&5
-echo $ECHO_N "checking gc.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <gc.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking gc.h presence" >&5
-echo $ECHO_N "checking gc.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <gc.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: gc.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: gc.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: gc.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: gc.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: gc.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: gc.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: gc.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: gc.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: gc.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: gc.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: gc.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for gc.h" >&5
-echo $ECHO_N "checking for gc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_gc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_gc_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_gc_h" >&5
-echo "${ECHO_T}$ac_cv_header_gc_h" >&6; }
-
-fi
-if test $ac_cv_header_gc_h = yes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "gc.h" "ac_cv_header_gc_h" "$ac_includes_default"
+if test "x$ac_cv_header_gc_h" = x""yes; then :
gcincludedir="$dir/$inc"; CFLAGS="$CFLAGS -I$dir/$inc"; break
fi
@@ -7881,24 +8199,18 @@ fi
fi
done
if test x"$gcincludedir" = xno; then
- { { echo "$as_me:$LINENO: error: gc.h not found" >&5
-echo "$as_me: error: gc.h not found" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "gc.h not found" "$LINENO" 5
fi
fi
unset ac_cv_lib_gc_GC_init
- { echo "$as_me:$LINENO: checking for GC_init in -lgc" >&5
-echo $ECHO_N "checking for GC_init in -lgc... $ECHO_C" >&6; }
-if test "${ac_cv_lib_gc_GC_init+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GC_init in -lgc" >&5
+$as_echo_n "checking for GC_init in -lgc... " >&6; }
+if test "${ac_cv_lib_gc_GC_init+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -7916,66 +8228,41 @@ return GC_init ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_gc_GC_init=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_gc_GC_init=no
+ ac_cv_lib_gc_GC_init=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_gc_GC_init" >&5
-echo "${ECHO_T}$ac_cv_lib_gc_GC_init" >&6; }
-if test $ac_cv_lib_gc_GC_init = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gc_GC_init" >&5
+$as_echo "$ac_cv_lib_gc_GC_init" >&6; }
+if test "x$ac_cv_lib_gc_GC_init" = x""yes; then :
LIBGC="-lgc"
fi
if test x"$ac_cv_lib_gc_GC_init" = xno; then
- { echo "$as_me:$LINENO: checking GC library location" >&5
-echo $ECHO_N "checking GC library location... $ECHO_C" >&6; }
- { echo "$as_me:$LINENO: result: $with_gc" >&5
-echo "${ECHO_T}$with_gc" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking GC library location" >&5
+$as_echo_n "checking GC library location... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gc" >&5
+$as_echo "$with_gc" >&6; }
gclibdir=no
for dir in $with_gc; do
ldflags="$LDFLAGS"
LDFLAGS="$LDFLAGS -L$dir/lib"
- { echo "$as_me:$LINENO: checking $dir" >&5
-echo $ECHO_N "checking $dir... $ECHO_C" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $dir" >&5
+$as_echo_n "checking $dir... " >&6; }
unset ac_cv_lib_gc_GC_init
- { echo "$as_me:$LINENO: checking for GC_init in -lgc" >&5
-echo $ECHO_N "checking for GC_init in -lgc... $ECHO_C" >&6; }
-if test "${ac_cv_lib_gc_GC_init+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GC_init in -lgc" >&5
+$as_echo_n "checking for GC_init in -lgc... " >&6; }
+if test "${ac_cv_lib_gc_GC_init+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -7993,62 +8280,35 @@ return GC_init ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_gc_GC_init=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_gc_GC_init=no
+ ac_cv_lib_gc_GC_init=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_gc_GC_init" >&5
-echo "${ECHO_T}$ac_cv_lib_gc_GC_init" >&6; }
-if test $ac_cv_lib_gc_GC_init = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gc_GC_init" >&5
+$as_echo "$ac_cv_lib_gc_GC_init" >&6; }
+if test "x$ac_cv_lib_gc_GC_init" = x""yes; then :
gclibdir="$dir/lib"; LIBGC="-L$dir/lib -lgc"; break
fi
LDFLAGS="$ldflags"
done
if test x"$gclibdir" = xno; then
- { { echo "$as_me:$LINENO: error: libgc not found" >&5
-echo "$as_me: error: libgc not found" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "libgc not found" "$LINENO" 5
fi
fi
-{ echo "$as_me:$LINENO: checking for zError in -lz" >&5
-echo $ECHO_N "checking for zError in -lz... $ECHO_C" >&6; }
-if test "${ac_cv_lib_z_zError+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zError in -lz" >&5
+$as_echo_n "checking for zError in -lz... " >&6; }
+if test "${ac_cv_lib_z_zError+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lz $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -8066,76 +8326,51 @@ return zError ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_z_zError=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_z_zError=no
+ ac_cv_lib_z_zError=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_zError" >&5
-echo "${ECHO_T}$ac_cv_lib_z_zError" >&6; }
-if test $ac_cv_lib_z_zError = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_zError" >&5
+$as_echo "$ac_cv_lib_z_zError" >&6; }
+if test "x$ac_cv_lib_z_zError" = x""yes; then :
AUXBIN_TARGETS="$AUXBIN_TARGETS inflate\$(EXT)"
fi
-cat >>confdefs.h <<\_ACEOF
-#define AUXBIN_TARGETS "$AUXBIN_TARGETS"
-_ACEOF
+ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h>
+ #include <sys/socket.h>
+"
+if test "x$ac_cv_type_socklen_t" = x""yes; then :
+ $as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+
+fi
+
+
+$as_echo "#define AUXBIN_TARGETS \"\$AUXBIN_TARGETS\"" >>confdefs.h
case "$host_os" in
*cygwin*|*os2-emx*|*mingw*)
- cat >>confdefs.h <<\_ACEOF
-#define USE_BINMODE_STREAM 1
-_ACEOF
+ $as_echo "#define USE_BINMODE_STREAM 1" >>confdefs.h
;;
esac
-
-
-
-
-
ac_header_dirent=no
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if eval "test \"\${$as_ac_Header+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <$ac_hdr>
@@ -8149,39 +8384,19 @@ return 0;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
eval "$as_ac_Header=yes"
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
+ eval "$as_ac_Header=no"
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+eval ac_res=\$$as_ac_Header
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
_ACEOF
ac_header_dirent=$ac_hdr; break
@@ -8190,17 +8405,13 @@ fi
done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
- { echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -8225,66 +8436,39 @@ for ac_lib in '' dir; do
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_opendir=$ac_res
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_opendir+set}" = set; then
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then :
break
fi
done
-if test "${ac_cv_search_opendir+set}" = set; then
- :
+if test "${ac_cv_search_opendir+set}" = set; then :
+
else
ac_cv_search_opendir=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
else
- { echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -8309,66 +8493,39 @@ for ac_lib in '' x; do
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_opendir=$ac_res
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_opendir+set}" = set; then
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if test "${ac_cv_search_opendir+set}" = set; then :
break
fi
done
-if test "${ac_cv_search_opendir+set}" = set; then
- :
+if test "${ac_cv_search_opendir+set}" = set; then :
+
else
ac_cv_search_opendir=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
fi
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
#include <stdarg.h>
@@ -8383,47 +8540,23 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_header_stdc=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
+ ac_cv_header_stdc=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <string.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
else
ac_cv_header_stdc=no
fi
@@ -8433,18 +8566,14 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdlib.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
+ $EGREP "free" >/dev/null 2>&1; then :
+
else
ac_cv_header_stdc=no
fi
@@ -8454,14 +8583,10 @@ fi
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
+ if test "$cross_compiling" = yes; then :
:
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <ctype.h>
#include <stdlib.h>
@@ -8488,61 +8613,31 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_run "$LINENO"; then :
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+ ac_cv_header_stdc=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
fi
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
if test $ac_cv_header_stdc = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
-{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test "${ac_cv_header_sys_wait_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/wait.h>
@@ -8563,1547 +8658,105 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_header_sys_wait_h=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_sys_wait_h=no
+ ac_cv_header_sys_wait_h=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+$as_echo "$ac_cv_header_sys_wait_h" >&6; }
if test $ac_cv_header_sys_wait_h = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_WAIT_H 1
-_ACEOF
+$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
fi
-if test "${ac_cv_header_termios_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for termios.h" >&5
-echo $ECHO_N "checking for termios.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_termios_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_termios_h" >&5
-echo "${ECHO_T}$ac_cv_header_termios_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking termios.h usability" >&5
-echo $ECHO_N "checking termios.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <termios.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
+ac_fn_c_check_header_mongrel "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default"
+if test "x$ac_cv_header_termios_h" = x""yes; then :
+ $as_echo "#define HAVE_TERMIOS_H 1" >>confdefs.h
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking termios.h presence" >&5
-echo $ECHO_N "checking termios.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <termios.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+ ac_fn_c_check_header_mongrel "$LINENO" "termio.h" "ac_cv_header_termio_h" "$ac_includes_default"
+if test "x$ac_cv_header_termio_h" = x""yes; then :
+ $as_echo "#define HAVE_TERMIO_H 1" >>confdefs.h
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: termios.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: termios.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: termios.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: termios.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: termios.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: termios.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: termios.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: termios.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: termios.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: termios.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: termios.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for termios.h" >&5
-echo $ECHO_N "checking for termios.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_termios_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_header_termios_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_termios_h" >&5
-echo "${ECHO_T}$ac_cv_header_termios_h" >&6; }
+ ac_fn_c_check_header_mongrel "$LINENO" "sgtty.h" "ac_cv_header_sgtty_h" "$ac_includes_default"
+if test "x$ac_cv_header_sgtty_h" = x""yes; then :
+ $as_echo "#define HAVE_SGTTY_H 1" >>confdefs.h
fi
-if test $ac_cv_header_termios_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_TERMIOS_H 1
-_ACEOF
-else
- if test "${ac_cv_header_termio_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for termio.h" >&5
-echo $ECHO_N "checking for termio.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_termio_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_termio_h" >&5
-echo "${ECHO_T}$ac_cv_header_termio_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking termio.h usability" >&5
-echo $ECHO_N "checking termio.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <termio.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- ac_header_compiler=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-# Is the header present?
-{ echo "$as_me:$LINENO: checking termio.h presence" >&5
-echo $ECHO_N "checking termio.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <termio.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
fi
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: termio.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: termio.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: termio.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: termio.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: termio.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: termio.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: termio.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: termio.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: termio.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: termio.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: termio.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for termio.h" >&5
-echo $ECHO_N "checking for termio.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_termio_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_termio_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_termio_h" >&5
-echo "${ECHO_T}$ac_cv_header_termio_h" >&6; }
+ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
+if test "x$ac_cv_header_float_h" = x""yes; then :
+ $as_echo "#define HAVE_FLOAT_H 1" >>confdefs.h
fi
-if test $ac_cv_header_termio_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_TERMIO_H 1
-_ACEOF
-
-else
- if test "${ac_cv_header_sgtty_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for sgtty.h" >&5
-echo $ECHO_N "checking for sgtty.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sgtty_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sgtty_h" >&5
-echo "${ECHO_T}$ac_cv_header_sgtty_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sgtty.h usability" >&5
-echo $ECHO_N "checking sgtty.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <sgtty.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = x""yes; then :
+ $as_echo "#define HAVE_SYS_SELECT_H 1" >>confdefs.h
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sgtty.h presence" >&5
-echo $ECHO_N "checking sgtty.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sgtty.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
fi
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: sgtty.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sgtty.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sgtty.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: sgtty.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sgtty.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sgtty.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sgtty.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sgtty.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sgtty.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: sgtty.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sgtty.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for sgtty.h" >&5
-echo $ECHO_N "checking for sgtty.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sgtty_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_sgtty_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sgtty_h" >&5
-echo "${ECHO_T}$ac_cv_header_sgtty_h" >&6; }
+ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = x""yes; then :
+ $as_echo "#define HAVE_LOCALE_H 1" >>confdefs.h
fi
-if test $ac_cv_header_sgtty_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SGTTY_H 1
-_ACEOF
-fi
+ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = x""yes; then :
+ $as_echo "#define HAVE_STDINT_H 1" >>confdefs.h
fi
-fi
-
+ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = x""yes; then :
+ $as_echo "#define HAVE_INTTYPES_H 1" >>confdefs.h
-if test "${ac_cv_header_float_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for float.h" >&5
-echo $ECHO_N "checking for float.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_float_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5
-echo "${ECHO_T}$ac_cv_header_float_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking float.h usability" >&5
-echo $ECHO_N "checking float.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <float.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking float.h presence" >&5
-echo $ECHO_N "checking float.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <float.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: float.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: float.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: float.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: float.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: float.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: float.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: float.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: float.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for float.h" >&5
-echo $ECHO_N "checking for float.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_float_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_float_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5
-echo "${ECHO_T}$ac_cv_header_float_h" >&6; }
-
-fi
-if test $ac_cv_header_float_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_FLOAT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_select_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for sys/select.h" >&5
-echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_select_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/select.h usability" >&5
-echo $ECHO_N "checking sys/select.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <sys/select.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/select.h presence" >&5
-echo $ECHO_N "checking sys/select.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/select.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/select.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: sys/select.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/select.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/select.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/select.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/select.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/select.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: sys/select.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/select.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/select.h" >&5
-echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_select_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_sys_select_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_select_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_SELECT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_locale_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for locale.h" >&5
-echo $ECHO_N "checking for locale.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_locale_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_locale_h" >&5
-echo "${ECHO_T}$ac_cv_header_locale_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking locale.h usability" >&5
-echo $ECHO_N "checking locale.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <locale.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking locale.h presence" >&5
-echo $ECHO_N "checking locale.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <locale.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: locale.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: locale.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: locale.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: locale.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: locale.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: locale.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: locale.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: locale.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: locale.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: locale.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: locale.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for locale.h" >&5
-echo $ECHO_N "checking for locale.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_locale_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_locale_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_locale_h" >&5
-echo "${ECHO_T}$ac_cv_header_locale_h" >&6; }
-
-fi
-if test $ac_cv_header_locale_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_LOCALE_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stdint_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdint_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stdint.h usability" >&5
-echo $ECHO_N "checking stdint.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <stdint.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stdint.h presence" >&5
-echo $ECHO_N "checking stdint.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdint.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stdint.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: stdint.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stdint.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stdint.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stdint.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stdint.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stdint.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: stdint.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stdint.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdint_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_stdint_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
-
-fi
-if test $ac_cv_header_stdint_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_STDINT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_inttypes_h+set}" = set; then
- { echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_inttypes_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking inttypes.h usability" >&5
-echo $ECHO_N "checking inttypes.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <inttypes.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking inttypes.h presence" >&5
-echo $ECHO_N "checking inttypes.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <inttypes.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: inttypes.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: inttypes.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: inttypes.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: inttypes.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: inttypes.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: inttypes.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: inttypes.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: inttypes.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ----------------------------- ##
-## Report this to satodai@w3m.jp ##
-## ----------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_inttypes_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_inttypes_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6; }
-
-fi
-if test $ac_cv_header_inttypes_h = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
-
-fi
-
-
-
-{ echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef long long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_long_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_long_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long long" >&5
-echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if test "${ac_cv_sizeof_long_long+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long_long=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
+ if test "$ac_cv_type_long_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5 ; }
else
ac_cv_sizeof_long_long=0
fi
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
+
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
@@ -10113,229 +8766,36 @@ _ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
for ac_func in strcasecmp strcasestr strchr memcpy strerror bcopy setpgrp chdir getcwd getwd readlink setenv putenv strtoll stroq atoll atoq symlink readlink lstat srand48 srandom getpassphrase waitpid setlocale
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
-
for ac_func in strftime
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+ ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
+if test "x$ac_cv_func_strftime" = x""yes; then :
cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_STRFTIME 1
_ACEOF
else
# strftime is in -lintl on SCO UNIX.
-{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
-echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_intl_strftime+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
+$as_echo_n "checking for strftime in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_strftime+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -10353,42 +8813,19 @@ return strftime ();
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_intl_strftime=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_intl_strftime=no
+ ac_cv_lib_intl_strftime=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
-echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; }
-if test $ac_cv_lib_intl_strftime = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRFTIME 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
+$as_echo "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = x""yes; then :
+ $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
LIBS="-lintl $LIBS"
fi
@@ -10396,19 +8833,15 @@ fi
fi
done
-{ echo "$as_me:$LINENO: checking for wait3 that fills in rusage" >&5
-echo $ECHO_N "checking for wait3 that fills in rusage... $ECHO_C" >&6; }
-if test "${ac_cv_func_wait3_rusage+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wait3 that fills in rusage" >&5
+$as_echo_n "checking for wait3 that fills in rusage... " >&6; }
+if test "${ac_cv_func_wait3_rusage+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- if test "$cross_compiling" = yes; then
+ if test "$cross_compiling" = yes; then :
ac_cv_func_wait3_rusage=no
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
#include <sys/time.h>
@@ -10446,65 +8879,33 @@ main ()
}
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
ac_cv_func_wait3_rusage=yes
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_wait3_rusage=no
+ ac_cv_func_wait3_rusage=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_wait3_rusage" >&5
-echo "${ECHO_T}$ac_cv_func_wait3_rusage" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_wait3_rusage" >&5
+$as_echo "$ac_cv_func_wait3_rusage" >&6; }
if test $ac_cv_func_wait3_rusage = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WAIT3 1
-_ACEOF
+$as_echo "#define HAVE_WAIT3 1" >>confdefs.h
fi
-{ echo "$as_me:$LINENO: checking whether setpgrp takes no argument" >&5
-echo $ECHO_N "checking whether setpgrp takes no argument... $ECHO_C" >&6; }
-if test "${ac_cv_func_setpgrp_void+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setpgrp takes no argument" >&5
+$as_echo_n "checking whether setpgrp takes no argument... " >&6; }
+if test "${ac_cv_func_setpgrp_void+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot check setpgrp when cross compiling" >&5
-echo "$as_me: error: cannot check setpgrp when cross compiling" >&2;}
- { (exit 1); exit 1; }; }
+ if test "$cross_compiling" = yes; then :
+ as_fn_error $? "cannot check setpgrp when cross compiling" "$LINENO" 5
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
@@ -10518,47 +8919,21 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
ac_cv_func_setpgrp_void=no
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_setpgrp_void=yes
+ ac_cv_func_setpgrp_void=yes
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_setpgrp_void" >&5
-echo "${ECHO_T}$ac_cv_func_setpgrp_void" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5
+$as_echo "$ac_cv_func_setpgrp_void" >&6; }
if test $ac_cv_func_setpgrp_void = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define SETPGRP_VOID 1
-_ACEOF
+$as_echo "#define SETPGRP_VOID 1" >>confdefs.h
fi
@@ -10567,76 +8942,45 @@ case "$host_os" in
;;
*)
- { 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 "${am_cv_langinfo_codeset+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then :
+ $as_echo_n "(cached) " >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <langinfo.h>
int
main ()
{
-char* cs = nl_langinfo(CODESET);
+char* cs = nl_langinfo(CODESET); return !cs;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
am_cv_langinfo_codeset=yes
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- am_cv_langinfo_codeset=no
+ am_cv_langinfo_codeset=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
-echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
if test $am_cv_langinfo_codeset = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LANGINFO_CODESET 1
-_ACEOF
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
fi
;;
esac
-{ echo "$as_me:$LINENO: checking for sys_errlist" >&5
-echo $ECHO_N "checking for sys_errlist... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist" >&5
+$as_echo_n "checking for sys_errlist... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern char *sys_errlist[];
int
@@ -10647,45 +8991,19 @@ printf(sys_errlist[0]);
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- have_sys_errlist="yes"; cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_ERRLIST 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ have_sys_errlist="yes"; $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- have_sys_errlist="no"
+ have_sys_errlist="no"
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $have_sys_errlist" >&5
-echo "${ECHO_T}$have_sys_errlist" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_errlist" >&5
+$as_echo "$have_sys_errlist" >&6; }
-{ echo "$as_me:$LINENO: checking for sigsetjmp" >&5
-echo $ECHO_N "checking for sigsetjmp... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
+$as_echo_n "checking for sigsetjmp... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <setjmp.h>
int
@@ -10697,47 +9015,21 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- have_sigsetjmp="yes"; cat >>confdefs.h <<\_ACEOF
-#define HAVE_SIGSETJMP 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ have_sigsetjmp="yes"; $as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- have_sigsetjmp="no"
+ have_sigsetjmp="no"
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $have_sigsetjmp" >&5
-echo "${ECHO_T}$have_sigsetjmp" >&6; }
-{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
-if test "${ac_cv_type_signal+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sigsetjmp" >&5
+$as_echo "$have_sigsetjmp" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if test "${ac_cv_type_signal+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <signal.h>
@@ -10750,35 +9042,15 @@ return *(signal (0, 0)) (0) == 1;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_type_signal=int
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_signal=void
+ ac_cv_type_signal=void
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
cat >>confdefs.h <<_ACEOF
#define RETSIGTYPE $ac_cv_type_signal
@@ -10788,28 +9060,20 @@ _ACEOF
if test x"$ac_cv_type_signal" = xvoid; then
- cat >>confdefs.h <<\_ACEOF
-#define SIGNAL_RETURN return
-_ACEOF
+ $as_echo "#define SIGNAL_RETURN return" >>confdefs.h
else
- cat >>confdefs.h <<\_ACEOF
-#define SIGNAL_RETURN return 0
-_ACEOF
+ $as_echo "#define SIGNAL_RETURN return 0" >>confdefs.h
fi
HELP_DIR="$datadir/$PACKAGE"
-cat >>confdefs.h <<\_ACEOF
-#define HELP_DIR "$HELP_DIR"
-_ACEOF
+$as_echo "#define HELP_DIR \"\$HELP_DIR\"" >>confdefs.h
RC_DIR="~/.$PACKAGE"
-cat >>confdefs.h <<\_ACEOF
-#define RC_DIR "$RC_DIR"
-_ACEOF
+$as_echo "#define RC_DIR \"\$RC_DIR\"" >>confdefs.h
DOCDIRS="doc:en_English doc-jp:ja_Japanese"
@@ -10822,7 +9086,7 @@ _ACEOF
cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog`
sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`
-ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
+ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -10851,12 +9115,13 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
@@ -10864,8 +9129,8 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
(set) 2>&1 |
case $as_nl`(ac_space=' '; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
@@ -10888,12 +9153,12 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
test "x$cache_file" != "x/dev/null" &&
- { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -10906,14 +9171,15 @@ DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
+U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`echo "$ac_i" | sed "$ac_script"`
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
@@ -10922,11 +9188,13 @@ LTLIBOBJS=$ac_ltlibobjs
: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
# Generated by $as_me.
# Run this file to recreate the current configuration.
@@ -10936,59 +9204,79 @@ cat >$CONFIG_STATUS <<_ACEOF
debug=false
ac_cs_recheck=false
ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
esac
-
fi
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
else
- PATH_SEPARATOR=:
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
fi
- rm -f conf$$.sh
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
fi
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
fi
@@ -10997,20 +9285,18 @@ fi
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
-as_nl='
-'
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
IFS=$as_save_IFS
;;
@@ -11021,32 +9307,111 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
fi
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
-done
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
-# Required to use basename.
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
@@ -11060,13 +9425,17 @@ else
as_basename=false
fi
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
-# Name of the executable.
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -11081,104 +9450,103 @@ echo X/"$0" |
}
s/.*/./; q'`
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
-n*)
- case `echo 'x\c'` in
+ case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
+ fi
else
as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
+ as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
@@ -11195,12 +9563,12 @@ else
as_test_x='
eval sh -c '\''
if test -d "$1"; then
- test -d "$1/.";
+ test -d "$1/.";
else
- case $1 in
- -*)set "./$1";;
+ case $1 in #(
+ -*)set "./$1";;
esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
???[sx]*):;;*)false;;esac;fi
'\'' sh
'
@@ -11215,13 +9583,19 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-# Save the log message, to keep $[0] and so on meaningful, and to
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by w3m $as_me 0.5.2, which was
-generated by GNU Autoconf 2.61. Invocation command line was
+This file was extended by w3m $as_me 0.5.3, which was
+generated by GNU Autoconf 2.67. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -11234,7 +9608,16 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"
config_headers="$ac_config_headers"
@@ -11242,22 +9625,25 @@ config_commands="$ac_config_commands"
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [TAG]...
-h, --help print this help, then exit
-V, --version print version number and configuration settings, then exit
- -q, --quiet do not print progress messages
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
Configuration files:
$config_files
@@ -11268,36 +9654,44 @@ $config_headers
Configuration commands:
$config_commands
-Report bugs to <bug-autoconf@gnu.org>."
+Report bugs to <satodai@w3m.jp>."
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-w3m config.status 0.5.2
-configured by $0, generated by GNU Autoconf 2.61,
- with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+w3m config.status 0.5.3
+configured by $0, generated by GNU Autoconf 2.67,
+ with options \\"\$ac_cs_config\\"
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
case $1 in
- --*=*)
+ --*=?*)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
*)
ac_option=$1
ac_optarg=$2
@@ -11310,34 +9704,41 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- echo "$ac_cs_version"; exit ;;
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--header | --heade | --head | --hea )
$ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h)
# Conflict between --help and --header
- { echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
--help | --hel | -h )
- echo "$ac_cs_usage"; exit ;;
+ $as_echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
- -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
- *) ac_config_targets="$ac_config_targets $1"
+ *) as_fn_append ac_config_targets " $1"
ac_need_defaults=false ;;
esac
@@ -11352,33 +9753,35 @@ if $ac_cs_silent; then
fi
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
- echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- CONFIG_SHELL=$SHELL
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
- exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ exec "\$@"
fi
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
echo
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- echo "$ac_log"
+ $as_echo "$ac_log"
} >&5
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
# INIT-COMMANDS
#
# Capture the value of obsolete ALL_LINGUAS because we need it to compute
# POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
- # from automake.
+ # from automake < 1.5.
eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
# Capture the value of LINGUAS because we need it to compute CATALOGS.
LINGUAS="${LINGUAS-%UNSET%}"
@@ -11386,14 +9789,14 @@ cat >>$CONFIG_STATUS <<_ACEOF
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Handling of arguments.
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"posubst") CONFIG_FILES="$CONFIG_FILES posubst" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
@@ -11412,14 +9815,13 @@ do
"w3mimg/Makefile") CONFIG_FILES="$CONFIG_FILES w3mimg/Makefile" ;;
"w3mimg/fb/Makefile") CONFIG_FILES="$CONFIG_FILES w3mimg/fb/Makefile" ;;
"w3mimg/x11/Makefile") CONFIG_FILES="$CONFIG_FILES w3mimg/x11/Makefile" ;;
+ "w3mimg/win/Makefile") CONFIG_FILES="$CONFIG_FILES w3mimg/win/Makefile" ;;
"w3mhelp-w3m_en.html") CONFIG_FILES="$CONFIG_FILES w3mhelp-w3m_en.html" ;;
"w3mhelp-w3m_ja.html") CONFIG_FILES="$CONFIG_FILES w3mhelp-w3m_ja.html" ;;
"w3mhelp-lynx_en.html") CONFIG_FILES="$CONFIG_FILES w3mhelp-lynx_en.html" ;;
"w3mhelp-lynx_ja.html") CONFIG_FILES="$CONFIG_FILES w3mhelp-lynx_ja.html" ;;
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
esac
done
@@ -11446,7 +9848,7 @@ $debug ||
trap 'exit_status=$?
{ test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
+ trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.
@@ -11457,293 +9859,285 @@ $debug ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then
-_ACEOF
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-PACKAGE!$PACKAGE$ac_delim
-VERSION!$VERSION$ac_delim
-W3M!$W3M$ac_delim
-W3M_LANG!$W3M_LANG$ac_delim
-AWK!$AWK$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-CPP!$CPP$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-LN_S!$LN_S$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-RANLIB!$RANLIB$ac_delim
-PERL!$PERL$ac_delim
-NKF!$NKF$ac_delim
-MAN!$MAN$ac_delim
-build!$build$ac_delim
-build_cpu!$build_cpu$ac_delim
-build_vendor!$build_vendor$ac_delim
-build_os!$build_os$ac_delim
-host!$host$ac_delim
-host_cpu!$host_cpu$ac_delim
-host_vendor!$host_vendor$ac_delim
-host_os!$host_os$ac_delim
-W3M_TARGET!$W3M_TARGET$ac_delim
-W3M_LIBS!$W3M_LIBS$ac_delim
-USE_M17N!$USE_M17N$ac_delim
-USE_UNICODE!$USE_UNICODE$ac_delim
-WCTARGET!$WCTARGET$ac_delim
-WCCFLAGS!$WCCFLAGS$ac_delim
-DISPLAY_CHARSET!$DISPLAY_CHARSET$ac_delim
-SYSTEM_CHARSET!$SYSTEM_CHARSET$ac_delim
-DOCUMENT_CHARSET!$DOCUMENT_CHARSET$ac_delim
-POSUBST!$POSUBST$ac_delim
-POLANG!$POLANG$ac_delim
-MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim
-USE_NLS!$USE_NLS$ac_delim
-MSGFMT!$MSGFMT$ac_delim
-GMSGFMT!$GMSGFMT$ac_delim
-XGETTEXT!$XGETTEXT$ac_delim
-MSGMERGE!$MSGMERGE$ac_delim
-LIBICONV!$LIBICONV$ac_delim
-LTLIBICONV!$LTLIBICONV$ac_delim
-INTLLIBS!$INTLLIBS$ac_delim
-LIBINTL!$LIBINTL$ac_delim
-LTLIBINTL!$LTLIBINTL$ac_delim
-POSUB!$POSUB$ac_delim
-INTLTARGET!$INTLTARGET$ac_delim
-NLSTARGET!$NLSTARGET$ac_delim
-USE_COLOR!$USE_COLOR$ac_delim
-USE_ANSI_COLOR!$USE_ANSI_COLOR$ac_delim
-USE_BG_COLOR!$USE_BG_COLOR$ac_delim
-USE_IMAGE!$USE_IMAGE$ac_delim
-USE_W3MIMG_X11!$USE_W3MIMG_X11$ac_delim
-_ACEOF
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
- break
- elif $ac_last_try; then
- { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
- ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
- ac_eof=`expr $ac_eof + 1`
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
fi
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
_ACEOF
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
- cat >conf$$subs.sed <<_ACEOF
-USE_W3MIMG_FB!$USE_W3MIMG_FB$ac_delim
-W3MIMGDISPLAY_SETUID!$W3MIMGDISPLAY_SETUID$ac_delim
-INSTALL_W3MIMGDISPLAY!$INSTALL_W3MIMGDISPLAY$ac_delim
-USE_GDKPIXBUF!$USE_GDKPIXBUF$ac_delim
-USE_GTK2!$USE_GTK2$ac_delim
-USE_IMLIB!$USE_IMLIB$ac_delim
-USE_IMLIB2!$USE_IMLIB2$ac_delim
-IMGTARGETS!$IMGTARGETS$ac_delim
-IMGOBJS!$IMGOBJS$ac_delim
-IMGX11CFLAGS!$IMGX11CFLAGS$ac_delim
-IMGX11LDFLAGS!$IMGX11LDFLAGS$ac_delim
-IMGFBCFLAGS!$IMGFBCFLAGS$ac_delim
-IMGFBLDFLAGS!$IMGFBLDFLAGS$ac_delim
-USE_XFACE!$USE_XFACE$ac_delim
-uncompface!$uncompface$ac_delim
-KEYMAP_FILE!$KEYMAP_FILE$ac_delim
-HELP_FILE!$HELP_FILE$ac_delim
-KEYBIND!$KEYBIND$ac_delim
-USE_MENU!$USE_MENU$ac_delim
-USE_MOUSE!$USE_MOUSE$ac_delim
-USE_HISTORY!$USE_HISTORY$ac_delim
-USE_ALARM!$USE_ALARM$ac_delim
-USE_COOKIE!$USE_COOKIE$ac_delim
-USE_NNTP!$USE_NNTP$ac_delim
-USE_GOPHER!$USE_GOPHER$ac_delim
-USE_DICT!$USE_DICT$ac_delim
-USE_HELP_CGI!$USE_HELP_CGI$ac_delim
-USE_EXTERNAL_URI_LOADER!$USE_EXTERNAL_URI_LOADER$ac_delim
-USE_W3MMAILER!$USE_W3MMAILER$ac_delim
-USE_MIGEMO!$USE_MIGEMO$ac_delim
-DEF_MIGEMO_COMMAND!$DEF_MIGEMO_COMMAND$ac_delim
-DEF_EDITOR!$DEF_EDITOR$ac_delim
-DEF_MAILER!$DEF_MAILER$ac_delim
-DEF_EXT_BROWSER!$DEF_EXT_BROWSER$ac_delim
-INET6!$INET6$ac_delim
-HAVE_OLD_SS_FAMILY!$HAVE_OLD_SS_FAMILY$ac_delim
-USE_SSL!$USE_SSL$ac_delim
-USE_SSL_VERIFY!$USE_SSL_VERIFY$ac_delim
-PKG_CONFIG!$PKG_CONFIG$ac_delim
-SSL_CFLAGS!$SSL_CFLAGS$ac_delim
-SSL_LIBS!$SSL_LIBS$ac_delim
-USE_DIGEST_AUTH!$USE_DIGEST_AUTH$ac_delim
-USE_W3M!$USE_W3M$ac_delim
-USE_SYSMOUSE!$USE_SYSMOUSE$ac_delim
-AUXBIN_TARGETS!$AUXBIN_TARGETS$ac_delim
-LIBGC!$LIBGC$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-USE_BINMODE_STREAM!$USE_BINMODE_STREAM$ac_delim
-HAVE_SYS_ERRLIST!$HAVE_SYS_ERRLIST$ac_delim
-HAVE_SIGSETJMP!$HAVE_SIGSETJMP$ac_delim
-RETSIGTYPE!$RETSIGTYPE$ac_delim
-SIGNAL_RETURN!$SIGNAL_RETURN$ac_delim
-HELP_DIR!$HELP_DIR$ac_delim
-RC_DIR!$RC_DIR$ac_delim
-DOCDIRS!$DOCDIRS$ac_delim
-CURRENT_VERSION!$CURRENT_VERSION$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 59; then
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
break
elif $ac_last_try; then
- { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
else
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
- ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
- ac_eof=`expr $ac_eof + 1`
-fi
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACAWK
_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
s/^[^=]*=[ ]*$//
}'
fi
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
fi # test -n "$CONFIG_FILES"
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
-for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
do
case $ac_tag in
:[FHLC]) ac_mode=$ac_tag; continue;;
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
- :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@@ -11771,26 +10165,34 @@ echo "$as_me: error: Invalid tag $ac_tag." >&2;}
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
- { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
esac
- ac_file_inputs="$ac_file_inputs $ac_f"
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
done
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
- configure_input="Generated from "`IFS=:
- echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin";;
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
@@ -11800,42 +10202,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
+$as_echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -11853,20 +10220,15 @@ echo X"$as_dir" |
q
}
s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
+ as_dir="$ac_dir"; as_fn_mkdir_p
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -11904,14 +10266,19 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# If the template does not know about datarootdir, expand it.
# FIXME: This hack should be removed a few years after 2.60.
ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
+ac_sed_dataroot='
+/datarootdir/ {
p
q
}
@@ -11919,36 +10286,37 @@ case `sed -n '/datarootdir/ {
/@docdir@/p
/@infodir@/p
/@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
s&@datadir@&$datadir&g
s&@docdir@&$docdir&g
s&@infodir@&$infodir&g
s&@localedir@&$localedir&g
s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
+ s&\\\${datarootdir}&$datarootdir&g' ;;
esac
_ACEOF
# Neutralize VPATH when `$srcdir' = `.'.
# Shell code in configure.ac might set extrasub.
# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
$extrasub
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
+s|@configure_input@|$ac_sed_conf_input|;t t
s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
s&@srcdir@&$ac_srcdir&;t t
s&@abs_srcdir@&$ac_abs_srcdir&;t t
s&@top_srcdir@&$ac_top_srcdir&;t t
@@ -11957,130 +10325,60 @@ s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$tmp/stdin"
case $ac_file in
- -) cat "$tmp/out"; rm -f "$tmp/out";;
- *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
- esac
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
;;
:H)
#
# CONFIG_HEADER
#
-_ACEOF
-
-# Transform confdefs.h into a sed script `conftest.defines', that
-# substitutes the proper values into config.h.in to produce config.h.
-rm -f conftest.defines conftest.tail
-# First, append a space to every undef/define line, to ease matching.
-echo 's/$/ /' >conftest.defines
-# Then, protect against being on the right side of a sed subst, or in
-# an unquoted here document, in config.status. If some macros were
-# called several times there might be several #defines for the same
-# symbol, which is useless. But do not sort them, since the last
-# AC_DEFINE must be honored.
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-# NAME is the cpp macro being defined, VALUE is the value it is being given.
-# PARAMS is the parameter list in the macro definition--in most cases, it's
-# just an empty string.
-ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
-ac_dB='\\)[ (].*,\\1define\\2'
-ac_dC=' '
-ac_dD=' ,'
-
-uniq confdefs.h |
- sed -n '
- t rset
- :rset
- s/^[ ]*#[ ]*define[ ][ ]*//
- t ok
- d
- :ok
- s/[\\&,]/\\&/g
- s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
- s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
- ' >>conftest.defines
-
-# Remove the space that was appended to ease matching.
-# Then replace #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-# (The regexp can be short, since the line contains either #define or #undef.)
-echo 's/ $//
-s,^[ #]*u.*,/* & */,' >>conftest.defines
-
-# Break up conftest.defines:
-ac_max_sed_lines=50
-
-# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-# et cetera.
-ac_in='$ac_file_inputs'
-ac_out='"$tmp/out1"'
-ac_nxt='"$tmp/out2"'
-
-while :
-do
- # Write a here document:
- cat >>$CONFIG_STATUS <<_ACEOF
- # First, check the format of the line:
- cat >"\$tmp/defines.sed" <<\\CEOF
-/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
-/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
-b
-:def
-_ACEOF
- sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
- ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
- sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
- grep . conftest.tail >/dev/null || break
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines conftest.tail
-
-echo "ac_result=$ac_in" >>$CONFIG_STATUS
-cat >>$CONFIG_STATUS <<\_ACEOF
if test x"$ac_file" != x-; then
- echo "/* $configure_input */" >"$tmp/config.h"
- cat "$ac_result" >>"$tmp/config.h"
- if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
else
- rm -f $ac_file
- mv "$tmp/config.h" $ac_file
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
- echo "/* $configure_input */"
- cat "$ac_result"
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
fi
- rm -f "$tmp/out12"
;;
- :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5
-echo "$as_me: executing $ac_file commands" >&6;}
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
;;
esac
case $ac_file$ac_mode in
- "default-1":C)
+ "po-directories":C)
for ac_file in $CONFIG_FILES; do
# Support "outfile[:infile[:infile...]]"
case "$ac_file" in
@@ -12100,6 +10398,9 @@ echo "$as_me: executing $ac_file commands" >&6;}
/*) top_srcdir="$ac_given_srcdir" ;;
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
rm -f "$ac_dir/POTFILES"
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
@@ -12113,12 +10414,13 @@ echo "$as_me: executing $ac_file commands" >&6;}
if test -n "$OBSOLETE_ALL_LINGUAS"; then
test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
fi
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
else
# The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
fi
# Compute POFILES
@@ -12194,11 +10496,13 @@ echo "$as_me: executing $ac_file commands" >&6;}
done # for ac_tag
-{ (exit 0); exit 0; }
+as_fn_exit 0
_ACEOF
-chmod +x $CONFIG_STATUS
ac_clean_files=$ac_clean_files_save
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
@@ -12218,7 +10522,11 @@ if test "$no_create" != yes; then
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
diff --git a/configure.ac b/configure.ac
index 83ddc34..7308fc6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,8 +1,8 @@
dnl w3m autoconf
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(w3m, 0.5.2, satodai@w3m.jp)
+AC_INIT(w3m, 0.5.3, satodai@w3m.jp)
PACKAGE=w3m
-VERSION=0.5.2
+VERSION=0.5.3
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
AC_SUBST(PACKAGE)
@@ -17,7 +17,7 @@ W3M_LANG=${LC_ALL:-$LANG}
dnl AM_INIT_AUTOMAKE(w3m, 0.4)
AC_CONFIG_HEADER(config.h)
dnl Checks for programs.
-dnl AC_PROG_CXX
+AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
@@ -107,6 +107,11 @@ AC_W3M_TERMLIB
AC_W3M_GC
AC_CHECK_LIB(z, zError, [AUXBIN_TARGETS="$AUXBIN_TARGETS inflate\$(EXT)"])
+AC_CHECK_TYPE([socklen_t],
+ [AC_DEFINE(HAVE_SOCKLEN_T)], ,
+ [#include <sys/types.h>
+ #include <sys/socket.h>])
+
AC_DEFINE(AUXBIN_TARGETS, "$AUXBIN_TARGETS")
AC_SUBST(USE_BINMODE_STREAM)
@@ -179,7 +184,7 @@ scripts/multipart/Makefile scripts/multipart/multipart.cgi \
scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 \
scripts/w3mman/w3mman2html.cgi \
libwc/Makefile \
-w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile \
+w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile \
w3mhelp-w3m_en.html w3mhelp-w3m_ja.html \
w3mhelp-lynx_en.html w3mhelp-lynx_ja.html])
diff --git a/cookie.c b/cookie.c
index 1b64e40..8020f6d 100644
--- a/cookie.c
+++ b/cookie.c
@@ -1,4 +1,4 @@
-/* $Id: cookie.c,v 1.10 2006/12/10 10:53:22 inu Exp $ */
+/* $Id: cookie.c,v 1.11 2010/07/26 11:38:53 htrb Exp $ */
/*
* References for version 0 cookie:
@@ -258,6 +258,30 @@ char *special_domain[] = {
};
int
+check_avoid_wrong_number_of_dots_domain( Str domain )
+{
+ TextListItem *tl;
+ int avoid_wrong_number_of_dots_domain = FALSE;
+
+ if (Cookie_avoid_wrong_number_of_dots_domains &&
+ Cookie_avoid_wrong_number_of_dots_domains->nitem > 0) {
+ for (tl = Cookie_avoid_wrong_number_of_dots_domains->first;
+ tl != NULL; tl = tl->next) {
+ if (domain_match(domain->ptr, tl->ptr)) {
+ avoid_wrong_number_of_dots_domain = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (avoid_wrong_number_of_dots_domain == TRUE) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+int
add_cookie(ParsedURL *pu, Str name, Str value,
time_t expires, Str domain, Str path,
int flag, Str comment, int version, Str port, Str commentURL)
@@ -304,7 +328,9 @@ add_cookie(ParsedURL *pu, Str name, Str value,
domain->ptr + domain->length,
3);
if (n < 2) {
- COOKIE_ERROR(COO_ESPECIAL);
+ if (! check_avoid_wrong_number_of_dots_domain(domain)) {
+ COOKIE_ERROR(COO_ESPECIAL);
+ }
}
else if (n == 2) {
char **sdomain;
@@ -315,8 +341,9 @@ add_cookie(ParsedURL *pu, Str name, Str value,
strcasecmp(*sdomain, &domain->ptr[offset]) == 0)
ok = 1;
}
- if (!ok)
+ if (!ok && ! check_avoid_wrong_number_of_dots_domain(domain)) {
COOKIE_ERROR(COO_ESPECIAL);
+ }
}
}
else {
diff --git a/display.c b/display.c
index 386c42f..e00eb0c 100644
--- a/display.c
+++ b/display.c
@@ -1,4 +1,4 @@
-/* $Id: display.c,v 1.70 2007/05/29 12:07:02 inu Exp $ */
+/* $Id: display.c,v 1.71 2010/07/18 14:10:09 htrb Exp $ */
#include <signal.h>
#include "fm.h"
@@ -380,7 +380,7 @@ displayBuffer(Buffer *buf, int mode)
if (buf->height == 0)
buf->height = LASTLINE + 1;
if ((buf->width != INIT_BUFFER_WIDTH &&
- ((buf->type && !strcmp(buf->type, "text/html")) || FoldLine))
+ (is_html_type(buf->type) || FoldLine))
|| buf->need_reshape) {
buf->need_reshape = TRUE;
reshapeBuffer(buf);
diff --git a/doc-jp/CVS/Entries b/doc-jp/CVS/Entries
new file mode 100644
index 0000000..cfd3d8e
--- /dev/null
+++ b/doc-jp/CVS/Entries
@@ -0,0 +1,26 @@
+/FAQ.html/1.9/Sat Apr 8 11:26:23 2006//
+/HISTORY/1.1.1.1/Thu Nov 8 05:16:27 2001//
+/README.SSL/1.4/Tue May 13 17:17:54 2003//
+/README.cygwin/1.4/Sun Feb 23 16:00:17 2003//
+/README.dict/1.4/Wed Apr 24 18:46:48 2002//
+/README.func/1.22/Mon Sep 22 21:02:23 2003//
+/README.keymap/1.1.1.1/Thu Nov 8 05:16:34 2001//
+/README.mailcap/1.2/Fri Nov 9 04:59:18 2001//
+/README.menu/1.2/Wed Nov 27 16:28:37 2002//
+/README.migemo/1.2/Tue May 13 17:17:54 2003//
+/README.mouse/1.1/Mon Nov 25 17:23:47 2002//
+/README.pre_form/1.3/Mon May 12 16:24:53 2003//
+/README.tab/1.1/Tue Nov 5 17:24:48 2002//
+/STORY.html/1.3/Tue May 13 17:17:54 2003//
+/keymap.lynx/1.4/Fri Dec 13 03:02:04 2002//
+/menu.default/1.4/Fri Apr 7 15:22:07 2006//
+/menu.submenu/1.3/Fri Apr 7 15:22:07 2006//
+/keymap.default/1.8/Sat Jun 10 09:52:18 2006//
+/MANUAL.html/1.9/Tue Jan 4 09:22:24 2011//
+/README.img/1.7/Tue Jan 4 09:22:24 2011//
+/README.m17n/1.3/Tue Jan 4 09:22:24 2011//
+/README.passwd/1.1/Tue Aug 3 10:02:16 2010//
+/w3m.1/1.7/Tue Jan 4 09:22:24 2011//
+/README.cookie/1.4/Sat Jan 15 01:57:39 2011//
+/README/1.26/Sat Jan 15 02:17:10 2011//
+D
diff --git a/doc-jp/CVS/Repository b/doc-jp/CVS/Repository
new file mode 100644
index 0000000..f7f574e
--- /dev/null
+++ b/doc-jp/CVS/Repository
@@ -0,0 +1 @@
+w3m/doc-jp
diff --git a/doc-jp/CVS/Root b/doc-jp/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/doc-jp/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
index 0b24619..41d70f1 100644
--- a/doc-jp/MANUAL.html
+++ b/doc-jp/MANUAL.html
@@ -100,8 +100,6 @@ HTML¥Õ¥¡¥¤¥ë¤Î¥½¡¼¥¹¤òɽ¼¨¤¹¤ë
¥ª¥×¥·¥ç¥ó¤Î̾Á°¤äÃͤϡ¤~/.w3m/config ¤Ç»ØÄꤹ¤ë¤â¤Î¤ÈƱ¤¸¡¥
<dt>-no-proxy
<dd>¥×¥í¥­¥·¤òÍøÍѤ·¤Ê¤¤¡¥
-<dt>-pauth user:pass
-<dd>¥×¥í¥­¥·Ç§¾ÚÍѤΥ桼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò»ØÄꤹ¤ë¡¥
<dt>-no-mouse
<dd>¥Þ¥¦¥¹¤òÍøÍѤ·¤Ê¤¤¡¥
<dt>-cookie
diff --git a/doc-jp/README b/doc-jp/README
index 7e3c0f5..074766f 100644
--- a/doc-jp/README
+++ b/doc-jp/README
@@ -1,4 +1,4 @@
- w3m: WWW wo Miru Tool version 0.5.2 May 31, 2007
+ w3m: WWW wo Miru Tool version 0.5.3 Jan 15, 2011
(C) Copyright by Akinori ITO
Hironori SAKAMOTO
Fumitoshi UKAI
@@ -102,7 +102,7 @@ Windows
w3m ¤ÎÃøºî¸¢¤Ï¡¤°ËÆ£¾´Â§¤Ë°¤·¤Æ¤¤¤Þ¤¹¡¥
(C) Copyright 1994-2002 by Akinori Ito
-(C) Copyright 2002-2007 by Akinori Ito, Hironori Sakamoto, Fumitoshi Ukai
+(C) Copyright 2002-2011 by Akinori Ito, Hironori Sakamoto, Fumitoshi Ukai
4. ÇÛÉÛ¾ò·ï
diff --git a/doc-jp/README.cookie b/doc-jp/README.cookie
index e20e201..8741a5f 100644
--- a/doc-jp/README.cookie
+++ b/doc-jp/README.cookie
@@ -54,4 +54,9 @@
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹.
-
+
+ ¡¦ ¥É¥á¥¤¥ó¤Ë´Þ¤Þ¤ì¤ë "." ¤Î¿ô¤¬ 2 ¤è¤ê¤â¾®¤µ¤¤¤È¤­¤ÏÉÔÀµ¤Ê¥¯¥Ã¥­¡¼¤È
+ ¸«¤Ê¤µ¤ì¤Þ¤¹ (RFC 2109 4.3.2 »²¾È) ¤¬
+ cookie_avoid_wrong_number_of_dots ¤Ç»ØÄꤵ¤ì¤¿¥É¥á¥¤¥ó¤Ï¤³¤ÎÀ©¸Â¤ò
+ ¼õ¤±¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£Option Setting Panel ¤Î "[wrong number of dots]
+ ¤ò̵»ë¤¹¤ë¥É¥á¥¤¥ó" ¤ÇÀßÄê¤Ç¤­¤Þ¤¹¡£
diff --git a/doc-jp/README.img b/doc-jp/README.img
index 7ccd40b..d090bae 100644
--- a/doc-jp/README.img
+++ b/doc-jp/README.img
@@ -11,8 +11,8 @@ w3m ¤Ç¥¤¥ó¥é¥¤¥ó²èÁü¤òɽ¼¨
µ¡Ç½
- ¡¦X11 ¾å¤ÎüËö(xterm,kterm,rxvt,...)¤Þ¤¿¤Ï Linux ¤Î framebuffer ¾å¤Ë
- ²èÁü(GIF,PNG,JPEG Åù)¤òɽ¼¨¤·¤Þ¤¹¡£
+ ¡¦X11 ¾å¤ÎüËö(xterm,kterm,rxvt,...)¡¢ Linux ¤Î framebuffer ¾å¤Þ¤¿¤Ï
+ Windows üËö¾å¤Ë²èÁü(GIF,PNG,JPEG Åù)¤òɽ¼¨¤·¤Þ¤¹¡£
¡¦img ¥¿¥°¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥é¥¤¥ó²èÁü¤òɽ¼¨¤Ç¤­¤Þ¤¹¡£
width,height °À­¤Ë±þ¤¸¤ÆɬÍפÊÎΰè¤ò³ÎÊݤ·¤Æ¥ì¥ó¥À¥ê¥ó¥°¤·¤Þ¤¹¡£
align °À­¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¡£
@@ -127,6 +127,13 @@ w3mimgdisplay ¤ÎÀßÄê
üËö¤ÎÇØ·Ê¿§¡£¥Ç¥Õ¥©¥ë¥È¤Ï¡¢X11 ¤Ç¤Ï¼«Æ°ÀßÄê¡¢Linux framebuffer
¤Ç¤Ï #000000 (¹õ)¡£
#RRGGBB ¤Ç»ØÄꤹ¤ë¾ì¹ç¤Ï # ¤ò¥¨¥¹¥±¡¼¥×¤·¤ÆÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+ -anim <n>
+ ¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Çɽ¼¨¤¹¤ëºÇÂç¥Õ¥ì¡¼¥à¿ô¤ò»ØÄê¡£0 ¤Î»þ¤ÏÀ©¸Â¤Ê¤·¡£
+ Éé¤Î»þ¤ÏºÇ¸å¤«¤é¤Î¥Õ¥ì¡¼¥à¿ô¤È¸«¤Ê¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ï 100¡£
+ -margin <n>
+ ²èÁü¤ò¥¯¥ê¥¢¤¹¤ëÎΰè¤Î¥Þ¡¼¥¸¥ó¤ò»ØÄꤷ¤Þ¤¹¡£¥¹¥¯¥í¡¼¥ë¤·¤¿¤È¤­²è
+ Ì̤˥´¥ß¤¬»Ä¤Ã¤Æ¤·¤Þ¤¦¾ì¹ç¤Ë»ØÄꤷ¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
+ ¥Ç¥Õ¥©¥ë¥È¤Ï 0¡£
Îã)
w3m -o 'imgdisplay=w3mimgdisplay -x 5 -bg "#cccccc"'
@@ -137,6 +144,7 @@ w3mimgdisplay ¤ÎÀßÄê
¤ÎŬÅö¤Ê¥­¡¼¤òÏ¢ÂǤ·¤Æ¤¯¤À¤µ¤¤¡£
¡¦framebuffer ÉÁ²è´Ø·¸¤Ë¤Ï¡¢²¼µ­ URI ¤Î¥³¡¼¥É¤òÍøÍѤ·¤Þ¤·¤¿¡£
http://www.sainet.or.jp/~yamasaki/download/fb-sample.tar.gz
+ ¡¦Windows ¤Ç¤Ïɸ½à¥³¥ó¥½¡¼¥ë¡¢Cygwin rxvt¡¢PuTTY¤ÇÆ°ºî³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£
¹¹¿·µ­Ï¿
diff --git a/doc-jp/README.m17n b/doc-jp/README.m17n
index 39efd93..97dac9f 100644
--- a/doc-jp/README.m17n
+++ b/doc-jp/README.m17n
@@ -225,12 +225,20 @@
strict_iso2022
¸·Ì©¤Ê ISO-2022-JP/KR/CN ¤ò»È¤¦(¥Ç¥Õ¥©¥ë¥È ON)
OFF ¤Ë¤¹¤ë¤È ISO 2022 ·Ï¤Îʸ»ú½¸¹ç¤ÏÁ´¤Æɽ¼¨/½ÐÎϤ¹¤ë¡£
+ east_asian_width
+ ¤¢¤ë¼ï¤ÎUnicodeʸ»ú¤òÁ´³Ñ¤Ë¤¹¤ë(¥Ç¥Õ¥©¥ë¥È OFF)
+ ON ¤Ë¤¹¤ë¤È East Asian Ambiguous ʸ»ú¤òÁ´³Ñ¤È¤ß¤Ê¤¹¡£
+ gb18030_as_ucs
+ GB18030 ¤Î 4¥Ð¥¤¥Èʸ»ú¤ò Unicode ¤È¤·¤Æ°·¤¦(¥Ç¥Õ¥©¥ë¥È OFF)
+ simple_preserve_space
+ ñ½ã¤Ê¶õÇò¤ÎÊݸ¡£
+ ON ¤Ë¤¹¤ë¤ÈÆüËܸì¤Ê¤É¤Ç¤âʸ»ú´Ö¤Î¶õÇò¤¬ºï½ü¤µ¤ì¤Ê¤¤¡£
alt_entity
¥¨¥ó¥Æ¥£¥Æ¥£¤ò ASCII ¤ÎÂåÂØɽ¸½¤Çɽ¤¹(¥Ç¥Õ¥©¥ë¥È ON)
OFF ¤Ë¤¹¤ë¤È ISO 8859-1 ¤È¤·¤Æ°·¤¦¡£
graphic_char
- ¥Æ¡¼¥Ö¥ë¤ä¥á¥Ë¥å¡¼¤ÎÏÈ¤Ë graphic ʸ»ú¤ò»È¤¦(¥Ç¥Õ¥©¥ë¥È OFF)
+ ¥Æ¡¼¥Ö¥ë¤ä¥á¥Ë¥å¡¼¤ÎÏÈ¤Ë DEC Æüìʸ»úʸ»ú¤ò»È¤¦(¥Ç¥Õ¥©¥ë¥È OFF)
OFF ¤Î¾ì¹ç CJK ¤Îʸ»ú¥³¡¼¥É¡¢UTF-8 ¤Ç¤Ï·ÓÀþ¤ò»È¤¦¡£
¥³¡¼¥ÉÊÑ´¹
diff --git a/doc-jp/README.passwd b/doc-jp/README.passwd
new file mode 100644
index 0000000..efefdb3
--- /dev/null
+++ b/doc-jp/README.passwd
@@ -0,0 +1,22 @@
+HTTP $BG'>Z$N$"$k%Z!<%8$dG'>Z$N$"$k(B proxy $B$KBP$7$F!"(B
+$B%f!<%6L>$H%Q%9%o!<%I$r@_Dj$7$F$*$/$3$H$,=PMh$^$9!#(B
+
+passwd_file $B$G;XDj$7$?%U%!%$%k$K<!$N$h$&$K=q$$$F$*$1$P$=$l$r8+$^$9!#(B
+
+machine $B%[%9%HL>(B
+port $B%]!<%HHV9f(B
+path $B%m!<%+%k%Q!<%H(B
+realm realm$B$NJ8;zNs(B
+login $B%f!<%6L>(B
+passwd $B%Q%9%o!<%I(B
+proxy
+
+machine$B$G$O$8$^$C$F<!$N(Bmachine$B$^$G!#(B
+netrc$B$.$_$G$9$,4JC1$K$9$k$?$a$K0l9T$E$D!#(B
+port, path, realm $B$O>JN,2DG=(B
+
+proxy $B$H=q$$$?>l9g$O(B proxy $B$N%Q%9%o!<%I$H$_$J$7$^$9!#(B
+
+passwd_file $B$,B>$N%f!<%6!<$+$iFI$a$k>l9g7Y9p$,=P$^$9$,!"(BOS $B$N@)8B$J$I$G(B
+$B%U%!%$%k$N%Q!<%_%C%7%g%s$rJQ$($i$l$J$$>l9g$O$3$N7Y9p$r(B
+disable_secret_security_check $B$N@_Dj$GL58z$K$G$-$^$9!#(B
diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1
index 1f119da..89aacb6 100644
--- a/doc-jp/w3m.1
+++ b/doc-jp/w3m.1
@@ -112,9 +112,6 @@ Bookmark ¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¡¥
.B \-no\-proxy
¥×¥í¥­¥·¤òÍøÍѤ·¤Ê¤¤¡¥
.TP
-.BI \-pauth\ user:pass
-¥×¥í¥­¥·Ç§¾ÚÍѤΥ桼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò»ØÄꤹ¤ë¡¥
-.TP
.B \-no\-mouse
¥Þ¥¦¥¹¤òÍøÍѤ·¤Ê¤¤¡¥
.TP
@@ -264,7 +261,7 @@ FORM¤ÎÆþÎÏÉôʬ;ÀÖ¿§;ȿžɽ¼¨
.B "ESC g"
²èÌ̲¼¤Ç¹ÔÈÖ¹æ¤òÆþÎϤ·¡¤¤½¤³¤Ç»ØÄꤷ¤¿¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥
¤³¤³¤Ç
-.$
+.B $
¤òÆþÎϤ¹¤ë¤È¡¤ºÇ½ª¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥
.TP
.B Z
@@ -337,7 +334,6 @@ URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹¡¥
¸½ºß¤Î¥ê¥ó¥¯Àè¤ò¡¤³°Éô¥Ö¥é¥¦¥¶¤ò»È¤Ã¤Æɽ¼¨¤·¤Þ¤¹¡¥
.B "2ESC M", "3ESC M"
¤Ç2ÈÖÌܤÈ3ÈÖÌܤΥ֥饦¥¶¤ò»È¤¤¤Þ¤¹¡¥
-.El
.SS ¥Õ¥¡¥¤¥ë¤ÈURL´Ø·¸¤ÎÁàºî
.TP
.B U
@@ -377,9 +373,9 @@ HTML¤Î¥½¡¼¥¹¤òɽ¼¨¤·¤Þ¤¹¡¥
.TP
.B "ESC s"
HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥
-.v
+.B v
¤Ç¥½¡¼¥¹¤òɽ¼¨¤·¤Æ
-.S
+.B S
¤ÇÊݸ¤¹¤ë¤Î¤È¤Û¤ÜƱ¤¸¤Ç¤¹¤¬¡¤
.B "ESC s"
¤ÇÊݸ¤·¤¿¥Õ¥¡¥¤¥ë¤Ï´Á»ú¥³¡¼¥É¤¬¥ª¥ê¥¸¥Ê¥ë¤Î¤Þ¤Þ¤Ç¤¢¤ë¤Î¤ËÂФ·¤Æ¡¤
@@ -403,7 +399,6 @@ HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥
.TP
.B RET
¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤òɽ¼¨¤·¤Þ¤¹¡¥
-.El
.SS ¥Ö¥Ã¥¯¥Þ¡¼¥¯Áàºî
.TP
.B "ESC b"
diff --git a/doc/CVS/Entries b/doc/CVS/Entries
new file mode 100644
index 0000000..8cae998
--- /dev/null
+++ b/doc/CVS/Entries
@@ -0,0 +1,21 @@
+/HISTORY/1.2/Tue Jul 9 05:54:46 2002//
+/README.cygwin/1.5/Sun Feb 23 16:00:16 2003//
+/README.dict/1.4/Wed Apr 24 18:46:48 2002//
+/README.func/1.21/Mon Sep 22 21:02:22 2003//
+/README.mouse/1.1/Mon Nov 25 17:23:45 2002//
+/README.pre_form/1.3/Mon May 12 16:24:53 2003//
+/README.tab/1.1/Tue Nov 5 17:24:47 2002//
+/STORY.html/1.3/Wed Nov 21 04:29:14 2001//
+/keymap.lynx/1.4/Fri Dec 13 03:02:04 2002//
+/menu.default/1.4/Fri Apr 7 15:05:49 2006//
+/menu.submenu/1.3/Fri Apr 7 15:05:49 2006//
+/keymap.default/1.8/Sat Jun 10 09:52:18 2006//
+/FAQ.html/1.9/Tue Jan 4 09:22:24 2011//
+/MANUAL.html/1.6/Tue Jan 4 09:22:24 2011//
+/README.img/1.6/Tue Jan 4 09:22:24 2011//
+/README.m17n/1.3/Tue Jan 4 09:22:24 2011//
+/README.passwd/1.1/Tue Aug 3 10:02:16 2010//
+/README.cookie/1.2/Sat Jan 15 01:57:39 2011//
+/README/1.26/Sat Jan 15 02:17:25 2011//
+/w3m.1/1.9/Sat Jan 15 06:37:24 2011//
+D
diff --git a/doc/CVS/Repository b/doc/CVS/Repository
new file mode 100644
index 0000000..5431c7e
--- /dev/null
+++ b/doc/CVS/Repository
@@ -0,0 +1 @@
+w3m/doc
diff --git a/doc/CVS/Root b/doc/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/doc/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/doc/FAQ.html b/doc/FAQ.html
index 50478e3..ed2a704 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -54,7 +54,7 @@ Corrected by Tom Berger &lt;tom.be@gmx.net&gt;
<li><h3>w3m appends a URL to the former one despite of having cleared the line with Ctrl-u. What to do?</h3>
</ul>
<br>
-<li><a href="other"><h2>Misc</a></h2>
+<li><a href="#other"><h2>Misc</a></h2>
<ul>
<li><h3>What is w3m's configuration file?</h3>
<li><h3>What are these w3mxxxx files in my ~/.w3m directory for?</h3>
diff --git a/doc/MANUAL.html b/doc/MANUAL.html
index 4877f72..aff0189 100644
--- a/doc/MANUAL.html
+++ b/doc/MANUAL.html
@@ -103,8 +103,6 @@ same as that appears in ~/.w3m/config.
<dd>Process cookies.
<dt>-no-cookie
<dd>Don't process cookies.
-<dt>-pauth username:password
-<dd>Set username and password for (basic) proxy authentication.
<dt>-num
<dd>Show linenumber.
<dt>-dump
@@ -131,7 +129,7 @@ with -cols option.
<dt>-no-proxy
<dd>Don't use proxy server.
<dt>-no-graph
-<dd>Don't use graphic character to draw frames.
+<dd>Use ASCII character to draw frames.
<dt>-no-mouse
<dd>Don't activate mouse.
<dt>-config file
diff --git a/doc/README b/doc/README
index e696900..324ea3e 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
- w3m: WWW wo Miru Tool version 0.5.2 May 31, 2007
+ w3m: WWW wo Miru Tool version 0.5.3 Jan 15, 2011
(C) Copyright Akinori ITO
Hironori SAKAMOTO
Fumitoshi UKAI
@@ -90,7 +90,7 @@ Windows
3. Copyright
(C) Copyright 1994-2002 by Akinori Ito
- (C) Copyright 2002-2007 by Akinori Ito, Hironori Sakamoto, Fumitoshi Ukai
+ (C) Copyright 2002-2011 by Akinori Ito, Hironori Sakamoto, Fumitoshi Ukai
4. License
diff --git a/doc/README.cookie b/doc/README.cookie
new file mode 100644
index 0000000..56cca50
--- /dev/null
+++ b/doc/README.cookie
@@ -0,0 +1,44 @@
+cookie support of w3m
+
+
+ (2000/11/07) K. Okada
+ okabek@guitar.ocn.ne.jp
+
+ * Support of version 0 (http://www.netscape.com/newsref/std/cookie_spec.html)
+ and version 1 (http://www.ics.uci.edu/pub/ietf/http/rfc2109.txt,
+ http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-state-man-mec-12.txt)
+ cookie.
+
+ * If you wont to disable cookie support, run configure script with
+ --disable-cookie option.
+
+ * You can choose to use cookie or not on the Option Setting Panel or
+ -cookie and -no-cookie option.
+
+ * You can disable cookie on the Option Setting Panel. In this case
+ all cookies are rejected, however, cookies which accepted before
+ disable cookie are used.
+
+ * You can see list of accepted cookies with C-k. In this panel, you
+ can choose to use each cookie or not.
+
+ * You can specify domains accept or not accept cookies on the Option
+ Setting Panel. Domains are specified with following format.
+
+ domain-list = domains
+ | ""
+ domains = domain
+ | domain + "," + domains
+ domain = "." + domain-name ; match with domain name
+ | host-domain-name ; match with HDN
+ | ".local" ; match with all HDN except which include "."
+ | "." ; match with all
+
+ (HDN: host domain name)
+
+
+ ¡¦ If the number of "." in domain name is lesser than 2, it is
+ assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can
+ use cookie_avoid_wrong_number_of_dots to avoid this
+ restriction. You can set this in "Domains to avoid [wrong number
+ of dots]" on the Option Setting Panel.
diff --git a/doc/README.img b/doc/README.img
index 45eb338..0c10114 100644
--- a/doc/README.img
+++ b/doc/README.img
@@ -12,7 +12,8 @@ Introduction
Support
* Display inline image (GIF,PNG,JPEG, etc.) on terminals
- (xterm,rxvt, etc.) of X11 or Linux framebuffer device.
+ (xterm,rxvt, etc.) of X11, Linux framebuffer device or
+ terminals of Windows.
* Support inline image of <img> tag.
Support of attributes "width", "height", and "align".
* Direct display of image file which header is "Content-type: image/*"
@@ -42,7 +43,7 @@ Key functions
keymap C-c STOP_IMAGE
keyamp t SET_OPTION display_image=toggle
-Comandline options
+Commandline options
-ppc <pixel>
# of pixels per character. The default value is automatically
@@ -70,7 +71,7 @@ Option panel
ext_image_viewer
Use external image viewer, when a command VIEW_IMAGE or
view of image file which header is "Content-type: image/*".
- The default is ON. If it is OFF, the image is directly displaied.
+ The default is ON. If it is OFF, the image is directly displayed.
image_scale
Scale of image (%). The default value is 100(%).
imgdisplay
@@ -122,6 +123,12 @@ Setting w3mimgdisplay
automatically detected.
The default value for Linux framebuffer device is #000000 (black).
When the color is specified as #RRGGBB, escape '#'.
+ -anim <n>
+ Maximum number of frames for animation. It means without limit
+ if the number is 0. Negative value count backward from the end
+ of the frames. The default value is 100.
+ -margin <n>
+ Margin of an area to clear an image. The default value is 0.
ex.)
w3m -o 'imgdisplay=w3mimgdisplay -x 5 -bg "#cccccc"'
@@ -134,6 +141,10 @@ Notice
Some code in w3mimg/fb/fb.c was originally written by Mr. Yamasaki.
http://www.sainet.or.jp/~yamasaki/download/fb-sample.tar.gz
+ On Windows, we check the behaver on standard console, Cygwin rxvt
+ and PuTTY.
+
+
Change log
2002/02/04
@@ -151,7 +162,7 @@ Change log
2002/01/28 w3m-0.2.4-img-2.0
* Based on w3m-0.2.4+cvs-1.265.
* pixel_per_char and pixel_per_line are automatically detected.
- * The bckground color of terminal is automatically detected.
+ * The background color of terminal is automatically detected.
* The source code to display images is moved to image.c
2002/01/08 w3m-0.2.4-img-1.18
diff --git a/doc/README.m17n b/doc/README.m17n
index 0dd1b78..c064d76 100644
--- a/doc/README.m17n
+++ b/doc/README.m17n
@@ -197,12 +197,20 @@ Option pannel
Strict ISO-2022-JP/KR/CN. (Default: ON)
If it is OFF, all ISO 2022 base character set can be displayed
with ISO-2022-JP/KR/CN.
+ east_asian_width
+ Use double width for some Unicode characters. (Default: OFF)
+ If it is ON, treat East Asian Ambiguous characters as double width.
+ gb18030_as_ucs
+ Treat 4 bytes char. of GB18030 as Unicode. (Default: OFF)
+ simple_preserve_space
+ Simple Preserve space.
+ If it is ON, a space is remained in Japanese and some other languages.
alt_entity
Use alternate expression with ASCII for entities. (Default: ON)
If it is OFF, entities are treated as ISO 8859-1
graphic_char
- Use graphic char for border of table and menu.
+ Use DEC special graphics for border of table and menu.
If it is OFF, ruled line is used with CJK charset or UTF-8.
Code conversion
diff --git a/doc/README.passwd b/doc/README.passwd
new file mode 100644
index 0000000..f65fa77
--- /dev/null
+++ b/doc/README.passwd
@@ -0,0 +1,23 @@
+You can save your passwords and usernames for a web page which require
+HTTP certification or a proxy certification.
+
+The configuration file is designated in "passwd_file" parameter. The
+format of the configuration file is as follows
+
+machine hostname
+port port number
+path local part
+realm realm string
+login username
+passwd password
+proxy
+
+Each configuration is began with machine and ended before the next machine.
+You can omit port, path and realm.
+
+proxy means settings for proxy certification.
+
+If passwd_file is readable from other users, w3m shows a warning for
+that. If you can not set the permission for the passwd_file because
+of the restriction of your OS, you can suppress the warning with the
+setting of disable_secret_security_check.
diff --git a/doc/w3m.1 b/doc/w3m.1
index 47b6cf1..aeb4a60 100644
--- a/doc/w3m.1
+++ b/doc/w3m.1
@@ -8,7 +8,6 @@ w3m \- a text based Web browser and pager
.B w3m
[options] [URL or filename]
.PP
-Use "w3m -h" to display a complete list of current options.
.SH DESCRIPTION
.\" This defines appropriate quote strings for nroff and troff
.ds lq \&"
@@ -53,6 +52,12 @@ ignore backspace effect
.B -l line
# of preserved line (default 10000)
.TP
+.B -I charset
+document charset
+.TP
+.B -O charset
+display/output charset
+.TP
.B -B
load bookmark
.TP
@@ -71,6 +76,9 @@ visual startup mode
.B -M
monochrome display
.TP
+.B -N
+open URL of command line on each new tab
+.TP
.B -F
automatically render frame
.TP
@@ -81,8 +89,11 @@ dump formatted page into stdout
specify column width (used with -dump)
.TP
.B -ppc count
-specify the number of pixels per character (default 8.0)
-Larger values will make tables narrower.
+specify the number of pixels per character (4.0...32.0).
+Larger values will make tables narrower. [default 8.0]
+.TP
+.B -ppl count
+specify the number of pixels per line (4.0...64.0)
.TP
.B -dump_source
dump page source into stdout
@@ -111,6 +122,12 @@ show line number
.B -no-proxy
don't use proxy
.TP
+.B -4
+IPv4 only (-o dns_order=4)
+.TP
+.B -6
+IPv6 only (-o dns_order=6)
+.TP
.B -no-mouse
don't use mouse
.TP
@@ -120,8 +137,11 @@ use cookie.
.B -no-cookie
don't use cookie
.TP
-.B -pauth user:pass
-proxy authentication
+.B -graph
+use graphic character
+.TP
+.B -no-graph
+don't use graphic character
.TP
.B -S
squeeze multiple blank lines
@@ -133,7 +153,7 @@ toggle wrap search mode
don't use termcap init/deinit
.TP
.B -title [=TERM]
-set buffer name to termianl title string.
+set buffer name to terminal title string.
If TERM is specified, use the TERM style title configuration.
.TP
.B -o opt=value
@@ -151,6 +171,9 @@ show usage
.B -version
show w3m version
.TP
+.B -reqlog
+write request logfile
+.TP
.B -debug
DO NOT USE
.SH EXAMPLES
@@ -167,12 +190,49 @@ $ cat foo.html | w3m -T text/html
or
.br
$ cat foo.html | w3m -dump -T text/html >foo.txt
+.SH FILES
+.TP
+.I ${HOME}/.w3m/config
+configuration file
+.TP
+.I ${HOME}/.w3m/keymap
+key binding configuration file
+.\" .TP
+.\" .I ${HOME}/.w3m/menu
+.\" ???
+.TP
+.I ${HOME}/.w3m/mouse
+mouse configuration file
+.TP
+.I ${HOME}/.w3m/cookie
+cookie file
+.TP
+.I ${HOME}/.w3m/history
+history file
+.TP
+.I ${HOME}/.w3m/passwd
+passowrd and username file
+.TP
+.I ${HOME}/.w3m/pre_form
+form parameters file
+.TP
+.I ${HOME}/.w3m/mailcap
+external viewer configuration file
+.TP
+.I ${HOME}/.w3m/mime.types
+MIME types file
+.\" .TP
+.\" .I ${HOME}/.w3m/urimethodmap
+.\" ???
.SH NOTES
This is the
.I
w3m
-0.2.1 Release.
+0.5.3 Release.
.PP
+Please see the MANUAL.html file distributed with w3m for
+more detailed documentation.
+
Additional information about
.I
w3m
diff --git a/entity.h b/entity.h
index 2c15b3a..e338883 100644
--- a/entity.h
+++ b/entity.h
@@ -1,4 +1,4 @@
-/* $Id: entity.h,v 1.3 2001/11/24 02:01:26 ukai Exp $ */
+/* $Id: entity.h,v 1.6 2011/01/04 11:03:20 htrb Exp $ */
#include "hash.h"
static HashItem_si MyHashItem[] = {
/* 0 */ {"otimes", 0x2297, &MyHashItem[1]},
diff --git a/file.c b/file.c
index 0e559c6..d4c47fd 100644
--- a/file.c
+++ b/file.c
@@ -1,4 +1,4 @@
-/* $Id: file.c,v 1.254 2007/05/23 15:06:05 inu Exp $ */
+/* $Id: file.c,v 1.265 2010/12/15 10:50:24 htrb Exp $ */
#include "fm.h"
#include <sys/types.h>
#include "myctype.h"
@@ -262,6 +262,8 @@ is_text_type(char *type)
{
return (type == NULL || type[0] == '\0' ||
strncasecmp(type, "text/", 5) == 0 ||
+ (strncasecmp(type, "application/", 12) == 0 &&
+ strstr(type, "xhtml") != NULL) ||
strncasecmp(type, "message/", sizeof("message/") - 1) == 0);
}
@@ -272,6 +274,13 @@ is_plain_text_type(char *type)
(is_text_type(type) && !is_dump_text_type(type)));
}
+int
+is_html_type(char *type)
+{
+ return (type && (strcasecmp(type, "text/html") == 0 ||
+ strcasecmp(type, "application/xhtml+xml") == 0));
+}
+
static void
check_compression(char *path, URLFile *uf)
{
@@ -373,7 +382,7 @@ examineFile(char *path, URLFile *uf)
uf->guess_type = guessContentType(path);
if (uf->guess_type == NULL)
uf->guess_type = "text/plain";
- if (strcasecmp(uf->guess_type, "text/html") == 0)
+ if (is_html_type(uf->guess_type))
return;
if ((fp = lessopen_stream(path))) {
UFclose(uf);
@@ -1209,7 +1218,7 @@ AuthBasicCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
*/
static Str
-digest_hex(char *p)
+digest_hex(unsigned char *p)
{
char *h = "0123456789abcdef";
Str tmp = Strnew_size(MD5_DIGEST_LENGTH * 2 + 1);
@@ -1232,7 +1241,7 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
HRequest *hr, FormList *request)
{
Str tmp, a1buf, a2buf, rd, s;
- char md5[MD5_DIGEST_LENGTH + 1];
+ unsigned char md5[MD5_DIGEST_LENGTH + 1];
Str uri = HTTPrequestURI(pu, hr);
char nc[] = "00000001";
@@ -1244,7 +1253,7 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
static union {
int r[4];
- char s[sizeof(int) * 4];
+ unsigned char s[sizeof(int) * 4];
} cnonce_seed;
int qop_i = QOP_NONE;
@@ -1679,6 +1688,12 @@ checkRedirection(ParsedURL *pu)
return TRUE;
}
+Str
+getLinkNumberStr(int correction)
+{
+ return Sprintf("[%d]", cur_hseq + correction);
+}
+
/*
* loadGeneralFile: load file to buffer
*/
@@ -1911,6 +1926,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
UFclose(&f);
add_auth_cookie_flag = 1;
status = HTST_NORMAL;
+ add_auth_user_passwd(auth_pu, qstr_unquote(realm)->ptr, uname, pwd, 1);
goto load_doc;
}
}
@@ -2055,6 +2071,10 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
t = f.guess_type;
}
+ /* XXX: can we use guess_type to give the type to loadHTMLstream
+ * to support default utf8 encoding for XHTML here? */
+ f.guess_type = t;
+
page_loaded:
if (page) {
FILE *src;
@@ -2166,7 +2186,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
}
#endif
- if (!strcasecmp(t, "text/html"))
+ if (is_html_type(t))
proc = loadHTMLBuffer;
else if (is_plain_text_type(t))
proc = loadBuffer;
@@ -2230,7 +2250,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
b->real_type = real_type;
if (b->currentURL.host == NULL && b->currentURL.file == NULL)
copyParsedURL(&b->currentURL, &pu);
- if (!strcasecmp(t, "text/html"))
+ if (is_html_type(t))
b->type = "text/html";
else if (w3m_backend) {
Str s = Strnew_charp(t);
@@ -3211,6 +3231,8 @@ process_img(struct parsed_tag *tag, int width)
p = remove_space(p);
q = NULL;
parsedtag_get_value(tag, ATTR_ALT, &q);
+ if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt)))
+ return tmp;
t = q;
parsedtag_get_value(tag, ATTR_TITLE, &t);
w = -1;
@@ -3592,9 +3614,13 @@ process_input(struct parsed_tag *tag)
case FORM_INPUT_TEXT:
case FORM_INPUT_FILE:
case FORM_INPUT_CHECKBOX:
+ if (displayLinkNumber)
+ Strcat(tmp, getLinkNumberStr(0));
Strcat_char(tmp, '[');
break;
case FORM_INPUT_RADIO:
+ if (displayLinkNumber)
+ Strcat(tmp, getLinkNumberStr(0));
Strcat_char(tmp, '(');
}
Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
@@ -3635,6 +3661,8 @@ process_input(struct parsed_tag *tag)
case FORM_INPUT_SUBMIT:
case FORM_INPUT_BUTTON:
case FORM_INPUT_RESET:
+ if (displayLinkNumber)
+ Strcat(tmp, getLinkNumberStr(-1));
Strcat_charp(tmp, "[");
break;
}
@@ -3721,9 +3749,12 @@ process_select(struct parsed_tag *tag)
#ifdef MENU_SELECT
if (!select_is_multiple) {
- select_str = Sprintf("<pre_int>[<input_alt hseq=\"%d\" "
+ select_str = Strnew_charp("<pre_int>");
+ if (displayLinkNumber)
+ Strcat(select_str, getLinkNumberStr(0));
+ Strcat(select_str, Sprintf("[<input_alt hseq=\"%d\" "
"fid=\"%d\" type=select name=\"%s\" selectnumber=%d",
- cur_hseq++, cur_form_id, html_quote(p), n_select);
+ cur_hseq++, cur_form_id, html_quote(p), n_select));
Strcat_charp(select_str, ">");
if (n_select == max_select) {
max_select *= 2;
@@ -3881,6 +3912,8 @@ process_textarea(struct parsed_tag *tag, int width)
{
Str tmp = NULL;
char *p;
+#define TEXTAREA_ATTR_COL_MAX 4096
+#define TEXTAREA_ATTR_ROWS_MAX 4096
if (cur_form_id < 0) {
char *s = "<form_int method=internal action=none>";
@@ -3895,14 +3928,20 @@ process_textarea(struct parsed_tag *tag, int width)
cur_textarea_size = atoi(p);
if (p[strlen(p) - 1] == '%')
cur_textarea_size = width * cur_textarea_size / 100 - 2;
- if (cur_textarea_size <= 0)
+ if (cur_textarea_size <= 0) {
cur_textarea_size = 20;
+ } else if (cur_textarea_size > TEXTAREA_ATTR_COL_MAX) {
+ cur_textarea_size = TEXTAREA_ATTR_COL_MAX;
+ }
}
cur_textarea_rows = 1;
if (parsedtag_get_value(tag, ATTR_ROWS, &p)) {
cur_textarea_rows = atoi(p);
- if (cur_textarea_rows <= 0)
+ if (cur_textarea_rows <= 0) {
cur_textarea_rows = 1;
+ } else if (cur_textarea_rows > TEXTAREA_ATTR_ROWS_MAX) {
+ cur_textarea_rows = TEXTAREA_ATTR_ROWS_MAX;
+ }
}
cur_textarea_readonly = parsedtag_exists(tag, ATTR_READONLY);
if (n_textarea >= max_textarea) {
@@ -3975,13 +4014,18 @@ process_hr(struct parsed_tag *tag, int width, int indent_width)
Str tmp = Strnew_charp("<nobr>");
int w = 0;
int x = ALIGN_CENTER;
+#define HR_ATTR_WIDTH_MAX 65535
if (width > indent_width)
width -= indent_width;
- if (parsedtag_get_value(tag, ATTR_WIDTH, &w))
+ if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) {
+ if (w > HR_ATTR_WIDTH_MAX) {
+ w = HR_ATTR_WIDTH_MAX;
+ }
w = REAL_WIDTH(w, width);
- else
+ } else {
w = width;
+ }
parsedtag_get_value(tag, ATTR_ALIGN, &x);
switch (x) {
@@ -4771,6 +4815,8 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
obuf->anchor.hseq = cur_hseq;
tmp = process_anchor(tag, h_env->tagbuf->ptr);
push_tag(obuf, tmp->ptr, HTML_A);
+ if (displayLinkNumber)
+ HTMLlineproc1(getLinkNumberStr(-1)->ptr, h_env);
return 1;
}
return 0;
@@ -5229,6 +5275,7 @@ textlist_feed()
return NULL;
}
+static int
ex_efct(int ex)
{
int effect = 0;
@@ -6336,7 +6383,7 @@ HTMLlineproc0(char *line, struct html_feed_environ *h_env, int internal)
is_hangul = wtf_is_hangul((wc_uchar *) str);
else
is_hangul = 0;
- if (mode == PC_KANJI1 &&
+ if (!SimplePreserveSpace && mode == PC_KANJI1 &&
!is_hangul && !prev_is_hangul &&
obuf->pos > h_env->envs[h_env->envc].indent &&
Strlastchar(obuf->line) == ' ') {
@@ -6949,6 +6996,8 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
}
if (content_charset && UseContentCharset)
doc_charset = content_charset;
+ else if (f->guess_type && !strcasecmp(f->guess_type, "application/xhtml+xml"))
+ doc_charset = WC_CES_UTF_8;
meta_charset = 0;
#endif
#if 0
@@ -7383,8 +7432,7 @@ _saveBuffer(Buffer *buf, Line *l, FILE * f, int cont)
wc_ces charset = DisplayCharset ? DisplayCharset : WC_CES_US_ASCII;
#endif
- if (buf->type && !strcasecmp(buf->type, "text/html"))
- is_html = TRUE;
+ is_html = is_html_type(buf->type);
pager_next:
for (; l != NULL; l = l->next) {
@@ -7541,7 +7589,7 @@ openGeneralPagerBuffer(InputStream stream)
t = DefaultType;
DefaultType = NULL;
}
- if (!strcasecmp(t, "text/html")) {
+ if (is_html_type(t)) {
buf = loadHTMLBuffer(&uf, t_buf);
buf->type = "text/html";
}
@@ -7749,7 +7797,13 @@ save2tmp(URLFile uf, char *tmpf)
{
Str buf = Strnew_size(SAVE_BUF_SIZE);
while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
- Strfputs(buf, ff);
+ if (Strfputs(buf, ff) != buf->length) {
+ bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
+ TRAP_OFF;
+ fclose(ff);
+ current_content_length = 0;
+ return -2;
+ }
linelen += buf->length;
showProgress(&linelen, &trbyte);
}
@@ -8078,16 +8132,20 @@ doFileSave(URLFile uf, char *defstr)
flush_tty();
pid = fork();
if (!pid) {
+ int err;
if ((uf.content_encoding != CMP_NOCOMPRESS) && AutoUncompress) {
uncompress_stream(&uf, &tmpf);
if (tmpf)
unlink(tmpf);
}
setup_child(FALSE, 0, UFfileno(&uf));
- if (!save2tmp(uf, p) && PreserveTimestamp && uf.modtime != -1)
+ err = save2tmp(uf, p);
+ if (err == 0 && PreserveTimestamp && uf.modtime != -1)
setModtime(p, uf.modtime);
UFclose(&uf);
unlink(lock);
+ if (err != 0)
+ exit(-err);
exit(0);
}
addDownloadList(pid, uf.url, p, lock, current_content_length);
@@ -8351,7 +8409,7 @@ reloadBuffer(Buffer *buf)
buf->hmarklist->nmark = 0;
if (buf->imarklist)
buf->imarklist->nmark = 0;
- if (!strcasecmp(buf->type, "text/html"))
+ if (is_html_type(buf->type))
loadHTMLBuffer(&uf, buf);
else
loadBuffer(&uf, buf);
diff --git a/fm.h b/fm.h
index 7ac6b30..8378939 100644
--- a/fm.h
+++ b/fm.h
@@ -1,4 +1,4 @@
-/* $Id: fm.h,v 1.138 2007/05/30 04:47:24 inu Exp $ */
+/* $Id: fm.h,v 1.149 2010/08/20 09:47:09 htrb Exp $ */
/*
* w3m: WWW wo Miru utility
*
@@ -101,6 +101,9 @@ void bzero(void *, int);
#define LINELEN 256 /* Initial line length */
#define PAGER_MAX_LINE 10000 /* Maximum line kept as pager */
+#define MAXIMUM_COLS 1024
+#define DEFAULT_COLS 80
+
#ifdef USE_IMAGE
#define MAX_IMAGE 1000
#define MAX_IMAGE_SIZE 2048
@@ -517,7 +520,8 @@ typedef struct _DownloadList {
char *lock;
clen_t size;
time_t time;
- int ok;
+ int running;
+ int err;
struct _DownloadList *next;
struct _DownloadList *prev;
} DownloadList;
@@ -931,6 +935,7 @@ global int label_topline init(FALSE);
global int nextpage_topline init(FALSE);
global char *displayTitleTerm init(NULL);
global int displayLink init(FALSE);
+global int displayLinkNumber init(FALSE);
global int displayLineInfo init(FALSE);
global int DecodeURL init(FALSE);
global int retryAsHttp init(TRUE);
@@ -947,12 +952,19 @@ global int image_map_list init(TRUE);
#else
global int displayImage init(FALSE); /* XXX: emacs-w3m use display_image=off */
#endif
+global int pseudoInlines init(TRUE);
global char *Editor init(DEF_EDITOR);
#ifdef USE_W3MMAILER
global char *Mailer init(NULL);
#else
global char *Mailer init(DEF_MAILER);
#endif
+#ifdef USE_W3MMAILER
+#define MAILTO_OPTIONS_USE_W3MMAILER 0
+#endif
+#define MAILTO_OPTIONS_IGNORE 1
+#define MAILTO_OPTIONS_USE_MAILTO_URL 2
+global int MailtoOptions init(MAILTO_OPTIONS_IGNORE);
global char *ExtBrowser init(DEF_EXT_BROWSER);
global char *ExtBrowser2 init(NULL);
global char *ExtBrowser3 init(NULL);
@@ -976,8 +988,6 @@ global int IgnoreCase init(TRUE);
global int WrapSearch init(FALSE);
global int squeezeBlankLine init(FALSE);
global char *BookmarkFile init(NULL);
-global char *pauth init(NULL);
-global Str proxy_auth_cookie init(NULL);
global int UseExternalDirBuffer init(TRUE);
global char *DirBufferCommand init("file:///$LIB/dirlist" CGI_EXTENSION);
#ifdef USE_DICT
@@ -1038,6 +1048,7 @@ global char ExtHalfdump init(FALSE);
global char FollowLocale init(TRUE);
global char UseContentCharset init(TRUE);
global char SearchConv init(TRUE);
+global char SimplePreserveSpace init(FALSE);
#define Str_conv_from_system(x) wc_Str_conv((x), SystemCharset, InnerCharset)
#define Str_conv_to_system(x) wc_Str_conv_strict((x), InnerCharset, SystemCharset)
#define Str_conv_to_halfdump(x) (ExtHalfdump ? wc_Str_conv((x), InnerCharset, DisplayCharset) : (x))
@@ -1055,7 +1066,10 @@ global char SearchConv init(TRUE);
#define wc_Str_conv_strict(x,charset0,charset1) (x)
#endif
global char UseAltEntity init(TRUE);
-global char UseGraphicChar init(FALSE);
+#define GRAPHIC_CHAR_ASCII 2
+#define GRAPHIC_CHAR_DEC 1
+#define GRAPHIC_CHAR_CHARSET 0
+global char UseGraphicChar init(GRAPHIC_CHAR_CHARSET);
extern char *graph_symbol[];
extern char *graph2_symbol[];
extern int symbol_width;
@@ -1108,8 +1122,10 @@ global int accept_cookie init(FALSE);
global int accept_bad_cookie init(ACCEPT_BAD_COOKIE_DISCARD);
global char *cookie_reject_domains init(NULL);
global char *cookie_accept_domains init(NULL);
+global char *cookie_avoid_wrong_number_of_dots init(NULL);
global TextList *Cookie_reject_domains;
global TextList *Cookie_accept_domains;
+global TextList *Cookie_avoid_wrong_number_of_dots_domains;
#endif /* USE_COOKIE */
#ifdef USE_IMAGE
diff --git a/form.c b/form.c
index a9e52c0..b7556ca 100644
--- a/form.c
+++ b/form.c
@@ -1,4 +1,4 @@
-/* $Id: form.c,v 1.34 2004/02/05 17:23:07 ukai Exp $ */
+/* $Id: form.c,v 1.35 2010/07/18 13:48:48 htrb Exp $ */
/*
* HTML forms
*/
@@ -403,6 +403,7 @@ form_update_line(Line *line, char **str, int spos, int epos, int width,
line->lineBuf = buf;
line->propBuf = prop;
line->len = len;
+ line->size = len;
return pos;
}
diff --git a/ftp.c b/ftp.c
index e3f8c2e..0002abd 100644
--- a/ftp.c
+++ b/ftp.c
@@ -1,4 +1,4 @@
-/* $Id: ftp.c,v 1.39 2007/05/31 01:19:50 inu Exp $ */
+/* $Id: ftp.c,v 1.42 2010/12/15 10:50:24 htrb Exp $ */
#include <stdio.h>
#ifndef __MINGW32_VERSION
#include <pwd.h>
@@ -25,6 +25,10 @@
#include <winsock.h>
#endif /* __MINGW32_VERSION */
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
typedef struct _FTP {
char *host;
int port;
@@ -127,12 +131,30 @@ ftp_login(FTP ftp)
size_t n = strlen(ftp->pass);
if (n > 0 && ftp->pass[n - 1] == '@') {
+#ifdef INET6
+ struct sockaddr_storage sockname;
+#else
struct sockaddr_in sockname;
- int socknamelen = sizeof(sockname);
+#endif
+ socklen_t socknamelen = sizeof(sockname);
if (!getsockname(sock, (struct sockaddr *)&sockname, &socknamelen)) {
struct hostent *sockent;
Str tmp = Strnew_charp(ftp->pass);
+#ifdef INET6
+ char hostbuf[NI_MAXHOST];
+
+ if (getnameinfo((struct sockaddr *)&sockname, socknamelen,
+ hostbuf, sizeof hostbuf, NULL, 0, NI_NAMEREQD)
+ == 0)
+ Strcat_charp(tmp, hostbuf);
+ else if (getnameinfo((struct sockaddr *)&sockname, socknamelen,
+ hostbuf, sizeof hostbuf, NULL, 0, NI_NUMERICHOST)
+ == 0)
+ Strcat_m_charp(tmp, "[", hostbuf, "]", NULL);
+ else
+ Strcat_charp(tmp, "unknown");
+#else
if ((sockent = gethostbyaddr((char *)&sockname.sin_addr,
sizeof(sockname.sin_addr),
@@ -141,7 +163,7 @@ ftp_login(FTP ftp)
else
Strcat_m_charp(tmp, "[", inet_ntoa(sockname.sin_addr),
"]", NULL);
-
+#endif
ftp->pass = tmp->ptr;
}
}
@@ -192,7 +214,8 @@ ftp_pasv(FTP ftp)
int family;
#ifdef INET6
struct sockaddr_storage sockaddr;
- int sockaddrlen, port;
+ int port;
+ socklen_t sockaddrlen;
unsigned char d1, d2, d3, d4;
char abuf[INET6_ADDRSTRLEN];
#endif
diff --git a/gc/CVS/Entries b/gc/CVS/Entries
new file mode 100644
index 0000000..7eb3836
--- /dev/null
+++ b/gc/CVS/Entries
@@ -0,0 +1,5 @@
+D/Mac_files////
+D/cord////
+D/doc////
+D/include////
+D/tests////
diff --git a/gc/CVS/Repository b/gc/CVS/Repository
new file mode 100644
index 0000000..e390d2f
--- /dev/null
+++ b/gc/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc
diff --git a/gc/CVS/Root b/gc/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/Mac_files/CVS/Entries b/gc/Mac_files/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/gc/Mac_files/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/gc/Mac_files/CVS/Repository b/gc/Mac_files/CVS/Repository
new file mode 100644
index 0000000..3832d0b
--- /dev/null
+++ b/gc/Mac_files/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/Mac_files
diff --git a/gc/Mac_files/CVS/Root b/gc/Mac_files/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/Mac_files/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/cord/CVS/Entries b/gc/cord/CVS/Entries
new file mode 100644
index 0000000..a7ce60a
--- /dev/null
+++ b/gc/cord/CVS/Entries
@@ -0,0 +1 @@
+D/private////
diff --git a/gc/cord/CVS/Repository b/gc/cord/CVS/Repository
new file mode 100644
index 0000000..656cb33
--- /dev/null
+++ b/gc/cord/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/cord
diff --git a/gc/cord/CVS/Root b/gc/cord/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/cord/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/cord/private/CVS/Entries b/gc/cord/private/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/gc/cord/private/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/gc/cord/private/CVS/Repository b/gc/cord/private/CVS/Repository
new file mode 100644
index 0000000..8bf419d
--- /dev/null
+++ b/gc/cord/private/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/cord/private
diff --git a/gc/cord/private/CVS/Root b/gc/cord/private/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/cord/private/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/doc/CVS/Entries b/gc/doc/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/gc/doc/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/gc/doc/CVS/Repository b/gc/doc/CVS/Repository
new file mode 100644
index 0000000..24977cc
--- /dev/null
+++ b/gc/doc/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/doc
diff --git a/gc/doc/CVS/Root b/gc/doc/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/doc/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/include/CVS/Entries b/gc/include/CVS/Entries
new file mode 100644
index 0000000..a7ce60a
--- /dev/null
+++ b/gc/include/CVS/Entries
@@ -0,0 +1 @@
+D/private////
diff --git a/gc/include/CVS/Repository b/gc/include/CVS/Repository
new file mode 100644
index 0000000..cbc551f
--- /dev/null
+++ b/gc/include/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/include
diff --git a/gc/include/CVS/Root b/gc/include/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/include/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/include/private/CVS/Entries b/gc/include/private/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/gc/include/private/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/gc/include/private/CVS/Repository b/gc/include/private/CVS/Repository
new file mode 100644
index 0000000..55fc1f1
--- /dev/null
+++ b/gc/include/private/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/include/private
diff --git a/gc/include/private/CVS/Root b/gc/include/private/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/include/private/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/gc/tests/CVS/Entries b/gc/tests/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/gc/tests/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/gc/tests/CVS/Repository b/gc/tests/CVS/Repository
new file mode 100644
index 0000000..aa9da7e
--- /dev/null
+++ b/gc/tests/CVS/Repository
@@ -0,0 +1 @@
+w3m/gc/tests
diff --git a/gc/tests/CVS/Root b/gc/tests/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/gc/tests/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/html.c b/html.c
index 1b888fe..2359ca0 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.30 2007/04/19 12:00:38 inu Exp $ */
+/* $Id: html.c,v 1.32 2010/08/14 01:29:40 htrb Exp $ */
#include "html.h"
/* Define HTML Tag Infomation Table */
@@ -127,15 +127,15 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"h", ALST_P, MAXA_P, 0}, /* 3 HTML_H */
{"/h", NULL, 0, TFLG_END}, /* 4 HTML_N_H */
{"p", ALST_P, MAXA_P, 0}, /* 5 HTML_P */
- {"br", NULL, 0, 0}, /* 6 HTML_BR */
- {"b", NULL, 0, 0}, /* 7 HTML_B */
+ {"br", ALST_NOP, MAXA_NOP, 0}, /* 6 HTML_BR */
+ {"b", ALST_NOP, MAXA_NOP, 0}, /* 7 HTML_B */
{"/b", NULL, 0, TFLG_END}, /* 8 HTML_N_B */
{"ul", ALST_UL, MAXA_UL, 0}, /* 9 HTML_UL */
{"/ul", NULL, 0, TFLG_END}, /* 10 HTML_N_UL */
{"li", ALST_LI, MAXA_LI, 0}, /* 11 HTML_LI */
{"ol", ALST_UL, MAXA_UL, 0}, /* 12 HTML_OL */
{"/ol", NULL, 0, TFLG_END}, /* 13 HTML_N_OL */
- {"title", NULL, 0, 0}, /* 14 HTML_TITLE */
+ {"title", ALST_NOP, MAXA_NOP, 0}, /* 14 HTML_TITLE */
{"/title", NULL, 0, TFLG_END}, /* 15 HTML_N_TITLE */
{"hr", ALST_HR, MAXA_HR, 0}, /* 16 HTML_HR */
{"dl", ALST_DL, MAXA_DL, 0}, /* 17 HTML_DL */
@@ -147,11 +147,11 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"blockquote", ALST_NOP, MAXA_NOP, 0}, /* 23 HTML_BLQ */
{"/blockquote", NULL, 0, TFLG_END}, /* 24 HTML_N_BLQ */
{"img", ALST_IMG, MAXA_IMG, 0}, /* 25 HTML_IMG */
- {"listing", NULL, 0, 0}, /* 26 HTML_LISTING */
+ {"listing", ALST_NOP, MAXA_NOP, 0}, /* 26 HTML_LISTING */
{"/listing", NULL, 0, TFLG_END}, /* 27 HTML_N_LISTING */
- {"xmp", NULL, 0, 0}, /* 28 HTML_XMP */
+ {"xmp", ALST_NOP, MAXA_NOP, 0}, /* 28 HTML_XMP */
{"/xmp", NULL, 0, TFLG_END}, /* 29 HTML_N_XMP */
- {"plaintext", NULL, 0, 0}, /* 30 HTML_PLAINTEXT */
+ {"plaintext", ALST_NOP, MAXA_NOP, 0}, /* 30 HTML_PLAINTEXT */
{"table", ALST_TABLE, MAXA_TABLE, 0}, /* 31 HTML_TABLE */
{"/table", NULL, 0, TFLG_END}, /* 32 HTML_N_TABLE */
{"meta", ALST_META, MAXA_META, 0}, /* 33 HTML_META */
@@ -159,9 +159,9 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"frame", ALST_FRAME, MAXA_FRAME, 0}, /* 35 HTML_FRAME */
{"frameset", ALST_FRAMESET, MAXA_FRAMESET, 0}, /* 36 HTML_FRAMESET */
{"/frameset", NULL, 0, TFLG_END}, /* 37 HTML_N_FRAMESET */
- {"center", NULL, 0, 0}, /* 38 HTML_CENTER */
+ {"center", ALST_NOP, MAXA_NOP, 0}, /* 38 HTML_CENTER */
{"/center", NULL, 0, TFLG_END}, /* 39 HTML_N_CENTER */
- {"font", NULL, 0, 0}, /* 40 HTML_FONT */
+ {"font", ALST_NOP, MAXA_NOP, 0}, /* 40 HTML_FONT */
{"/font", NULL, 0, TFLG_END}, /* 41 HTML_N_FONT */
{"form", ALST_FORM, MAXA_FORM, 0}, /* 42 HTML_FORM */
{"/form", NULL, 0, TFLG_END}, /* 43 HTML_N_FORM */
@@ -171,7 +171,7 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"select", ALST_SELECT, MAXA_SELECT, 0}, /* 47 HTML_SELECT */
{"/select", NULL, 0, TFLG_END}, /* 48 HTML_N_SELECT */
{"option", ALST_OPTION, MAXA_OPTION, 0}, /* 49 HTML_OPTION */
- {"nobr", NULL, 0, 0}, /* 50 HTML_NOBR */
+ {"nobr", ALST_NOP, MAXA_NOP, 0}, /* 50 HTML_NOBR */
{"/nobr", NULL, 0, TFLG_END}, /* 51 HTML_N_NOBR */
{"div", ALST_P, MAXA_P, 0}, /* 52 HTML_DIV */
{"/div", NULL, 0, TFLG_END}, /* 53 HTML_N_DIV */
@@ -179,19 +179,19 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"map", ALST_MAP, MAXA_MAP, 0}, /* 55 HTML_MAP */
{"/map", NULL, 0, TFLG_END}, /* 56 HTML_N_MAP */
{"area", ALST_AREA, MAXA_AREA, 0}, /* 57 HTML_AREA */
- {"script", NULL, 0, 0}, /* 58 HTML_SCRIPT */
+ {"script", ALST_NOP, MAXA_NOP, 0}, /* 58 HTML_SCRIPT */
{"/script", NULL, 0, TFLG_END}, /* 59 HTML_N_SCRIPT */
{"base", ALST_BASE, MAXA_BASE, 0}, /* 60 HTML_BASE */
- {"del", NULL, 0, 0}, /* 61 HTML_DEL */
+ {"del", ALST_NOP, MAXA_NOP, 0}, /* 61 HTML_DEL */
{"/del", NULL, 0, TFLG_END}, /* 62 HTML_N_DEL */
- {"ins", NULL, 0, 0}, /* 63 HTML_INS */
+ {"ins", ALST_NOP, MAXA_NOP, 0}, /* 63 HTML_INS */
{"/ins", NULL, 0, TFLG_END}, /* 64 HTML_N_INS */
- {"u", NULL, 0, 0}, /* 65 HTML_U */
+ {"u", ALST_NOP, MAXA_NOP, 0}, /* 65 HTML_U */
{"/u", NULL, 0, TFLG_END}, /* 66 HTML_N_U */
- {"style", NULL, 0, 0}, /* 67 HTML_STYLE */
+ {"style", ALST_NOP, MAXA_NOP, 0}, /* 67 HTML_STYLE */
{"/style", NULL, 0, TFLG_END}, /* 68 HTML_N_STYLE */
- {"wbr", NULL, 0, 0}, /* 69 HTML_WBR */
- {"em", NULL, 0, 0}, /* 70 HTML_EM */
+ {"wbr", ALST_NOP, MAXA_NOP, 0}, /* 69 HTML_WBR */
+ {"em", ALST_NOP, MAXA_NOP, 0}, /* 70 HTML_EM */
{"/em", NULL, 0, TFLG_END}, /* 71 HTML_N_EM */
{"body", ALST_BODY, MAXA_BODY, 0}, /* 72 HTML_BODY */
{"/body", NULL, 0, TFLG_END}, /* 73 HTML_N_BODY */
@@ -203,72 +203,114 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"/caption", NULL, 0, TFLG_END}, /* 79 HTML_N_CAPTION */
{"th", ALST_TD, MAXA_TD, 0}, /* 80 HTML_TH */
{"/th", NULL, 0, TFLG_END}, /* 81 HTML_N_TH */
- {"thead", NULL, 0, 0}, /* 82 HTML_THEAD */
+ {"thead", ALST_NOP, MAXA_NOP, 0}, /* 82 HTML_THEAD */
{"/thead", NULL, 0, TFLG_END}, /* 83 HTML_N_THEAD */
- {"tbody", NULL, 0, 0}, /* 84 HTML_TBODY */
+ {"tbody", ALST_NOP, MAXA_NOP, 0}, /* 84 HTML_TBODY */
{"/tbody", NULL, 0, TFLG_END}, /* 85 HTML_N_TBODY */
- {"tfoot", NULL, 0, 0}, /* 86 HTML_TFOOT */
+ {"tfoot", ALST_NOP, MAXA_NOP, 0}, /* 86 HTML_TFOOT */
{"/tfoot", NULL, 0, TFLG_END}, /* 87 HTML_N_TFOOT */
- {"colgroup", NULL, 0, 0}, /* 88 HTML_COLGROUP */
+ {"colgroup", ALST_NOP, MAXA_NOP, 0}, /* 88 HTML_COLGROUP */
{"/colgroup", NULL, 0, TFLG_END}, /* 89 HTML_N_COLGROUP */
- {"col", NULL, 0, 0}, /* 90 HTML_COL */
+ {"col", ALST_NOP, MAXA_NOP, 0}, /* 90 HTML_COL */
{"bgsound", ALST_BGSOUND, MAX_BGSOUND, 0}, /* 91 HTML_BGSOUND */
{"applet", ALST_APPLET, MAX_APPLET, 0}, /* 92 HTML_APPLET */
{"embed", ALST_EMBED, MAX_EMBED, 0}, /* 93 HTML_EMBED */
{"/option", NULL, 0, TFLG_END}, /* 94 HTML_N_OPTION */
- {"head", NULL, 0, 0}, /* 95 HTML_HEAD */
+ {"head", ALST_NOP, MAXA_NOP, 0}, /* 95 HTML_HEAD */
{"/head", NULL, 0, TFLG_END}, /* 96 HTML_N_HEAD */
- {"doctype", NULL, 0, 0}, /* 97 HTML_DOCTYPE */
+ {"doctype", ALST_NOP, MAXA_NOP, 0}, /* 97 HTML_DOCTYPE */
{"noframes", ALST_NOFRAMES, MAXA_NOFRAMES, 0}, /* 98 HTML_NOFRAMES */
{"/noframes", NULL, 0, TFLG_END}, /* 99 HTML_N_NOFRAMES */
- {"sup", NULL, 0, 0}, /* 100 HTML_SUP */
+ {"sup", ALST_NOP, MAXA_NOP, 0}, /* 100 HTML_SUP */
{"/sup", NULL, 0, 0}, /* 101 HTML_N_SUP */
- {"sub", NULL, 0, 0}, /* 102 HTML_SUB */
+ /* FIXME: Should /sup and /sub have TFLG_END ? */
+ {"sub", ALST_NOP, MAXA_NOP, 0}, /* 102 HTML_SUB */
{"/sub", NULL, 0, 0}, /* 103 HTML_N_SUB */
{"link", ALST_LINK, MAXA_LINK, 0}, /* 104 HTML_LINK */
- {"s", NULL, 0, 0}, /* 105 HTML_S */
+ {"s", ALST_NOP, MAXA_NOP, 0}, /* 105 HTML_S */
{"/s", NULL, 0, TFLG_END}, /* 106 HTML_N_S */
- {"q", NULL, 0, 0}, /* 107 HTML_Q */
+ {"q", ALST_NOP, MAXA_NOP, 0}, /* 107 HTML_Q */
{"/q", NULL, 0, TFLG_END}, /* 108 HTML_N_Q */
- {"i", NULL, 0, 0}, /* 109 HTML_I */
+ {"i", ALST_NOP, MAXA_NOP, 0}, /* 109 HTML_I */
{"/i", NULL, 0, TFLG_END}, /* 110 HTML_N_I */
- {"strong", NULL, 0, 0}, /* 111 HTML_STRONG */
+ {"strong", ALST_NOP, MAXA_NOP, 0}, /* 111 HTML_STRONG */
{"/strong", NULL, 0, TFLG_END}, /* 112 HTML_N_STRONG */
- {NULL, NULL, 0, 0}, /* 113 Undefined */
- {NULL, NULL, 0, 0}, /* 114 Undefined */
- {NULL, NULL, 0, 0}, /* 115 Undefined */
- {NULL, NULL, 0, 0}, /* 116 Undefined */
- {NULL, NULL, 0, 0}, /* 117 Undefined */
- {NULL, NULL, 0, 0}, /* 118 Undefined */
- {NULL, NULL, 0, 0}, /* 119 Undefined */
+ {"span", ALST_NOP, MAXA_NOP, 0}, /* 113 HTML_SPAN */
+ {"/span", NULL, 0, TFLG_END}, /* 114 HTML_N_SPAN */
+ {"abbr", ALST_NOP, MAXA_NOP, 0}, /* 115 HTML_ABBR */
+ {"/abbr", NULL, 0, TFLG_END}, /* 116 HTML_N_ABBR */
+ {"acronym", ALST_NOP, MAXA_NOP, 0}, /* 117 HTML_ACRONYM */
+ {"/acronym", NULL, 0, TFLG_END}, /* 118 HTML_N_ACRONYM */
+ {"basefont", ALST_NOP, MAXA_NOP, 0}, /* 119 HTML_BASEFONT */
+ {"bdo", ALST_NOP, MAXA_NOP, 0}, /* 120 HTML_BDO */
+ {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */
+ {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */
+ {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */
+ {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */
+ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */
+ {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */
+ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */
+ {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */
+ {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */
+ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */
+ {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */
+ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */
+ {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */
+ {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */
+ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */
+ {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */
+ {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */
+ {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */
+ {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */
+
+ {NULL, NULL, 0, 0}, /* 140 Undefined */
+ {NULL, NULL, 0, 0}, /* 141 Undefined */
+ {NULL, NULL, 0, 0}, /* 142 Undefined */
+ {NULL, NULL, 0, 0}, /* 143 Undefined */
+ {NULL, NULL, 0, 0}, /* 144 Undefined */
+ {NULL, NULL, 0, 0}, /* 145 Undefined */
+ {NULL, NULL, 0, 0}, /* 146 Undefined */
+ {NULL, NULL, 0, 0}, /* 147 Undefined */
+ {NULL, NULL, 0, 0}, /* 148 Undefined */
+ {NULL, NULL, 0, 0}, /* 149 Undefined */
+ {NULL, NULL, 0, 0}, /* 150 Undefined */
+ {NULL, NULL, 0, 0}, /* 151 Undefined */
+ {NULL, NULL, 0, 0}, /* 152 Undefined */
+ {NULL, NULL, 0, 0}, /* 153 Undefined */
+ {NULL, NULL, 0, 0}, /* 154 Undefined */
+ {NULL, NULL, 0, 0}, /* 155 Undefined */
+ {NULL, NULL, 0, 0}, /* 156 Undefined */
+ {NULL, NULL, 0, 0}, /* 157 Undefined */
+ {NULL, NULL, 0, 0}, /* 158 Undefined */
+ {NULL, NULL, 0, 0}, /* 159 Undefined */
/* pseudo tag */
- {"select_int", ALST_SELECT_INT, MAXA_SELECT_INT, TFLG_INT}, /* 120 HTML_SELECT_INT */
- {"/select_int", NULL, 0, TFLG_INT | TFLG_END}, /* 121 HTML_N_SELECT_INT */
- {"option_int", ALST_OPTION, MAXA_OPTION, TFLG_INT}, /* 122 HTML_OPTION_INT */
- {"textarea_int", ALST_TEXTAREA_INT, MAXA_TEXTAREA_INT, TFLG_INT}, /* 123 HTML_TEXTAREA_INT */
- {"/textarea_int", NULL, 0, TFLG_INT | TFLG_END}, /* 124 HTML_N_TEXTAREA_INT */
- {"table_alt", ALST_TABLE_ALT, MAXA_TABLE_ALT, TFLG_INT}, /* 125 HTML_TABLE_ALT */
- {"symbol", ALST_SYMBOL, MAXA_SYMBOL, TFLG_INT}, /* 126 HTML_SYMBOL */
- {"/symbol", NULL, 0, TFLG_INT | TFLG_END}, /* 127 HTML_N_SYMBOL */
- {"pre_int", NULL, 0, TFLG_INT}, /* 128 HTML_PRE_INT */
- {"/pre_int", NULL, 0, TFLG_INT | TFLG_END}, /* 129 HTML_N_PRE_INT */
- {"title_alt", ALST_TITLE_ALT, MAXA_TITLE_ALT, TFLG_INT}, /* 130 HTML_TITLE_ALT */
- {"form_int", ALST_FORM_INT, MAXA_FORM_INT, TFLG_INT}, /* 131 HTML_FORM_INT */
- {"/form_int", NULL, 0, TFLG_INT | TFLG_END}, /* 132 HTML_N_FORM_INT */
- {"dl_compact", NULL, 0, TFLG_INT}, /* 133 HTML_DL_COMPACT */
- {"input_alt", ALST_INPUT_ALT, MAXA_INPUT_ALT, TFLG_INT}, /* 134 HTML_INPUT_ALT */
- {"/input_alt", NULL, 0, TFLG_INT | TFLG_END}, /* 135 HTML_N_INPUT_ALT */
- {"img_alt", ALST_IMG_ALT, MAXA_IMG_ALT, TFLG_INT}, /* 136 HTML_IMG_ALT */
- {"/img_alt", NULL, 0, TFLG_INT | TFLG_END}, /* 137 HTML_N_IMG_ALT */
- {" ", ALST_NOP, MAXA_NOP, TFLG_INT}, /* 138 HTML_NOP */
- {"pre_plain", NULL, 0, TFLG_INT}, /* 139 HTML_PRE_PLAIN */
- {"/pre_plain", NULL, 0, TFLG_INT | TFLG_END}, /* 140 HTML_N_PRE_PLAIN */
- {"internal", NULL, 0, TFLG_INT}, /* 141 HTML_INTERNAL */
- {"/internal", NULL, 0, TFLG_INT | TFLG_END}, /* 142 HTML_N_INTERNAL */
- {"div_int", ALST_P, MAXA_P, TFLG_INT}, /* 143 HTML_DIV_INT */
- {"/div_int", NULL, 0, TFLG_INT | TFLG_END}, /* 144 HTML_N_DIV_INT */
+ {"select_int", ALST_SELECT_INT, MAXA_SELECT_INT, TFLG_INT}, /* 160 HTML_SELECT_INT */
+ {"/select_int", NULL, 0, TFLG_INT | TFLG_END}, /* 161 HTML_N_SELECT_INT */
+ {"option_int", ALST_OPTION, MAXA_OPTION, TFLG_INT}, /* 162 HTML_OPTION_INT */
+ {"textarea_int", ALST_TEXTAREA_INT, MAXA_TEXTAREA_INT, TFLG_INT}, /* 163 HTML_TEXTAREA_INT */
+ {"/textarea_int", NULL, 0, TFLG_INT | TFLG_END}, /* 164 HTML_N_TEXTAREA_INT */
+ {"table_alt", ALST_TABLE_ALT, MAXA_TABLE_ALT, TFLG_INT}, /* 165 HTML_TABLE_ALT */
+ {"symbol", ALST_SYMBOL, MAXA_SYMBOL, TFLG_INT}, /* 166 HTML_SYMBOL */
+ {"/symbol", NULL, 0, TFLG_INT | TFLG_END}, /* 167 HTML_N_SYMBOL */
+ {"pre_int", NULL, 0, TFLG_INT}, /* 168 HTML_PRE_INT */
+ {"/pre_int", NULL, 0, TFLG_INT | TFLG_END}, /* 169 HTML_N_PRE_INT */
+ {"title_alt", ALST_TITLE_ALT, MAXA_TITLE_ALT, TFLG_INT}, /* 170 HTML_TITLE_ALT */
+ {"form_int", ALST_FORM_INT, MAXA_FORM_INT, TFLG_INT}, /* 171 HTML_FORM_INT */
+ {"/form_int", NULL, 0, TFLG_INT | TFLG_END}, /* 172 HTML_N_FORM_INT */
+ {"dl_compact", NULL, 0, TFLG_INT}, /* 173 HTML_DL_COMPACT */
+ {"input_alt", ALST_INPUT_ALT, MAXA_INPUT_ALT, TFLG_INT}, /* 174 HTML_INPUT_ALT */
+ {"/input_alt", NULL, 0, TFLG_INT | TFLG_END}, /* 175 HTML_N_INPUT_ALT */
+ {"img_alt", ALST_IMG_ALT, MAXA_IMG_ALT, TFLG_INT}, /* 176 HTML_IMG_ALT */
+ {"/img_alt", NULL, 0, TFLG_INT | TFLG_END}, /* 177 HTML_N_IMG_ALT */
+ {" ", ALST_NOP, MAXA_NOP, TFLG_INT}, /* 178 HTML_NOP */
+ {"pre_plain", NULL, 0, TFLG_INT}, /* 179 HTML_PRE_PLAIN */
+ {"/pre_plain", NULL, 0, TFLG_INT | TFLG_END}, /* 180 HTML_N_PRE_PLAIN */
+ {"internal", NULL, 0, TFLG_INT}, /* 181 HTML_INTERNAL */
+ {"/internal", NULL, 0, TFLG_INT | TFLG_END}, /* 182 HTML_N_INTERNAL */
+ {"div_int", ALST_P, MAXA_P, TFLG_INT}, /* 183 HTML_DIV_INT */
+ {"/div_int", NULL, 0, TFLG_INT | TFLG_END}, /* 184 HTML_N_DIV_INT */
};
TagAttrInfo AttrMAP[MAX_TAGATTR] = {
diff --git a/html.h b/html.h
index 443b201..7abbd3b 100644
--- a/html.h
+++ b/html.h
@@ -1,4 +1,4 @@
-/* $Id: html.h,v 1.29 2007/05/23 12:01:43 inu Exp $ */
+/* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */
#ifndef _HTML_H
#define _HTML_H
#ifdef USE_SSL
@@ -202,35 +202,62 @@ typedef struct {
#define HTML_N_I 110
#define HTML_STRONG 111
#define HTML_N_STRONG 112
+#define HTML_SPAN 113
+#define HTML_N_SPAN 114
+#define HTML_ABBR 115
+#define HTML_N_ABBR 116
+#define HTML_ACRONYM 117
+#define HTML_N_ACRONYM 118
+#define HTML_BASEFONT 119
+#define HTML_BDO 120
+#define HTML_N_BDO 121
+#define HTML_BIG 122
+#define HTML_N_BIG 123
+#define HTML_BUTTON 124
+#define HTML_FIELDSET 125
+#define HTML_N_FIELDSET 126
+#define HTML_IFRAME 127
+#define HTML_LABEL 128
+#define HTML_N_LABEL 129
+#define HTML_LEGEND 130
+#define HTML_N_LEGEND 131
+#define HTML_NOSCRIPT 132
+#define HTML_N_NOSCRIPT 133
+#define HTML_OBJECT 134
+#define HTML_OPTGROUP 135
+#define HTML_N_OPTGROUP 136
+#define HTML_PARAM 137
+#define HTML_SMALL 138
+#define HTML_N_SMALL 139
/* pseudo tag */
-#define HTML_SELECT_INT 120
-#define HTML_N_SELECT_INT 121
-#define HTML_OPTION_INT 122
-#define HTML_TEXTAREA_INT 123
-#define HTML_N_TEXTAREA_INT 124
-#define HTML_TABLE_ALT 125
-#define HTML_SYMBOL 126
-#define HTML_N_SYMBOL 127
-#define HTML_PRE_INT 128
-#define HTML_N_PRE_INT 129
-#define HTML_TITLE_ALT 130
-#define HTML_FORM_INT 131
-#define HTML_N_FORM_INT 132
-#define HTML_DL_COMPACT 133
-#define HTML_INPUT_ALT 134
-#define HTML_N_INPUT_ALT 135
-#define HTML_IMG_ALT 136
-#define HTML_N_IMG_ALT 137
-#define HTML_NOP 138
-#define HTML_PRE_PLAIN 139
-#define HTML_N_PRE_PLAIN 140
-#define HTML_INTERNAL 141
-#define HTML_N_INTERNAL 142
-#define HTML_DIV_INT 143
-#define HTML_N_DIV_INT 144
-
-#define MAX_HTMLTAG 145
+#define HTML_SELECT_INT 160
+#define HTML_N_SELECT_INT 161
+#define HTML_OPTION_INT 162
+#define HTML_TEXTAREA_INT 163
+#define HTML_N_TEXTAREA_INT 164
+#define HTML_TABLE_ALT 165
+#define HTML_SYMBOL 166
+#define HTML_N_SYMBOL 167
+#define HTML_PRE_INT 168
+#define HTML_N_PRE_INT 169
+#define HTML_TITLE_ALT 170
+#define HTML_FORM_INT 171
+#define HTML_N_FORM_INT 172
+#define HTML_DL_COMPACT 173
+#define HTML_INPUT_ALT 174
+#define HTML_N_INPUT_ALT 175
+#define HTML_IMG_ALT 176
+#define HTML_N_IMG_ALT 177
+#define HTML_NOP 178
+#define HTML_PRE_PLAIN 179
+#define HTML_N_PRE_PLAIN 180
+#define HTML_INTERNAL 181
+#define HTML_N_INTERNAL 182
+#define HTML_DIV_INT 183
+#define HTML_N_DIV_INT 184
+
+#define MAX_HTMLTAG 185
/* Tag attribute */
diff --git a/image.c b/image.c
index f799b14..5f5991a 100644
--- a/image.c
+++ b/image.c
@@ -1,4 +1,4 @@
-/* $Id: image.c,v 1.36 2003/07/07 15:49:03 ukai Exp $ */
+/* $Id: image.c,v 1.37 2010/12/21 10:13:55 htrb Exp $ */
#include "fm.h"
#include <sys/types.h>
@@ -115,10 +115,13 @@ openImgdisplay()
static void
closeImgdisplay()
{
- if (Imgdisplay_rf)
- fclose(Imgdisplay_rf);
if (Imgdisplay_wf)
fclose(Imgdisplay_wf);
+ if (Imgdisplay_rf) {
+ /* sync with the child */
+ getc(Imgdisplay_rf); /* EOF expected */
+ fclose(Imgdisplay_rf);
+ }
if (Imgdisplay_pid)
kill(Imgdisplay_pid, SIGKILL);
Imgdisplay_rf = NULL;
diff --git a/install-sh b/install-sh
index d4744f0..a5897de 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,8 @@
#!/bin/sh
-#
# install - install a program, script, or datafile
-#
+
+scriptversion=2006-12-25.00
+
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
@@ -38,232 +39,481 @@
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+nl='
+'
+IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
else
- true
+ doit_exec=$doit
fi
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- chmodcmd=""
- else
- instcmd=mkdir
- fi
-else
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
+posix_mkdir=
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
+# Desired mode of installed file.
+mode=0755
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
+src=
+dst=
+dir_arg=
+dst_arg=
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+copy_on_change=false
+no_target_directory=
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
-pathcomp=''
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
- pathcomp="${pathcomp}/"
-done
-fi
+ -C) copy_on_change=true;;
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
+ -d) dir_arg=true;;
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
-# If we're going to rename the final executable, determine the name now.
+ --help) echo "$usage"; exit $?;;
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
-# don't allow the sed command to completely eliminate the filename
+ -o) chowncmd="$chownprog $2"
+ shift;;
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
+ -s) stripcmd=$stripprog;;
-# Make a temp file name in the proper directory.
+ -t) dst_arg=$2
+ shift;;
- dsttmp=$dstdir/#inst.$$#
+ -T) no_target_directory=true;;
-# Move or copy the file name to the temp name
+ --version) echo "$0 $scriptversion"; exit $?;;
- $doit $instcmd $src $dsttmp &&
+ --) shift
+ break;;
- trap "rm -f ${dsttmp}" 0 &&
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
-# and set any options; do chmod last to preserve setuid bits
+ *) break;;
+ esac
+ shift
+done
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
-# Now rename the file to the real destination.
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dst_arg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
-fi &&
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
-exit 0
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/intl/CVS/Entries b/intl/CVS/Entries
new file mode 100644
index 0000000..1784810
--- /dev/null
+++ b/intl/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/intl/CVS/Repository b/intl/CVS/Repository
new file mode 100644
index 0000000..eb89a50
--- /dev/null
+++ b/intl/CVS/Repository
@@ -0,0 +1 @@
+w3m/intl
diff --git a/intl/CVS/Root b/intl/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/intl/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/istream.c b/istream.c
index 773330c..8967280 100644
--- a/istream.c
+++ b/istream.c
@@ -1,4 +1,4 @@
-/* $Id: istream.c,v 1.26 2007/05/23 15:06:05 inu Exp $ */
+/* $Id: istream.c,v 1.27 2010/07/18 13:43:23 htrb Exp $ */
#include "fm.h"
#include "myctype.h"
#include "istream.h"
@@ -447,8 +447,17 @@ ssl_check_cert_ident(X509 * x, char *hostname)
if (!seen_dnsname)
seen_dnsname = Strnew();
+ /* replace \0 to make full string visible to user */
+ if (sl != strlen(sn)) {
+ int i;
+ for (i = 0; i < sl; ++i) {
+ if (!sn[i])
+ sn[i] = '!';
+ }
+ }
Strcat_m_charp(seen_dnsname, sn, " ", NULL);
- if (ssl_match_cert_ident(sn, sl, hostname))
+ if (sl == strlen(sn) /* catch \0 in SAN */
+ && ssl_match_cert_ident(sn, sl, hostname))
break;
}
}
@@ -466,16 +475,27 @@ ssl_check_cert_ident(X509 * x, char *hostname)
if (match_ident == FALSE && ret == NULL) {
X509_NAME *xn;
char buf[2048];
+ int slen;
xn = X509_get_subject_name(x);
- if (X509_NAME_get_text_by_NID(xn, NID_commonName,
- buf, sizeof(buf)) == -1)
+ slen = X509_NAME_get_text_by_NID(xn, NID_commonName, buf, sizeof(buf));
+ if ( slen == -1)
/* FIXME: gettextize? */
ret = Strnew_charp("Unable to get common name from peer cert");
- else if (!ssl_match_cert_ident(buf, strlen(buf), hostname))
+ else if (slen != strlen(buf)
+ || !ssl_match_cert_ident(buf, strlen(buf), hostname)) {
+ /* replace \0 to make full string visible to user */
+ if (slen != strlen(buf)) {
+ int i;
+ for (i = 0; i < slen; ++i) {
+ if (!buf[i])
+ buf[i] = '!';
+ }
+ }
/* FIXME: gettextize? */
ret = Sprintf("Bad cert ident %s from %s", buf, hostname);
+ }
else
match_ident = TRUE;
}
diff --git a/libwc/CVS/Entries b/libwc/CVS/Entries
new file mode 100644
index 0000000..bdd6455
--- /dev/null
+++ b/libwc/CVS/Entries
@@ -0,0 +1,53 @@
+/.cvsignore/1.1/Mon Sep 22 22:53:53 2003//
+/big5.c/1.1/Mon Sep 22 21:02:23 2003//
+/big5.h/1.1/Mon Sep 22 21:02:23 2003//
+/ccs.h/1.1/Mon Sep 22 21:02:23 2003//
+/ces.c/1.1/Mon Sep 22 21:02:23 2003//
+/char_conv.c/1.1/Mon Sep 22 21:02:23 2003//
+/combining.c/1.1/Mon Sep 22 21:02:23 2003//
+/conv.c/1.1/Mon Sep 22 21:02:23 2003//
+/detect.c/1.3/Wed Apr 5 14:18:54 2006//
+/gb18030.c/1.1/Mon Sep 22 21:02:23 2003//
+/gb18030.h/1.1/Mon Sep 22 21:02:23 2003//
+/gbk.c/1.1/Mon Sep 22 21:02:23 2003//
+/gbk.h/1.1/Mon Sep 22 21:02:23 2003//
+/hkscs.c/1.1/Mon Sep 22 21:02:23 2003//
+/hkscs.h/1.1/Mon Sep 22 21:02:23 2003//
+/hz.c/1.1/Mon Sep 22 21:02:23 2003//
+/hz.h/1.1/Mon Sep 22 21:02:23 2003//
+/iso2022.c/1.1/Mon Sep 22 21:02:23 2003//
+/iso2022.h/1.1/Mon Sep 22 21:02:23 2003//
+/jis.c/1.1/Mon Sep 22 21:02:23 2003//
+/jis.h/1.1/Mon Sep 22 21:02:23 2003//
+/johab.c/1.1/Mon Sep 22 21:02:23 2003//
+/johab.h/1.1/Mon Sep 22 21:02:23 2003//
+/priv.c/1.1/Mon Sep 22 21:02:23 2003//
+/priv.h/1.1/Mon Sep 22 21:02:23 2003//
+/putc.c/1.1/Mon Sep 22 21:02:23 2003//
+/search.c/1.1/Mon Sep 22 21:02:23 2003//
+/search.h/1.1/Mon Sep 22 21:02:23 2003//
+/sjis.c/1.1/Mon Sep 22 21:02:23 2003//
+/sjis.h/1.1/Mon Sep 22 21:02:23 2003//
+/test.c/1.1/Mon Sep 22 21:02:23 2003//
+/ucs.map/1.1/Mon Sep 22 21:02:23 2003//
+/uhc.c/1.1/Mon Sep 22 21:02:23 2003//
+/uhc.h/1.1/Mon Sep 22 21:02:23 2003//
+/utf7.c/1.1/Mon Sep 22 21:02:23 2003//
+/utf7.h/1.1/Mon Sep 22 21:02:23 2003//
+/utf8.c/1.1/Mon Sep 22 21:02:23 2003//
+/utf8.h/1.1/Mon Sep 22 21:02:23 2003//
+/viet.c/1.1/Mon Sep 22 21:02:23 2003//
+/viet.h/1.1/Mon Sep 22 21:02:23 2003//
+/wc.h/1.1/Mon Sep 22 21:02:23 2003//
+/wtf.c/1.1/Mon Sep 22 21:02:23 2003//
+/wtf.h/1.1/Mon Sep 22 21:02:23 2003//
+D/map////
+/EastAsianWidth.txt/1.1/Sun Jul 25 09:55:05 2010//
+/Makefile.in/1.7/Tue Jan 4 09:22:27 2011//
+/ambwidth_map.awk/1.1/Sun Jul 25 09:55:05 2010//
+/ces.h/1.2/Tue Jan 4 09:22:27 2011//
+/charset.c/1.4/Tue Jan 4 09:22:27 2011//
+/status.c/1.2/Tue Jan 4 09:22:27 2011//
+/ucs.c/1.4/Tue Jan 4 09:22:27 2011//
+/ucs.h/1.4/Tue Jan 4 09:22:27 2011//
+/wc_types.h/1.3/Tue Jan 4 09:22:27 2011//
diff --git a/libwc/CVS/Repository b/libwc/CVS/Repository
new file mode 100644
index 0000000..6ad67c0
--- /dev/null
+++ b/libwc/CVS/Repository
@@ -0,0 +1 @@
+w3m/libwc
diff --git a/libwc/CVS/Root b/libwc/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/libwc/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/libwc/EastAsianWidth.txt b/libwc/EastAsianWidth.txt
new file mode 100644
index 0000000..8756c4a
--- /dev/null
+++ b/libwc/EastAsianWidth.txt
@@ -0,0 +1,21866 @@
+# EastAsianWidth-5.2.0.txt
+# Date: 2009-06-09, 17:47:00 PDT [KW]
+#
+# East Asian Width Properties
+#
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2009 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# The format is two fields separated by a semicolon.
+# Field 0: Unicode value
+# Field 1: East Asian Width property, consisting of one of the following values:
+# "N", "A", "H", "W", "F", "Na"
+# - All code points, assigned or unassigned, that are not listed
+# explicitly are given the value "N".
+# The unassigned code points that default to "W" include ranges in the
+# following blocks:
+# CJK Unified Ideographs Extension A: U+3400..U+4DBF
+# CJK Unified Ideographs: U+4E00..U+9FFF
+# CJK Compatibility Ideographs: U+F900..U+FAFF
+# CJK Unified Ideographs Extension B: U+20000..U+2A6DF
+# CJK Unified Ideographs Extension C: U+2A700..U+2B73F
+# CJK Compatibility Ideographs Supplement: U+2F800..U+2FA1F
+# and any other reserved code points on
+# Planes 2 and 3: U+20000..U+2FFFD
+# U+30000..U+3FFFD
+# - Characters ranges are specified as for other property files in
+# the Unicode Character Database.
+#
+# The Unicode name of each character is provided in a comment for help
+# in identifying the characters.
+#
+# See UAX #11: East Asian Width, for more information.
+#
+# @missing: 0000..10FFFF; N
+0000;N # <control>
+0001;N # <control>
+0002;N # <control>
+0003;N # <control>
+0004;N # <control>
+0005;N # <control>
+0006;N # <control>
+0007;N # <control>
+0008;N # <control>
+0009;N # <control>
+000A;N # <control>
+000B;N # <control>
+000C;N # <control>
+000D;N # <control>
+000E;N # <control>
+000F;N # <control>
+0010;N # <control>
+0011;N # <control>
+0012;N # <control>
+0013;N # <control>
+0014;N # <control>
+0015;N # <control>
+0016;N # <control>
+0017;N # <control>
+0018;N # <control>
+0019;N # <control>
+001A;N # <control>
+001B;N # <control>
+001C;N # <control>
+001D;N # <control>
+001E;N # <control>
+001F;N # <control>
+0020;Na # SPACE
+0021;Na # EXCLAMATION MARK
+0022;Na # QUOTATION MARK
+0023;Na # NUMBER SIGN
+0024;Na # DOLLAR SIGN
+0025;Na # PERCENT SIGN
+0026;Na # AMPERSAND
+0027;Na # APOSTROPHE
+0028;Na # LEFT PARENTHESIS
+0029;Na # RIGHT PARENTHESIS
+002A;Na # ASTERISK
+002B;Na # PLUS SIGN
+002C;Na # COMMA
+002D;Na # HYPHEN-MINUS
+002E;Na # FULL STOP
+002F;Na # SOLIDUS
+0030;Na # DIGIT ZERO
+0031;Na # DIGIT ONE
+0032;Na # DIGIT TWO
+0033;Na # DIGIT THREE
+0034;Na # DIGIT FOUR
+0035;Na # DIGIT FIVE
+0036;Na # DIGIT SIX
+0037;Na # DIGIT SEVEN
+0038;Na # DIGIT EIGHT
+0039;Na # DIGIT NINE
+003A;Na # COLON
+003B;Na # SEMICOLON
+003C;Na # LESS-THAN SIGN
+003D;Na # EQUALS SIGN
+003E;Na # GREATER-THAN SIGN
+003F;Na # QUESTION MARK
+0040;Na # COMMERCIAL AT
+0041;Na # LATIN CAPITAL LETTER A
+0042;Na # LATIN CAPITAL LETTER B
+0043;Na # LATIN CAPITAL LETTER C
+0044;Na # LATIN CAPITAL LETTER D
+0045;Na # LATIN CAPITAL LETTER E
+0046;Na # LATIN CAPITAL LETTER F
+0047;Na # LATIN CAPITAL LETTER G
+0048;Na # LATIN CAPITAL LETTER H
+0049;Na # LATIN CAPITAL LETTER I
+004A;Na # LATIN CAPITAL LETTER J
+004B;Na # LATIN CAPITAL LETTER K
+004C;Na # LATIN CAPITAL LETTER L
+004D;Na # LATIN CAPITAL LETTER M
+004E;Na # LATIN CAPITAL LETTER N
+004F;Na # LATIN CAPITAL LETTER O
+0050;Na # LATIN CAPITAL LETTER P
+0051;Na # LATIN CAPITAL LETTER Q
+0052;Na # LATIN CAPITAL LETTER R
+0053;Na # LATIN CAPITAL LETTER S
+0054;Na # LATIN CAPITAL LETTER T
+0055;Na # LATIN CAPITAL LETTER U
+0056;Na # LATIN CAPITAL LETTER V
+0057;Na # LATIN CAPITAL LETTER W
+0058;Na # LATIN CAPITAL LETTER X
+0059;Na # LATIN CAPITAL LETTER Y
+005A;Na # LATIN CAPITAL LETTER Z
+005B;Na # LEFT SQUARE BRACKET
+005C;Na # REVERSE SOLIDUS
+005D;Na # RIGHT SQUARE BRACKET
+005E;Na # CIRCUMFLEX ACCENT
+005F;Na # LOW LINE
+0060;Na # GRAVE ACCENT
+0061;Na # LATIN SMALL LETTER A
+0062;Na # LATIN SMALL LETTER B
+0063;Na # LATIN SMALL LETTER C
+0064;Na # LATIN SMALL LETTER D
+0065;Na # LATIN SMALL LETTER E
+0066;Na # LATIN SMALL LETTER F
+0067;Na # LATIN SMALL LETTER G
+0068;Na # LATIN SMALL LETTER H
+0069;Na # LATIN SMALL LETTER I
+006A;Na # LATIN SMALL LETTER J
+006B;Na # LATIN SMALL LETTER K
+006C;Na # LATIN SMALL LETTER L
+006D;Na # LATIN SMALL LETTER M
+006E;Na # LATIN SMALL LETTER N
+006F;Na # LATIN SMALL LETTER O
+0070;Na # LATIN SMALL LETTER P
+0071;Na # LATIN SMALL LETTER Q
+0072;Na # LATIN SMALL LETTER R
+0073;Na # LATIN SMALL LETTER S
+0074;Na # LATIN SMALL LETTER T
+0075;Na # LATIN SMALL LETTER U
+0076;Na # LATIN SMALL LETTER V
+0077;Na # LATIN SMALL LETTER W
+0078;Na # LATIN SMALL LETTER X
+0079;Na # LATIN SMALL LETTER Y
+007A;Na # LATIN SMALL LETTER Z
+007B;Na # LEFT CURLY BRACKET
+007C;Na # VERTICAL LINE
+007D;Na # RIGHT CURLY BRACKET
+007E;Na # TILDE
+007F;N # <control>
+0080;N # <control>
+0081;N # <control>
+0082;N # <control>
+0083;N # <control>
+0084;N # <control>
+0085;N # <control>
+0086;N # <control>
+0087;N # <control>
+0088;N # <control>
+0089;N # <control>
+008A;N # <control>
+008B;N # <control>
+008C;N # <control>
+008D;N # <control>
+008E;N # <control>
+008F;N # <control>
+0090;N # <control>
+0091;N # <control>
+0092;N # <control>
+0093;N # <control>
+0094;N # <control>
+0095;N # <control>
+0096;N # <control>
+0097;N # <control>
+0098;N # <control>
+0099;N # <control>
+009A;N # <control>
+009B;N # <control>
+009C;N # <control>
+009D;N # <control>
+009E;N # <control>
+009F;N # <control>
+00A0;N # NO-BREAK SPACE
+00A1;A # INVERTED EXCLAMATION MARK
+00A2;Na # CENT SIGN
+00A3;Na # POUND SIGN
+00A4;A # CURRENCY SIGN
+00A5;Na # YEN SIGN
+00A6;Na # BROKEN BAR
+00A7;A # SECTION SIGN
+00A8;A # DIAERESIS
+00A9;N # COPYRIGHT SIGN
+00AA;A # FEMININE ORDINAL INDICATOR
+00AB;N # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC;Na # NOT SIGN
+00AD;A # SOFT HYPHEN
+00AE;A # REGISTERED SIGN
+00AF;Na # MACRON
+00B0;A # DEGREE SIGN
+00B1;A # PLUS-MINUS SIGN
+00B2;A # SUPERSCRIPT TWO
+00B3;A # SUPERSCRIPT THREE
+00B4;A # ACUTE ACCENT
+00B5;N # MICRO SIGN
+00B6;A # PILCROW SIGN
+00B7;A # MIDDLE DOT
+00B8;A # CEDILLA
+00B9;A # SUPERSCRIPT ONE
+00BA;A # MASCULINE ORDINAL INDICATOR
+00BB;N # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC;A # VULGAR FRACTION ONE QUARTER
+00BD;A # VULGAR FRACTION ONE HALF
+00BE;A # VULGAR FRACTION THREE QUARTERS
+00BF;A # INVERTED QUESTION MARK
+00C0;N # LATIN CAPITAL LETTER A WITH GRAVE
+00C1;N # LATIN CAPITAL LETTER A WITH ACUTE
+00C2;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3;N # LATIN CAPITAL LETTER A WITH TILDE
+00C4;N # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5;N # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6;A # LATIN CAPITAL LETTER AE
+00C7;N # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8;N # LATIN CAPITAL LETTER E WITH GRAVE
+00C9;N # LATIN CAPITAL LETTER E WITH ACUTE
+00CA;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;N # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC;N # LATIN CAPITAL LETTER I WITH GRAVE
+00CD;N # LATIN CAPITAL LETTER I WITH ACUTE
+00CE;N # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;N # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0;A # LATIN CAPITAL LETTER ETH
+00D1;N # LATIN CAPITAL LETTER N WITH TILDE
+00D2;N # LATIN CAPITAL LETTER O WITH GRAVE
+00D3;N # LATIN CAPITAL LETTER O WITH ACUTE
+00D4;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5;N # LATIN CAPITAL LETTER O WITH TILDE
+00D6;N # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7;A # MULTIPLICATION SIGN
+00D8;A # LATIN CAPITAL LETTER O WITH STROKE
+00D9;N # LATIN CAPITAL LETTER U WITH GRAVE
+00DA;N # LATIN CAPITAL LETTER U WITH ACUTE
+00DB;N # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;N # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD;N # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE;A # LATIN CAPITAL LETTER THORN
+00DF;A # LATIN SMALL LETTER SHARP S
+00E0;A # LATIN SMALL LETTER A WITH GRAVE
+00E1;A # LATIN SMALL LETTER A WITH ACUTE
+00E2;N # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3;N # LATIN SMALL LETTER A WITH TILDE
+00E4;N # LATIN SMALL LETTER A WITH DIAERESIS
+00E5;N # LATIN SMALL LETTER A WITH RING ABOVE
+00E6;A # LATIN SMALL LETTER AE
+00E7;N # LATIN SMALL LETTER C WITH CEDILLA
+00E8;A # LATIN SMALL LETTER E WITH GRAVE
+00E9;A # LATIN SMALL LETTER E WITH ACUTE
+00EA;A # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;N # LATIN SMALL LETTER E WITH DIAERESIS
+00EC;A # LATIN SMALL LETTER I WITH GRAVE
+00ED;A # LATIN SMALL LETTER I WITH ACUTE
+00EE;N # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;N # LATIN SMALL LETTER I WITH DIAERESIS
+00F0;A # LATIN SMALL LETTER ETH
+00F1;N # LATIN SMALL LETTER N WITH TILDE
+00F2;A # LATIN SMALL LETTER O WITH GRAVE
+00F3;A # LATIN SMALL LETTER O WITH ACUTE
+00F4;N # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5;N # LATIN SMALL LETTER O WITH TILDE
+00F6;N # LATIN SMALL LETTER O WITH DIAERESIS
+00F7;A # DIVISION SIGN
+00F8;A # LATIN SMALL LETTER O WITH STROKE
+00F9;A # LATIN SMALL LETTER U WITH GRAVE
+00FA;A # LATIN SMALL LETTER U WITH ACUTE
+00FB;N # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;A # LATIN SMALL LETTER U WITH DIAERESIS
+00FD;N # LATIN SMALL LETTER Y WITH ACUTE
+00FE;A # LATIN SMALL LETTER THORN
+00FF;N # LATIN SMALL LETTER Y WITH DIAERESIS
+0100;N # LATIN CAPITAL LETTER A WITH MACRON
+0101;A # LATIN SMALL LETTER A WITH MACRON
+0102;N # LATIN CAPITAL LETTER A WITH BREVE
+0103;N # LATIN SMALL LETTER A WITH BREVE
+0104;N # LATIN CAPITAL LETTER A WITH OGONEK
+0105;N # LATIN SMALL LETTER A WITH OGONEK
+0106;N # LATIN CAPITAL LETTER C WITH ACUTE
+0107;N # LATIN SMALL LETTER C WITH ACUTE
+0108;N # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109;N # LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A;N # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B;N # LATIN SMALL LETTER C WITH DOT ABOVE
+010C;N # LATIN CAPITAL LETTER C WITH CARON
+010D;N # LATIN SMALL LETTER C WITH CARON
+010E;N # LATIN CAPITAL LETTER D WITH CARON
+010F;N # LATIN SMALL LETTER D WITH CARON
+0110;N # LATIN CAPITAL LETTER D WITH STROKE
+0111;A # LATIN SMALL LETTER D WITH STROKE
+0112;N # LATIN CAPITAL LETTER E WITH MACRON
+0113;A # LATIN SMALL LETTER E WITH MACRON
+0114;N # LATIN CAPITAL LETTER E WITH BREVE
+0115;N # LATIN SMALL LETTER E WITH BREVE
+0116;N # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117;N # LATIN SMALL LETTER E WITH DOT ABOVE
+0118;N # LATIN CAPITAL LETTER E WITH OGONEK
+0119;N # LATIN SMALL LETTER E WITH OGONEK
+011A;N # LATIN CAPITAL LETTER E WITH CARON
+011B;A # LATIN SMALL LETTER E WITH CARON
+011C;N # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D;N # LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E;N # LATIN CAPITAL LETTER G WITH BREVE
+011F;N # LATIN SMALL LETTER G WITH BREVE
+0120;N # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121;N # LATIN SMALL LETTER G WITH DOT ABOVE
+0122;N # LATIN CAPITAL LETTER G WITH CEDILLA
+0123;N # LATIN SMALL LETTER G WITH CEDILLA
+0124;N # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125;N # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126;A # LATIN CAPITAL LETTER H WITH STROKE
+0127;A # LATIN SMALL LETTER H WITH STROKE
+0128;N # LATIN CAPITAL LETTER I WITH TILDE
+0129;N # LATIN SMALL LETTER I WITH TILDE
+012A;N # LATIN CAPITAL LETTER I WITH MACRON
+012B;A # LATIN SMALL LETTER I WITH MACRON
+012C;N # LATIN CAPITAL LETTER I WITH BREVE
+012D;N # LATIN SMALL LETTER I WITH BREVE
+012E;N # LATIN CAPITAL LETTER I WITH OGONEK
+012F;N # LATIN SMALL LETTER I WITH OGONEK
+0130;N # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131;A # LATIN SMALL LETTER DOTLESS I
+0132;A # LATIN CAPITAL LIGATURE IJ
+0133;A # LATIN SMALL LIGATURE IJ
+0134;N # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135;N # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136;N # LATIN CAPITAL LETTER K WITH CEDILLA
+0137;N # LATIN SMALL LETTER K WITH CEDILLA
+0138;A # LATIN SMALL LETTER KRA
+0139;N # LATIN CAPITAL LETTER L WITH ACUTE
+013A;N # LATIN SMALL LETTER L WITH ACUTE
+013B;N # LATIN CAPITAL LETTER L WITH CEDILLA
+013C;N # LATIN SMALL LETTER L WITH CEDILLA
+013D;N # LATIN CAPITAL LETTER L WITH CARON
+013E;N # LATIN SMALL LETTER L WITH CARON
+013F;A # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140;A # LATIN SMALL LETTER L WITH MIDDLE DOT
+0141;A # LATIN CAPITAL LETTER L WITH STROKE
+0142;A # LATIN SMALL LETTER L WITH STROKE
+0143;N # LATIN CAPITAL LETTER N WITH ACUTE
+0144;A # LATIN SMALL LETTER N WITH ACUTE
+0145;N # LATIN CAPITAL LETTER N WITH CEDILLA
+0146;N # LATIN SMALL LETTER N WITH CEDILLA
+0147;N # LATIN CAPITAL LETTER N WITH CARON
+0148;A # LATIN SMALL LETTER N WITH CARON
+0149;A # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A;A # LATIN CAPITAL LETTER ENG
+014B;A # LATIN SMALL LETTER ENG
+014C;N # LATIN CAPITAL LETTER O WITH MACRON
+014D;A # LATIN SMALL LETTER O WITH MACRON
+014E;N # LATIN CAPITAL LETTER O WITH BREVE
+014F;N # LATIN SMALL LETTER O WITH BREVE
+0150;N # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151;N # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152;A # LATIN CAPITAL LIGATURE OE
+0153;A # LATIN SMALL LIGATURE OE
+0154;N # LATIN CAPITAL LETTER R WITH ACUTE
+0155;N # LATIN SMALL LETTER R WITH ACUTE
+0156;N # LATIN CAPITAL LETTER R WITH CEDILLA
+0157;N # LATIN SMALL LETTER R WITH CEDILLA
+0158;N # LATIN CAPITAL LETTER R WITH CARON
+0159;N # LATIN SMALL LETTER R WITH CARON
+015A;N # LATIN CAPITAL LETTER S WITH ACUTE
+015B;N # LATIN SMALL LETTER S WITH ACUTE
+015C;N # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D;N # LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E;N # LATIN CAPITAL LETTER S WITH CEDILLA
+015F;N # LATIN SMALL LETTER S WITH CEDILLA
+0160;N # LATIN CAPITAL LETTER S WITH CARON
+0161;N # LATIN SMALL LETTER S WITH CARON
+0162;N # LATIN CAPITAL LETTER T WITH CEDILLA
+0163;N # LATIN SMALL LETTER T WITH CEDILLA
+0164;N # LATIN CAPITAL LETTER T WITH CARON
+0165;N # LATIN SMALL LETTER T WITH CARON
+0166;A # LATIN CAPITAL LETTER T WITH STROKE
+0167;A # LATIN SMALL LETTER T WITH STROKE
+0168;N # LATIN CAPITAL LETTER U WITH TILDE
+0169;N # LATIN SMALL LETTER U WITH TILDE
+016A;N # LATIN CAPITAL LETTER U WITH MACRON
+016B;A # LATIN SMALL LETTER U WITH MACRON
+016C;N # LATIN CAPITAL LETTER U WITH BREVE
+016D;N # LATIN SMALL LETTER U WITH BREVE
+016E;N # LATIN CAPITAL LETTER U WITH RING ABOVE
+016F;N # LATIN SMALL LETTER U WITH RING ABOVE
+0170;N # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171;N # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172;N # LATIN CAPITAL LETTER U WITH OGONEK
+0173;N # LATIN SMALL LETTER U WITH OGONEK
+0174;N # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175;N # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176;N # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177;N # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178;N # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179;N # LATIN CAPITAL LETTER Z WITH ACUTE
+017A;N # LATIN SMALL LETTER Z WITH ACUTE
+017B;N # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C;N # LATIN SMALL LETTER Z WITH DOT ABOVE
+017D;N # LATIN CAPITAL LETTER Z WITH CARON
+017E;N # LATIN SMALL LETTER Z WITH CARON
+017F;N # LATIN SMALL LETTER LONG S
+0180;N # LATIN SMALL LETTER B WITH STROKE
+0181;N # LATIN CAPITAL LETTER B WITH HOOK
+0182;N # LATIN CAPITAL LETTER B WITH TOPBAR
+0183;N # LATIN SMALL LETTER B WITH TOPBAR
+0184;N # LATIN CAPITAL LETTER TONE SIX
+0185;N # LATIN SMALL LETTER TONE SIX
+0186;N # LATIN CAPITAL LETTER OPEN O
+0187;N # LATIN CAPITAL LETTER C WITH HOOK
+0188;N # LATIN SMALL LETTER C WITH HOOK
+0189;N # LATIN CAPITAL LETTER AFRICAN D
+018A;N # LATIN CAPITAL LETTER D WITH HOOK
+018B;N # LATIN CAPITAL LETTER D WITH TOPBAR
+018C;N # LATIN SMALL LETTER D WITH TOPBAR
+018D;N # LATIN SMALL LETTER TURNED DELTA
+018E;N # LATIN CAPITAL LETTER REVERSED E
+018F;N # LATIN CAPITAL LETTER SCHWA
+0190;N # LATIN CAPITAL LETTER OPEN E
+0191;N # LATIN CAPITAL LETTER F WITH HOOK
+0192;N # LATIN SMALL LETTER F WITH HOOK
+0193;N # LATIN CAPITAL LETTER G WITH HOOK
+0194;N # LATIN CAPITAL LETTER GAMMA
+0195;N # LATIN SMALL LETTER HV
+0196;N # LATIN CAPITAL LETTER IOTA
+0197;N # LATIN CAPITAL LETTER I WITH STROKE
+0198;N # LATIN CAPITAL LETTER K WITH HOOK
+0199;N # LATIN SMALL LETTER K WITH HOOK
+019A;N # LATIN SMALL LETTER L WITH BAR
+019B;N # LATIN SMALL LETTER LAMBDA WITH STROKE
+019C;N # LATIN CAPITAL LETTER TURNED M
+019D;N # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019E;N # LATIN SMALL LETTER N WITH LONG RIGHT LEG
+019F;N # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0;N # LATIN CAPITAL LETTER O WITH HORN
+01A1;N # LATIN SMALL LETTER O WITH HORN
+01A2;N # LATIN CAPITAL LETTER OI
+01A3;N # LATIN SMALL LETTER OI
+01A4;N # LATIN CAPITAL LETTER P WITH HOOK
+01A5;N # LATIN SMALL LETTER P WITH HOOK
+01A6;N # LATIN LETTER YR
+01A7;N # LATIN CAPITAL LETTER TONE TWO
+01A8;N # LATIN SMALL LETTER TONE TWO
+01A9;N # LATIN CAPITAL LETTER ESH
+01AA;N # LATIN LETTER REVERSED ESH LOOP
+01AB;N # LATIN SMALL LETTER T WITH PALATAL HOOK
+01AC;N # LATIN CAPITAL LETTER T WITH HOOK
+01AD;N # LATIN SMALL LETTER T WITH HOOK
+01AE;N # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF;N # LATIN CAPITAL LETTER U WITH HORN
+01B0;N # LATIN SMALL LETTER U WITH HORN
+01B1;N # LATIN CAPITAL LETTER UPSILON
+01B2;N # LATIN CAPITAL LETTER V WITH HOOK
+01B3;N # LATIN CAPITAL LETTER Y WITH HOOK
+01B4;N # LATIN SMALL LETTER Y WITH HOOK
+01B5;N # LATIN CAPITAL LETTER Z WITH STROKE
+01B6;N # LATIN SMALL LETTER Z WITH STROKE
+01B7;N # LATIN CAPITAL LETTER EZH
+01B8;N # LATIN CAPITAL LETTER EZH REVERSED
+01B9;N # LATIN SMALL LETTER EZH REVERSED
+01BA;N # LATIN SMALL LETTER EZH WITH TAIL
+01BB;N # LATIN LETTER TWO WITH STROKE
+01BC;N # LATIN CAPITAL LETTER TONE FIVE
+01BD;N # LATIN SMALL LETTER TONE FIVE
+01BE;N # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+01BF;N # LATIN LETTER WYNN
+01C0;N # LATIN LETTER DENTAL CLICK
+01C1;N # LATIN LETTER LATERAL CLICK
+01C2;N # LATIN LETTER ALVEOLAR CLICK
+01C3;N # LATIN LETTER RETROFLEX CLICK
+01C4;N # LATIN CAPITAL LETTER DZ WITH CARON
+01C5;N # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6;N # LATIN SMALL LETTER DZ WITH CARON
+01C7;N # LATIN CAPITAL LETTER LJ
+01C8;N # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9;N # LATIN SMALL LETTER LJ
+01CA;N # LATIN CAPITAL LETTER NJ
+01CB;N # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC;N # LATIN SMALL LETTER NJ
+01CD;N # LATIN CAPITAL LETTER A WITH CARON
+01CE;A # LATIN SMALL LETTER A WITH CARON
+01CF;N # LATIN CAPITAL LETTER I WITH CARON
+01D0;A # LATIN SMALL LETTER I WITH CARON
+01D1;N # LATIN CAPITAL LETTER O WITH CARON
+01D2;A # LATIN SMALL LETTER O WITH CARON
+01D3;N # LATIN CAPITAL LETTER U WITH CARON
+01D4;A # LATIN SMALL LETTER U WITH CARON
+01D5;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6;A # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8;A # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA;A # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC;A # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD;N # LATIN SMALL LETTER TURNED E
+01DE;N # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF;N # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0;N # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1;N # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2;N # LATIN CAPITAL LETTER AE WITH MACRON
+01E3;N # LATIN SMALL LETTER AE WITH MACRON
+01E4;N # LATIN CAPITAL LETTER G WITH STROKE
+01E5;N # LATIN SMALL LETTER G WITH STROKE
+01E6;N # LATIN CAPITAL LETTER G WITH CARON
+01E7;N # LATIN SMALL LETTER G WITH CARON
+01E8;N # LATIN CAPITAL LETTER K WITH CARON
+01E9;N # LATIN SMALL LETTER K WITH CARON
+01EA;N # LATIN CAPITAL LETTER O WITH OGONEK
+01EB;N # LATIN SMALL LETTER O WITH OGONEK
+01EC;N # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED;N # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE;N # LATIN CAPITAL LETTER EZH WITH CARON
+01EF;N # LATIN SMALL LETTER EZH WITH CARON
+01F0;N # LATIN SMALL LETTER J WITH CARON
+01F1;N # LATIN CAPITAL LETTER DZ
+01F2;N # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3;N # LATIN SMALL LETTER DZ
+01F4;N # LATIN CAPITAL LETTER G WITH ACUTE
+01F5;N # LATIN SMALL LETTER G WITH ACUTE
+01F6;N # LATIN CAPITAL LETTER HWAIR
+01F7;N # LATIN CAPITAL LETTER WYNN
+01F8;N # LATIN CAPITAL LETTER N WITH GRAVE
+01F9;N # LATIN SMALL LETTER N WITH GRAVE
+01FA;N # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB;N # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC;N # LATIN CAPITAL LETTER AE WITH ACUTE
+01FD;N # LATIN SMALL LETTER AE WITH ACUTE
+01FE;N # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF;N # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200;N # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201;N # LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202;N # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203;N # LATIN SMALL LETTER A WITH INVERTED BREVE
+0204;N # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205;N # LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206;N # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207;N # LATIN SMALL LETTER E WITH INVERTED BREVE
+0208;N # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209;N # LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A;N # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B;N # LATIN SMALL LETTER I WITH INVERTED BREVE
+020C;N # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D;N # LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E;N # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F;N # LATIN SMALL LETTER O WITH INVERTED BREVE
+0210;N # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211;N # LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212;N # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213;N # LATIN SMALL LETTER R WITH INVERTED BREVE
+0214;N # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215;N # LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216;N # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217;N # LATIN SMALL LETTER U WITH INVERTED BREVE
+0218;N # LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219;N # LATIN SMALL LETTER S WITH COMMA BELOW
+021A;N # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B;N # LATIN SMALL LETTER T WITH COMMA BELOW
+021C;N # LATIN CAPITAL LETTER YOGH
+021D;N # LATIN SMALL LETTER YOGH
+021E;N # LATIN CAPITAL LETTER H WITH CARON
+021F;N # LATIN SMALL LETTER H WITH CARON
+0220;N # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0221;N # LATIN SMALL LETTER D WITH CURL
+0222;N # LATIN CAPITAL LETTER OU
+0223;N # LATIN SMALL LETTER OU
+0224;N # LATIN CAPITAL LETTER Z WITH HOOK
+0225;N # LATIN SMALL LETTER Z WITH HOOK
+0226;N # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227;N # LATIN SMALL LETTER A WITH DOT ABOVE
+0228;N # LATIN CAPITAL LETTER E WITH CEDILLA
+0229;N # LATIN SMALL LETTER E WITH CEDILLA
+022A;N # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B;N # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C;N # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D;N # LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E;N # LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F;N # LATIN SMALL LETTER O WITH DOT ABOVE
+0230;N # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231;N # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232;N # LATIN CAPITAL LETTER Y WITH MACRON
+0233;N # LATIN SMALL LETTER Y WITH MACRON
+0234;N # LATIN SMALL LETTER L WITH CURL
+0235;N # LATIN SMALL LETTER N WITH CURL
+0236;N # LATIN SMALL LETTER T WITH CURL
+0237;N # LATIN SMALL LETTER DOTLESS J
+0238;N # LATIN SMALL LETTER DB DIGRAPH
+0239;N # LATIN SMALL LETTER QP DIGRAPH
+023A;N # LATIN CAPITAL LETTER A WITH STROKE
+023B;N # LATIN CAPITAL LETTER C WITH STROKE
+023C;N # LATIN SMALL LETTER C WITH STROKE
+023D;N # LATIN CAPITAL LETTER L WITH BAR
+023E;N # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F;N # LATIN SMALL LETTER S WITH SWASH TAIL
+0240;N # LATIN SMALL LETTER Z WITH SWASH TAIL
+0241;N # LATIN CAPITAL LETTER GLOTTAL STOP
+0242;N # LATIN SMALL LETTER GLOTTAL STOP
+0243;N # LATIN CAPITAL LETTER B WITH STROKE
+0244;N # LATIN CAPITAL LETTER U BAR
+0245;N # LATIN CAPITAL LETTER TURNED V
+0246;N # LATIN CAPITAL LETTER E WITH STROKE
+0247;N # LATIN SMALL LETTER E WITH STROKE
+0248;N # LATIN CAPITAL LETTER J WITH STROKE
+0249;N # LATIN SMALL LETTER J WITH STROKE
+024A;N # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024B;N # LATIN SMALL LETTER Q WITH HOOK TAIL
+024C;N # LATIN CAPITAL LETTER R WITH STROKE
+024D;N # LATIN SMALL LETTER R WITH STROKE
+024E;N # LATIN CAPITAL LETTER Y WITH STROKE
+024F;N # LATIN SMALL LETTER Y WITH STROKE
+0250;N # LATIN SMALL LETTER TURNED A
+0251;A # LATIN SMALL LETTER ALPHA
+0252;N # LATIN SMALL LETTER TURNED ALPHA
+0253;N # LATIN SMALL LETTER B WITH HOOK
+0254;N # LATIN SMALL LETTER OPEN O
+0255;N # LATIN SMALL LETTER C WITH CURL
+0256;N # LATIN SMALL LETTER D WITH TAIL
+0257;N # LATIN SMALL LETTER D WITH HOOK
+0258;N # LATIN SMALL LETTER REVERSED E
+0259;N # LATIN SMALL LETTER SCHWA
+025A;N # LATIN SMALL LETTER SCHWA WITH HOOK
+025B;N # LATIN SMALL LETTER OPEN E
+025C;N # LATIN SMALL LETTER REVERSED OPEN E
+025D;N # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E;N # LATIN SMALL LETTER CLOSED REVERSED OPEN E
+025F;N # LATIN SMALL LETTER DOTLESS J WITH STROKE
+0260;N # LATIN SMALL LETTER G WITH HOOK
+0261;A # LATIN SMALL LETTER SCRIPT G
+0262;N # LATIN LETTER SMALL CAPITAL G
+0263;N # LATIN SMALL LETTER GAMMA
+0264;N # LATIN SMALL LETTER RAMS HORN
+0265;N # LATIN SMALL LETTER TURNED H
+0266;N # LATIN SMALL LETTER H WITH HOOK
+0267;N # LATIN SMALL LETTER HENG WITH HOOK
+0268;N # LATIN SMALL LETTER I WITH STROKE
+0269;N # LATIN SMALL LETTER IOTA
+026A;N # LATIN LETTER SMALL CAPITAL I
+026B;N # LATIN SMALL LETTER L WITH MIDDLE TILDE
+026C;N # LATIN SMALL LETTER L WITH BELT
+026D;N # LATIN SMALL LETTER L WITH RETROFLEX HOOK
+026E;N # LATIN SMALL LETTER LEZH
+026F;N # LATIN SMALL LETTER TURNED M
+0270;N # LATIN SMALL LETTER TURNED M WITH LONG LEG
+0271;N # LATIN SMALL LETTER M WITH HOOK
+0272;N # LATIN SMALL LETTER N WITH LEFT HOOK
+0273;N # LATIN SMALL LETTER N WITH RETROFLEX HOOK
+0274;N # LATIN LETTER SMALL CAPITAL N
+0275;N # LATIN SMALL LETTER BARRED O
+0276;N # LATIN LETTER SMALL CAPITAL OE
+0277;N # LATIN SMALL LETTER CLOSED OMEGA
+0278;N # LATIN SMALL LETTER PHI
+0279;N # LATIN SMALL LETTER TURNED R
+027A;N # LATIN SMALL LETTER TURNED R WITH LONG LEG
+027B;N # LATIN SMALL LETTER TURNED R WITH HOOK
+027C;N # LATIN SMALL LETTER R WITH LONG LEG
+027D;N # LATIN SMALL LETTER R WITH TAIL
+027E;N # LATIN SMALL LETTER R WITH FISHHOOK
+027F;N # LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+0280;N # LATIN LETTER SMALL CAPITAL R
+0281;N # LATIN LETTER SMALL CAPITAL INVERTED R
+0282;N # LATIN SMALL LETTER S WITH HOOK
+0283;N # LATIN SMALL LETTER ESH
+0284;N # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+0285;N # LATIN SMALL LETTER SQUAT REVERSED ESH
+0286;N # LATIN SMALL LETTER ESH WITH CURL
+0287;N # LATIN SMALL LETTER TURNED T
+0288;N # LATIN SMALL LETTER T WITH RETROFLEX HOOK
+0289;N # LATIN SMALL LETTER U BAR
+028A;N # LATIN SMALL LETTER UPSILON
+028B;N # LATIN SMALL LETTER V WITH HOOK
+028C;N # LATIN SMALL LETTER TURNED V
+028D;N # LATIN SMALL LETTER TURNED W
+028E;N # LATIN SMALL LETTER TURNED Y
+028F;N # LATIN LETTER SMALL CAPITAL Y
+0290;N # LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+0291;N # LATIN SMALL LETTER Z WITH CURL
+0292;N # LATIN SMALL LETTER EZH
+0293;N # LATIN SMALL LETTER EZH WITH CURL
+0294;N # LATIN LETTER GLOTTAL STOP
+0295;N # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+0296;N # LATIN LETTER INVERTED GLOTTAL STOP
+0297;N # LATIN LETTER STRETCHED C
+0298;N # LATIN LETTER BILABIAL CLICK
+0299;N # LATIN LETTER SMALL CAPITAL B
+029A;N # LATIN SMALL LETTER CLOSED OPEN E
+029B;N # LATIN LETTER SMALL CAPITAL G WITH HOOK
+029C;N # LATIN LETTER SMALL CAPITAL H
+029D;N # LATIN SMALL LETTER J WITH CROSSED-TAIL
+029E;N # LATIN SMALL LETTER TURNED K
+029F;N # LATIN LETTER SMALL CAPITAL L
+02A0;N # LATIN SMALL LETTER Q WITH HOOK
+02A1;N # LATIN LETTER GLOTTAL STOP WITH STROKE
+02A2;N # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+02A3;N # LATIN SMALL LETTER DZ DIGRAPH
+02A4;N # LATIN SMALL LETTER DEZH DIGRAPH
+02A5;N # LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+02A6;N # LATIN SMALL LETTER TS DIGRAPH
+02A7;N # LATIN SMALL LETTER TESH DIGRAPH
+02A8;N # LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9;N # LATIN SMALL LETTER FENG DIGRAPH
+02AA;N # LATIN SMALL LETTER LS DIGRAPH
+02AB;N # LATIN SMALL LETTER LZ DIGRAPH
+02AC;N # LATIN LETTER BILABIAL PERCUSSIVE
+02AD;N # LATIN LETTER BIDENTAL PERCUSSIVE
+02AE;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0;N # MODIFIER LETTER SMALL H
+02B1;N # MODIFIER LETTER SMALL H WITH HOOK
+02B2;N # MODIFIER LETTER SMALL J
+02B3;N # MODIFIER LETTER SMALL R
+02B4;N # MODIFIER LETTER SMALL TURNED R
+02B5;N # MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6;N # MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7;N # MODIFIER LETTER SMALL W
+02B8;N # MODIFIER LETTER SMALL Y
+02B9;N # MODIFIER LETTER PRIME
+02BA;N # MODIFIER LETTER DOUBLE PRIME
+02BB;N # MODIFIER LETTER TURNED COMMA
+02BC;N # MODIFIER LETTER APOSTROPHE
+02BD;N # MODIFIER LETTER REVERSED COMMA
+02BE;N # MODIFIER LETTER RIGHT HALF RING
+02BF;N # MODIFIER LETTER LEFT HALF RING
+02C0;N # MODIFIER LETTER GLOTTAL STOP
+02C1;N # MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2;N # MODIFIER LETTER LEFT ARROWHEAD
+02C3;N # MODIFIER LETTER RIGHT ARROWHEAD
+02C4;A # MODIFIER LETTER UP ARROWHEAD
+02C5;N # MODIFIER LETTER DOWN ARROWHEAD
+02C6;N # MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7;A # CARON
+02C8;N # MODIFIER LETTER VERTICAL LINE
+02C9;A # MODIFIER LETTER MACRON
+02CA;A # MODIFIER LETTER ACUTE ACCENT
+02CB;A # MODIFIER LETTER GRAVE ACCENT
+02CC;N # MODIFIER LETTER LOW VERTICAL LINE
+02CD;A # MODIFIER LETTER LOW MACRON
+02CE;N # MODIFIER LETTER LOW GRAVE ACCENT
+02CF;N # MODIFIER LETTER LOW ACUTE ACCENT
+02D0;A # MODIFIER LETTER TRIANGULAR COLON
+02D1;N # MODIFIER LETTER HALF TRIANGULAR COLON
+02D2;N # MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3;N # MODIFIER LETTER CENTRED LEFT HALF RING
+02D4;N # MODIFIER LETTER UP TACK
+02D5;N # MODIFIER LETTER DOWN TACK
+02D6;N # MODIFIER LETTER PLUS SIGN
+02D7;N # MODIFIER LETTER MINUS SIGN
+02D8;A # BREVE
+02D9;A # DOT ABOVE
+02DA;A # RING ABOVE
+02DB;A # OGONEK
+02DC;N # SMALL TILDE
+02DD;A # DOUBLE ACUTE ACCENT
+02DE;N # MODIFIER LETTER RHOTIC HOOK
+02DF;A # MODIFIER LETTER CROSS ACCENT
+02E0;N # MODIFIER LETTER SMALL GAMMA
+02E1;N # MODIFIER LETTER SMALL L
+02E2;N # MODIFIER LETTER SMALL S
+02E3;N # MODIFIER LETTER SMALL X
+02E4;N # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5;N # MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6;N # MODIFIER LETTER HIGH TONE BAR
+02E7;N # MODIFIER LETTER MID TONE BAR
+02E8;N # MODIFIER LETTER LOW TONE BAR
+02E9;N # MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA;N # MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB;N # MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC;N # MODIFIER LETTER VOICING
+02ED;N # MODIFIER LETTER UNASPIRATED
+02EE;N # MODIFIER LETTER DOUBLE APOSTROPHE
+02EF;N # MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0;N # MODIFIER LETTER LOW UP ARROWHEAD
+02F1;N # MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2;N # MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3;N # MODIFIER LETTER LOW RING
+02F4;N # MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5;N # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6;N # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7;N # MODIFIER LETTER LOW TILDE
+02F8;N # MODIFIER LETTER RAISED COLON
+02F9;N # MODIFIER LETTER BEGIN HIGH TONE
+02FA;N # MODIFIER LETTER END HIGH TONE
+02FB;N # MODIFIER LETTER BEGIN LOW TONE
+02FC;N # MODIFIER LETTER END LOW TONE
+02FD;N # MODIFIER LETTER SHELF
+02FE;N # MODIFIER LETTER OPEN SHELF
+02FF;N # MODIFIER LETTER LOW LEFT ARROW
+0300;A # COMBINING GRAVE ACCENT
+0301;A # COMBINING ACUTE ACCENT
+0302;A # COMBINING CIRCUMFLEX ACCENT
+0303;A # COMBINING TILDE
+0304;A # COMBINING MACRON
+0305;A # COMBINING OVERLINE
+0306;A # COMBINING BREVE
+0307;A # COMBINING DOT ABOVE
+0308;A # COMBINING DIAERESIS
+0309;A # COMBINING HOOK ABOVE
+030A;A # COMBINING RING ABOVE
+030B;A # COMBINING DOUBLE ACUTE ACCENT
+030C;A # COMBINING CARON
+030D;A # COMBINING VERTICAL LINE ABOVE
+030E;A # COMBINING DOUBLE VERTICAL LINE ABOVE
+030F;A # COMBINING DOUBLE GRAVE ACCENT
+0310;A # COMBINING CANDRABINDU
+0311;A # COMBINING INVERTED BREVE
+0312;A # COMBINING TURNED COMMA ABOVE
+0313;A # COMBINING COMMA ABOVE
+0314;A # COMBINING REVERSED COMMA ABOVE
+0315;A # COMBINING COMMA ABOVE RIGHT
+0316;A # COMBINING GRAVE ACCENT BELOW
+0317;A # COMBINING ACUTE ACCENT BELOW
+0318;A # COMBINING LEFT TACK BELOW
+0319;A # COMBINING RIGHT TACK BELOW
+031A;A # COMBINING LEFT ANGLE ABOVE
+031B;A # COMBINING HORN
+031C;A # COMBINING LEFT HALF RING BELOW
+031D;A # COMBINING UP TACK BELOW
+031E;A # COMBINING DOWN TACK BELOW
+031F;A # COMBINING PLUS SIGN BELOW
+0320;A # COMBINING MINUS SIGN BELOW
+0321;A # COMBINING PALATALIZED HOOK BELOW
+0322;A # COMBINING RETROFLEX HOOK BELOW
+0323;A # COMBINING DOT BELOW
+0324;A # COMBINING DIAERESIS BELOW
+0325;A # COMBINING RING BELOW
+0326;A # COMBINING COMMA BELOW
+0327;A # COMBINING CEDILLA
+0328;A # COMBINING OGONEK
+0329;A # COMBINING VERTICAL LINE BELOW
+032A;A # COMBINING BRIDGE BELOW
+032B;A # COMBINING INVERTED DOUBLE ARCH BELOW
+032C;A # COMBINING CARON BELOW
+032D;A # COMBINING CIRCUMFLEX ACCENT BELOW
+032E;A # COMBINING BREVE BELOW
+032F;A # COMBINING INVERTED BREVE BELOW
+0330;A # COMBINING TILDE BELOW
+0331;A # COMBINING MACRON BELOW
+0332;A # COMBINING LOW LINE
+0333;A # COMBINING DOUBLE LOW LINE
+0334;A # COMBINING TILDE OVERLAY
+0335;A # COMBINING SHORT STROKE OVERLAY
+0336;A # COMBINING LONG STROKE OVERLAY
+0337;A # COMBINING SHORT SOLIDUS OVERLAY
+0338;A # COMBINING LONG SOLIDUS OVERLAY
+0339;A # COMBINING RIGHT HALF RING BELOW
+033A;A # COMBINING INVERTED BRIDGE BELOW
+033B;A # COMBINING SQUARE BELOW
+033C;A # COMBINING SEAGULL BELOW
+033D;A # COMBINING X ABOVE
+033E;A # COMBINING VERTICAL TILDE
+033F;A # COMBINING DOUBLE OVERLINE
+0340;A # COMBINING GRAVE TONE MARK
+0341;A # COMBINING ACUTE TONE MARK
+0342;A # COMBINING GREEK PERISPOMENI
+0343;A # COMBINING GREEK KORONIS
+0344;A # COMBINING GREEK DIALYTIKA TONOS
+0345;A # COMBINING GREEK YPOGEGRAMMENI
+0346;A # COMBINING BRIDGE ABOVE
+0347;A # COMBINING EQUALS SIGN BELOW
+0348;A # COMBINING DOUBLE VERTICAL LINE BELOW
+0349;A # COMBINING LEFT ANGLE BELOW
+034A;A # COMBINING NOT TILDE ABOVE
+034B;A # COMBINING HOMOTHETIC ABOVE
+034C;A # COMBINING ALMOST EQUAL TO ABOVE
+034D;A # COMBINING LEFT RIGHT ARROW BELOW
+034E;A # COMBINING UPWARDS ARROW BELOW
+034F;A # COMBINING GRAPHEME JOINER
+0350;A # COMBINING RIGHT ARROWHEAD ABOVE
+0351;A # COMBINING LEFT HALF RING ABOVE
+0352;A # COMBINING FERMATA
+0353;A # COMBINING X BELOW
+0354;A # COMBINING LEFT ARROWHEAD BELOW
+0355;A # COMBINING RIGHT ARROWHEAD BELOW
+0356;A # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0357;A # COMBINING RIGHT HALF RING ABOVE
+0358;A # COMBINING DOT ABOVE RIGHT
+0359;A # COMBINING ASTERISK BELOW
+035A;A # COMBINING DOUBLE RING BELOW
+035B;A # COMBINING ZIGZAG ABOVE
+035C;A # COMBINING DOUBLE BREVE BELOW
+035D;A # COMBINING DOUBLE BREVE
+035E;A # COMBINING DOUBLE MACRON
+035F;A # COMBINING DOUBLE MACRON BELOW
+0360;A # COMBINING DOUBLE TILDE
+0361;A # COMBINING DOUBLE INVERTED BREVE
+0362;A # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363;A # COMBINING LATIN SMALL LETTER A
+0364;A # COMBINING LATIN SMALL LETTER E
+0365;A # COMBINING LATIN SMALL LETTER I
+0366;A # COMBINING LATIN SMALL LETTER O
+0367;A # COMBINING LATIN SMALL LETTER U
+0368;A # COMBINING LATIN SMALL LETTER C
+0369;A # COMBINING LATIN SMALL LETTER D
+036A;A # COMBINING LATIN SMALL LETTER H
+036B;A # COMBINING LATIN SMALL LETTER M
+036C;A # COMBINING LATIN SMALL LETTER R
+036D;A # COMBINING LATIN SMALL LETTER T
+036E;A # COMBINING LATIN SMALL LETTER V
+036F;A # COMBINING LATIN SMALL LETTER X
+0370;N # GREEK CAPITAL LETTER HETA
+0371;N # GREEK SMALL LETTER HETA
+0372;N # GREEK CAPITAL LETTER ARCHAIC SAMPI
+0373;N # GREEK SMALL LETTER ARCHAIC SAMPI
+0374;N # GREEK NUMERAL SIGN
+0375;N # GREEK LOWER NUMERAL SIGN
+0376;N # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+0377;N # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A;N # GREEK YPOGEGRAMMENI
+037B;N # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
+037C;N # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
+037D;N # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037E;N # GREEK QUESTION MARK
+0384;N # GREEK TONOS
+0385;N # GREEK DIALYTIKA TONOS
+0386;N # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;N # GREEK ANO TELEIA
+0388;N # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389;N # GREEK CAPITAL LETTER ETA WITH TONOS
+038A;N # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;N # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E;N # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F;N # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391;A # GREEK CAPITAL LETTER ALPHA
+0392;A # GREEK CAPITAL LETTER BETA
+0393;A # GREEK CAPITAL LETTER GAMMA
+0394;A # GREEK CAPITAL LETTER DELTA
+0395;A # GREEK CAPITAL LETTER EPSILON
+0396;A # GREEK CAPITAL LETTER ZETA
+0397;A # GREEK CAPITAL LETTER ETA
+0398;A # GREEK CAPITAL LETTER THETA
+0399;A # GREEK CAPITAL LETTER IOTA
+039A;A # GREEK CAPITAL LETTER KAPPA
+039B;A # GREEK CAPITAL LETTER LAMDA
+039C;A # GREEK CAPITAL LETTER MU
+039D;A # GREEK CAPITAL LETTER NU
+039E;A # GREEK CAPITAL LETTER XI
+039F;A # GREEK CAPITAL LETTER OMICRON
+03A0;A # GREEK CAPITAL LETTER PI
+03A1;A # GREEK CAPITAL LETTER RHO
+03A3;A # GREEK CAPITAL LETTER SIGMA
+03A4;A # GREEK CAPITAL LETTER TAU
+03A5;A # GREEK CAPITAL LETTER UPSILON
+03A6;A # GREEK CAPITAL LETTER PHI
+03A7;A # GREEK CAPITAL LETTER CHI
+03A8;A # GREEK CAPITAL LETTER PSI
+03A9;A # GREEK CAPITAL LETTER OMEGA
+03AA;N # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB;N # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC;N # GREEK SMALL LETTER ALPHA WITH TONOS
+03AD;N # GREEK SMALL LETTER EPSILON WITH TONOS
+03AE;N # GREEK SMALL LETTER ETA WITH TONOS
+03AF;N # GREEK SMALL LETTER IOTA WITH TONOS
+03B0;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1;A # GREEK SMALL LETTER ALPHA
+03B2;A # GREEK SMALL LETTER BETA
+03B3;A # GREEK SMALL LETTER GAMMA
+03B4;A # GREEK SMALL LETTER DELTA
+03B5;A # GREEK SMALL LETTER EPSILON
+03B6;A # GREEK SMALL LETTER ZETA
+03B7;A # GREEK SMALL LETTER ETA
+03B8;A # GREEK SMALL LETTER THETA
+03B9;A # GREEK SMALL LETTER IOTA
+03BA;A # GREEK SMALL LETTER KAPPA
+03BB;A # GREEK SMALL LETTER LAMDA
+03BC;A # GREEK SMALL LETTER MU
+03BD;A # GREEK SMALL LETTER NU
+03BE;A # GREEK SMALL LETTER XI
+03BF;A # GREEK SMALL LETTER OMICRON
+03C0;A # GREEK SMALL LETTER PI
+03C1;A # GREEK SMALL LETTER RHO
+03C2;N # GREEK SMALL LETTER FINAL SIGMA
+03C3;A # GREEK SMALL LETTER SIGMA
+03C4;A # GREEK SMALL LETTER TAU
+03C5;A # GREEK SMALL LETTER UPSILON
+03C6;A # GREEK SMALL LETTER PHI
+03C7;A # GREEK SMALL LETTER CHI
+03C8;A # GREEK SMALL LETTER PSI
+03C9;A # GREEK SMALL LETTER OMEGA
+03CA;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC;N # GREEK SMALL LETTER OMICRON WITH TONOS
+03CD;N # GREEK SMALL LETTER UPSILON WITH TONOS
+03CE;N # GREEK SMALL LETTER OMEGA WITH TONOS
+03CF;N # GREEK CAPITAL KAI SYMBOL
+03D0;N # GREEK BETA SYMBOL
+03D1;N # GREEK THETA SYMBOL
+03D2;N # GREEK UPSILON WITH HOOK SYMBOL
+03D3;N # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4;N # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5;N # GREEK PHI SYMBOL
+03D6;N # GREEK PI SYMBOL
+03D7;N # GREEK KAI SYMBOL
+03D8;N # GREEK LETTER ARCHAIC KOPPA
+03D9;N # GREEK SMALL LETTER ARCHAIC KOPPA
+03DA;N # GREEK LETTER STIGMA
+03DB;N # GREEK SMALL LETTER STIGMA
+03DC;N # GREEK LETTER DIGAMMA
+03DD;N # GREEK SMALL LETTER DIGAMMA
+03DE;N # GREEK LETTER KOPPA
+03DF;N # GREEK SMALL LETTER KOPPA
+03E0;N # GREEK LETTER SAMPI
+03E1;N # GREEK SMALL LETTER SAMPI
+03E2;N # COPTIC CAPITAL LETTER SHEI
+03E3;N # COPTIC SMALL LETTER SHEI
+03E4;N # COPTIC CAPITAL LETTER FEI
+03E5;N # COPTIC SMALL LETTER FEI
+03E6;N # COPTIC CAPITAL LETTER KHEI
+03E7;N # COPTIC SMALL LETTER KHEI
+03E8;N # COPTIC CAPITAL LETTER HORI
+03E9;N # COPTIC SMALL LETTER HORI
+03EA;N # COPTIC CAPITAL LETTER GANGIA
+03EB;N # COPTIC SMALL LETTER GANGIA
+03EC;N # COPTIC CAPITAL LETTER SHIMA
+03ED;N # COPTIC SMALL LETTER SHIMA
+03EE;N # COPTIC CAPITAL LETTER DEI
+03EF;N # COPTIC SMALL LETTER DEI
+03F0;N # GREEK KAPPA SYMBOL
+03F1;N # GREEK RHO SYMBOL
+03F2;N # GREEK LUNATE SIGMA SYMBOL
+03F3;N # GREEK LETTER YOT
+03F4;N # GREEK CAPITAL THETA SYMBOL
+03F5;N # GREEK LUNATE EPSILON SYMBOL
+03F6;N # GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7;N # GREEK CAPITAL LETTER SHO
+03F8;N # GREEK SMALL LETTER SHO
+03F9;N # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA;N # GREEK CAPITAL LETTER SAN
+03FB;N # GREEK SMALL LETTER SAN
+03FC;N # GREEK RHO WITH STROKE SYMBOL
+03FD;N # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE;N # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF;N # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400;N # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401;A # CYRILLIC CAPITAL LETTER IO
+0402;N # CYRILLIC CAPITAL LETTER DJE
+0403;N # CYRILLIC CAPITAL LETTER GJE
+0404;N # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405;N # CYRILLIC CAPITAL LETTER DZE
+0406;N # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407;N # CYRILLIC CAPITAL LETTER YI
+0408;N # CYRILLIC CAPITAL LETTER JE
+0409;N # CYRILLIC CAPITAL LETTER LJE
+040A;N # CYRILLIC CAPITAL LETTER NJE
+040B;N # CYRILLIC CAPITAL LETTER TSHE
+040C;N # CYRILLIC CAPITAL LETTER KJE
+040D;N # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E;N # CYRILLIC CAPITAL LETTER SHORT U
+040F;N # CYRILLIC CAPITAL LETTER DZHE
+0410;A # CYRILLIC CAPITAL LETTER A
+0411;A # CYRILLIC CAPITAL LETTER BE
+0412;A # CYRILLIC CAPITAL LETTER VE
+0413;A # CYRILLIC CAPITAL LETTER GHE
+0414;A # CYRILLIC CAPITAL LETTER DE
+0415;A # CYRILLIC CAPITAL LETTER IE
+0416;A # CYRILLIC CAPITAL LETTER ZHE
+0417;A # CYRILLIC CAPITAL LETTER ZE
+0418;A # CYRILLIC CAPITAL LETTER I
+0419;A # CYRILLIC CAPITAL LETTER SHORT I
+041A;A # CYRILLIC CAPITAL LETTER KA
+041B;A # CYRILLIC CAPITAL LETTER EL
+041C;A # CYRILLIC CAPITAL LETTER EM
+041D;A # CYRILLIC CAPITAL LETTER EN
+041E;A # CYRILLIC CAPITAL LETTER O
+041F;A # CYRILLIC CAPITAL LETTER PE
+0420;A # CYRILLIC CAPITAL LETTER ER
+0421;A # CYRILLIC CAPITAL LETTER ES
+0422;A # CYRILLIC CAPITAL LETTER TE
+0423;A # CYRILLIC CAPITAL LETTER U
+0424;A # CYRILLIC CAPITAL LETTER EF
+0425;A # CYRILLIC CAPITAL LETTER HA
+0426;A # CYRILLIC CAPITAL LETTER TSE
+0427;A # CYRILLIC CAPITAL LETTER CHE
+0428;A # CYRILLIC CAPITAL LETTER SHA
+0429;A # CYRILLIC CAPITAL LETTER SHCHA
+042A;A # CYRILLIC CAPITAL LETTER HARD SIGN
+042B;A # CYRILLIC CAPITAL LETTER YERU
+042C;A # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D;A # CYRILLIC CAPITAL LETTER E
+042E;A # CYRILLIC CAPITAL LETTER YU
+042F;A # CYRILLIC CAPITAL LETTER YA
+0430;A # CYRILLIC SMALL LETTER A
+0431;A # CYRILLIC SMALL LETTER BE
+0432;A # CYRILLIC SMALL LETTER VE
+0433;A # CYRILLIC SMALL LETTER GHE
+0434;A # CYRILLIC SMALL LETTER DE
+0435;A # CYRILLIC SMALL LETTER IE
+0436;A # CYRILLIC SMALL LETTER ZHE
+0437;A # CYRILLIC SMALL LETTER ZE
+0438;A # CYRILLIC SMALL LETTER I
+0439;A # CYRILLIC SMALL LETTER SHORT I
+043A;A # CYRILLIC SMALL LETTER KA
+043B;A # CYRILLIC SMALL LETTER EL
+043C;A # CYRILLIC SMALL LETTER EM
+043D;A # CYRILLIC SMALL LETTER EN
+043E;A # CYRILLIC SMALL LETTER O
+043F;A # CYRILLIC SMALL LETTER PE
+0440;A # CYRILLIC SMALL LETTER ER
+0441;A # CYRILLIC SMALL LETTER ES
+0442;A # CYRILLIC SMALL LETTER TE
+0443;A # CYRILLIC SMALL LETTER U
+0444;A # CYRILLIC SMALL LETTER EF
+0445;A # CYRILLIC SMALL LETTER HA
+0446;A # CYRILLIC SMALL LETTER TSE
+0447;A # CYRILLIC SMALL LETTER CHE
+0448;A # CYRILLIC SMALL LETTER SHA
+0449;A # CYRILLIC SMALL LETTER SHCHA
+044A;A # CYRILLIC SMALL LETTER HARD SIGN
+044B;A # CYRILLIC SMALL LETTER YERU
+044C;A # CYRILLIC SMALL LETTER SOFT SIGN
+044D;A # CYRILLIC SMALL LETTER E
+044E;A # CYRILLIC SMALL LETTER YU
+044F;A # CYRILLIC SMALL LETTER YA
+0450;N # CYRILLIC SMALL LETTER IE WITH GRAVE
+0451;A # CYRILLIC SMALL LETTER IO
+0452;N # CYRILLIC SMALL LETTER DJE
+0453;N # CYRILLIC SMALL LETTER GJE
+0454;N # CYRILLIC SMALL LETTER UKRAINIAN IE
+0455;N # CYRILLIC SMALL LETTER DZE
+0456;N # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457;N # CYRILLIC SMALL LETTER YI
+0458;N # CYRILLIC SMALL LETTER JE
+0459;N # CYRILLIC SMALL LETTER LJE
+045A;N # CYRILLIC SMALL LETTER NJE
+045B;N # CYRILLIC SMALL LETTER TSHE
+045C;N # CYRILLIC SMALL LETTER KJE
+045D;N # CYRILLIC SMALL LETTER I WITH GRAVE
+045E;N # CYRILLIC SMALL LETTER SHORT U
+045F;N # CYRILLIC SMALL LETTER DZHE
+0460;N # CYRILLIC CAPITAL LETTER OMEGA
+0461;N # CYRILLIC SMALL LETTER OMEGA
+0462;N # CYRILLIC CAPITAL LETTER YAT
+0463;N # CYRILLIC SMALL LETTER YAT
+0464;N # CYRILLIC CAPITAL LETTER IOTIFIED E
+0465;N # CYRILLIC SMALL LETTER IOTIFIED E
+0466;N # CYRILLIC CAPITAL LETTER LITTLE YUS
+0467;N # CYRILLIC SMALL LETTER LITTLE YUS
+0468;N # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469;N # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A;N # CYRILLIC CAPITAL LETTER BIG YUS
+046B;N # CYRILLIC SMALL LETTER BIG YUS
+046C;N # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D;N # CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E;N # CYRILLIC CAPITAL LETTER KSI
+046F;N # CYRILLIC SMALL LETTER KSI
+0470;N # CYRILLIC CAPITAL LETTER PSI
+0471;N # CYRILLIC SMALL LETTER PSI
+0472;N # CYRILLIC CAPITAL LETTER FITA
+0473;N # CYRILLIC SMALL LETTER FITA
+0474;N # CYRILLIC CAPITAL LETTER IZHITSA
+0475;N # CYRILLIC SMALL LETTER IZHITSA
+0476;N # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477;N # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478;N # CYRILLIC CAPITAL LETTER UK
+0479;N # CYRILLIC SMALL LETTER UK
+047A;N # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B;N # CYRILLIC SMALL LETTER ROUND OMEGA
+047C;N # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D;N # CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E;N # CYRILLIC CAPITAL LETTER OT
+047F;N # CYRILLIC SMALL LETTER OT
+0480;N # CYRILLIC CAPITAL LETTER KOPPA
+0481;N # CYRILLIC SMALL LETTER KOPPA
+0482;N # CYRILLIC THOUSANDS SIGN
+0483;N # COMBINING CYRILLIC TITLO
+0484;N # COMBINING CYRILLIC PALATALIZATION
+0485;N # COMBINING CYRILLIC DASIA PNEUMATA
+0486;N # COMBINING CYRILLIC PSILI PNEUMATA
+0487;N # COMBINING CYRILLIC POKRYTIE
+0488;N # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489;N # COMBINING CYRILLIC MILLIONS SIGN
+048A;N # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B;N # CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C;N # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D;N # CYRILLIC SMALL LETTER SEMISOFT SIGN
+048E;N # CYRILLIC CAPITAL LETTER ER WITH TICK
+048F;N # CYRILLIC SMALL LETTER ER WITH TICK
+0490;N # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491;N # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0492;N # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493;N # CYRILLIC SMALL LETTER GHE WITH STROKE
+0494;N # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495;N # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0496;N # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497;N # CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0498;N # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499;N # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049A;N # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B;N # CYRILLIC SMALL LETTER KA WITH DESCENDER
+049C;N # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D;N # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049E;N # CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F;N # CYRILLIC SMALL LETTER KA WITH STROKE
+04A0;N # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1;N # CYRILLIC SMALL LETTER BASHKIR KA
+04A2;N # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3;N # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A4;N # CYRILLIC CAPITAL LIGATURE EN GHE
+04A5;N # CYRILLIC SMALL LIGATURE EN GHE
+04A6;N # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A7;N # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A8;N # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9;N # CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA;N # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB;N # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AC;N # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD;N # CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AE;N # CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF;N # CYRILLIC SMALL LETTER STRAIGHT U
+04B0;N # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1;N # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B2;N # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3;N # CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B4;N # CYRILLIC CAPITAL LIGATURE TE TSE
+04B5;N # CYRILLIC SMALL LIGATURE TE TSE
+04B6;N # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7;N # CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B8;N # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9;N # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BA;N # CYRILLIC CAPITAL LETTER SHHA
+04BB;N # CYRILLIC SMALL LETTER SHHA
+04BC;N # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD;N # CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE;N # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF;N # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0;N # CYRILLIC LETTER PALOCHKA
+04C1;N # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2;N # CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C3;N # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4;N # CYRILLIC SMALL LETTER KA WITH HOOK
+04C5;N # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6;N # CYRILLIC SMALL LETTER EL WITH TAIL
+04C7;N # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8;N # CYRILLIC SMALL LETTER EN WITH HOOK
+04C9;N # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA;N # CYRILLIC SMALL LETTER EN WITH TAIL
+04CB;N # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC;N # CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD;N # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE;N # CYRILLIC SMALL LETTER EM WITH TAIL
+04CF;N # CYRILLIC SMALL LETTER PALOCHKA
+04D0;N # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1;N # CYRILLIC SMALL LETTER A WITH BREVE
+04D2;N # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3;N # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D4;N # CYRILLIC CAPITAL LIGATURE A IE
+04D5;N # CYRILLIC SMALL LIGATURE A IE
+04D6;N # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7;N # CYRILLIC SMALL LETTER IE WITH BREVE
+04D8;N # CYRILLIC CAPITAL LETTER SCHWA
+04D9;N # CYRILLIC SMALL LETTER SCHWA
+04DA;N # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB;N # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC;N # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD;N # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE;N # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF;N # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E0;N # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1;N # CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E2;N # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3;N # CYRILLIC SMALL LETTER I WITH MACRON
+04E4;N # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5;N # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6;N # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7;N # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E8;N # CYRILLIC CAPITAL LETTER BARRED O
+04E9;N # CYRILLIC SMALL LETTER BARRED O
+04EA;N # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB;N # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC;N # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED;N # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE;N # CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF;N # CYRILLIC SMALL LETTER U WITH MACRON
+04F0;N # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1;N # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2;N # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3;N # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4;N # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5;N # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6;N # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7;N # CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8;N # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9;N # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FA;N # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FB;N # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FC;N # CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FD;N # CYRILLIC SMALL LETTER HA WITH HOOK
+04FE;N # CYRILLIC CAPITAL LETTER HA WITH STROKE
+04FF;N # CYRILLIC SMALL LETTER HA WITH STROKE
+0500;N # CYRILLIC CAPITAL LETTER KOMI DE
+0501;N # CYRILLIC SMALL LETTER KOMI DE
+0502;N # CYRILLIC CAPITAL LETTER KOMI DJE
+0503;N # CYRILLIC SMALL LETTER KOMI DJE
+0504;N # CYRILLIC CAPITAL LETTER KOMI ZJE
+0505;N # CYRILLIC SMALL LETTER KOMI ZJE
+0506;N # CYRILLIC CAPITAL LETTER KOMI DZJE
+0507;N # CYRILLIC SMALL LETTER KOMI DZJE
+0508;N # CYRILLIC CAPITAL LETTER KOMI LJE
+0509;N # CYRILLIC SMALL LETTER KOMI LJE
+050A;N # CYRILLIC CAPITAL LETTER KOMI NJE
+050B;N # CYRILLIC SMALL LETTER KOMI NJE
+050C;N # CYRILLIC CAPITAL LETTER KOMI SJE
+050D;N # CYRILLIC SMALL LETTER KOMI SJE
+050E;N # CYRILLIC CAPITAL LETTER KOMI TJE
+050F;N # CYRILLIC SMALL LETTER KOMI TJE
+0510;N # CYRILLIC CAPITAL LETTER REVERSED ZE
+0511;N # CYRILLIC SMALL LETTER REVERSED ZE
+0512;N # CYRILLIC CAPITAL LETTER EL WITH HOOK
+0513;N # CYRILLIC SMALL LETTER EL WITH HOOK
+0514;N # CYRILLIC CAPITAL LETTER LHA
+0515;N # CYRILLIC SMALL LETTER LHA
+0516;N # CYRILLIC CAPITAL LETTER RHA
+0517;N # CYRILLIC SMALL LETTER RHA
+0518;N # CYRILLIC CAPITAL LETTER YAE
+0519;N # CYRILLIC SMALL LETTER YAE
+051A;N # CYRILLIC CAPITAL LETTER QA
+051B;N # CYRILLIC SMALL LETTER QA
+051C;N # CYRILLIC CAPITAL LETTER WE
+051D;N # CYRILLIC SMALL LETTER WE
+051E;N # CYRILLIC CAPITAL LETTER ALEUT KA
+051F;N # CYRILLIC SMALL LETTER ALEUT KA
+0520;N # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0521;N # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0522;N # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0523;N # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0524;N # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0525;N # CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531;N # ARMENIAN CAPITAL LETTER AYB
+0532;N # ARMENIAN CAPITAL LETTER BEN
+0533;N # ARMENIAN CAPITAL LETTER GIM
+0534;N # ARMENIAN CAPITAL LETTER DA
+0535;N # ARMENIAN CAPITAL LETTER ECH
+0536;N # ARMENIAN CAPITAL LETTER ZA
+0537;N # ARMENIAN CAPITAL LETTER EH
+0538;N # ARMENIAN CAPITAL LETTER ET
+0539;N # ARMENIAN CAPITAL LETTER TO
+053A;N # ARMENIAN CAPITAL LETTER ZHE
+053B;N # ARMENIAN CAPITAL LETTER INI
+053C;N # ARMENIAN CAPITAL LETTER LIWN
+053D;N # ARMENIAN CAPITAL LETTER XEH
+053E;N # ARMENIAN CAPITAL LETTER CA
+053F;N # ARMENIAN CAPITAL LETTER KEN
+0540;N # ARMENIAN CAPITAL LETTER HO
+0541;N # ARMENIAN CAPITAL LETTER JA
+0542;N # ARMENIAN CAPITAL LETTER GHAD
+0543;N # ARMENIAN CAPITAL LETTER CHEH
+0544;N # ARMENIAN CAPITAL LETTER MEN
+0545;N # ARMENIAN CAPITAL LETTER YI
+0546;N # ARMENIAN CAPITAL LETTER NOW
+0547;N # ARMENIAN CAPITAL LETTER SHA
+0548;N # ARMENIAN CAPITAL LETTER VO
+0549;N # ARMENIAN CAPITAL LETTER CHA
+054A;N # ARMENIAN CAPITAL LETTER PEH
+054B;N # ARMENIAN CAPITAL LETTER JHEH
+054C;N # ARMENIAN CAPITAL LETTER RA
+054D;N # ARMENIAN CAPITAL LETTER SEH
+054E;N # ARMENIAN CAPITAL LETTER VEW
+054F;N # ARMENIAN CAPITAL LETTER TIWN
+0550;N # ARMENIAN CAPITAL LETTER REH
+0551;N # ARMENIAN CAPITAL LETTER CO
+0552;N # ARMENIAN CAPITAL LETTER YIWN
+0553;N # ARMENIAN CAPITAL LETTER PIWR
+0554;N # ARMENIAN CAPITAL LETTER KEH
+0555;N # ARMENIAN CAPITAL LETTER OH
+0556;N # ARMENIAN CAPITAL LETTER FEH
+0559;N # ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A;N # ARMENIAN APOSTROPHE
+055B;N # ARMENIAN EMPHASIS MARK
+055C;N # ARMENIAN EXCLAMATION MARK
+055D;N # ARMENIAN COMMA
+055E;N # ARMENIAN QUESTION MARK
+055F;N # ARMENIAN ABBREVIATION MARK
+0561;N # ARMENIAN SMALL LETTER AYB
+0562;N # ARMENIAN SMALL LETTER BEN
+0563;N # ARMENIAN SMALL LETTER GIM
+0564;N # ARMENIAN SMALL LETTER DA
+0565;N # ARMENIAN SMALL LETTER ECH
+0566;N # ARMENIAN SMALL LETTER ZA
+0567;N # ARMENIAN SMALL LETTER EH
+0568;N # ARMENIAN SMALL LETTER ET
+0569;N # ARMENIAN SMALL LETTER TO
+056A;N # ARMENIAN SMALL LETTER ZHE
+056B;N # ARMENIAN SMALL LETTER INI
+056C;N # ARMENIAN SMALL LETTER LIWN
+056D;N # ARMENIAN SMALL LETTER XEH
+056E;N # ARMENIAN SMALL LETTER CA
+056F;N # ARMENIAN SMALL LETTER KEN
+0570;N # ARMENIAN SMALL LETTER HO
+0571;N # ARMENIAN SMALL LETTER JA
+0572;N # ARMENIAN SMALL LETTER GHAD
+0573;N # ARMENIAN SMALL LETTER CHEH
+0574;N # ARMENIAN SMALL LETTER MEN
+0575;N # ARMENIAN SMALL LETTER YI
+0576;N # ARMENIAN SMALL LETTER NOW
+0577;N # ARMENIAN SMALL LETTER SHA
+0578;N # ARMENIAN SMALL LETTER VO
+0579;N # ARMENIAN SMALL LETTER CHA
+057A;N # ARMENIAN SMALL LETTER PEH
+057B;N # ARMENIAN SMALL LETTER JHEH
+057C;N # ARMENIAN SMALL LETTER RA
+057D;N # ARMENIAN SMALL LETTER SEH
+057E;N # ARMENIAN SMALL LETTER VEW
+057F;N # ARMENIAN SMALL LETTER TIWN
+0580;N # ARMENIAN SMALL LETTER REH
+0581;N # ARMENIAN SMALL LETTER CO
+0582;N # ARMENIAN SMALL LETTER YIWN
+0583;N # ARMENIAN SMALL LETTER PIWR
+0584;N # ARMENIAN SMALL LETTER KEH
+0585;N # ARMENIAN SMALL LETTER OH
+0586;N # ARMENIAN SMALL LETTER FEH
+0587;N # ARMENIAN SMALL LIGATURE ECH YIWN
+0589;N # ARMENIAN FULL STOP
+058A;N # ARMENIAN HYPHEN
+0591;N # HEBREW ACCENT ETNAHTA
+0592;N # HEBREW ACCENT SEGOL
+0593;N # HEBREW ACCENT SHALSHELET
+0594;N # HEBREW ACCENT ZAQEF QATAN
+0595;N # HEBREW ACCENT ZAQEF GADOL
+0596;N # HEBREW ACCENT TIPEHA
+0597;N # HEBREW ACCENT REVIA
+0598;N # HEBREW ACCENT ZARQA
+0599;N # HEBREW ACCENT PASHTA
+059A;N # HEBREW ACCENT YETIV
+059B;N # HEBREW ACCENT TEVIR
+059C;N # HEBREW ACCENT GERESH
+059D;N # HEBREW ACCENT GERESH MUQDAM
+059E;N # HEBREW ACCENT GERSHAYIM
+059F;N # HEBREW ACCENT QARNEY PARA
+05A0;N # HEBREW ACCENT TELISHA GEDOLA
+05A1;N # HEBREW ACCENT PAZER
+05A2;N # HEBREW ACCENT ATNAH HAFUKH
+05A3;N # HEBREW ACCENT MUNAH
+05A4;N # HEBREW ACCENT MAHAPAKH
+05A5;N # HEBREW ACCENT MERKHA
+05A6;N # HEBREW ACCENT MERKHA KEFULA
+05A7;N # HEBREW ACCENT DARGA
+05A8;N # HEBREW ACCENT QADMA
+05A9;N # HEBREW ACCENT TELISHA QETANA
+05AA;N # HEBREW ACCENT YERAH BEN YOMO
+05AB;N # HEBREW ACCENT OLE
+05AC;N # HEBREW ACCENT ILUY
+05AD;N # HEBREW ACCENT DEHI
+05AE;N # HEBREW ACCENT ZINOR
+05AF;N # HEBREW MARK MASORA CIRCLE
+05B0;N # HEBREW POINT SHEVA
+05B1;N # HEBREW POINT HATAF SEGOL
+05B2;N # HEBREW POINT HATAF PATAH
+05B3;N # HEBREW POINT HATAF QAMATS
+05B4;N # HEBREW POINT HIRIQ
+05B5;N # HEBREW POINT TSERE
+05B6;N # HEBREW POINT SEGOL
+05B7;N # HEBREW POINT PATAH
+05B8;N # HEBREW POINT QAMATS
+05B9;N # HEBREW POINT HOLAM
+05BA;N # HEBREW POINT HOLAM HASER FOR VAV
+05BB;N # HEBREW POINT QUBUTS
+05BC;N # HEBREW POINT DAGESH OR MAPIQ
+05BD;N # HEBREW POINT METEG
+05BE;N # HEBREW PUNCTUATION MAQAF
+05BF;N # HEBREW POINT RAFE
+05C0;N # HEBREW PUNCTUATION PASEQ
+05C1;N # HEBREW POINT SHIN DOT
+05C2;N # HEBREW POINT SIN DOT
+05C3;N # HEBREW PUNCTUATION SOF PASUQ
+05C4;N # HEBREW MARK UPPER DOT
+05C5;N # HEBREW MARK LOWER DOT
+05C6;N # HEBREW PUNCTUATION NUN HAFUKHA
+05C7;N # HEBREW POINT QAMATS QATAN
+05D0;N # HEBREW LETTER ALEF
+05D1;N # HEBREW LETTER BET
+05D2;N # HEBREW LETTER GIMEL
+05D3;N # HEBREW LETTER DALET
+05D4;N # HEBREW LETTER HE
+05D5;N # HEBREW LETTER VAV
+05D6;N # HEBREW LETTER ZAYIN
+05D7;N # HEBREW LETTER HET
+05D8;N # HEBREW LETTER TET
+05D9;N # HEBREW LETTER YOD
+05DA;N # HEBREW LETTER FINAL KAF
+05DB;N # HEBREW LETTER KAF
+05DC;N # HEBREW LETTER LAMED
+05DD;N # HEBREW LETTER FINAL MEM
+05DE;N # HEBREW LETTER MEM
+05DF;N # HEBREW LETTER FINAL NUN
+05E0;N # HEBREW LETTER NUN
+05E1;N # HEBREW LETTER SAMEKH
+05E2;N # HEBREW LETTER AYIN
+05E3;N # HEBREW LETTER FINAL PE
+05E4;N # HEBREW LETTER PE
+05E5;N # HEBREW LETTER FINAL TSADI
+05E6;N # HEBREW LETTER TSADI
+05E7;N # HEBREW LETTER QOF
+05E8;N # HEBREW LETTER RESH
+05E9;N # HEBREW LETTER SHIN
+05EA;N # HEBREW LETTER TAV
+05F0;N # HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1;N # HEBREW LIGATURE YIDDISH VAV YOD
+05F2;N # HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3;N # HEBREW PUNCTUATION GERESH
+05F4;N # HEBREW PUNCTUATION GERSHAYIM
+0600;N # ARABIC NUMBER SIGN
+0601;N # ARABIC SIGN SANAH
+0602;N # ARABIC FOOTNOTE MARKER
+0603;N # ARABIC SIGN SAFHA
+0606;N # ARABIC-INDIC CUBE ROOT
+0607;N # ARABIC-INDIC FOURTH ROOT
+0608;N # ARABIC RAY
+0609;N # ARABIC-INDIC PER MILLE SIGN
+060A;N # ARABIC-INDIC PER TEN THOUSAND SIGN
+060B;N # AFGHANI SIGN
+060C;N # ARABIC COMMA
+060D;N # ARABIC DATE SEPARATOR
+060E;N # ARABIC POETIC VERSE SIGN
+060F;N # ARABIC SIGN MISRA
+0610;N # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+0611;N # ARABIC SIGN ALAYHE ASSALLAM
+0612;N # ARABIC SIGN RAHMATULLAH ALAYHE
+0613;N # ARABIC SIGN RADI ALLAHOU ANHU
+0614;N # ARABIC SIGN TAKHALLUS
+0615;N # ARABIC SMALL HIGH TAH
+0616;N # ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH
+0617;N # ARABIC SMALL HIGH ZAIN
+0618;N # ARABIC SMALL FATHA
+0619;N # ARABIC SMALL DAMMA
+061A;N # ARABIC SMALL KASRA
+061B;N # ARABIC SEMICOLON
+061E;N # ARABIC TRIPLE DOT PUNCTUATION MARK
+061F;N # ARABIC QUESTION MARK
+0621;N # ARABIC LETTER HAMZA
+0622;N # ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;N # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;N # ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;N # ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;N # ARABIC LETTER YEH WITH HAMZA ABOVE
+0627;N # ARABIC LETTER ALEF
+0628;N # ARABIC LETTER BEH
+0629;N # ARABIC LETTER TEH MARBUTA
+062A;N # ARABIC LETTER TEH
+062B;N # ARABIC LETTER THEH
+062C;N # ARABIC LETTER JEEM
+062D;N # ARABIC LETTER HAH
+062E;N # ARABIC LETTER KHAH
+062F;N # ARABIC LETTER DAL
+0630;N # ARABIC LETTER THAL
+0631;N # ARABIC LETTER REH
+0632;N # ARABIC LETTER ZAIN
+0633;N # ARABIC LETTER SEEN
+0634;N # ARABIC LETTER SHEEN
+0635;N # ARABIC LETTER SAD
+0636;N # ARABIC LETTER DAD
+0637;N # ARABIC LETTER TAH
+0638;N # ARABIC LETTER ZAH
+0639;N # ARABIC LETTER AIN
+063A;N # ARABIC LETTER GHAIN
+063B;N # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE
+063C;N # ARABIC LETTER KEHEH WITH THREE DOTS BELOW
+063D;N # ARABIC LETTER FARSI YEH WITH INVERTED V
+063E;N # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
+063F;N # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640;N # ARABIC TATWEEL
+0641;N # ARABIC LETTER FEH
+0642;N # ARABIC LETTER QAF
+0643;N # ARABIC LETTER KAF
+0644;N # ARABIC LETTER LAM
+0645;N # ARABIC LETTER MEEM
+0646;N # ARABIC LETTER NOON
+0647;N # ARABIC LETTER HEH
+0648;N # ARABIC LETTER WAW
+0649;N # ARABIC LETTER ALEF MAKSURA
+064A;N # ARABIC LETTER YEH
+064B;N # ARABIC FATHATAN
+064C;N # ARABIC DAMMATAN
+064D;N # ARABIC KASRATAN
+064E;N # ARABIC FATHA
+064F;N # ARABIC DAMMA
+0650;N # ARABIC KASRA
+0651;N # ARABIC SHADDA
+0652;N # ARABIC SUKUN
+0653;N # ARABIC MADDAH ABOVE
+0654;N # ARABIC HAMZA ABOVE
+0655;N # ARABIC HAMZA BELOW
+0656;N # ARABIC SUBSCRIPT ALEF
+0657;N # ARABIC INVERTED DAMMA
+0658;N # ARABIC MARK NOON GHUNNA
+0659;N # ARABIC ZWARAKAY
+065A;N # ARABIC VOWEL SIGN SMALL V ABOVE
+065B;N # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C;N # ARABIC VOWEL SIGN DOT BELOW
+065D;N # ARABIC REVERSED DAMMA
+065E;N # ARABIC FATHA WITH TWO DOTS
+0660;N # ARABIC-INDIC DIGIT ZERO
+0661;N # ARABIC-INDIC DIGIT ONE
+0662;N # ARABIC-INDIC DIGIT TWO
+0663;N # ARABIC-INDIC DIGIT THREE
+0664;N # ARABIC-INDIC DIGIT FOUR
+0665;N # ARABIC-INDIC DIGIT FIVE
+0666;N # ARABIC-INDIC DIGIT SIX
+0667;N # ARABIC-INDIC DIGIT SEVEN
+0668;N # ARABIC-INDIC DIGIT EIGHT
+0669;N # ARABIC-INDIC DIGIT NINE
+066A;N # ARABIC PERCENT SIGN
+066B;N # ARABIC DECIMAL SEPARATOR
+066C;N # ARABIC THOUSANDS SEPARATOR
+066D;N # ARABIC FIVE POINTED STAR
+066E;N # ARABIC LETTER DOTLESS BEH
+066F;N # ARABIC LETTER DOTLESS QAF
+0670;N # ARABIC LETTER SUPERSCRIPT ALEF
+0671;N # ARABIC LETTER ALEF WASLA
+0672;N # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0673;N # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0674;N # ARABIC LETTER HIGH HAMZA
+0675;N # ARABIC LETTER HIGH HAMZA ALEF
+0676;N # ARABIC LETTER HIGH HAMZA WAW
+0677;N # ARABIC LETTER U WITH HAMZA ABOVE
+0678;N # ARABIC LETTER HIGH HAMZA YEH
+0679;N # ARABIC LETTER TTEH
+067A;N # ARABIC LETTER TTEHEH
+067B;N # ARABIC LETTER BEEH
+067C;N # ARABIC LETTER TEH WITH RING
+067D;N # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067E;N # ARABIC LETTER PEH
+067F;N # ARABIC LETTER TEHEH
+0680;N # ARABIC LETTER BEHEH
+0681;N # ARABIC LETTER HAH WITH HAMZA ABOVE
+0682;N # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0683;N # ARABIC LETTER NYEH
+0684;N # ARABIC LETTER DYEH
+0685;N # ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0686;N # ARABIC LETTER TCHEH
+0687;N # ARABIC LETTER TCHEHEH
+0688;N # ARABIC LETTER DDAL
+0689;N # ARABIC LETTER DAL WITH RING
+068A;N # ARABIC LETTER DAL WITH DOT BELOW
+068B;N # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C;N # ARABIC LETTER DAHAL
+068D;N # ARABIC LETTER DDAHAL
+068E;N # ARABIC LETTER DUL
+068F;N # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690;N # ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+0691;N # ARABIC LETTER RREH
+0692;N # ARABIC LETTER REH WITH SMALL V
+0693;N # ARABIC LETTER REH WITH RING
+0694;N # ARABIC LETTER REH WITH DOT BELOW
+0695;N # ARABIC LETTER REH WITH SMALL V BELOW
+0696;N # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697;N # ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698;N # ARABIC LETTER JEH
+0699;N # ARABIC LETTER REH WITH FOUR DOTS ABOVE
+069A;N # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B;N # ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C;N # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+069D;N # ARABIC LETTER SAD WITH TWO DOTS BELOW
+069E;N # ARABIC LETTER SAD WITH THREE DOTS ABOVE
+069F;N # ARABIC LETTER TAH WITH THREE DOTS ABOVE
+06A0;N # ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A1;N # ARABIC LETTER DOTLESS FEH
+06A2;N # ARABIC LETTER FEH WITH DOT MOVED BELOW
+06A3;N # ARABIC LETTER FEH WITH DOT BELOW
+06A4;N # ARABIC LETTER VEH
+06A5;N # ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6;N # ARABIC LETTER PEHEH
+06A7;N # ARABIC LETTER QAF WITH DOT ABOVE
+06A8;N # ARABIC LETTER QAF WITH THREE DOTS ABOVE
+06A9;N # ARABIC LETTER KEHEH
+06AA;N # ARABIC LETTER SWASH KAF
+06AB;N # ARABIC LETTER KAF WITH RING
+06AC;N # ARABIC LETTER KAF WITH DOT ABOVE
+06AD;N # ARABIC LETTER NG
+06AE;N # ARABIC LETTER KAF WITH THREE DOTS BELOW
+06AF;N # ARABIC LETTER GAF
+06B0;N # ARABIC LETTER GAF WITH RING
+06B1;N # ARABIC LETTER NGOEH
+06B2;N # ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3;N # ARABIC LETTER GUEH
+06B4;N # ARABIC LETTER GAF WITH THREE DOTS ABOVE
+06B5;N # ARABIC LETTER LAM WITH SMALL V
+06B6;N # ARABIC LETTER LAM WITH DOT ABOVE
+06B7;N # ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8;N # ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9;N # ARABIC LETTER NOON WITH DOT BELOW
+06BA;N # ARABIC LETTER NOON GHUNNA
+06BB;N # ARABIC LETTER RNOON
+06BC;N # ARABIC LETTER NOON WITH RING
+06BD;N # ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06BE;N # ARABIC LETTER HEH DOACHASHMEE
+06BF;N # ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0;N # ARABIC LETTER HEH WITH YEH ABOVE
+06C1;N # ARABIC LETTER HEH GOAL
+06C2;N # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3;N # ARABIC LETTER TEH MARBUTA GOAL
+06C4;N # ARABIC LETTER WAW WITH RING
+06C5;N # ARABIC LETTER KIRGHIZ OE
+06C6;N # ARABIC LETTER OE
+06C7;N # ARABIC LETTER U
+06C8;N # ARABIC LETTER YU
+06C9;N # ARABIC LETTER KIRGHIZ YU
+06CA;N # ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB;N # ARABIC LETTER VE
+06CC;N # ARABIC LETTER FARSI YEH
+06CD;N # ARABIC LETTER YEH WITH TAIL
+06CE;N # ARABIC LETTER YEH WITH SMALL V
+06CF;N # ARABIC LETTER WAW WITH DOT ABOVE
+06D0;N # ARABIC LETTER E
+06D1;N # ARABIC LETTER YEH WITH THREE DOTS BELOW
+06D2;N # ARABIC LETTER YEH BARREE
+06D3;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4;N # ARABIC FULL STOP
+06D5;N # ARABIC LETTER AE
+06D6;N # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7;N # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8;N # ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9;N # ARABIC SMALL HIGH LAM ALEF
+06DA;N # ARABIC SMALL HIGH JEEM
+06DB;N # ARABIC SMALL HIGH THREE DOTS
+06DC;N # ARABIC SMALL HIGH SEEN
+06DD;N # ARABIC END OF AYAH
+06DE;N # ARABIC START OF RUB EL HIZB
+06DF;N # ARABIC SMALL HIGH ROUNDED ZERO
+06E0;N # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1;N # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2;N # ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3;N # ARABIC SMALL LOW SEEN
+06E4;N # ARABIC SMALL HIGH MADDA
+06E5;N # ARABIC SMALL WAW
+06E6;N # ARABIC SMALL YEH
+06E7;N # ARABIC SMALL HIGH YEH
+06E8;N # ARABIC SMALL HIGH NOON
+06E9;N # ARABIC PLACE OF SAJDAH
+06EA;N # ARABIC EMPTY CENTRE LOW STOP
+06EB;N # ARABIC EMPTY CENTRE HIGH STOP
+06EC;N # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED;N # ARABIC SMALL LOW MEEM
+06EE;N # ARABIC LETTER DAL WITH INVERTED V
+06EF;N # ARABIC LETTER REH WITH INVERTED V
+06F0;N # EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1;N # EXTENDED ARABIC-INDIC DIGIT ONE
+06F2;N # EXTENDED ARABIC-INDIC DIGIT TWO
+06F3;N # EXTENDED ARABIC-INDIC DIGIT THREE
+06F4;N # EXTENDED ARABIC-INDIC DIGIT FOUR
+06F5;N # EXTENDED ARABIC-INDIC DIGIT FIVE
+06F6;N # EXTENDED ARABIC-INDIC DIGIT SIX
+06F7;N # EXTENDED ARABIC-INDIC DIGIT SEVEN
+06F8;N # EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9;N # EXTENDED ARABIC-INDIC DIGIT NINE
+06FA;N # ARABIC LETTER SHEEN WITH DOT BELOW
+06FB;N # ARABIC LETTER DAD WITH DOT BELOW
+06FC;N # ARABIC LETTER GHAIN WITH DOT BELOW
+06FD;N # ARABIC SIGN SINDHI AMPERSAND
+06FE;N # ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF;N # ARABIC LETTER HEH WITH INVERTED V
+0700;N # SYRIAC END OF PARAGRAPH
+0701;N # SYRIAC SUPRALINEAR FULL STOP
+0702;N # SYRIAC SUBLINEAR FULL STOP
+0703;N # SYRIAC SUPRALINEAR COLON
+0704;N # SYRIAC SUBLINEAR COLON
+0705;N # SYRIAC HORIZONTAL COLON
+0706;N # SYRIAC COLON SKEWED LEFT
+0707;N # SYRIAC COLON SKEWED RIGHT
+0708;N # SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709;N # SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A;N # SYRIAC CONTRACTION
+070B;N # SYRIAC HARKLEAN OBELUS
+070C;N # SYRIAC HARKLEAN METOBELUS
+070D;N # SYRIAC HARKLEAN ASTERISCUS
+070F;N # SYRIAC ABBREVIATION MARK
+0710;N # SYRIAC LETTER ALAPH
+0711;N # SYRIAC LETTER SUPERSCRIPT ALAPH
+0712;N # SYRIAC LETTER BETH
+0713;N # SYRIAC LETTER GAMAL
+0714;N # SYRIAC LETTER GAMAL GARSHUNI
+0715;N # SYRIAC LETTER DALATH
+0716;N # SYRIAC LETTER DOTLESS DALATH RISH
+0717;N # SYRIAC LETTER HE
+0718;N # SYRIAC LETTER WAW
+0719;N # SYRIAC LETTER ZAIN
+071A;N # SYRIAC LETTER HETH
+071B;N # SYRIAC LETTER TETH
+071C;N # SYRIAC LETTER TETH GARSHUNI
+071D;N # SYRIAC LETTER YUDH
+071E;N # SYRIAC LETTER YUDH HE
+071F;N # SYRIAC LETTER KAPH
+0720;N # SYRIAC LETTER LAMADH
+0721;N # SYRIAC LETTER MIM
+0722;N # SYRIAC LETTER NUN
+0723;N # SYRIAC LETTER SEMKATH
+0724;N # SYRIAC LETTER FINAL SEMKATH
+0725;N # SYRIAC LETTER E
+0726;N # SYRIAC LETTER PE
+0727;N # SYRIAC LETTER REVERSED PE
+0728;N # SYRIAC LETTER SADHE
+0729;N # SYRIAC LETTER QAPH
+072A;N # SYRIAC LETTER RISH
+072B;N # SYRIAC LETTER SHIN
+072C;N # SYRIAC LETTER TAW
+072D;N # SYRIAC LETTER PERSIAN BHETH
+072E;N # SYRIAC LETTER PERSIAN GHAMAL
+072F;N # SYRIAC LETTER PERSIAN DHALATH
+0730;N # SYRIAC PTHAHA ABOVE
+0731;N # SYRIAC PTHAHA BELOW
+0732;N # SYRIAC PTHAHA DOTTED
+0733;N # SYRIAC ZQAPHA ABOVE
+0734;N # SYRIAC ZQAPHA BELOW
+0735;N # SYRIAC ZQAPHA DOTTED
+0736;N # SYRIAC RBASA ABOVE
+0737;N # SYRIAC RBASA BELOW
+0738;N # SYRIAC DOTTED ZLAMA HORIZONTAL
+0739;N # SYRIAC DOTTED ZLAMA ANGULAR
+073A;N # SYRIAC HBASA ABOVE
+073B;N # SYRIAC HBASA BELOW
+073C;N # SYRIAC HBASA-ESASA DOTTED
+073D;N # SYRIAC ESASA ABOVE
+073E;N # SYRIAC ESASA BELOW
+073F;N # SYRIAC RWAHA
+0740;N # SYRIAC FEMININE DOT
+0741;N # SYRIAC QUSHSHAYA
+0742;N # SYRIAC RUKKAKHA
+0743;N # SYRIAC TWO VERTICAL DOTS ABOVE
+0744;N # SYRIAC TWO VERTICAL DOTS BELOW
+0745;N # SYRIAC THREE DOTS ABOVE
+0746;N # SYRIAC THREE DOTS BELOW
+0747;N # SYRIAC OBLIQUE LINE ABOVE
+0748;N # SYRIAC OBLIQUE LINE BELOW
+0749;N # SYRIAC MUSIC
+074A;N # SYRIAC BARREKH
+074D;N # SYRIAC LETTER SOGDIAN ZHAIN
+074E;N # SYRIAC LETTER SOGDIAN KHAPH
+074F;N # SYRIAC LETTER SOGDIAN FE
+0750;N # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751;N # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754;N # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755;N # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756;N # ARABIC LETTER BEH WITH SMALL V
+0757;N # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758;N # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759;N # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A;N # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B;N # ARABIC LETTER REH WITH STROKE
+075C;N # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D;N # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E;N # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F;N # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760;N # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761;N # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762;N # ARABIC LETTER KEHEH WITH DOT ABOVE
+0763;N # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764;N # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765;N # ARABIC LETTER MEEM WITH DOT ABOVE
+0766;N # ARABIC LETTER MEEM WITH DOT BELOW
+0767;N # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768;N # ARABIC LETTER NOON WITH SMALL TAH
+0769;N # ARABIC LETTER NOON WITH SMALL V
+076A;N # ARABIC LETTER LAM WITH BAR
+076B;N # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C;N # ARABIC LETTER REH WITH HAMZA ABOVE
+076D;N # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+076E;N # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW
+076F;N # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+0770;N # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+0771;N # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+0772;N # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
+0773;N # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0774;N # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+0775;N # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0776;N # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+0777;N # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+0778;N # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0779;N # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+077A;N # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+077B;N # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+077C;N # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+077D;N # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE
+077E;N # ARABIC LETTER SEEN WITH INVERTED V
+077F;N # ARABIC LETTER KAF WITH TWO DOTS ABOVE
+0780;N # THAANA LETTER HAA
+0781;N # THAANA LETTER SHAVIYANI
+0782;N # THAANA LETTER NOONU
+0783;N # THAANA LETTER RAA
+0784;N # THAANA LETTER BAA
+0785;N # THAANA LETTER LHAVIYANI
+0786;N # THAANA LETTER KAAFU
+0787;N # THAANA LETTER ALIFU
+0788;N # THAANA LETTER VAAVU
+0789;N # THAANA LETTER MEEMU
+078A;N # THAANA LETTER FAAFU
+078B;N # THAANA LETTER DHAALU
+078C;N # THAANA LETTER THAA
+078D;N # THAANA LETTER LAAMU
+078E;N # THAANA LETTER GAAFU
+078F;N # THAANA LETTER GNAVIYANI
+0790;N # THAANA LETTER SEENU
+0791;N # THAANA LETTER DAVIYANI
+0792;N # THAANA LETTER ZAVIYANI
+0793;N # THAANA LETTER TAVIYANI
+0794;N # THAANA LETTER YAA
+0795;N # THAANA LETTER PAVIYANI
+0796;N # THAANA LETTER JAVIYANI
+0797;N # THAANA LETTER CHAVIYANI
+0798;N # THAANA LETTER TTAA
+0799;N # THAANA LETTER HHAA
+079A;N # THAANA LETTER KHAA
+079B;N # THAANA LETTER THAALU
+079C;N # THAANA LETTER ZAA
+079D;N # THAANA LETTER SHEENU
+079E;N # THAANA LETTER SAADHU
+079F;N # THAANA LETTER DAADHU
+07A0;N # THAANA LETTER TO
+07A1;N # THAANA LETTER ZO
+07A2;N # THAANA LETTER AINU
+07A3;N # THAANA LETTER GHAINU
+07A4;N # THAANA LETTER QAAFU
+07A5;N # THAANA LETTER WAAVU
+07A6;N # THAANA ABAFILI
+07A7;N # THAANA AABAAFILI
+07A8;N # THAANA IBIFILI
+07A9;N # THAANA EEBEEFILI
+07AA;N # THAANA UBUFILI
+07AB;N # THAANA OOBOOFILI
+07AC;N # THAANA EBEFILI
+07AD;N # THAANA EYBEYFILI
+07AE;N # THAANA OBOFILI
+07AF;N # THAANA OABOAFILI
+07B0;N # THAANA SUKUN
+07B1;N # THAANA LETTER NAA
+07C0;N # NKO DIGIT ZERO
+07C1;N # NKO DIGIT ONE
+07C2;N # NKO DIGIT TWO
+07C3;N # NKO DIGIT THREE
+07C4;N # NKO DIGIT FOUR
+07C5;N # NKO DIGIT FIVE
+07C6;N # NKO DIGIT SIX
+07C7;N # NKO DIGIT SEVEN
+07C8;N # NKO DIGIT EIGHT
+07C9;N # NKO DIGIT NINE
+07CA;N # NKO LETTER A
+07CB;N # NKO LETTER EE
+07CC;N # NKO LETTER I
+07CD;N # NKO LETTER E
+07CE;N # NKO LETTER U
+07CF;N # NKO LETTER OO
+07D0;N # NKO LETTER O
+07D1;N # NKO LETTER DAGBASINNA
+07D2;N # NKO LETTER N
+07D3;N # NKO LETTER BA
+07D4;N # NKO LETTER PA
+07D5;N # NKO LETTER TA
+07D6;N # NKO LETTER JA
+07D7;N # NKO LETTER CHA
+07D8;N # NKO LETTER DA
+07D9;N # NKO LETTER RA
+07DA;N # NKO LETTER RRA
+07DB;N # NKO LETTER SA
+07DC;N # NKO LETTER GBA
+07DD;N # NKO LETTER FA
+07DE;N # NKO LETTER KA
+07DF;N # NKO LETTER LA
+07E0;N # NKO LETTER NA WOLOSO
+07E1;N # NKO LETTER MA
+07E2;N # NKO LETTER NYA
+07E3;N # NKO LETTER NA
+07E4;N # NKO LETTER HA
+07E5;N # NKO LETTER WA
+07E6;N # NKO LETTER YA
+07E7;N # NKO LETTER NYA WOLOSO
+07E8;N # NKO LETTER JONA JA
+07E9;N # NKO LETTER JONA CHA
+07EA;N # NKO LETTER JONA RA
+07EB;N # NKO COMBINING SHORT HIGH TONE
+07EC;N # NKO COMBINING SHORT LOW TONE
+07ED;N # NKO COMBINING SHORT RISING TONE
+07EE;N # NKO COMBINING LONG DESCENDING TONE
+07EF;N # NKO COMBINING LONG HIGH TONE
+07F0;N # NKO COMBINING LONG LOW TONE
+07F1;N # NKO COMBINING LONG RISING TONE
+07F2;N # NKO COMBINING NASALIZATION MARK
+07F3;N # NKO COMBINING DOUBLE DOT ABOVE
+07F4;N # NKO HIGH TONE APOSTROPHE
+07F5;N # NKO LOW TONE APOSTROPHE
+07F6;N # NKO SYMBOL OO DENNEN
+07F7;N # NKO SYMBOL GBAKURUNEN
+07F8;N # NKO COMMA
+07F9;N # NKO EXCLAMATION MARK
+07FA;N # NKO LAJANYALAN
+0800;N # SAMARITAN LETTER ALAF
+0801;N # SAMARITAN LETTER BIT
+0802;N # SAMARITAN LETTER GAMAN
+0803;N # SAMARITAN LETTER DALAT
+0804;N # SAMARITAN LETTER IY
+0805;N # SAMARITAN LETTER BAA
+0806;N # SAMARITAN LETTER ZEN
+0807;N # SAMARITAN LETTER IT
+0808;N # SAMARITAN LETTER TIT
+0809;N # SAMARITAN LETTER YUT
+080A;N # SAMARITAN LETTER KAAF
+080B;N # SAMARITAN LETTER LABAT
+080C;N # SAMARITAN LETTER MIM
+080D;N # SAMARITAN LETTER NUN
+080E;N # SAMARITAN LETTER SINGAAT
+080F;N # SAMARITAN LETTER IN
+0810;N # SAMARITAN LETTER FI
+0811;N # SAMARITAN LETTER TSAADIY
+0812;N # SAMARITAN LETTER QUF
+0813;N # SAMARITAN LETTER RISH
+0814;N # SAMARITAN LETTER SHAN
+0815;N # SAMARITAN LETTER TAAF
+0816;N # SAMARITAN MARK IN
+0817;N # SAMARITAN MARK IN-ALAF
+0818;N # SAMARITAN MARK OCCLUSION
+0819;N # SAMARITAN MARK DAGESH
+081A;N # SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B;N # SAMARITAN MARK EPENTHETIC YUT
+081C;N # SAMARITAN VOWEL SIGN LONG E
+081D;N # SAMARITAN VOWEL SIGN E
+081E;N # SAMARITAN VOWEL SIGN OVERLONG AA
+081F;N # SAMARITAN VOWEL SIGN LONG AA
+0820;N # SAMARITAN VOWEL SIGN AA
+0821;N # SAMARITAN VOWEL SIGN OVERLONG A
+0822;N # SAMARITAN VOWEL SIGN LONG A
+0823;N # SAMARITAN VOWEL SIGN A
+0824;N # SAMARITAN MODIFIER LETTER SHORT A
+0825;N # SAMARITAN VOWEL SIGN SHORT A
+0826;N # SAMARITAN VOWEL SIGN LONG U
+0827;N # SAMARITAN VOWEL SIGN U
+0828;N # SAMARITAN MODIFIER LETTER I
+0829;N # SAMARITAN VOWEL SIGN LONG I
+082A;N # SAMARITAN VOWEL SIGN I
+082B;N # SAMARITAN VOWEL SIGN O
+082C;N # SAMARITAN VOWEL SIGN SUKUN
+082D;N # SAMARITAN MARK NEQUDAA
+0830;N # SAMARITAN PUNCTUATION NEQUDAA
+0831;N # SAMARITAN PUNCTUATION AFSAAQ
+0832;N # SAMARITAN PUNCTUATION ANGED
+0833;N # SAMARITAN PUNCTUATION BAU
+0834;N # SAMARITAN PUNCTUATION ATMAAU
+0835;N # SAMARITAN PUNCTUATION SHIYYAALAA
+0836;N # SAMARITAN ABBREVIATION MARK
+0837;N # SAMARITAN PUNCTUATION MELODIC QITSA
+0838;N # SAMARITAN PUNCTUATION ZIQAA
+0839;N # SAMARITAN PUNCTUATION QITSA
+083A;N # SAMARITAN PUNCTUATION ZAEF
+083B;N # SAMARITAN PUNCTUATION TURU
+083C;N # SAMARITAN PUNCTUATION ARKAANU
+083D;N # SAMARITAN PUNCTUATION SOF MASHFAAT
+083E;N # SAMARITAN PUNCTUATION ANNAAU
+0900;N # DEVANAGARI SIGN INVERTED CANDRABINDU
+0901;N # DEVANAGARI SIGN CANDRABINDU
+0902;N # DEVANAGARI SIGN ANUSVARA
+0903;N # DEVANAGARI SIGN VISARGA
+0904;N # DEVANAGARI LETTER SHORT A
+0905;N # DEVANAGARI LETTER A
+0906;N # DEVANAGARI LETTER AA
+0907;N # DEVANAGARI LETTER I
+0908;N # DEVANAGARI LETTER II
+0909;N # DEVANAGARI LETTER U
+090A;N # DEVANAGARI LETTER UU
+090B;N # DEVANAGARI LETTER VOCALIC R
+090C;N # DEVANAGARI LETTER VOCALIC L
+090D;N # DEVANAGARI LETTER CANDRA E
+090E;N # DEVANAGARI LETTER SHORT E
+090F;N # DEVANAGARI LETTER E
+0910;N # DEVANAGARI LETTER AI
+0911;N # DEVANAGARI LETTER CANDRA O
+0912;N # DEVANAGARI LETTER SHORT O
+0913;N # DEVANAGARI LETTER O
+0914;N # DEVANAGARI LETTER AU
+0915;N # DEVANAGARI LETTER KA
+0916;N # DEVANAGARI LETTER KHA
+0917;N # DEVANAGARI LETTER GA
+0918;N # DEVANAGARI LETTER GHA
+0919;N # DEVANAGARI LETTER NGA
+091A;N # DEVANAGARI LETTER CA
+091B;N # DEVANAGARI LETTER CHA
+091C;N # DEVANAGARI LETTER JA
+091D;N # DEVANAGARI LETTER JHA
+091E;N # DEVANAGARI LETTER NYA
+091F;N # DEVANAGARI LETTER TTA
+0920;N # DEVANAGARI LETTER TTHA
+0921;N # DEVANAGARI LETTER DDA
+0922;N # DEVANAGARI LETTER DDHA
+0923;N # DEVANAGARI LETTER NNA
+0924;N # DEVANAGARI LETTER TA
+0925;N # DEVANAGARI LETTER THA
+0926;N # DEVANAGARI LETTER DA
+0927;N # DEVANAGARI LETTER DHA
+0928;N # DEVANAGARI LETTER NA
+0929;N # DEVANAGARI LETTER NNNA
+092A;N # DEVANAGARI LETTER PA
+092B;N # DEVANAGARI LETTER PHA
+092C;N # DEVANAGARI LETTER BA
+092D;N # DEVANAGARI LETTER BHA
+092E;N # DEVANAGARI LETTER MA
+092F;N # DEVANAGARI LETTER YA
+0930;N # DEVANAGARI LETTER RA
+0931;N # DEVANAGARI LETTER RRA
+0932;N # DEVANAGARI LETTER LA
+0933;N # DEVANAGARI LETTER LLA
+0934;N # DEVANAGARI LETTER LLLA
+0935;N # DEVANAGARI LETTER VA
+0936;N # DEVANAGARI LETTER SHA
+0937;N # DEVANAGARI LETTER SSA
+0938;N # DEVANAGARI LETTER SA
+0939;N # DEVANAGARI LETTER HA
+093C;N # DEVANAGARI SIGN NUKTA
+093D;N # DEVANAGARI SIGN AVAGRAHA
+093E;N # DEVANAGARI VOWEL SIGN AA
+093F;N # DEVANAGARI VOWEL SIGN I
+0940;N # DEVANAGARI VOWEL SIGN II
+0941;N # DEVANAGARI VOWEL SIGN U
+0942;N # DEVANAGARI VOWEL SIGN UU
+0943;N # DEVANAGARI VOWEL SIGN VOCALIC R
+0944;N # DEVANAGARI VOWEL SIGN VOCALIC RR
+0945;N # DEVANAGARI VOWEL SIGN CANDRA E
+0946;N # DEVANAGARI VOWEL SIGN SHORT E
+0947;N # DEVANAGARI VOWEL SIGN E
+0948;N # DEVANAGARI VOWEL SIGN AI
+0949;N # DEVANAGARI VOWEL SIGN CANDRA O
+094A;N # DEVANAGARI VOWEL SIGN SHORT O
+094B;N # DEVANAGARI VOWEL SIGN O
+094C;N # DEVANAGARI VOWEL SIGN AU
+094D;N # DEVANAGARI SIGN VIRAMA
+094E;N # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950;N # DEVANAGARI OM
+0951;N # DEVANAGARI STRESS SIGN UDATTA
+0952;N # DEVANAGARI STRESS SIGN ANUDATTA
+0953;N # DEVANAGARI GRAVE ACCENT
+0954;N # DEVANAGARI ACUTE ACCENT
+0955;N # DEVANAGARI VOWEL SIGN CANDRA LONG E
+0958;N # DEVANAGARI LETTER QA
+0959;N # DEVANAGARI LETTER KHHA
+095A;N # DEVANAGARI LETTER GHHA
+095B;N # DEVANAGARI LETTER ZA
+095C;N # DEVANAGARI LETTER DDDHA
+095D;N # DEVANAGARI LETTER RHA
+095E;N # DEVANAGARI LETTER FA
+095F;N # DEVANAGARI LETTER YYA
+0960;N # DEVANAGARI LETTER VOCALIC RR
+0961;N # DEVANAGARI LETTER VOCALIC LL
+0962;N # DEVANAGARI VOWEL SIGN VOCALIC L
+0963;N # DEVANAGARI VOWEL SIGN VOCALIC LL
+0964;N # DEVANAGARI DANDA
+0965;N # DEVANAGARI DOUBLE DANDA
+0966;N # DEVANAGARI DIGIT ZERO
+0967;N # DEVANAGARI DIGIT ONE
+0968;N # DEVANAGARI DIGIT TWO
+0969;N # DEVANAGARI DIGIT THREE
+096A;N # DEVANAGARI DIGIT FOUR
+096B;N # DEVANAGARI DIGIT FIVE
+096C;N # DEVANAGARI DIGIT SIX
+096D;N # DEVANAGARI DIGIT SEVEN
+096E;N # DEVANAGARI DIGIT EIGHT
+096F;N # DEVANAGARI DIGIT NINE
+0970;N # DEVANAGARI ABBREVIATION SIGN
+0971;N # DEVANAGARI SIGN HIGH SPACING DOT
+0972;N # DEVANAGARI LETTER CANDRA A
+0979;N # DEVANAGARI LETTER ZHA
+097A;N # DEVANAGARI LETTER HEAVY YA
+097B;N # DEVANAGARI LETTER GGA
+097C;N # DEVANAGARI LETTER JJA
+097D;N # DEVANAGARI LETTER GLOTTAL STOP
+097E;N # DEVANAGARI LETTER DDDA
+097F;N # DEVANAGARI LETTER BBA
+0981;N # BENGALI SIGN CANDRABINDU
+0982;N # BENGALI SIGN ANUSVARA
+0983;N # BENGALI SIGN VISARGA
+0985;N # BENGALI LETTER A
+0986;N # BENGALI LETTER AA
+0987;N # BENGALI LETTER I
+0988;N # BENGALI LETTER II
+0989;N # BENGALI LETTER U
+098A;N # BENGALI LETTER UU
+098B;N # BENGALI LETTER VOCALIC R
+098C;N # BENGALI LETTER VOCALIC L
+098F;N # BENGALI LETTER E
+0990;N # BENGALI LETTER AI
+0993;N # BENGALI LETTER O
+0994;N # BENGALI LETTER AU
+0995;N # BENGALI LETTER KA
+0996;N # BENGALI LETTER KHA
+0997;N # BENGALI LETTER GA
+0998;N # BENGALI LETTER GHA
+0999;N # BENGALI LETTER NGA
+099A;N # BENGALI LETTER CA
+099B;N # BENGALI LETTER CHA
+099C;N # BENGALI LETTER JA
+099D;N # BENGALI LETTER JHA
+099E;N # BENGALI LETTER NYA
+099F;N # BENGALI LETTER TTA
+09A0;N # BENGALI LETTER TTHA
+09A1;N # BENGALI LETTER DDA
+09A2;N # BENGALI LETTER DDHA
+09A3;N # BENGALI LETTER NNA
+09A4;N # BENGALI LETTER TA
+09A5;N # BENGALI LETTER THA
+09A6;N # BENGALI LETTER DA
+09A7;N # BENGALI LETTER DHA
+09A8;N # BENGALI LETTER NA
+09AA;N # BENGALI LETTER PA
+09AB;N # BENGALI LETTER PHA
+09AC;N # BENGALI LETTER BA
+09AD;N # BENGALI LETTER BHA
+09AE;N # BENGALI LETTER MA
+09AF;N # BENGALI LETTER YA
+09B0;N # BENGALI LETTER RA
+09B2;N # BENGALI LETTER LA
+09B6;N # BENGALI LETTER SHA
+09B7;N # BENGALI LETTER SSA
+09B8;N # BENGALI LETTER SA
+09B9;N # BENGALI LETTER HA
+09BC;N # BENGALI SIGN NUKTA
+09BD;N # BENGALI SIGN AVAGRAHA
+09BE;N # BENGALI VOWEL SIGN AA
+09BF;N # BENGALI VOWEL SIGN I
+09C0;N # BENGALI VOWEL SIGN II
+09C1;N # BENGALI VOWEL SIGN U
+09C2;N # BENGALI VOWEL SIGN UU
+09C3;N # BENGALI VOWEL SIGN VOCALIC R
+09C4;N # BENGALI VOWEL SIGN VOCALIC RR
+09C7;N # BENGALI VOWEL SIGN E
+09C8;N # BENGALI VOWEL SIGN AI
+09CB;N # BENGALI VOWEL SIGN O
+09CC;N # BENGALI VOWEL SIGN AU
+09CD;N # BENGALI SIGN VIRAMA
+09CE;N # BENGALI LETTER KHANDA TA
+09D7;N # BENGALI AU LENGTH MARK
+09DC;N # BENGALI LETTER RRA
+09DD;N # BENGALI LETTER RHA
+09DF;N # BENGALI LETTER YYA
+09E0;N # BENGALI LETTER VOCALIC RR
+09E1;N # BENGALI LETTER VOCALIC LL
+09E2;N # BENGALI VOWEL SIGN VOCALIC L
+09E3;N # BENGALI VOWEL SIGN VOCALIC LL
+09E6;N # BENGALI DIGIT ZERO
+09E7;N # BENGALI DIGIT ONE
+09E8;N # BENGALI DIGIT TWO
+09E9;N # BENGALI DIGIT THREE
+09EA;N # BENGALI DIGIT FOUR
+09EB;N # BENGALI DIGIT FIVE
+09EC;N # BENGALI DIGIT SIX
+09ED;N # BENGALI DIGIT SEVEN
+09EE;N # BENGALI DIGIT EIGHT
+09EF;N # BENGALI DIGIT NINE
+09F0;N # BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09F1;N # BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2;N # BENGALI RUPEE MARK
+09F3;N # BENGALI RUPEE SIGN
+09F4;N # BENGALI CURRENCY NUMERATOR ONE
+09F5;N # BENGALI CURRENCY NUMERATOR TWO
+09F6;N # BENGALI CURRENCY NUMERATOR THREE
+09F7;N # BENGALI CURRENCY NUMERATOR FOUR
+09F8;N # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9;N # BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA;N # BENGALI ISSHAR
+09FB;N # BENGALI GANDA MARK
+0A01;N # GURMUKHI SIGN ADAK BINDI
+0A02;N # GURMUKHI SIGN BINDI
+0A03;N # GURMUKHI SIGN VISARGA
+0A05;N # GURMUKHI LETTER A
+0A06;N # GURMUKHI LETTER AA
+0A07;N # GURMUKHI LETTER I
+0A08;N # GURMUKHI LETTER II
+0A09;N # GURMUKHI LETTER U
+0A0A;N # GURMUKHI LETTER UU
+0A0F;N # GURMUKHI LETTER EE
+0A10;N # GURMUKHI LETTER AI
+0A13;N # GURMUKHI LETTER OO
+0A14;N # GURMUKHI LETTER AU
+0A15;N # GURMUKHI LETTER KA
+0A16;N # GURMUKHI LETTER KHA
+0A17;N # GURMUKHI LETTER GA
+0A18;N # GURMUKHI LETTER GHA
+0A19;N # GURMUKHI LETTER NGA
+0A1A;N # GURMUKHI LETTER CA
+0A1B;N # GURMUKHI LETTER CHA
+0A1C;N # GURMUKHI LETTER JA
+0A1D;N # GURMUKHI LETTER JHA
+0A1E;N # GURMUKHI LETTER NYA
+0A1F;N # GURMUKHI LETTER TTA
+0A20;N # GURMUKHI LETTER TTHA
+0A21;N # GURMUKHI LETTER DDA
+0A22;N # GURMUKHI LETTER DDHA
+0A23;N # GURMUKHI LETTER NNA
+0A24;N # GURMUKHI LETTER TA
+0A25;N # GURMUKHI LETTER THA
+0A26;N # GURMUKHI LETTER DA
+0A27;N # GURMUKHI LETTER DHA
+0A28;N # GURMUKHI LETTER NA
+0A2A;N # GURMUKHI LETTER PA
+0A2B;N # GURMUKHI LETTER PHA
+0A2C;N # GURMUKHI LETTER BA
+0A2D;N # GURMUKHI LETTER BHA
+0A2E;N # GURMUKHI LETTER MA
+0A2F;N # GURMUKHI LETTER YA
+0A30;N # GURMUKHI LETTER RA
+0A32;N # GURMUKHI LETTER LA
+0A33;N # GURMUKHI LETTER LLA
+0A35;N # GURMUKHI LETTER VA
+0A36;N # GURMUKHI LETTER SHA
+0A38;N # GURMUKHI LETTER SA
+0A39;N # GURMUKHI LETTER HA
+0A3C;N # GURMUKHI SIGN NUKTA
+0A3E;N # GURMUKHI VOWEL SIGN AA
+0A3F;N # GURMUKHI VOWEL SIGN I
+0A40;N # GURMUKHI VOWEL SIGN II
+0A41;N # GURMUKHI VOWEL SIGN U
+0A42;N # GURMUKHI VOWEL SIGN UU
+0A47;N # GURMUKHI VOWEL SIGN EE
+0A48;N # GURMUKHI VOWEL SIGN AI
+0A4B;N # GURMUKHI VOWEL SIGN OO
+0A4C;N # GURMUKHI VOWEL SIGN AU
+0A4D;N # GURMUKHI SIGN VIRAMA
+0A51;N # GURMUKHI SIGN UDAAT
+0A59;N # GURMUKHI LETTER KHHA
+0A5A;N # GURMUKHI LETTER GHHA
+0A5B;N # GURMUKHI LETTER ZA
+0A5C;N # GURMUKHI LETTER RRA
+0A5E;N # GURMUKHI LETTER FA
+0A66;N # GURMUKHI DIGIT ZERO
+0A67;N # GURMUKHI DIGIT ONE
+0A68;N # GURMUKHI DIGIT TWO
+0A69;N # GURMUKHI DIGIT THREE
+0A6A;N # GURMUKHI DIGIT FOUR
+0A6B;N # GURMUKHI DIGIT FIVE
+0A6C;N # GURMUKHI DIGIT SIX
+0A6D;N # GURMUKHI DIGIT SEVEN
+0A6E;N # GURMUKHI DIGIT EIGHT
+0A6F;N # GURMUKHI DIGIT NINE
+0A70;N # GURMUKHI TIPPI
+0A71;N # GURMUKHI ADDAK
+0A72;N # GURMUKHI IRI
+0A73;N # GURMUKHI URA
+0A74;N # GURMUKHI EK ONKAR
+0A75;N # GURMUKHI SIGN YAKASH
+0A81;N # GUJARATI SIGN CANDRABINDU
+0A82;N # GUJARATI SIGN ANUSVARA
+0A83;N # GUJARATI SIGN VISARGA
+0A85;N # GUJARATI LETTER A
+0A86;N # GUJARATI LETTER AA
+0A87;N # GUJARATI LETTER I
+0A88;N # GUJARATI LETTER II
+0A89;N # GUJARATI LETTER U
+0A8A;N # GUJARATI LETTER UU
+0A8B;N # GUJARATI LETTER VOCALIC R
+0A8C;N # GUJARATI LETTER VOCALIC L
+0A8D;N # GUJARATI VOWEL CANDRA E
+0A8F;N # GUJARATI LETTER E
+0A90;N # GUJARATI LETTER AI
+0A91;N # GUJARATI VOWEL CANDRA O
+0A93;N # GUJARATI LETTER O
+0A94;N # GUJARATI LETTER AU
+0A95;N # GUJARATI LETTER KA
+0A96;N # GUJARATI LETTER KHA
+0A97;N # GUJARATI LETTER GA
+0A98;N # GUJARATI LETTER GHA
+0A99;N # GUJARATI LETTER NGA
+0A9A;N # GUJARATI LETTER CA
+0A9B;N # GUJARATI LETTER CHA
+0A9C;N # GUJARATI LETTER JA
+0A9D;N # GUJARATI LETTER JHA
+0A9E;N # GUJARATI LETTER NYA
+0A9F;N # GUJARATI LETTER TTA
+0AA0;N # GUJARATI LETTER TTHA
+0AA1;N # GUJARATI LETTER DDA
+0AA2;N # GUJARATI LETTER DDHA
+0AA3;N # GUJARATI LETTER NNA
+0AA4;N # GUJARATI LETTER TA
+0AA5;N # GUJARATI LETTER THA
+0AA6;N # GUJARATI LETTER DA
+0AA7;N # GUJARATI LETTER DHA
+0AA8;N # GUJARATI LETTER NA
+0AAA;N # GUJARATI LETTER PA
+0AAB;N # GUJARATI LETTER PHA
+0AAC;N # GUJARATI LETTER BA
+0AAD;N # GUJARATI LETTER BHA
+0AAE;N # GUJARATI LETTER MA
+0AAF;N # GUJARATI LETTER YA
+0AB0;N # GUJARATI LETTER RA
+0AB2;N # GUJARATI LETTER LA
+0AB3;N # GUJARATI LETTER LLA
+0AB5;N # GUJARATI LETTER VA
+0AB6;N # GUJARATI LETTER SHA
+0AB7;N # GUJARATI LETTER SSA
+0AB8;N # GUJARATI LETTER SA
+0AB9;N # GUJARATI LETTER HA
+0ABC;N # GUJARATI SIGN NUKTA
+0ABD;N # GUJARATI SIGN AVAGRAHA
+0ABE;N # GUJARATI VOWEL SIGN AA
+0ABF;N # GUJARATI VOWEL SIGN I
+0AC0;N # GUJARATI VOWEL SIGN II
+0AC1;N # GUJARATI VOWEL SIGN U
+0AC2;N # GUJARATI VOWEL SIGN UU
+0AC3;N # GUJARATI VOWEL SIGN VOCALIC R
+0AC4;N # GUJARATI VOWEL SIGN VOCALIC RR
+0AC5;N # GUJARATI VOWEL SIGN CANDRA E
+0AC7;N # GUJARATI VOWEL SIGN E
+0AC8;N # GUJARATI VOWEL SIGN AI
+0AC9;N # GUJARATI VOWEL SIGN CANDRA O
+0ACB;N # GUJARATI VOWEL SIGN O
+0ACC;N # GUJARATI VOWEL SIGN AU
+0ACD;N # GUJARATI SIGN VIRAMA
+0AD0;N # GUJARATI OM
+0AE0;N # GUJARATI LETTER VOCALIC RR
+0AE1;N # GUJARATI LETTER VOCALIC LL
+0AE2;N # GUJARATI VOWEL SIGN VOCALIC L
+0AE3;N # GUJARATI VOWEL SIGN VOCALIC LL
+0AE6;N # GUJARATI DIGIT ZERO
+0AE7;N # GUJARATI DIGIT ONE
+0AE8;N # GUJARATI DIGIT TWO
+0AE9;N # GUJARATI DIGIT THREE
+0AEA;N # GUJARATI DIGIT FOUR
+0AEB;N # GUJARATI DIGIT FIVE
+0AEC;N # GUJARATI DIGIT SIX
+0AED;N # GUJARATI DIGIT SEVEN
+0AEE;N # GUJARATI DIGIT EIGHT
+0AEF;N # GUJARATI DIGIT NINE
+0AF1;N # GUJARATI RUPEE SIGN
+0B01;N # ORIYA SIGN CANDRABINDU
+0B02;N # ORIYA SIGN ANUSVARA
+0B03;N # ORIYA SIGN VISARGA
+0B05;N # ORIYA LETTER A
+0B06;N # ORIYA LETTER AA
+0B07;N # ORIYA LETTER I
+0B08;N # ORIYA LETTER II
+0B09;N # ORIYA LETTER U
+0B0A;N # ORIYA LETTER UU
+0B0B;N # ORIYA LETTER VOCALIC R
+0B0C;N # ORIYA LETTER VOCALIC L
+0B0F;N # ORIYA LETTER E
+0B10;N # ORIYA LETTER AI
+0B13;N # ORIYA LETTER O
+0B14;N # ORIYA LETTER AU
+0B15;N # ORIYA LETTER KA
+0B16;N # ORIYA LETTER KHA
+0B17;N # ORIYA LETTER GA
+0B18;N # ORIYA LETTER GHA
+0B19;N # ORIYA LETTER NGA
+0B1A;N # ORIYA LETTER CA
+0B1B;N # ORIYA LETTER CHA
+0B1C;N # ORIYA LETTER JA
+0B1D;N # ORIYA LETTER JHA
+0B1E;N # ORIYA LETTER NYA
+0B1F;N # ORIYA LETTER TTA
+0B20;N # ORIYA LETTER TTHA
+0B21;N # ORIYA LETTER DDA
+0B22;N # ORIYA LETTER DDHA
+0B23;N # ORIYA LETTER NNA
+0B24;N # ORIYA LETTER TA
+0B25;N # ORIYA LETTER THA
+0B26;N # ORIYA LETTER DA
+0B27;N # ORIYA LETTER DHA
+0B28;N # ORIYA LETTER NA
+0B2A;N # ORIYA LETTER PA
+0B2B;N # ORIYA LETTER PHA
+0B2C;N # ORIYA LETTER BA
+0B2D;N # ORIYA LETTER BHA
+0B2E;N # ORIYA LETTER MA
+0B2F;N # ORIYA LETTER YA
+0B30;N # ORIYA LETTER RA
+0B32;N # ORIYA LETTER LA
+0B33;N # ORIYA LETTER LLA
+0B35;N # ORIYA LETTER VA
+0B36;N # ORIYA LETTER SHA
+0B37;N # ORIYA LETTER SSA
+0B38;N # ORIYA LETTER SA
+0B39;N # ORIYA LETTER HA
+0B3C;N # ORIYA SIGN NUKTA
+0B3D;N # ORIYA SIGN AVAGRAHA
+0B3E;N # ORIYA VOWEL SIGN AA
+0B3F;N # ORIYA VOWEL SIGN I
+0B40;N # ORIYA VOWEL SIGN II
+0B41;N # ORIYA VOWEL SIGN U
+0B42;N # ORIYA VOWEL SIGN UU
+0B43;N # ORIYA VOWEL SIGN VOCALIC R
+0B44;N # ORIYA VOWEL SIGN VOCALIC RR
+0B47;N # ORIYA VOWEL SIGN E
+0B48;N # ORIYA VOWEL SIGN AI
+0B4B;N # ORIYA VOWEL SIGN O
+0B4C;N # ORIYA VOWEL SIGN AU
+0B4D;N # ORIYA SIGN VIRAMA
+0B56;N # ORIYA AI LENGTH MARK
+0B57;N # ORIYA AU LENGTH MARK
+0B5C;N # ORIYA LETTER RRA
+0B5D;N # ORIYA LETTER RHA
+0B5F;N # ORIYA LETTER YYA
+0B60;N # ORIYA LETTER VOCALIC RR
+0B61;N # ORIYA LETTER VOCALIC LL
+0B62;N # ORIYA VOWEL SIGN VOCALIC L
+0B63;N # ORIYA VOWEL SIGN VOCALIC LL
+0B66;N # ORIYA DIGIT ZERO
+0B67;N # ORIYA DIGIT ONE
+0B68;N # ORIYA DIGIT TWO
+0B69;N # ORIYA DIGIT THREE
+0B6A;N # ORIYA DIGIT FOUR
+0B6B;N # ORIYA DIGIT FIVE
+0B6C;N # ORIYA DIGIT SIX
+0B6D;N # ORIYA DIGIT SEVEN
+0B6E;N # ORIYA DIGIT EIGHT
+0B6F;N # ORIYA DIGIT NINE
+0B70;N # ORIYA ISSHAR
+0B71;N # ORIYA LETTER WA
+0B82;N # TAMIL SIGN ANUSVARA
+0B83;N # TAMIL SIGN VISARGA
+0B85;N # TAMIL LETTER A
+0B86;N # TAMIL LETTER AA
+0B87;N # TAMIL LETTER I
+0B88;N # TAMIL LETTER II
+0B89;N # TAMIL LETTER U
+0B8A;N # TAMIL LETTER UU
+0B8E;N # TAMIL LETTER E
+0B8F;N # TAMIL LETTER EE
+0B90;N # TAMIL LETTER AI
+0B92;N # TAMIL LETTER O
+0B93;N # TAMIL LETTER OO
+0B94;N # TAMIL LETTER AU
+0B95;N # TAMIL LETTER KA
+0B99;N # TAMIL LETTER NGA
+0B9A;N # TAMIL LETTER CA
+0B9C;N # TAMIL LETTER JA
+0B9E;N # TAMIL LETTER NYA
+0B9F;N # TAMIL LETTER TTA
+0BA3;N # TAMIL LETTER NNA
+0BA4;N # TAMIL LETTER TA
+0BA8;N # TAMIL LETTER NA
+0BA9;N # TAMIL LETTER NNNA
+0BAA;N # TAMIL LETTER PA
+0BAE;N # TAMIL LETTER MA
+0BAF;N # TAMIL LETTER YA
+0BB0;N # TAMIL LETTER RA
+0BB1;N # TAMIL LETTER RRA
+0BB2;N # TAMIL LETTER LA
+0BB3;N # TAMIL LETTER LLA
+0BB4;N # TAMIL LETTER LLLA
+0BB5;N # TAMIL LETTER VA
+0BB6;N # TAMIL LETTER SHA
+0BB7;N # TAMIL LETTER SSA
+0BB8;N # TAMIL LETTER SA
+0BB9;N # TAMIL LETTER HA
+0BBE;N # TAMIL VOWEL SIGN AA
+0BBF;N # TAMIL VOWEL SIGN I
+0BC0;N # TAMIL VOWEL SIGN II
+0BC1;N # TAMIL VOWEL SIGN U
+0BC2;N # TAMIL VOWEL SIGN UU
+0BC6;N # TAMIL VOWEL SIGN E
+0BC7;N # TAMIL VOWEL SIGN EE
+0BC8;N # TAMIL VOWEL SIGN AI
+0BCA;N # TAMIL VOWEL SIGN O
+0BCB;N # TAMIL VOWEL SIGN OO
+0BCC;N # TAMIL VOWEL SIGN AU
+0BCD;N # TAMIL SIGN VIRAMA
+0BD0;N # TAMIL OM
+0BD7;N # TAMIL AU LENGTH MARK
+0BE6;N # TAMIL DIGIT ZERO
+0BE7;N # TAMIL DIGIT ONE
+0BE8;N # TAMIL DIGIT TWO
+0BE9;N # TAMIL DIGIT THREE
+0BEA;N # TAMIL DIGIT FOUR
+0BEB;N # TAMIL DIGIT FIVE
+0BEC;N # TAMIL DIGIT SIX
+0BED;N # TAMIL DIGIT SEVEN
+0BEE;N # TAMIL DIGIT EIGHT
+0BEF;N # TAMIL DIGIT NINE
+0BF0;N # TAMIL NUMBER TEN
+0BF1;N # TAMIL NUMBER ONE HUNDRED
+0BF2;N # TAMIL NUMBER ONE THOUSAND
+0BF3;N # TAMIL DAY SIGN
+0BF4;N # TAMIL MONTH SIGN
+0BF5;N # TAMIL YEAR SIGN
+0BF6;N # TAMIL DEBIT SIGN
+0BF7;N # TAMIL CREDIT SIGN
+0BF8;N # TAMIL AS ABOVE SIGN
+0BF9;N # TAMIL RUPEE SIGN
+0BFA;N # TAMIL NUMBER SIGN
+0C01;N # TELUGU SIGN CANDRABINDU
+0C02;N # TELUGU SIGN ANUSVARA
+0C03;N # TELUGU SIGN VISARGA
+0C05;N # TELUGU LETTER A
+0C06;N # TELUGU LETTER AA
+0C07;N # TELUGU LETTER I
+0C08;N # TELUGU LETTER II
+0C09;N # TELUGU LETTER U
+0C0A;N # TELUGU LETTER UU
+0C0B;N # TELUGU LETTER VOCALIC R
+0C0C;N # TELUGU LETTER VOCALIC L
+0C0E;N # TELUGU LETTER E
+0C0F;N # TELUGU LETTER EE
+0C10;N # TELUGU LETTER AI
+0C12;N # TELUGU LETTER O
+0C13;N # TELUGU LETTER OO
+0C14;N # TELUGU LETTER AU
+0C15;N # TELUGU LETTER KA
+0C16;N # TELUGU LETTER KHA
+0C17;N # TELUGU LETTER GA
+0C18;N # TELUGU LETTER GHA
+0C19;N # TELUGU LETTER NGA
+0C1A;N # TELUGU LETTER CA
+0C1B;N # TELUGU LETTER CHA
+0C1C;N # TELUGU LETTER JA
+0C1D;N # TELUGU LETTER JHA
+0C1E;N # TELUGU LETTER NYA
+0C1F;N # TELUGU LETTER TTA
+0C20;N # TELUGU LETTER TTHA
+0C21;N # TELUGU LETTER DDA
+0C22;N # TELUGU LETTER DDHA
+0C23;N # TELUGU LETTER NNA
+0C24;N # TELUGU LETTER TA
+0C25;N # TELUGU LETTER THA
+0C26;N # TELUGU LETTER DA
+0C27;N # TELUGU LETTER DHA
+0C28;N # TELUGU LETTER NA
+0C2A;N # TELUGU LETTER PA
+0C2B;N # TELUGU LETTER PHA
+0C2C;N # TELUGU LETTER BA
+0C2D;N # TELUGU LETTER BHA
+0C2E;N # TELUGU LETTER MA
+0C2F;N # TELUGU LETTER YA
+0C30;N # TELUGU LETTER RA
+0C31;N # TELUGU LETTER RRA
+0C32;N # TELUGU LETTER LA
+0C33;N # TELUGU LETTER LLA
+0C35;N # TELUGU LETTER VA
+0C36;N # TELUGU LETTER SHA
+0C37;N # TELUGU LETTER SSA
+0C38;N # TELUGU LETTER SA
+0C39;N # TELUGU LETTER HA
+0C3D;N # TELUGU SIGN AVAGRAHA
+0C3E;N # TELUGU VOWEL SIGN AA
+0C3F;N # TELUGU VOWEL SIGN I
+0C40;N # TELUGU VOWEL SIGN II
+0C41;N # TELUGU VOWEL SIGN U
+0C42;N # TELUGU VOWEL SIGN UU
+0C43;N # TELUGU VOWEL SIGN VOCALIC R
+0C44;N # TELUGU VOWEL SIGN VOCALIC RR
+0C46;N # TELUGU VOWEL SIGN E
+0C47;N # TELUGU VOWEL SIGN EE
+0C48;N # TELUGU VOWEL SIGN AI
+0C4A;N # TELUGU VOWEL SIGN O
+0C4B;N # TELUGU VOWEL SIGN OO
+0C4C;N # TELUGU VOWEL SIGN AU
+0C4D;N # TELUGU SIGN VIRAMA
+0C55;N # TELUGU LENGTH MARK
+0C56;N # TELUGU AI LENGTH MARK
+0C58;N # TELUGU LETTER TSA
+0C59;N # TELUGU LETTER DZA
+0C60;N # TELUGU LETTER VOCALIC RR
+0C61;N # TELUGU LETTER VOCALIC LL
+0C62;N # TELUGU VOWEL SIGN VOCALIC L
+0C63;N # TELUGU VOWEL SIGN VOCALIC LL
+0C66;N # TELUGU DIGIT ZERO
+0C67;N # TELUGU DIGIT ONE
+0C68;N # TELUGU DIGIT TWO
+0C69;N # TELUGU DIGIT THREE
+0C6A;N # TELUGU DIGIT FOUR
+0C6B;N # TELUGU DIGIT FIVE
+0C6C;N # TELUGU DIGIT SIX
+0C6D;N # TELUGU DIGIT SEVEN
+0C6E;N # TELUGU DIGIT EIGHT
+0C6F;N # TELUGU DIGIT NINE
+0C78;N # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR
+0C79;N # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR
+0C7A;N # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR
+0C7B;N # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR
+0C7C;N # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR
+0C7D;N # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR
+0C7E;N # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F;N # TELUGU SIGN TUUMU
+0C82;N # KANNADA SIGN ANUSVARA
+0C83;N # KANNADA SIGN VISARGA
+0C85;N # KANNADA LETTER A
+0C86;N # KANNADA LETTER AA
+0C87;N # KANNADA LETTER I
+0C88;N # KANNADA LETTER II
+0C89;N # KANNADA LETTER U
+0C8A;N # KANNADA LETTER UU
+0C8B;N # KANNADA LETTER VOCALIC R
+0C8C;N # KANNADA LETTER VOCALIC L
+0C8E;N # KANNADA LETTER E
+0C8F;N # KANNADA LETTER EE
+0C90;N # KANNADA LETTER AI
+0C92;N # KANNADA LETTER O
+0C93;N # KANNADA LETTER OO
+0C94;N # KANNADA LETTER AU
+0C95;N # KANNADA LETTER KA
+0C96;N # KANNADA LETTER KHA
+0C97;N # KANNADA LETTER GA
+0C98;N # KANNADA LETTER GHA
+0C99;N # KANNADA LETTER NGA
+0C9A;N # KANNADA LETTER CA
+0C9B;N # KANNADA LETTER CHA
+0C9C;N # KANNADA LETTER JA
+0C9D;N # KANNADA LETTER JHA
+0C9E;N # KANNADA LETTER NYA
+0C9F;N # KANNADA LETTER TTA
+0CA0;N # KANNADA LETTER TTHA
+0CA1;N # KANNADA LETTER DDA
+0CA2;N # KANNADA LETTER DDHA
+0CA3;N # KANNADA LETTER NNA
+0CA4;N # KANNADA LETTER TA
+0CA5;N # KANNADA LETTER THA
+0CA6;N # KANNADA LETTER DA
+0CA7;N # KANNADA LETTER DHA
+0CA8;N # KANNADA LETTER NA
+0CAA;N # KANNADA LETTER PA
+0CAB;N # KANNADA LETTER PHA
+0CAC;N # KANNADA LETTER BA
+0CAD;N # KANNADA LETTER BHA
+0CAE;N # KANNADA LETTER MA
+0CAF;N # KANNADA LETTER YA
+0CB0;N # KANNADA LETTER RA
+0CB1;N # KANNADA LETTER RRA
+0CB2;N # KANNADA LETTER LA
+0CB3;N # KANNADA LETTER LLA
+0CB5;N # KANNADA LETTER VA
+0CB6;N # KANNADA LETTER SHA
+0CB7;N # KANNADA LETTER SSA
+0CB8;N # KANNADA LETTER SA
+0CB9;N # KANNADA LETTER HA
+0CBC;N # KANNADA SIGN NUKTA
+0CBD;N # KANNADA SIGN AVAGRAHA
+0CBE;N # KANNADA VOWEL SIGN AA
+0CBF;N # KANNADA VOWEL SIGN I
+0CC0;N # KANNADA VOWEL SIGN II
+0CC1;N # KANNADA VOWEL SIGN U
+0CC2;N # KANNADA VOWEL SIGN UU
+0CC3;N # KANNADA VOWEL SIGN VOCALIC R
+0CC4;N # KANNADA VOWEL SIGN VOCALIC RR
+0CC6;N # KANNADA VOWEL SIGN E
+0CC7;N # KANNADA VOWEL SIGN EE
+0CC8;N # KANNADA VOWEL SIGN AI
+0CCA;N # KANNADA VOWEL SIGN O
+0CCB;N # KANNADA VOWEL SIGN OO
+0CCC;N # KANNADA VOWEL SIGN AU
+0CCD;N # KANNADA SIGN VIRAMA
+0CD5;N # KANNADA LENGTH MARK
+0CD6;N # KANNADA AI LENGTH MARK
+0CDE;N # KANNADA LETTER FA
+0CE0;N # KANNADA LETTER VOCALIC RR
+0CE1;N # KANNADA LETTER VOCALIC LL
+0CE2;N # KANNADA VOWEL SIGN VOCALIC L
+0CE3;N # KANNADA VOWEL SIGN VOCALIC LL
+0CE6;N # KANNADA DIGIT ZERO
+0CE7;N # KANNADA DIGIT ONE
+0CE8;N # KANNADA DIGIT TWO
+0CE9;N # KANNADA DIGIT THREE
+0CEA;N # KANNADA DIGIT FOUR
+0CEB;N # KANNADA DIGIT FIVE
+0CEC;N # KANNADA DIGIT SIX
+0CED;N # KANNADA DIGIT SEVEN
+0CEE;N # KANNADA DIGIT EIGHT
+0CEF;N # KANNADA DIGIT NINE
+0CF1;N # KANNADA SIGN JIHVAMULIYA
+0CF2;N # KANNADA SIGN UPADHMANIYA
+0D02;N # MALAYALAM SIGN ANUSVARA
+0D03;N # MALAYALAM SIGN VISARGA
+0D05;N # MALAYALAM LETTER A
+0D06;N # MALAYALAM LETTER AA
+0D07;N # MALAYALAM LETTER I
+0D08;N # MALAYALAM LETTER II
+0D09;N # MALAYALAM LETTER U
+0D0A;N # MALAYALAM LETTER UU
+0D0B;N # MALAYALAM LETTER VOCALIC R
+0D0C;N # MALAYALAM LETTER VOCALIC L
+0D0E;N # MALAYALAM LETTER E
+0D0F;N # MALAYALAM LETTER EE
+0D10;N # MALAYALAM LETTER AI
+0D12;N # MALAYALAM LETTER O
+0D13;N # MALAYALAM LETTER OO
+0D14;N # MALAYALAM LETTER AU
+0D15;N # MALAYALAM LETTER KA
+0D16;N # MALAYALAM LETTER KHA
+0D17;N # MALAYALAM LETTER GA
+0D18;N # MALAYALAM LETTER GHA
+0D19;N # MALAYALAM LETTER NGA
+0D1A;N # MALAYALAM LETTER CA
+0D1B;N # MALAYALAM LETTER CHA
+0D1C;N # MALAYALAM LETTER JA
+0D1D;N # MALAYALAM LETTER JHA
+0D1E;N # MALAYALAM LETTER NYA
+0D1F;N # MALAYALAM LETTER TTA
+0D20;N # MALAYALAM LETTER TTHA
+0D21;N # MALAYALAM LETTER DDA
+0D22;N # MALAYALAM LETTER DDHA
+0D23;N # MALAYALAM LETTER NNA
+0D24;N # MALAYALAM LETTER TA
+0D25;N # MALAYALAM LETTER THA
+0D26;N # MALAYALAM LETTER DA
+0D27;N # MALAYALAM LETTER DHA
+0D28;N # MALAYALAM LETTER NA
+0D2A;N # MALAYALAM LETTER PA
+0D2B;N # MALAYALAM LETTER PHA
+0D2C;N # MALAYALAM LETTER BA
+0D2D;N # MALAYALAM LETTER BHA
+0D2E;N # MALAYALAM LETTER MA
+0D2F;N # MALAYALAM LETTER YA
+0D30;N # MALAYALAM LETTER RA
+0D31;N # MALAYALAM LETTER RRA
+0D32;N # MALAYALAM LETTER LA
+0D33;N # MALAYALAM LETTER LLA
+0D34;N # MALAYALAM LETTER LLLA
+0D35;N # MALAYALAM LETTER VA
+0D36;N # MALAYALAM LETTER SHA
+0D37;N # MALAYALAM LETTER SSA
+0D38;N # MALAYALAM LETTER SA
+0D39;N # MALAYALAM LETTER HA
+0D3D;N # MALAYALAM SIGN AVAGRAHA
+0D3E;N # MALAYALAM VOWEL SIGN AA
+0D3F;N # MALAYALAM VOWEL SIGN I
+0D40;N # MALAYALAM VOWEL SIGN II
+0D41;N # MALAYALAM VOWEL SIGN U
+0D42;N # MALAYALAM VOWEL SIGN UU
+0D43;N # MALAYALAM VOWEL SIGN VOCALIC R
+0D44;N # MALAYALAM VOWEL SIGN VOCALIC RR
+0D46;N # MALAYALAM VOWEL SIGN E
+0D47;N # MALAYALAM VOWEL SIGN EE
+0D48;N # MALAYALAM VOWEL SIGN AI
+0D4A;N # MALAYALAM VOWEL SIGN O
+0D4B;N # MALAYALAM VOWEL SIGN OO
+0D4C;N # MALAYALAM VOWEL SIGN AU
+0D4D;N # MALAYALAM SIGN VIRAMA
+0D57;N # MALAYALAM AU LENGTH MARK
+0D60;N # MALAYALAM LETTER VOCALIC RR
+0D61;N # MALAYALAM LETTER VOCALIC LL
+0D62;N # MALAYALAM VOWEL SIGN VOCALIC L
+0D63;N # MALAYALAM VOWEL SIGN VOCALIC LL
+0D66;N # MALAYALAM DIGIT ZERO
+0D67;N # MALAYALAM DIGIT ONE
+0D68;N # MALAYALAM DIGIT TWO
+0D69;N # MALAYALAM DIGIT THREE
+0D6A;N # MALAYALAM DIGIT FOUR
+0D6B;N # MALAYALAM DIGIT FIVE
+0D6C;N # MALAYALAM DIGIT SIX
+0D6D;N # MALAYALAM DIGIT SEVEN
+0D6E;N # MALAYALAM DIGIT EIGHT
+0D6F;N # MALAYALAM DIGIT NINE
+0D70;N # MALAYALAM NUMBER TEN
+0D71;N # MALAYALAM NUMBER ONE HUNDRED
+0D72;N # MALAYALAM NUMBER ONE THOUSAND
+0D73;N # MALAYALAM FRACTION ONE QUARTER
+0D74;N # MALAYALAM FRACTION ONE HALF
+0D75;N # MALAYALAM FRACTION THREE QUARTERS
+0D79;N # MALAYALAM DATE MARK
+0D7A;N # MALAYALAM LETTER CHILLU NN
+0D7B;N # MALAYALAM LETTER CHILLU N
+0D7C;N # MALAYALAM LETTER CHILLU RR
+0D7D;N # MALAYALAM LETTER CHILLU L
+0D7E;N # MALAYALAM LETTER CHILLU LL
+0D7F;N # MALAYALAM LETTER CHILLU K
+0D82;N # SINHALA SIGN ANUSVARAYA
+0D83;N # SINHALA SIGN VISARGAYA
+0D85;N # SINHALA LETTER AYANNA
+0D86;N # SINHALA LETTER AAYANNA
+0D87;N # SINHALA LETTER AEYANNA
+0D88;N # SINHALA LETTER AEEYANNA
+0D89;N # SINHALA LETTER IYANNA
+0D8A;N # SINHALA LETTER IIYANNA
+0D8B;N # SINHALA LETTER UYANNA
+0D8C;N # SINHALA LETTER UUYANNA
+0D8D;N # SINHALA LETTER IRUYANNA
+0D8E;N # SINHALA LETTER IRUUYANNA
+0D8F;N # SINHALA LETTER ILUYANNA
+0D90;N # SINHALA LETTER ILUUYANNA
+0D91;N # SINHALA LETTER EYANNA
+0D92;N # SINHALA LETTER EEYANNA
+0D93;N # SINHALA LETTER AIYANNA
+0D94;N # SINHALA LETTER OYANNA
+0D95;N # SINHALA LETTER OOYANNA
+0D96;N # SINHALA LETTER AUYANNA
+0D9A;N # SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B;N # SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C;N # SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D;N # SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E;N # SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F;N # SINHALA LETTER SANYAKA GAYANNA
+0DA0;N # SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1;N # SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2;N # SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3;N # SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4;N # SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5;N # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6;N # SINHALA LETTER SANYAKA JAYANNA
+0DA7;N # SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8;N # SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9;N # SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA;N # SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB;N # SINHALA LETTER MUURDHAJA NAYANNA
+0DAC;N # SINHALA LETTER SANYAKA DDAYANNA
+0DAD;N # SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE;N # SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF;N # SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0;N # SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1;N # SINHALA LETTER DANTAJA NAYANNA
+0DB3;N # SINHALA LETTER SANYAKA DAYANNA
+0DB4;N # SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5;N # SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6;N # SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7;N # SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8;N # SINHALA LETTER MAYANNA
+0DB9;N # SINHALA LETTER AMBA BAYANNA
+0DBA;N # SINHALA LETTER YAYANNA
+0DBB;N # SINHALA LETTER RAYANNA
+0DBD;N # SINHALA LETTER DANTAJA LAYANNA
+0DC0;N # SINHALA LETTER VAYANNA
+0DC1;N # SINHALA LETTER TAALUJA SAYANNA
+0DC2;N # SINHALA LETTER MUURDHAJA SAYANNA
+0DC3;N # SINHALA LETTER DANTAJA SAYANNA
+0DC4;N # SINHALA LETTER HAYANNA
+0DC5;N # SINHALA LETTER MUURDHAJA LAYANNA
+0DC6;N # SINHALA LETTER FAYANNA
+0DCA;N # SINHALA SIGN AL-LAKUNA
+0DCF;N # SINHALA VOWEL SIGN AELA-PILLA
+0DD0;N # SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1;N # SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2;N # SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3;N # SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4;N # SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6;N # SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8;N # SINHALA VOWEL SIGN GAETTA-PILLA
+0DD9;N # SINHALA VOWEL SIGN KOMBUVA
+0DDA;N # SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB;N # SINHALA VOWEL SIGN KOMBU DEKA
+0DDC;N # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD;N # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE;N # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DDF;N # SINHALA VOWEL SIGN GAYANUKITTA
+0DF2;N # SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DF3;N # SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4;N # SINHALA PUNCTUATION KUNDDALIYA
+0E01;N # THAI CHARACTER KO KAI
+0E02;N # THAI CHARACTER KHO KHAI
+0E03;N # THAI CHARACTER KHO KHUAT
+0E04;N # THAI CHARACTER KHO KHWAI
+0E05;N # THAI CHARACTER KHO KHON
+0E06;N # THAI CHARACTER KHO RAKHANG
+0E07;N # THAI CHARACTER NGO NGU
+0E08;N # THAI CHARACTER CHO CHAN
+0E09;N # THAI CHARACTER CHO CHING
+0E0A;N # THAI CHARACTER CHO CHANG
+0E0B;N # THAI CHARACTER SO SO
+0E0C;N # THAI CHARACTER CHO CHOE
+0E0D;N # THAI CHARACTER YO YING
+0E0E;N # THAI CHARACTER DO CHADA
+0E0F;N # THAI CHARACTER TO PATAK
+0E10;N # THAI CHARACTER THO THAN
+0E11;N # THAI CHARACTER THO NANGMONTHO
+0E12;N # THAI CHARACTER THO PHUTHAO
+0E13;N # THAI CHARACTER NO NEN
+0E14;N # THAI CHARACTER DO DEK
+0E15;N # THAI CHARACTER TO TAO
+0E16;N # THAI CHARACTER THO THUNG
+0E17;N # THAI CHARACTER THO THAHAN
+0E18;N # THAI CHARACTER THO THONG
+0E19;N # THAI CHARACTER NO NU
+0E1A;N # THAI CHARACTER BO BAIMAI
+0E1B;N # THAI CHARACTER PO PLA
+0E1C;N # THAI CHARACTER PHO PHUNG
+0E1D;N # THAI CHARACTER FO FA
+0E1E;N # THAI CHARACTER PHO PHAN
+0E1F;N # THAI CHARACTER FO FAN
+0E20;N # THAI CHARACTER PHO SAMPHAO
+0E21;N # THAI CHARACTER MO MA
+0E22;N # THAI CHARACTER YO YAK
+0E23;N # THAI CHARACTER RO RUA
+0E24;N # THAI CHARACTER RU
+0E25;N # THAI CHARACTER LO LING
+0E26;N # THAI CHARACTER LU
+0E27;N # THAI CHARACTER WO WAEN
+0E28;N # THAI CHARACTER SO SALA
+0E29;N # THAI CHARACTER SO RUSI
+0E2A;N # THAI CHARACTER SO SUA
+0E2B;N # THAI CHARACTER HO HIP
+0E2C;N # THAI CHARACTER LO CHULA
+0E2D;N # THAI CHARACTER O ANG
+0E2E;N # THAI CHARACTER HO NOKHUK
+0E2F;N # THAI CHARACTER PAIYANNOI
+0E30;N # THAI CHARACTER SARA A
+0E31;N # THAI CHARACTER MAI HAN-AKAT
+0E32;N # THAI CHARACTER SARA AA
+0E33;N # THAI CHARACTER SARA AM
+0E34;N # THAI CHARACTER SARA I
+0E35;N # THAI CHARACTER SARA II
+0E36;N # THAI CHARACTER SARA UE
+0E37;N # THAI CHARACTER SARA UEE
+0E38;N # THAI CHARACTER SARA U
+0E39;N # THAI CHARACTER SARA UU
+0E3A;N # THAI CHARACTER PHINTHU
+0E3F;N # THAI CURRENCY SYMBOL BAHT
+0E40;N # THAI CHARACTER SARA E
+0E41;N # THAI CHARACTER SARA AE
+0E42;N # THAI CHARACTER SARA O
+0E43;N # THAI CHARACTER SARA AI MAIMUAN
+0E44;N # THAI CHARACTER SARA AI MAIMALAI
+0E45;N # THAI CHARACTER LAKKHANGYAO
+0E46;N # THAI CHARACTER MAIYAMOK
+0E47;N # THAI CHARACTER MAITAIKHU
+0E48;N # THAI CHARACTER MAI EK
+0E49;N # THAI CHARACTER MAI THO
+0E4A;N # THAI CHARACTER MAI TRI
+0E4B;N # THAI CHARACTER MAI CHATTAWA
+0E4C;N # THAI CHARACTER THANTHAKHAT
+0E4D;N # THAI CHARACTER NIKHAHIT
+0E4E;N # THAI CHARACTER YAMAKKAN
+0E4F;N # THAI CHARACTER FONGMAN
+0E50;N # THAI DIGIT ZERO
+0E51;N # THAI DIGIT ONE
+0E52;N # THAI DIGIT TWO
+0E53;N # THAI DIGIT THREE
+0E54;N # THAI DIGIT FOUR
+0E55;N # THAI DIGIT FIVE
+0E56;N # THAI DIGIT SIX
+0E57;N # THAI DIGIT SEVEN
+0E58;N # THAI DIGIT EIGHT
+0E59;N # THAI DIGIT NINE
+0E5A;N # THAI CHARACTER ANGKHANKHU
+0E5B;N # THAI CHARACTER KHOMUT
+0E81;N # LAO LETTER KO
+0E82;N # LAO LETTER KHO SUNG
+0E84;N # LAO LETTER KHO TAM
+0E87;N # LAO LETTER NGO
+0E88;N # LAO LETTER CO
+0E8A;N # LAO LETTER SO TAM
+0E8D;N # LAO LETTER NYO
+0E94;N # LAO LETTER DO
+0E95;N # LAO LETTER TO
+0E96;N # LAO LETTER THO SUNG
+0E97;N # LAO LETTER THO TAM
+0E99;N # LAO LETTER NO
+0E9A;N # LAO LETTER BO
+0E9B;N # LAO LETTER PO
+0E9C;N # LAO LETTER PHO SUNG
+0E9D;N # LAO LETTER FO TAM
+0E9E;N # LAO LETTER PHO TAM
+0E9F;N # LAO LETTER FO SUNG
+0EA1;N # LAO LETTER MO
+0EA2;N # LAO LETTER YO
+0EA3;N # LAO LETTER LO LING
+0EA5;N # LAO LETTER LO LOOT
+0EA7;N # LAO LETTER WO
+0EAA;N # LAO LETTER SO SUNG
+0EAB;N # LAO LETTER HO SUNG
+0EAD;N # LAO LETTER O
+0EAE;N # LAO LETTER HO TAM
+0EAF;N # LAO ELLIPSIS
+0EB0;N # LAO VOWEL SIGN A
+0EB1;N # LAO VOWEL SIGN MAI KAN
+0EB2;N # LAO VOWEL SIGN AA
+0EB3;N # LAO VOWEL SIGN AM
+0EB4;N # LAO VOWEL SIGN I
+0EB5;N # LAO VOWEL SIGN II
+0EB6;N # LAO VOWEL SIGN Y
+0EB7;N # LAO VOWEL SIGN YY
+0EB8;N # LAO VOWEL SIGN U
+0EB9;N # LAO VOWEL SIGN UU
+0EBB;N # LAO VOWEL SIGN MAI KON
+0EBC;N # LAO SEMIVOWEL SIGN LO
+0EBD;N # LAO SEMIVOWEL SIGN NYO
+0EC0;N # LAO VOWEL SIGN E
+0EC1;N # LAO VOWEL SIGN EI
+0EC2;N # LAO VOWEL SIGN O
+0EC3;N # LAO VOWEL SIGN AY
+0EC4;N # LAO VOWEL SIGN AI
+0EC6;N # LAO KO LA
+0EC8;N # LAO TONE MAI EK
+0EC9;N # LAO TONE MAI THO
+0ECA;N # LAO TONE MAI TI
+0ECB;N # LAO TONE MAI CATAWA
+0ECC;N # LAO CANCELLATION MARK
+0ECD;N # LAO NIGGAHITA
+0ED0;N # LAO DIGIT ZERO
+0ED1;N # LAO DIGIT ONE
+0ED2;N # LAO DIGIT TWO
+0ED3;N # LAO DIGIT THREE
+0ED4;N # LAO DIGIT FOUR
+0ED5;N # LAO DIGIT FIVE
+0ED6;N # LAO DIGIT SIX
+0ED7;N # LAO DIGIT SEVEN
+0ED8;N # LAO DIGIT EIGHT
+0ED9;N # LAO DIGIT NINE
+0EDC;N # LAO HO NO
+0EDD;N # LAO HO MO
+0F00;N # TIBETAN SYLLABLE OM
+0F01;N # TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02;N # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03;N # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04;N # TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05;N # TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06;N # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07;N # TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08;N # TIBETAN MARK SBRUL SHAD
+0F09;N # TIBETAN MARK BSKUR YIG MGO
+0F0A;N # TIBETAN MARK BKA- SHOG YIG MGO
+0F0B;N # TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C;N # TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D;N # TIBETAN MARK SHAD
+0F0E;N # TIBETAN MARK NYIS SHAD
+0F0F;N # TIBETAN MARK TSHEG SHAD
+0F10;N # TIBETAN MARK NYIS TSHEG SHAD
+0F11;N # TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12;N # TIBETAN MARK RGYA GRAM SHAD
+0F13;N # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14;N # TIBETAN MARK GTER TSHEG
+0F15;N # TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16;N # TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17;N # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18;N # TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19;N # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A;N # TIBETAN SIGN RDEL DKAR GCIG
+0F1B;N # TIBETAN SIGN RDEL DKAR GNYIS
+0F1C;N # TIBETAN SIGN RDEL DKAR GSUM
+0F1D;N # TIBETAN SIGN RDEL NAG GCIG
+0F1E;N # TIBETAN SIGN RDEL NAG GNYIS
+0F1F;N # TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20;N # TIBETAN DIGIT ZERO
+0F21;N # TIBETAN DIGIT ONE
+0F22;N # TIBETAN DIGIT TWO
+0F23;N # TIBETAN DIGIT THREE
+0F24;N # TIBETAN DIGIT FOUR
+0F25;N # TIBETAN DIGIT FIVE
+0F26;N # TIBETAN DIGIT SIX
+0F27;N # TIBETAN DIGIT SEVEN
+0F28;N # TIBETAN DIGIT EIGHT
+0F29;N # TIBETAN DIGIT NINE
+0F2A;N # TIBETAN DIGIT HALF ONE
+0F2B;N # TIBETAN DIGIT HALF TWO
+0F2C;N # TIBETAN DIGIT HALF THREE
+0F2D;N # TIBETAN DIGIT HALF FOUR
+0F2E;N # TIBETAN DIGIT HALF FIVE
+0F2F;N # TIBETAN DIGIT HALF SIX
+0F30;N # TIBETAN DIGIT HALF SEVEN
+0F31;N # TIBETAN DIGIT HALF EIGHT
+0F32;N # TIBETAN DIGIT HALF NINE
+0F33;N # TIBETAN DIGIT HALF ZERO
+0F34;N # TIBETAN MARK BSDUS RTAGS
+0F35;N # TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36;N # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37;N # TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38;N # TIBETAN MARK CHE MGO
+0F39;N # TIBETAN MARK TSA -PHRU
+0F3A;N # TIBETAN MARK GUG RTAGS GYON
+0F3B;N # TIBETAN MARK GUG RTAGS GYAS
+0F3C;N # TIBETAN MARK ANG KHANG GYON
+0F3D;N # TIBETAN MARK ANG KHANG GYAS
+0F3E;N # TIBETAN SIGN YAR TSHES
+0F3F;N # TIBETAN SIGN MAR TSHES
+0F40;N # TIBETAN LETTER KA
+0F41;N # TIBETAN LETTER KHA
+0F42;N # TIBETAN LETTER GA
+0F43;N # TIBETAN LETTER GHA
+0F44;N # TIBETAN LETTER NGA
+0F45;N # TIBETAN LETTER CA
+0F46;N # TIBETAN LETTER CHA
+0F47;N # TIBETAN LETTER JA
+0F49;N # TIBETAN LETTER NYA
+0F4A;N # TIBETAN LETTER TTA
+0F4B;N # TIBETAN LETTER TTHA
+0F4C;N # TIBETAN LETTER DDA
+0F4D;N # TIBETAN LETTER DDHA
+0F4E;N # TIBETAN LETTER NNA
+0F4F;N # TIBETAN LETTER TA
+0F50;N # TIBETAN LETTER THA
+0F51;N # TIBETAN LETTER DA
+0F52;N # TIBETAN LETTER DHA
+0F53;N # TIBETAN LETTER NA
+0F54;N # TIBETAN LETTER PA
+0F55;N # TIBETAN LETTER PHA
+0F56;N # TIBETAN LETTER BA
+0F57;N # TIBETAN LETTER BHA
+0F58;N # TIBETAN LETTER MA
+0F59;N # TIBETAN LETTER TSA
+0F5A;N # TIBETAN LETTER TSHA
+0F5B;N # TIBETAN LETTER DZA
+0F5C;N # TIBETAN LETTER DZHA
+0F5D;N # TIBETAN LETTER WA
+0F5E;N # TIBETAN LETTER ZHA
+0F5F;N # TIBETAN LETTER ZA
+0F60;N # TIBETAN LETTER -A
+0F61;N # TIBETAN LETTER YA
+0F62;N # TIBETAN LETTER RA
+0F63;N # TIBETAN LETTER LA
+0F64;N # TIBETAN LETTER SHA
+0F65;N # TIBETAN LETTER SSA
+0F66;N # TIBETAN LETTER SA
+0F67;N # TIBETAN LETTER HA
+0F68;N # TIBETAN LETTER A
+0F69;N # TIBETAN LETTER KSSA
+0F6A;N # TIBETAN LETTER FIXED-FORM RA
+0F6B;N # TIBETAN LETTER KKA
+0F6C;N # TIBETAN LETTER RRA
+0F71;N # TIBETAN VOWEL SIGN AA
+0F72;N # TIBETAN VOWEL SIGN I
+0F73;N # TIBETAN VOWEL SIGN II
+0F74;N # TIBETAN VOWEL SIGN U
+0F75;N # TIBETAN VOWEL SIGN UU
+0F76;N # TIBETAN VOWEL SIGN VOCALIC R
+0F77;N # TIBETAN VOWEL SIGN VOCALIC RR
+0F78;N # TIBETAN VOWEL SIGN VOCALIC L
+0F79;N # TIBETAN VOWEL SIGN VOCALIC LL
+0F7A;N # TIBETAN VOWEL SIGN E
+0F7B;N # TIBETAN VOWEL SIGN EE
+0F7C;N # TIBETAN VOWEL SIGN O
+0F7D;N # TIBETAN VOWEL SIGN OO
+0F7E;N # TIBETAN SIGN RJES SU NGA RO
+0F7F;N # TIBETAN SIGN RNAM BCAD
+0F80;N # TIBETAN VOWEL SIGN REVERSED I
+0F81;N # TIBETAN VOWEL SIGN REVERSED II
+0F82;N # TIBETAN SIGN NYI ZLA NAA DA
+0F83;N # TIBETAN SIGN SNA LDAN
+0F84;N # TIBETAN MARK HALANTA
+0F85;N # TIBETAN MARK PALUTA
+0F86;N # TIBETAN SIGN LCI RTAGS
+0F87;N # TIBETAN SIGN YANG RTAGS
+0F88;N # TIBETAN SIGN LCE TSA CAN
+0F89;N # TIBETAN SIGN MCHU CAN
+0F8A;N # TIBETAN SIGN GRU CAN RGYINGS
+0F8B;N # TIBETAN SIGN GRU MED RGYINGS
+0F90;N # TIBETAN SUBJOINED LETTER KA
+0F91;N # TIBETAN SUBJOINED LETTER KHA
+0F92;N # TIBETAN SUBJOINED LETTER GA
+0F93;N # TIBETAN SUBJOINED LETTER GHA
+0F94;N # TIBETAN SUBJOINED LETTER NGA
+0F95;N # TIBETAN SUBJOINED LETTER CA
+0F96;N # TIBETAN SUBJOINED LETTER CHA
+0F97;N # TIBETAN SUBJOINED LETTER JA
+0F99;N # TIBETAN SUBJOINED LETTER NYA
+0F9A;N # TIBETAN SUBJOINED LETTER TTA
+0F9B;N # TIBETAN SUBJOINED LETTER TTHA
+0F9C;N # TIBETAN SUBJOINED LETTER DDA
+0F9D;N # TIBETAN SUBJOINED LETTER DDHA
+0F9E;N # TIBETAN SUBJOINED LETTER NNA
+0F9F;N # TIBETAN SUBJOINED LETTER TA
+0FA0;N # TIBETAN SUBJOINED LETTER THA
+0FA1;N # TIBETAN SUBJOINED LETTER DA
+0FA2;N # TIBETAN SUBJOINED LETTER DHA
+0FA3;N # TIBETAN SUBJOINED LETTER NA
+0FA4;N # TIBETAN SUBJOINED LETTER PA
+0FA5;N # TIBETAN SUBJOINED LETTER PHA
+0FA6;N # TIBETAN SUBJOINED LETTER BA
+0FA7;N # TIBETAN SUBJOINED LETTER BHA
+0FA8;N # TIBETAN SUBJOINED LETTER MA
+0FA9;N # TIBETAN SUBJOINED LETTER TSA
+0FAA;N # TIBETAN SUBJOINED LETTER TSHA
+0FAB;N # TIBETAN SUBJOINED LETTER DZA
+0FAC;N # TIBETAN SUBJOINED LETTER DZHA
+0FAD;N # TIBETAN SUBJOINED LETTER WA
+0FAE;N # TIBETAN SUBJOINED LETTER ZHA
+0FAF;N # TIBETAN SUBJOINED LETTER ZA
+0FB0;N # TIBETAN SUBJOINED LETTER -A
+0FB1;N # TIBETAN SUBJOINED LETTER YA
+0FB2;N # TIBETAN SUBJOINED LETTER RA
+0FB3;N # TIBETAN SUBJOINED LETTER LA
+0FB4;N # TIBETAN SUBJOINED LETTER SHA
+0FB5;N # TIBETAN SUBJOINED LETTER SSA
+0FB6;N # TIBETAN SUBJOINED LETTER SA
+0FB7;N # TIBETAN SUBJOINED LETTER HA
+0FB8;N # TIBETAN SUBJOINED LETTER A
+0FB9;N # TIBETAN SUBJOINED LETTER KSSA
+0FBA;N # TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0FBB;N # TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0FBC;N # TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE;N # TIBETAN KU RU KHA
+0FBF;N # TIBETAN KU RU KHA BZHI MIG CAN
+0FC0;N # TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1;N # TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2;N # TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3;N # TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4;N # TIBETAN SYMBOL DRIL BU
+0FC5;N # TIBETAN SYMBOL RDO RJE
+0FC6;N # TIBETAN SYMBOL PADMA GDAN
+0FC7;N # TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8;N # TIBETAN SYMBOL PHUR PA
+0FC9;N # TIBETAN SYMBOL NOR BU
+0FCA;N # TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB;N # TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC;N # TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE;N # TIBETAN SIGN RDEL NAG RDEL DKAR
+0FCF;N # TIBETAN SIGN RDEL NAG GSUM
+0FD0;N # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1;N # TIBETAN MARK MNYAM YIG GI MGO RGYAN
+0FD2;N # TIBETAN MARK NYIS TSHEG
+0FD3;N # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+0FD4;N # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5;N # RIGHT-FACING SVASTI SIGN
+0FD6;N # LEFT-FACING SVASTI SIGN
+0FD7;N # RIGHT-FACING SVASTI SIGN WITH DOTS
+0FD8;N # LEFT-FACING SVASTI SIGN WITH DOTS
+1000;N # MYANMAR LETTER KA
+1001;N # MYANMAR LETTER KHA
+1002;N # MYANMAR LETTER GA
+1003;N # MYANMAR LETTER GHA
+1004;N # MYANMAR LETTER NGA
+1005;N # MYANMAR LETTER CA
+1006;N # MYANMAR LETTER CHA
+1007;N # MYANMAR LETTER JA
+1008;N # MYANMAR LETTER JHA
+1009;N # MYANMAR LETTER NYA
+100A;N # MYANMAR LETTER NNYA
+100B;N # MYANMAR LETTER TTA
+100C;N # MYANMAR LETTER TTHA
+100D;N # MYANMAR LETTER DDA
+100E;N # MYANMAR LETTER DDHA
+100F;N # MYANMAR LETTER NNA
+1010;N # MYANMAR LETTER TA
+1011;N # MYANMAR LETTER THA
+1012;N # MYANMAR LETTER DA
+1013;N # MYANMAR LETTER DHA
+1014;N # MYANMAR LETTER NA
+1015;N # MYANMAR LETTER PA
+1016;N # MYANMAR LETTER PHA
+1017;N # MYANMAR LETTER BA
+1018;N # MYANMAR LETTER BHA
+1019;N # MYANMAR LETTER MA
+101A;N # MYANMAR LETTER YA
+101B;N # MYANMAR LETTER RA
+101C;N # MYANMAR LETTER LA
+101D;N # MYANMAR LETTER WA
+101E;N # MYANMAR LETTER SA
+101F;N # MYANMAR LETTER HA
+1020;N # MYANMAR LETTER LLA
+1021;N # MYANMAR LETTER A
+1022;N # MYANMAR LETTER SHAN A
+1023;N # MYANMAR LETTER I
+1024;N # MYANMAR LETTER II
+1025;N # MYANMAR LETTER U
+1026;N # MYANMAR LETTER UU
+1027;N # MYANMAR LETTER E
+1028;N # MYANMAR LETTER MON E
+1029;N # MYANMAR LETTER O
+102A;N # MYANMAR LETTER AU
+102B;N # MYANMAR VOWEL SIGN TALL AA
+102C;N # MYANMAR VOWEL SIGN AA
+102D;N # MYANMAR VOWEL SIGN I
+102E;N # MYANMAR VOWEL SIGN II
+102F;N # MYANMAR VOWEL SIGN U
+1030;N # MYANMAR VOWEL SIGN UU
+1031;N # MYANMAR VOWEL SIGN E
+1032;N # MYANMAR VOWEL SIGN AI
+1033;N # MYANMAR VOWEL SIGN MON II
+1034;N # MYANMAR VOWEL SIGN MON O
+1035;N # MYANMAR VOWEL SIGN E ABOVE
+1036;N # MYANMAR SIGN ANUSVARA
+1037;N # MYANMAR SIGN DOT BELOW
+1038;N # MYANMAR SIGN VISARGA
+1039;N # MYANMAR SIGN VIRAMA
+103A;N # MYANMAR SIGN ASAT
+103B;N # MYANMAR CONSONANT SIGN MEDIAL YA
+103C;N # MYANMAR CONSONANT SIGN MEDIAL RA
+103D;N # MYANMAR CONSONANT SIGN MEDIAL WA
+103E;N # MYANMAR CONSONANT SIGN MEDIAL HA
+103F;N # MYANMAR LETTER GREAT SA
+1040;N # MYANMAR DIGIT ZERO
+1041;N # MYANMAR DIGIT ONE
+1042;N # MYANMAR DIGIT TWO
+1043;N # MYANMAR DIGIT THREE
+1044;N # MYANMAR DIGIT FOUR
+1045;N # MYANMAR DIGIT FIVE
+1046;N # MYANMAR DIGIT SIX
+1047;N # MYANMAR DIGIT SEVEN
+1048;N # MYANMAR DIGIT EIGHT
+1049;N # MYANMAR DIGIT NINE
+104A;N # MYANMAR SIGN LITTLE SECTION
+104B;N # MYANMAR SIGN SECTION
+104C;N # MYANMAR SYMBOL LOCATIVE
+104D;N # MYANMAR SYMBOL COMPLETED
+104E;N # MYANMAR SYMBOL AFOREMENTIONED
+104F;N # MYANMAR SYMBOL GENITIVE
+1050;N # MYANMAR LETTER SHA
+1051;N # MYANMAR LETTER SSA
+1052;N # MYANMAR LETTER VOCALIC R
+1053;N # MYANMAR LETTER VOCALIC RR
+1054;N # MYANMAR LETTER VOCALIC L
+1055;N # MYANMAR LETTER VOCALIC LL
+1056;N # MYANMAR VOWEL SIGN VOCALIC R
+1057;N # MYANMAR VOWEL SIGN VOCALIC RR
+1058;N # MYANMAR VOWEL SIGN VOCALIC L
+1059;N # MYANMAR VOWEL SIGN VOCALIC LL
+105A;N # MYANMAR LETTER MON NGA
+105B;N # MYANMAR LETTER MON JHA
+105C;N # MYANMAR LETTER MON BBA
+105D;N # MYANMAR LETTER MON BBE
+105E;N # MYANMAR CONSONANT SIGN MON MEDIAL NA
+105F;N # MYANMAR CONSONANT SIGN MON MEDIAL MA
+1060;N # MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061;N # MYANMAR LETTER SGAW KAREN SHA
+1062;N # MYANMAR VOWEL SIGN SGAW KAREN EU
+1063;N # MYANMAR TONE MARK SGAW KAREN HATHI
+1064;N # MYANMAR TONE MARK SGAW KAREN KE PHO
+1065;N # MYANMAR LETTER WESTERN PWO KAREN THA
+1066;N # MYANMAR LETTER WESTERN PWO KAREN PWA
+1067;N # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU
+1068;N # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+1069;N # MYANMAR SIGN WESTERN PWO KAREN TONE-1
+106A;N # MYANMAR SIGN WESTERN PWO KAREN TONE-2
+106B;N # MYANMAR SIGN WESTERN PWO KAREN TONE-3
+106C;N # MYANMAR SIGN WESTERN PWO KAREN TONE-4
+106D;N # MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E;N # MYANMAR LETTER EASTERN PWO KAREN NNA
+106F;N # MYANMAR LETTER EASTERN PWO KAREN YWA
+1070;N # MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071;N # MYANMAR VOWEL SIGN GEBA KAREN I
+1072;N # MYANMAR VOWEL SIGN KAYAH OE
+1073;N # MYANMAR VOWEL SIGN KAYAH U
+1074;N # MYANMAR VOWEL SIGN KAYAH EE
+1075;N # MYANMAR LETTER SHAN KA
+1076;N # MYANMAR LETTER SHAN KHA
+1077;N # MYANMAR LETTER SHAN GA
+1078;N # MYANMAR LETTER SHAN CA
+1079;N # MYANMAR LETTER SHAN ZA
+107A;N # MYANMAR LETTER SHAN NYA
+107B;N # MYANMAR LETTER SHAN DA
+107C;N # MYANMAR LETTER SHAN NA
+107D;N # MYANMAR LETTER SHAN PHA
+107E;N # MYANMAR LETTER SHAN FA
+107F;N # MYANMAR LETTER SHAN BA
+1080;N # MYANMAR LETTER SHAN THA
+1081;N # MYANMAR LETTER SHAN HA
+1082;N # MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083;N # MYANMAR VOWEL SIGN SHAN AA
+1084;N # MYANMAR VOWEL SIGN SHAN E
+1085;N # MYANMAR VOWEL SIGN SHAN E ABOVE
+1086;N # MYANMAR VOWEL SIGN SHAN FINAL Y
+1087;N # MYANMAR SIGN SHAN TONE-2
+1088;N # MYANMAR SIGN SHAN TONE-3
+1089;N # MYANMAR SIGN SHAN TONE-5
+108A;N # MYANMAR SIGN SHAN TONE-6
+108B;N # MYANMAR SIGN SHAN COUNCIL TONE-2
+108C;N # MYANMAR SIGN SHAN COUNCIL TONE-3
+108D;N # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E;N # MYANMAR LETTER RUMAI PALAUNG FA
+108F;N # MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090;N # MYANMAR SHAN DIGIT ZERO
+1091;N # MYANMAR SHAN DIGIT ONE
+1092;N # MYANMAR SHAN DIGIT TWO
+1093;N # MYANMAR SHAN DIGIT THREE
+1094;N # MYANMAR SHAN DIGIT FOUR
+1095;N # MYANMAR SHAN DIGIT FIVE
+1096;N # MYANMAR SHAN DIGIT SIX
+1097;N # MYANMAR SHAN DIGIT SEVEN
+1098;N # MYANMAR SHAN DIGIT EIGHT
+1099;N # MYANMAR SHAN DIGIT NINE
+109A;N # MYANMAR SIGN KHAMTI TONE-1
+109B;N # MYANMAR SIGN KHAMTI TONE-3
+109C;N # MYANMAR VOWEL SIGN AITON A
+109D;N # MYANMAR VOWEL SIGN AITON AI
+109E;N # MYANMAR SYMBOL SHAN ONE
+109F;N # MYANMAR SYMBOL SHAN EXCLAMATION
+10A0;N # GEORGIAN CAPITAL LETTER AN
+10A1;N # GEORGIAN CAPITAL LETTER BAN
+10A2;N # GEORGIAN CAPITAL LETTER GAN
+10A3;N # GEORGIAN CAPITAL LETTER DON
+10A4;N # GEORGIAN CAPITAL LETTER EN
+10A5;N # GEORGIAN CAPITAL LETTER VIN
+10A6;N # GEORGIAN CAPITAL LETTER ZEN
+10A7;N # GEORGIAN CAPITAL LETTER TAN
+10A8;N # GEORGIAN CAPITAL LETTER IN
+10A9;N # GEORGIAN CAPITAL LETTER KAN
+10AA;N # GEORGIAN CAPITAL LETTER LAS
+10AB;N # GEORGIAN CAPITAL LETTER MAN
+10AC;N # GEORGIAN CAPITAL LETTER NAR
+10AD;N # GEORGIAN CAPITAL LETTER ON
+10AE;N # GEORGIAN CAPITAL LETTER PAR
+10AF;N # GEORGIAN CAPITAL LETTER ZHAR
+10B0;N # GEORGIAN CAPITAL LETTER RAE
+10B1;N # GEORGIAN CAPITAL LETTER SAN
+10B2;N # GEORGIAN CAPITAL LETTER TAR
+10B3;N # GEORGIAN CAPITAL LETTER UN
+10B4;N # GEORGIAN CAPITAL LETTER PHAR
+10B5;N # GEORGIAN CAPITAL LETTER KHAR
+10B6;N # GEORGIAN CAPITAL LETTER GHAN
+10B7;N # GEORGIAN CAPITAL LETTER QAR
+10B8;N # GEORGIAN CAPITAL LETTER SHIN
+10B9;N # GEORGIAN CAPITAL LETTER CHIN
+10BA;N # GEORGIAN CAPITAL LETTER CAN
+10BB;N # GEORGIAN CAPITAL LETTER JIL
+10BC;N # GEORGIAN CAPITAL LETTER CIL
+10BD;N # GEORGIAN CAPITAL LETTER CHAR
+10BE;N # GEORGIAN CAPITAL LETTER XAN
+10BF;N # GEORGIAN CAPITAL LETTER JHAN
+10C0;N # GEORGIAN CAPITAL LETTER HAE
+10C1;N # GEORGIAN CAPITAL LETTER HE
+10C2;N # GEORGIAN CAPITAL LETTER HIE
+10C3;N # GEORGIAN CAPITAL LETTER WE
+10C4;N # GEORGIAN CAPITAL LETTER HAR
+10C5;N # GEORGIAN CAPITAL LETTER HOE
+10D0;N # GEORGIAN LETTER AN
+10D1;N # GEORGIAN LETTER BAN
+10D2;N # GEORGIAN LETTER GAN
+10D3;N # GEORGIAN LETTER DON
+10D4;N # GEORGIAN LETTER EN
+10D5;N # GEORGIAN LETTER VIN
+10D6;N # GEORGIAN LETTER ZEN
+10D7;N # GEORGIAN LETTER TAN
+10D8;N # GEORGIAN LETTER IN
+10D9;N # GEORGIAN LETTER KAN
+10DA;N # GEORGIAN LETTER LAS
+10DB;N # GEORGIAN LETTER MAN
+10DC;N # GEORGIAN LETTER NAR
+10DD;N # GEORGIAN LETTER ON
+10DE;N # GEORGIAN LETTER PAR
+10DF;N # GEORGIAN LETTER ZHAR
+10E0;N # GEORGIAN LETTER RAE
+10E1;N # GEORGIAN LETTER SAN
+10E2;N # GEORGIAN LETTER TAR
+10E3;N # GEORGIAN LETTER UN
+10E4;N # GEORGIAN LETTER PHAR
+10E5;N # GEORGIAN LETTER KHAR
+10E6;N # GEORGIAN LETTER GHAN
+10E7;N # GEORGIAN LETTER QAR
+10E8;N # GEORGIAN LETTER SHIN
+10E9;N # GEORGIAN LETTER CHIN
+10EA;N # GEORGIAN LETTER CAN
+10EB;N # GEORGIAN LETTER JIL
+10EC;N # GEORGIAN LETTER CIL
+10ED;N # GEORGIAN LETTER CHAR
+10EE;N # GEORGIAN LETTER XAN
+10EF;N # GEORGIAN LETTER JHAN
+10F0;N # GEORGIAN LETTER HAE
+10F1;N # GEORGIAN LETTER HE
+10F2;N # GEORGIAN LETTER HIE
+10F3;N # GEORGIAN LETTER WE
+10F4;N # GEORGIAN LETTER HAR
+10F5;N # GEORGIAN LETTER HOE
+10F6;N # GEORGIAN LETTER FI
+10F7;N # GEORGIAN LETTER YN
+10F8;N # GEORGIAN LETTER ELIFI
+10F9;N # GEORGIAN LETTER TURNED GAN
+10FA;N # GEORGIAN LETTER AIN
+10FB;N # GEORGIAN PARAGRAPH SEPARATOR
+10FC;N # MODIFIER LETTER GEORGIAN NAR
+1100;W # HANGUL CHOSEONG KIYEOK
+1101;W # HANGUL CHOSEONG SSANGKIYEOK
+1102;W # HANGUL CHOSEONG NIEUN
+1103;W # HANGUL CHOSEONG TIKEUT
+1104;W # HANGUL CHOSEONG SSANGTIKEUT
+1105;W # HANGUL CHOSEONG RIEUL
+1106;W # HANGUL CHOSEONG MIEUM
+1107;W # HANGUL CHOSEONG PIEUP
+1108;W # HANGUL CHOSEONG SSANGPIEUP
+1109;W # HANGUL CHOSEONG SIOS
+110A;W # HANGUL CHOSEONG SSANGSIOS
+110B;W # HANGUL CHOSEONG IEUNG
+110C;W # HANGUL CHOSEONG CIEUC
+110D;W # HANGUL CHOSEONG SSANGCIEUC
+110E;W # HANGUL CHOSEONG CHIEUCH
+110F;W # HANGUL CHOSEONG KHIEUKH
+1110;W # HANGUL CHOSEONG THIEUTH
+1111;W # HANGUL CHOSEONG PHIEUPH
+1112;W # HANGUL CHOSEONG HIEUH
+1113;W # HANGUL CHOSEONG NIEUN-KIYEOK
+1114;W # HANGUL CHOSEONG SSANGNIEUN
+1115;W # HANGUL CHOSEONG NIEUN-TIKEUT
+1116;W # HANGUL CHOSEONG NIEUN-PIEUP
+1117;W # HANGUL CHOSEONG TIKEUT-KIYEOK
+1118;W # HANGUL CHOSEONG RIEUL-NIEUN
+1119;W # HANGUL CHOSEONG SSANGRIEUL
+111A;W # HANGUL CHOSEONG RIEUL-HIEUH
+111B;W # HANGUL CHOSEONG KAPYEOUNRIEUL
+111C;W # HANGUL CHOSEONG MIEUM-PIEUP
+111D;W # HANGUL CHOSEONG KAPYEOUNMIEUM
+111E;W # HANGUL CHOSEONG PIEUP-KIYEOK
+111F;W # HANGUL CHOSEONG PIEUP-NIEUN
+1120;W # HANGUL CHOSEONG PIEUP-TIKEUT
+1121;W # HANGUL CHOSEONG PIEUP-SIOS
+1122;W # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123;W # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124;W # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125;W # HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126;W # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127;W # HANGUL CHOSEONG PIEUP-CIEUC
+1128;W # HANGUL CHOSEONG PIEUP-CHIEUCH
+1129;W # HANGUL CHOSEONG PIEUP-THIEUTH
+112A;W # HANGUL CHOSEONG PIEUP-PHIEUPH
+112B;W # HANGUL CHOSEONG KAPYEOUNPIEUP
+112C;W # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D;W # HANGUL CHOSEONG SIOS-KIYEOK
+112E;W # HANGUL CHOSEONG SIOS-NIEUN
+112F;W # HANGUL CHOSEONG SIOS-TIKEUT
+1130;W # HANGUL CHOSEONG SIOS-RIEUL
+1131;W # HANGUL CHOSEONG SIOS-MIEUM
+1132;W # HANGUL CHOSEONG SIOS-PIEUP
+1133;W # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134;W # HANGUL CHOSEONG SIOS-SSANGSIOS
+1135;W # HANGUL CHOSEONG SIOS-IEUNG
+1136;W # HANGUL CHOSEONG SIOS-CIEUC
+1137;W # HANGUL CHOSEONG SIOS-CHIEUCH
+1138;W # HANGUL CHOSEONG SIOS-KHIEUKH
+1139;W # HANGUL CHOSEONG SIOS-THIEUTH
+113A;W # HANGUL CHOSEONG SIOS-PHIEUPH
+113B;W # HANGUL CHOSEONG SIOS-HIEUH
+113C;W # HANGUL CHOSEONG CHITUEUMSIOS
+113D;W # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E;W # HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F;W # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140;W # HANGUL CHOSEONG PANSIOS
+1141;W # HANGUL CHOSEONG IEUNG-KIYEOK
+1142;W # HANGUL CHOSEONG IEUNG-TIKEUT
+1143;W # HANGUL CHOSEONG IEUNG-MIEUM
+1144;W # HANGUL CHOSEONG IEUNG-PIEUP
+1145;W # HANGUL CHOSEONG IEUNG-SIOS
+1146;W # HANGUL CHOSEONG IEUNG-PANSIOS
+1147;W # HANGUL CHOSEONG SSANGIEUNG
+1148;W # HANGUL CHOSEONG IEUNG-CIEUC
+1149;W # HANGUL CHOSEONG IEUNG-CHIEUCH
+114A;W # HANGUL CHOSEONG IEUNG-THIEUTH
+114B;W # HANGUL CHOSEONG IEUNG-PHIEUPH
+114C;W # HANGUL CHOSEONG YESIEUNG
+114D;W # HANGUL CHOSEONG CIEUC-IEUNG
+114E;W # HANGUL CHOSEONG CHITUEUMCIEUC
+114F;W # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150;W # HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151;W # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152;W # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153;W # HANGUL CHOSEONG CHIEUCH-HIEUH
+1154;W # HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155;W # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156;W # HANGUL CHOSEONG PHIEUPH-PIEUP
+1157;W # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158;W # HANGUL CHOSEONG SSANGHIEUH
+1159;W # HANGUL CHOSEONG YEORINHIEUH
+115A;W # HANGUL CHOSEONG KIYEOK-TIKEUT
+115B;W # HANGUL CHOSEONG NIEUN-SIOS
+115C;W # HANGUL CHOSEONG NIEUN-CIEUC
+115D;W # HANGUL CHOSEONG NIEUN-HIEUH
+115E;W # HANGUL CHOSEONG TIKEUT-RIEUL
+115F;W # HANGUL CHOSEONG FILLER
+1160;N # HANGUL JUNGSEONG FILLER
+1161;N # HANGUL JUNGSEONG A
+1162;N # HANGUL JUNGSEONG AE
+1163;N # HANGUL JUNGSEONG YA
+1164;N # HANGUL JUNGSEONG YAE
+1165;N # HANGUL JUNGSEONG EO
+1166;N # HANGUL JUNGSEONG E
+1167;N # HANGUL JUNGSEONG YEO
+1168;N # HANGUL JUNGSEONG YE
+1169;N # HANGUL JUNGSEONG O
+116A;N # HANGUL JUNGSEONG WA
+116B;N # HANGUL JUNGSEONG WAE
+116C;N # HANGUL JUNGSEONG OE
+116D;N # HANGUL JUNGSEONG YO
+116E;N # HANGUL JUNGSEONG U
+116F;N # HANGUL JUNGSEONG WEO
+1170;N # HANGUL JUNGSEONG WE
+1171;N # HANGUL JUNGSEONG WI
+1172;N # HANGUL JUNGSEONG YU
+1173;N # HANGUL JUNGSEONG EU
+1174;N # HANGUL JUNGSEONG YI
+1175;N # HANGUL JUNGSEONG I
+1176;N # HANGUL JUNGSEONG A-O
+1177;N # HANGUL JUNGSEONG A-U
+1178;N # HANGUL JUNGSEONG YA-O
+1179;N # HANGUL JUNGSEONG YA-YO
+117A;N # HANGUL JUNGSEONG EO-O
+117B;N # HANGUL JUNGSEONG EO-U
+117C;N # HANGUL JUNGSEONG EO-EU
+117D;N # HANGUL JUNGSEONG YEO-O
+117E;N # HANGUL JUNGSEONG YEO-U
+117F;N # HANGUL JUNGSEONG O-EO
+1180;N # HANGUL JUNGSEONG O-E
+1181;N # HANGUL JUNGSEONG O-YE
+1182;N # HANGUL JUNGSEONG O-O
+1183;N # HANGUL JUNGSEONG O-U
+1184;N # HANGUL JUNGSEONG YO-YA
+1185;N # HANGUL JUNGSEONG YO-YAE
+1186;N # HANGUL JUNGSEONG YO-YEO
+1187;N # HANGUL JUNGSEONG YO-O
+1188;N # HANGUL JUNGSEONG YO-I
+1189;N # HANGUL JUNGSEONG U-A
+118A;N # HANGUL JUNGSEONG U-AE
+118B;N # HANGUL JUNGSEONG U-EO-EU
+118C;N # HANGUL JUNGSEONG U-YE
+118D;N # HANGUL JUNGSEONG U-U
+118E;N # HANGUL JUNGSEONG YU-A
+118F;N # HANGUL JUNGSEONG YU-EO
+1190;N # HANGUL JUNGSEONG YU-E
+1191;N # HANGUL JUNGSEONG YU-YEO
+1192;N # HANGUL JUNGSEONG YU-YE
+1193;N # HANGUL JUNGSEONG YU-U
+1194;N # HANGUL JUNGSEONG YU-I
+1195;N # HANGUL JUNGSEONG EU-U
+1196;N # HANGUL JUNGSEONG EU-EU
+1197;N # HANGUL JUNGSEONG YI-U
+1198;N # HANGUL JUNGSEONG I-A
+1199;N # HANGUL JUNGSEONG I-YA
+119A;N # HANGUL JUNGSEONG I-O
+119B;N # HANGUL JUNGSEONG I-U
+119C;N # HANGUL JUNGSEONG I-EU
+119D;N # HANGUL JUNGSEONG I-ARAEA
+119E;N # HANGUL JUNGSEONG ARAEA
+119F;N # HANGUL JUNGSEONG ARAEA-EO
+11A0;N # HANGUL JUNGSEONG ARAEA-U
+11A1;N # HANGUL JUNGSEONG ARAEA-I
+11A2;N # HANGUL JUNGSEONG SSANGARAEA
+11A3;W # HANGUL JUNGSEONG A-EU
+11A4;W # HANGUL JUNGSEONG YA-U
+11A5;W # HANGUL JUNGSEONG YEO-YA
+11A6;W # HANGUL JUNGSEONG O-YA
+11A7;W # HANGUL JUNGSEONG O-YAE
+11A8;N # HANGUL JONGSEONG KIYEOK
+11A9;N # HANGUL JONGSEONG SSANGKIYEOK
+11AA;N # HANGUL JONGSEONG KIYEOK-SIOS
+11AB;N # HANGUL JONGSEONG NIEUN
+11AC;N # HANGUL JONGSEONG NIEUN-CIEUC
+11AD;N # HANGUL JONGSEONG NIEUN-HIEUH
+11AE;N # HANGUL JONGSEONG TIKEUT
+11AF;N # HANGUL JONGSEONG RIEUL
+11B0;N # HANGUL JONGSEONG RIEUL-KIYEOK
+11B1;N # HANGUL JONGSEONG RIEUL-MIEUM
+11B2;N # HANGUL JONGSEONG RIEUL-PIEUP
+11B3;N # HANGUL JONGSEONG RIEUL-SIOS
+11B4;N # HANGUL JONGSEONG RIEUL-THIEUTH
+11B5;N # HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6;N # HANGUL JONGSEONG RIEUL-HIEUH
+11B7;N # HANGUL JONGSEONG MIEUM
+11B8;N # HANGUL JONGSEONG PIEUP
+11B9;N # HANGUL JONGSEONG PIEUP-SIOS
+11BA;N # HANGUL JONGSEONG SIOS
+11BB;N # HANGUL JONGSEONG SSANGSIOS
+11BC;N # HANGUL JONGSEONG IEUNG
+11BD;N # HANGUL JONGSEONG CIEUC
+11BE;N # HANGUL JONGSEONG CHIEUCH
+11BF;N # HANGUL JONGSEONG KHIEUKH
+11C0;N # HANGUL JONGSEONG THIEUTH
+11C1;N # HANGUL JONGSEONG PHIEUPH
+11C2;N # HANGUL JONGSEONG HIEUH
+11C3;N # HANGUL JONGSEONG KIYEOK-RIEUL
+11C4;N # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5;N # HANGUL JONGSEONG NIEUN-KIYEOK
+11C6;N # HANGUL JONGSEONG NIEUN-TIKEUT
+11C7;N # HANGUL JONGSEONG NIEUN-SIOS
+11C8;N # HANGUL JONGSEONG NIEUN-PANSIOS
+11C9;N # HANGUL JONGSEONG NIEUN-THIEUTH
+11CA;N # HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB;N # HANGUL JONGSEONG TIKEUT-RIEUL
+11CC;N # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD;N # HANGUL JONGSEONG RIEUL-NIEUN
+11CE;N # HANGUL JONGSEONG RIEUL-TIKEUT
+11CF;N # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0;N # HANGUL JONGSEONG SSANGRIEUL
+11D1;N # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2;N # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3;N # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4;N # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5;N # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6;N # HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7;N # HANGUL JONGSEONG RIEUL-PANSIOS
+11D8;N # HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9;N # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA;N # HANGUL JONGSEONG MIEUM-KIYEOK
+11DB;N # HANGUL JONGSEONG MIEUM-RIEUL
+11DC;N # HANGUL JONGSEONG MIEUM-PIEUP
+11DD;N # HANGUL JONGSEONG MIEUM-SIOS
+11DE;N # HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF;N # HANGUL JONGSEONG MIEUM-PANSIOS
+11E0;N # HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1;N # HANGUL JONGSEONG MIEUM-HIEUH
+11E2;N # HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3;N # HANGUL JONGSEONG PIEUP-RIEUL
+11E4;N # HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5;N # HANGUL JONGSEONG PIEUP-HIEUH
+11E6;N # HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7;N # HANGUL JONGSEONG SIOS-KIYEOK
+11E8;N # HANGUL JONGSEONG SIOS-TIKEUT
+11E9;N # HANGUL JONGSEONG SIOS-RIEUL
+11EA;N # HANGUL JONGSEONG SIOS-PIEUP
+11EB;N # HANGUL JONGSEONG PANSIOS
+11EC;N # HANGUL JONGSEONG IEUNG-KIYEOK
+11ED;N # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE;N # HANGUL JONGSEONG SSANGIEUNG
+11EF;N # HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0;N # HANGUL JONGSEONG YESIEUNG
+11F1;N # HANGUL JONGSEONG YESIEUNG-SIOS
+11F2;N # HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3;N # HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4;N # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5;N # HANGUL JONGSEONG HIEUH-NIEUN
+11F6;N # HANGUL JONGSEONG HIEUH-RIEUL
+11F7;N # HANGUL JONGSEONG HIEUH-MIEUM
+11F8;N # HANGUL JONGSEONG HIEUH-PIEUP
+11F9;N # HANGUL JONGSEONG YEORINHIEUH
+11FA;W # HANGUL JONGSEONG KIYEOK-NIEUN
+11FB;W # HANGUL JONGSEONG KIYEOK-PIEUP
+11FC;W # HANGUL JONGSEONG KIYEOK-CHIEUCH
+11FD;W # HANGUL JONGSEONG KIYEOK-KHIEUKH
+11FE;W # HANGUL JONGSEONG KIYEOK-HIEUH
+11FF;W # HANGUL JONGSEONG SSANGNIEUN
+1200;N # ETHIOPIC SYLLABLE HA
+1201;N # ETHIOPIC SYLLABLE HU
+1202;N # ETHIOPIC SYLLABLE HI
+1203;N # ETHIOPIC SYLLABLE HAA
+1204;N # ETHIOPIC SYLLABLE HEE
+1205;N # ETHIOPIC SYLLABLE HE
+1206;N # ETHIOPIC SYLLABLE HO
+1207;N # ETHIOPIC SYLLABLE HOA
+1208;N # ETHIOPIC SYLLABLE LA
+1209;N # ETHIOPIC SYLLABLE LU
+120A;N # ETHIOPIC SYLLABLE LI
+120B;N # ETHIOPIC SYLLABLE LAA
+120C;N # ETHIOPIC SYLLABLE LEE
+120D;N # ETHIOPIC SYLLABLE LE
+120E;N # ETHIOPIC SYLLABLE LO
+120F;N # ETHIOPIC SYLLABLE LWA
+1210;N # ETHIOPIC SYLLABLE HHA
+1211;N # ETHIOPIC SYLLABLE HHU
+1212;N # ETHIOPIC SYLLABLE HHI
+1213;N # ETHIOPIC SYLLABLE HHAA
+1214;N # ETHIOPIC SYLLABLE HHEE
+1215;N # ETHIOPIC SYLLABLE HHE
+1216;N # ETHIOPIC SYLLABLE HHO
+1217;N # ETHIOPIC SYLLABLE HHWA
+1218;N # ETHIOPIC SYLLABLE MA
+1219;N # ETHIOPIC SYLLABLE MU
+121A;N # ETHIOPIC SYLLABLE MI
+121B;N # ETHIOPIC SYLLABLE MAA
+121C;N # ETHIOPIC SYLLABLE MEE
+121D;N # ETHIOPIC SYLLABLE ME
+121E;N # ETHIOPIC SYLLABLE MO
+121F;N # ETHIOPIC SYLLABLE MWA
+1220;N # ETHIOPIC SYLLABLE SZA
+1221;N # ETHIOPIC SYLLABLE SZU
+1222;N # ETHIOPIC SYLLABLE SZI
+1223;N # ETHIOPIC SYLLABLE SZAA
+1224;N # ETHIOPIC SYLLABLE SZEE
+1225;N # ETHIOPIC SYLLABLE SZE
+1226;N # ETHIOPIC SYLLABLE SZO
+1227;N # ETHIOPIC SYLLABLE SZWA
+1228;N # ETHIOPIC SYLLABLE RA
+1229;N # ETHIOPIC SYLLABLE RU
+122A;N # ETHIOPIC SYLLABLE RI
+122B;N # ETHIOPIC SYLLABLE RAA
+122C;N # ETHIOPIC SYLLABLE REE
+122D;N # ETHIOPIC SYLLABLE RE
+122E;N # ETHIOPIC SYLLABLE RO
+122F;N # ETHIOPIC SYLLABLE RWA
+1230;N # ETHIOPIC SYLLABLE SA
+1231;N # ETHIOPIC SYLLABLE SU
+1232;N # ETHIOPIC SYLLABLE SI
+1233;N # ETHIOPIC SYLLABLE SAA
+1234;N # ETHIOPIC SYLLABLE SEE
+1235;N # ETHIOPIC SYLLABLE SE
+1236;N # ETHIOPIC SYLLABLE SO
+1237;N # ETHIOPIC SYLLABLE SWA
+1238;N # ETHIOPIC SYLLABLE SHA
+1239;N # ETHIOPIC SYLLABLE SHU
+123A;N # ETHIOPIC SYLLABLE SHI
+123B;N # ETHIOPIC SYLLABLE SHAA
+123C;N # ETHIOPIC SYLLABLE SHEE
+123D;N # ETHIOPIC SYLLABLE SHE
+123E;N # ETHIOPIC SYLLABLE SHO
+123F;N # ETHIOPIC SYLLABLE SHWA
+1240;N # ETHIOPIC SYLLABLE QA
+1241;N # ETHIOPIC SYLLABLE QU
+1242;N # ETHIOPIC SYLLABLE QI
+1243;N # ETHIOPIC SYLLABLE QAA
+1244;N # ETHIOPIC SYLLABLE QEE
+1245;N # ETHIOPIC SYLLABLE QE
+1246;N # ETHIOPIC SYLLABLE QO
+1247;N # ETHIOPIC SYLLABLE QOA
+1248;N # ETHIOPIC SYLLABLE QWA
+124A;N # ETHIOPIC SYLLABLE QWI
+124B;N # ETHIOPIC SYLLABLE QWAA
+124C;N # ETHIOPIC SYLLABLE QWEE
+124D;N # ETHIOPIC SYLLABLE QWE
+1250;N # ETHIOPIC SYLLABLE QHA
+1251;N # ETHIOPIC SYLLABLE QHU
+1252;N # ETHIOPIC SYLLABLE QHI
+1253;N # ETHIOPIC SYLLABLE QHAA
+1254;N # ETHIOPIC SYLLABLE QHEE
+1255;N # ETHIOPIC SYLLABLE QHE
+1256;N # ETHIOPIC SYLLABLE QHO
+1258;N # ETHIOPIC SYLLABLE QHWA
+125A;N # ETHIOPIC SYLLABLE QHWI
+125B;N # ETHIOPIC SYLLABLE QHWAA
+125C;N # ETHIOPIC SYLLABLE QHWEE
+125D;N # ETHIOPIC SYLLABLE QHWE
+1260;N # ETHIOPIC SYLLABLE BA
+1261;N # ETHIOPIC SYLLABLE BU
+1262;N # ETHIOPIC SYLLABLE BI
+1263;N # ETHIOPIC SYLLABLE BAA
+1264;N # ETHIOPIC SYLLABLE BEE
+1265;N # ETHIOPIC SYLLABLE BE
+1266;N # ETHIOPIC SYLLABLE BO
+1267;N # ETHIOPIC SYLLABLE BWA
+1268;N # ETHIOPIC SYLLABLE VA
+1269;N # ETHIOPIC SYLLABLE VU
+126A;N # ETHIOPIC SYLLABLE VI
+126B;N # ETHIOPIC SYLLABLE VAA
+126C;N # ETHIOPIC SYLLABLE VEE
+126D;N # ETHIOPIC SYLLABLE VE
+126E;N # ETHIOPIC SYLLABLE VO
+126F;N # ETHIOPIC SYLLABLE VWA
+1270;N # ETHIOPIC SYLLABLE TA
+1271;N # ETHIOPIC SYLLABLE TU
+1272;N # ETHIOPIC SYLLABLE TI
+1273;N # ETHIOPIC SYLLABLE TAA
+1274;N # ETHIOPIC SYLLABLE TEE
+1275;N # ETHIOPIC SYLLABLE TE
+1276;N # ETHIOPIC SYLLABLE TO
+1277;N # ETHIOPIC SYLLABLE TWA
+1278;N # ETHIOPIC SYLLABLE CA
+1279;N # ETHIOPIC SYLLABLE CU
+127A;N # ETHIOPIC SYLLABLE CI
+127B;N # ETHIOPIC SYLLABLE CAA
+127C;N # ETHIOPIC SYLLABLE CEE
+127D;N # ETHIOPIC SYLLABLE CE
+127E;N # ETHIOPIC SYLLABLE CO
+127F;N # ETHIOPIC SYLLABLE CWA
+1280;N # ETHIOPIC SYLLABLE XA
+1281;N # ETHIOPIC SYLLABLE XU
+1282;N # ETHIOPIC SYLLABLE XI
+1283;N # ETHIOPIC SYLLABLE XAA
+1284;N # ETHIOPIC SYLLABLE XEE
+1285;N # ETHIOPIC SYLLABLE XE
+1286;N # ETHIOPIC SYLLABLE XO
+1287;N # ETHIOPIC SYLLABLE XOA
+1288;N # ETHIOPIC SYLLABLE XWA
+128A;N # ETHIOPIC SYLLABLE XWI
+128B;N # ETHIOPIC SYLLABLE XWAA
+128C;N # ETHIOPIC SYLLABLE XWEE
+128D;N # ETHIOPIC SYLLABLE XWE
+1290;N # ETHIOPIC SYLLABLE NA
+1291;N # ETHIOPIC SYLLABLE NU
+1292;N # ETHIOPIC SYLLABLE NI
+1293;N # ETHIOPIC SYLLABLE NAA
+1294;N # ETHIOPIC SYLLABLE NEE
+1295;N # ETHIOPIC SYLLABLE NE
+1296;N # ETHIOPIC SYLLABLE NO
+1297;N # ETHIOPIC SYLLABLE NWA
+1298;N # ETHIOPIC SYLLABLE NYA
+1299;N # ETHIOPIC SYLLABLE NYU
+129A;N # ETHIOPIC SYLLABLE NYI
+129B;N # ETHIOPIC SYLLABLE NYAA
+129C;N # ETHIOPIC SYLLABLE NYEE
+129D;N # ETHIOPIC SYLLABLE NYE
+129E;N # ETHIOPIC SYLLABLE NYO
+129F;N # ETHIOPIC SYLLABLE NYWA
+12A0;N # ETHIOPIC SYLLABLE GLOTTAL A
+12A1;N # ETHIOPIC SYLLABLE GLOTTAL U
+12A2;N # ETHIOPIC SYLLABLE GLOTTAL I
+12A3;N # ETHIOPIC SYLLABLE GLOTTAL AA
+12A4;N # ETHIOPIC SYLLABLE GLOTTAL EE
+12A5;N # ETHIOPIC SYLLABLE GLOTTAL E
+12A6;N # ETHIOPIC SYLLABLE GLOTTAL O
+12A7;N # ETHIOPIC SYLLABLE GLOTTAL WA
+12A8;N # ETHIOPIC SYLLABLE KA
+12A9;N # ETHIOPIC SYLLABLE KU
+12AA;N # ETHIOPIC SYLLABLE KI
+12AB;N # ETHIOPIC SYLLABLE KAA
+12AC;N # ETHIOPIC SYLLABLE KEE
+12AD;N # ETHIOPIC SYLLABLE KE
+12AE;N # ETHIOPIC SYLLABLE KO
+12AF;N # ETHIOPIC SYLLABLE KOA
+12B0;N # ETHIOPIC SYLLABLE KWA
+12B2;N # ETHIOPIC SYLLABLE KWI
+12B3;N # ETHIOPIC SYLLABLE KWAA
+12B4;N # ETHIOPIC SYLLABLE KWEE
+12B5;N # ETHIOPIC SYLLABLE KWE
+12B8;N # ETHIOPIC SYLLABLE KXA
+12B9;N # ETHIOPIC SYLLABLE KXU
+12BA;N # ETHIOPIC SYLLABLE KXI
+12BB;N # ETHIOPIC SYLLABLE KXAA
+12BC;N # ETHIOPIC SYLLABLE KXEE
+12BD;N # ETHIOPIC SYLLABLE KXE
+12BE;N # ETHIOPIC SYLLABLE KXO
+12C0;N # ETHIOPIC SYLLABLE KXWA
+12C2;N # ETHIOPIC SYLLABLE KXWI
+12C3;N # ETHIOPIC SYLLABLE KXWAA
+12C4;N # ETHIOPIC SYLLABLE KXWEE
+12C5;N # ETHIOPIC SYLLABLE KXWE
+12C8;N # ETHIOPIC SYLLABLE WA
+12C9;N # ETHIOPIC SYLLABLE WU
+12CA;N # ETHIOPIC SYLLABLE WI
+12CB;N # ETHIOPIC SYLLABLE WAA
+12CC;N # ETHIOPIC SYLLABLE WEE
+12CD;N # ETHIOPIC SYLLABLE WE
+12CE;N # ETHIOPIC SYLLABLE WO
+12CF;N # ETHIOPIC SYLLABLE WOA
+12D0;N # ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1;N # ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2;N # ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3;N # ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4;N # ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5;N # ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6;N # ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8;N # ETHIOPIC SYLLABLE ZA
+12D9;N # ETHIOPIC SYLLABLE ZU
+12DA;N # ETHIOPIC SYLLABLE ZI
+12DB;N # ETHIOPIC SYLLABLE ZAA
+12DC;N # ETHIOPIC SYLLABLE ZEE
+12DD;N # ETHIOPIC SYLLABLE ZE
+12DE;N # ETHIOPIC SYLLABLE ZO
+12DF;N # ETHIOPIC SYLLABLE ZWA
+12E0;N # ETHIOPIC SYLLABLE ZHA
+12E1;N # ETHIOPIC SYLLABLE ZHU
+12E2;N # ETHIOPIC SYLLABLE ZHI
+12E3;N # ETHIOPIC SYLLABLE ZHAA
+12E4;N # ETHIOPIC SYLLABLE ZHEE
+12E5;N # ETHIOPIC SYLLABLE ZHE
+12E6;N # ETHIOPIC SYLLABLE ZHO
+12E7;N # ETHIOPIC SYLLABLE ZHWA
+12E8;N # ETHIOPIC SYLLABLE YA
+12E9;N # ETHIOPIC SYLLABLE YU
+12EA;N # ETHIOPIC SYLLABLE YI
+12EB;N # ETHIOPIC SYLLABLE YAA
+12EC;N # ETHIOPIC SYLLABLE YEE
+12ED;N # ETHIOPIC SYLLABLE YE
+12EE;N # ETHIOPIC SYLLABLE YO
+12EF;N # ETHIOPIC SYLLABLE YOA
+12F0;N # ETHIOPIC SYLLABLE DA
+12F1;N # ETHIOPIC SYLLABLE DU
+12F2;N # ETHIOPIC SYLLABLE DI
+12F3;N # ETHIOPIC SYLLABLE DAA
+12F4;N # ETHIOPIC SYLLABLE DEE
+12F5;N # ETHIOPIC SYLLABLE DE
+12F6;N # ETHIOPIC SYLLABLE DO
+12F7;N # ETHIOPIC SYLLABLE DWA
+12F8;N # ETHIOPIC SYLLABLE DDA
+12F9;N # ETHIOPIC SYLLABLE DDU
+12FA;N # ETHIOPIC SYLLABLE DDI
+12FB;N # ETHIOPIC SYLLABLE DDAA
+12FC;N # ETHIOPIC SYLLABLE DDEE
+12FD;N # ETHIOPIC SYLLABLE DDE
+12FE;N # ETHIOPIC SYLLABLE DDO
+12FF;N # ETHIOPIC SYLLABLE DDWA
+1300;N # ETHIOPIC SYLLABLE JA
+1301;N # ETHIOPIC SYLLABLE JU
+1302;N # ETHIOPIC SYLLABLE JI
+1303;N # ETHIOPIC SYLLABLE JAA
+1304;N # ETHIOPIC SYLLABLE JEE
+1305;N # ETHIOPIC SYLLABLE JE
+1306;N # ETHIOPIC SYLLABLE JO
+1307;N # ETHIOPIC SYLLABLE JWA
+1308;N # ETHIOPIC SYLLABLE GA
+1309;N # ETHIOPIC SYLLABLE GU
+130A;N # ETHIOPIC SYLLABLE GI
+130B;N # ETHIOPIC SYLLABLE GAA
+130C;N # ETHIOPIC SYLLABLE GEE
+130D;N # ETHIOPIC SYLLABLE GE
+130E;N # ETHIOPIC SYLLABLE GO
+130F;N # ETHIOPIC SYLLABLE GOA
+1310;N # ETHIOPIC SYLLABLE GWA
+1312;N # ETHIOPIC SYLLABLE GWI
+1313;N # ETHIOPIC SYLLABLE GWAA
+1314;N # ETHIOPIC SYLLABLE GWEE
+1315;N # ETHIOPIC SYLLABLE GWE
+1318;N # ETHIOPIC SYLLABLE GGA
+1319;N # ETHIOPIC SYLLABLE GGU
+131A;N # ETHIOPIC SYLLABLE GGI
+131B;N # ETHIOPIC SYLLABLE GGAA
+131C;N # ETHIOPIC SYLLABLE GGEE
+131D;N # ETHIOPIC SYLLABLE GGE
+131E;N # ETHIOPIC SYLLABLE GGO
+131F;N # ETHIOPIC SYLLABLE GGWAA
+1320;N # ETHIOPIC SYLLABLE THA
+1321;N # ETHIOPIC SYLLABLE THU
+1322;N # ETHIOPIC SYLLABLE THI
+1323;N # ETHIOPIC SYLLABLE THAA
+1324;N # ETHIOPIC SYLLABLE THEE
+1325;N # ETHIOPIC SYLLABLE THE
+1326;N # ETHIOPIC SYLLABLE THO
+1327;N # ETHIOPIC SYLLABLE THWA
+1328;N # ETHIOPIC SYLLABLE CHA
+1329;N # ETHIOPIC SYLLABLE CHU
+132A;N # ETHIOPIC SYLLABLE CHI
+132B;N # ETHIOPIC SYLLABLE CHAA
+132C;N # ETHIOPIC SYLLABLE CHEE
+132D;N # ETHIOPIC SYLLABLE CHE
+132E;N # ETHIOPIC SYLLABLE CHO
+132F;N # ETHIOPIC SYLLABLE CHWA
+1330;N # ETHIOPIC SYLLABLE PHA
+1331;N # ETHIOPIC SYLLABLE PHU
+1332;N # ETHIOPIC SYLLABLE PHI
+1333;N # ETHIOPIC SYLLABLE PHAA
+1334;N # ETHIOPIC SYLLABLE PHEE
+1335;N # ETHIOPIC SYLLABLE PHE
+1336;N # ETHIOPIC SYLLABLE PHO
+1337;N # ETHIOPIC SYLLABLE PHWA
+1338;N # ETHIOPIC SYLLABLE TSA
+1339;N # ETHIOPIC SYLLABLE TSU
+133A;N # ETHIOPIC SYLLABLE TSI
+133B;N # ETHIOPIC SYLLABLE TSAA
+133C;N # ETHIOPIC SYLLABLE TSEE
+133D;N # ETHIOPIC SYLLABLE TSE
+133E;N # ETHIOPIC SYLLABLE TSO
+133F;N # ETHIOPIC SYLLABLE TSWA
+1340;N # ETHIOPIC SYLLABLE TZA
+1341;N # ETHIOPIC SYLLABLE TZU
+1342;N # ETHIOPIC SYLLABLE TZI
+1343;N # ETHIOPIC SYLLABLE TZAA
+1344;N # ETHIOPIC SYLLABLE TZEE
+1345;N # ETHIOPIC SYLLABLE TZE
+1346;N # ETHIOPIC SYLLABLE TZO
+1347;N # ETHIOPIC SYLLABLE TZOA
+1348;N # ETHIOPIC SYLLABLE FA
+1349;N # ETHIOPIC SYLLABLE FU
+134A;N # ETHIOPIC SYLLABLE FI
+134B;N # ETHIOPIC SYLLABLE FAA
+134C;N # ETHIOPIC SYLLABLE FEE
+134D;N # ETHIOPIC SYLLABLE FE
+134E;N # ETHIOPIC SYLLABLE FO
+134F;N # ETHIOPIC SYLLABLE FWA
+1350;N # ETHIOPIC SYLLABLE PA
+1351;N # ETHIOPIC SYLLABLE PU
+1352;N # ETHIOPIC SYLLABLE PI
+1353;N # ETHIOPIC SYLLABLE PAA
+1354;N # ETHIOPIC SYLLABLE PEE
+1355;N # ETHIOPIC SYLLABLE PE
+1356;N # ETHIOPIC SYLLABLE PO
+1357;N # ETHIOPIC SYLLABLE PWA
+1358;N # ETHIOPIC SYLLABLE RYA
+1359;N # ETHIOPIC SYLLABLE MYA
+135A;N # ETHIOPIC SYLLABLE FYA
+135F;N # ETHIOPIC COMBINING GEMINATION MARK
+1360;N # ETHIOPIC SECTION MARK
+1361;N # ETHIOPIC WORDSPACE
+1362;N # ETHIOPIC FULL STOP
+1363;N # ETHIOPIC COMMA
+1364;N # ETHIOPIC SEMICOLON
+1365;N # ETHIOPIC COLON
+1366;N # ETHIOPIC PREFACE COLON
+1367;N # ETHIOPIC QUESTION MARK
+1368;N # ETHIOPIC PARAGRAPH SEPARATOR
+1369;N # ETHIOPIC DIGIT ONE
+136A;N # ETHIOPIC DIGIT TWO
+136B;N # ETHIOPIC DIGIT THREE
+136C;N # ETHIOPIC DIGIT FOUR
+136D;N # ETHIOPIC DIGIT FIVE
+136E;N # ETHIOPIC DIGIT SIX
+136F;N # ETHIOPIC DIGIT SEVEN
+1370;N # ETHIOPIC DIGIT EIGHT
+1371;N # ETHIOPIC DIGIT NINE
+1372;N # ETHIOPIC NUMBER TEN
+1373;N # ETHIOPIC NUMBER TWENTY
+1374;N # ETHIOPIC NUMBER THIRTY
+1375;N # ETHIOPIC NUMBER FORTY
+1376;N # ETHIOPIC NUMBER FIFTY
+1377;N # ETHIOPIC NUMBER SIXTY
+1378;N # ETHIOPIC NUMBER SEVENTY
+1379;N # ETHIOPIC NUMBER EIGHTY
+137A;N # ETHIOPIC NUMBER NINETY
+137B;N # ETHIOPIC NUMBER HUNDRED
+137C;N # ETHIOPIC NUMBER TEN THOUSAND
+1380;N # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381;N # ETHIOPIC SYLLABLE MWI
+1382;N # ETHIOPIC SYLLABLE MWEE
+1383;N # ETHIOPIC SYLLABLE MWE
+1384;N # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385;N # ETHIOPIC SYLLABLE BWI
+1386;N # ETHIOPIC SYLLABLE BWEE
+1387;N # ETHIOPIC SYLLABLE BWE
+1388;N # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389;N # ETHIOPIC SYLLABLE FWI
+138A;N # ETHIOPIC SYLLABLE FWEE
+138B;N # ETHIOPIC SYLLABLE FWE
+138C;N # ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D;N # ETHIOPIC SYLLABLE PWI
+138E;N # ETHIOPIC SYLLABLE PWEE
+138F;N # ETHIOPIC SYLLABLE PWE
+1390;N # ETHIOPIC TONAL MARK YIZET
+1391;N # ETHIOPIC TONAL MARK DERET
+1392;N # ETHIOPIC TONAL MARK RIKRIK
+1393;N # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394;N # ETHIOPIC TONAL MARK DIFAT
+1395;N # ETHIOPIC TONAL MARK KENAT
+1396;N # ETHIOPIC TONAL MARK CHIRET
+1397;N # ETHIOPIC TONAL MARK HIDET
+1398;N # ETHIOPIC TONAL MARK DERET-HIDET
+1399;N # ETHIOPIC TONAL MARK KURT
+13A0;N # CHEROKEE LETTER A
+13A1;N # CHEROKEE LETTER E
+13A2;N # CHEROKEE LETTER I
+13A3;N # CHEROKEE LETTER O
+13A4;N # CHEROKEE LETTER U
+13A5;N # CHEROKEE LETTER V
+13A6;N # CHEROKEE LETTER GA
+13A7;N # CHEROKEE LETTER KA
+13A8;N # CHEROKEE LETTER GE
+13A9;N # CHEROKEE LETTER GI
+13AA;N # CHEROKEE LETTER GO
+13AB;N # CHEROKEE LETTER GU
+13AC;N # CHEROKEE LETTER GV
+13AD;N # CHEROKEE LETTER HA
+13AE;N # CHEROKEE LETTER HE
+13AF;N # CHEROKEE LETTER HI
+13B0;N # CHEROKEE LETTER HO
+13B1;N # CHEROKEE LETTER HU
+13B2;N # CHEROKEE LETTER HV
+13B3;N # CHEROKEE LETTER LA
+13B4;N # CHEROKEE LETTER LE
+13B5;N # CHEROKEE LETTER LI
+13B6;N # CHEROKEE LETTER LO
+13B7;N # CHEROKEE LETTER LU
+13B8;N # CHEROKEE LETTER LV
+13B9;N # CHEROKEE LETTER MA
+13BA;N # CHEROKEE LETTER ME
+13BB;N # CHEROKEE LETTER MI
+13BC;N # CHEROKEE LETTER MO
+13BD;N # CHEROKEE LETTER MU
+13BE;N # CHEROKEE LETTER NA
+13BF;N # CHEROKEE LETTER HNA
+13C0;N # CHEROKEE LETTER NAH
+13C1;N # CHEROKEE LETTER NE
+13C2;N # CHEROKEE LETTER NI
+13C3;N # CHEROKEE LETTER NO
+13C4;N # CHEROKEE LETTER NU
+13C5;N # CHEROKEE LETTER NV
+13C6;N # CHEROKEE LETTER QUA
+13C7;N # CHEROKEE LETTER QUE
+13C8;N # CHEROKEE LETTER QUI
+13C9;N # CHEROKEE LETTER QUO
+13CA;N # CHEROKEE LETTER QUU
+13CB;N # CHEROKEE LETTER QUV
+13CC;N # CHEROKEE LETTER SA
+13CD;N # CHEROKEE LETTER S
+13CE;N # CHEROKEE LETTER SE
+13CF;N # CHEROKEE LETTER SI
+13D0;N # CHEROKEE LETTER SO
+13D1;N # CHEROKEE LETTER SU
+13D2;N # CHEROKEE LETTER SV
+13D3;N # CHEROKEE LETTER DA
+13D4;N # CHEROKEE LETTER TA
+13D5;N # CHEROKEE LETTER DE
+13D6;N # CHEROKEE LETTER TE
+13D7;N # CHEROKEE LETTER DI
+13D8;N # CHEROKEE LETTER TI
+13D9;N # CHEROKEE LETTER DO
+13DA;N # CHEROKEE LETTER DU
+13DB;N # CHEROKEE LETTER DV
+13DC;N # CHEROKEE LETTER DLA
+13DD;N # CHEROKEE LETTER TLA
+13DE;N # CHEROKEE LETTER TLE
+13DF;N # CHEROKEE LETTER TLI
+13E0;N # CHEROKEE LETTER TLO
+13E1;N # CHEROKEE LETTER TLU
+13E2;N # CHEROKEE LETTER TLV
+13E3;N # CHEROKEE LETTER TSA
+13E4;N # CHEROKEE LETTER TSE
+13E5;N # CHEROKEE LETTER TSI
+13E6;N # CHEROKEE LETTER TSO
+13E7;N # CHEROKEE LETTER TSU
+13E8;N # CHEROKEE LETTER TSV
+13E9;N # CHEROKEE LETTER WA
+13EA;N # CHEROKEE LETTER WE
+13EB;N # CHEROKEE LETTER WI
+13EC;N # CHEROKEE LETTER WO
+13ED;N # CHEROKEE LETTER WU
+13EE;N # CHEROKEE LETTER WV
+13EF;N # CHEROKEE LETTER YA
+13F0;N # CHEROKEE LETTER YE
+13F1;N # CHEROKEE LETTER YI
+13F2;N # CHEROKEE LETTER YO
+13F3;N # CHEROKEE LETTER YU
+13F4;N # CHEROKEE LETTER YV
+1400;N # CANADIAN SYLLABICS HYPHEN
+1401;N # CANADIAN SYLLABICS E
+1402;N # CANADIAN SYLLABICS AAI
+1403;N # CANADIAN SYLLABICS I
+1404;N # CANADIAN SYLLABICS II
+1405;N # CANADIAN SYLLABICS O
+1406;N # CANADIAN SYLLABICS OO
+1407;N # CANADIAN SYLLABICS Y-CREE OO
+1408;N # CANADIAN SYLLABICS CARRIER EE
+1409;N # CANADIAN SYLLABICS CARRIER I
+140A;N # CANADIAN SYLLABICS A
+140B;N # CANADIAN SYLLABICS AA
+140C;N # CANADIAN SYLLABICS WE
+140D;N # CANADIAN SYLLABICS WEST-CREE WE
+140E;N # CANADIAN SYLLABICS WI
+140F;N # CANADIAN SYLLABICS WEST-CREE WI
+1410;N # CANADIAN SYLLABICS WII
+1411;N # CANADIAN SYLLABICS WEST-CREE WII
+1412;N # CANADIAN SYLLABICS WO
+1413;N # CANADIAN SYLLABICS WEST-CREE WO
+1414;N # CANADIAN SYLLABICS WOO
+1415;N # CANADIAN SYLLABICS WEST-CREE WOO
+1416;N # CANADIAN SYLLABICS NASKAPI WOO
+1417;N # CANADIAN SYLLABICS WA
+1418;N # CANADIAN SYLLABICS WEST-CREE WA
+1419;N # CANADIAN SYLLABICS WAA
+141A;N # CANADIAN SYLLABICS WEST-CREE WAA
+141B;N # CANADIAN SYLLABICS NASKAPI WAA
+141C;N # CANADIAN SYLLABICS AI
+141D;N # CANADIAN SYLLABICS Y-CREE W
+141E;N # CANADIAN SYLLABICS GLOTTAL STOP
+141F;N # CANADIAN SYLLABICS FINAL ACUTE
+1420;N # CANADIAN SYLLABICS FINAL GRAVE
+1421;N # CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422;N # CANADIAN SYLLABICS FINAL TOP HALF RING
+1423;N # CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424;N # CANADIAN SYLLABICS FINAL RING
+1425;N # CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426;N # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427;N # CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428;N # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429;N # CANADIAN SYLLABICS FINAL PLUS
+142A;N # CANADIAN SYLLABICS FINAL DOWN TACK
+142B;N # CANADIAN SYLLABICS EN
+142C;N # CANADIAN SYLLABICS IN
+142D;N # CANADIAN SYLLABICS ON
+142E;N # CANADIAN SYLLABICS AN
+142F;N # CANADIAN SYLLABICS PE
+1430;N # CANADIAN SYLLABICS PAAI
+1431;N # CANADIAN SYLLABICS PI
+1432;N # CANADIAN SYLLABICS PII
+1433;N # CANADIAN SYLLABICS PO
+1434;N # CANADIAN SYLLABICS POO
+1435;N # CANADIAN SYLLABICS Y-CREE POO
+1436;N # CANADIAN SYLLABICS CARRIER HEE
+1437;N # CANADIAN SYLLABICS CARRIER HI
+1438;N # CANADIAN SYLLABICS PA
+1439;N # CANADIAN SYLLABICS PAA
+143A;N # CANADIAN SYLLABICS PWE
+143B;N # CANADIAN SYLLABICS WEST-CREE PWE
+143C;N # CANADIAN SYLLABICS PWI
+143D;N # CANADIAN SYLLABICS WEST-CREE PWI
+143E;N # CANADIAN SYLLABICS PWII
+143F;N # CANADIAN SYLLABICS WEST-CREE PWII
+1440;N # CANADIAN SYLLABICS PWO
+1441;N # CANADIAN SYLLABICS WEST-CREE PWO
+1442;N # CANADIAN SYLLABICS PWOO
+1443;N # CANADIAN SYLLABICS WEST-CREE PWOO
+1444;N # CANADIAN SYLLABICS PWA
+1445;N # CANADIAN SYLLABICS WEST-CREE PWA
+1446;N # CANADIAN SYLLABICS PWAA
+1447;N # CANADIAN SYLLABICS WEST-CREE PWAA
+1448;N # CANADIAN SYLLABICS Y-CREE PWAA
+1449;N # CANADIAN SYLLABICS P
+144A;N # CANADIAN SYLLABICS WEST-CREE P
+144B;N # CANADIAN SYLLABICS CARRIER H
+144C;N # CANADIAN SYLLABICS TE
+144D;N # CANADIAN SYLLABICS TAAI
+144E;N # CANADIAN SYLLABICS TI
+144F;N # CANADIAN SYLLABICS TII
+1450;N # CANADIAN SYLLABICS TO
+1451;N # CANADIAN SYLLABICS TOO
+1452;N # CANADIAN SYLLABICS Y-CREE TOO
+1453;N # CANADIAN SYLLABICS CARRIER DEE
+1454;N # CANADIAN SYLLABICS CARRIER DI
+1455;N # CANADIAN SYLLABICS TA
+1456;N # CANADIAN SYLLABICS TAA
+1457;N # CANADIAN SYLLABICS TWE
+1458;N # CANADIAN SYLLABICS WEST-CREE TWE
+1459;N # CANADIAN SYLLABICS TWI
+145A;N # CANADIAN SYLLABICS WEST-CREE TWI
+145B;N # CANADIAN SYLLABICS TWII
+145C;N # CANADIAN SYLLABICS WEST-CREE TWII
+145D;N # CANADIAN SYLLABICS TWO
+145E;N # CANADIAN SYLLABICS WEST-CREE TWO
+145F;N # CANADIAN SYLLABICS TWOO
+1460;N # CANADIAN SYLLABICS WEST-CREE TWOO
+1461;N # CANADIAN SYLLABICS TWA
+1462;N # CANADIAN SYLLABICS WEST-CREE TWA
+1463;N # CANADIAN SYLLABICS TWAA
+1464;N # CANADIAN SYLLABICS WEST-CREE TWAA
+1465;N # CANADIAN SYLLABICS NASKAPI TWAA
+1466;N # CANADIAN SYLLABICS T
+1467;N # CANADIAN SYLLABICS TTE
+1468;N # CANADIAN SYLLABICS TTI
+1469;N # CANADIAN SYLLABICS TTO
+146A;N # CANADIAN SYLLABICS TTA
+146B;N # CANADIAN SYLLABICS KE
+146C;N # CANADIAN SYLLABICS KAAI
+146D;N # CANADIAN SYLLABICS KI
+146E;N # CANADIAN SYLLABICS KII
+146F;N # CANADIAN SYLLABICS KO
+1470;N # CANADIAN SYLLABICS KOO
+1471;N # CANADIAN SYLLABICS Y-CREE KOO
+1472;N # CANADIAN SYLLABICS KA
+1473;N # CANADIAN SYLLABICS KAA
+1474;N # CANADIAN SYLLABICS KWE
+1475;N # CANADIAN SYLLABICS WEST-CREE KWE
+1476;N # CANADIAN SYLLABICS KWI
+1477;N # CANADIAN SYLLABICS WEST-CREE KWI
+1478;N # CANADIAN SYLLABICS KWII
+1479;N # CANADIAN SYLLABICS WEST-CREE KWII
+147A;N # CANADIAN SYLLABICS KWO
+147B;N # CANADIAN SYLLABICS WEST-CREE KWO
+147C;N # CANADIAN SYLLABICS KWOO
+147D;N # CANADIAN SYLLABICS WEST-CREE KWOO
+147E;N # CANADIAN SYLLABICS KWA
+147F;N # CANADIAN SYLLABICS WEST-CREE KWA
+1480;N # CANADIAN SYLLABICS KWAA
+1481;N # CANADIAN SYLLABICS WEST-CREE KWAA
+1482;N # CANADIAN SYLLABICS NASKAPI KWAA
+1483;N # CANADIAN SYLLABICS K
+1484;N # CANADIAN SYLLABICS KW
+1485;N # CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486;N # CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487;N # CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488;N # CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489;N # CANADIAN SYLLABICS CE
+148A;N # CANADIAN SYLLABICS CAAI
+148B;N # CANADIAN SYLLABICS CI
+148C;N # CANADIAN SYLLABICS CII
+148D;N # CANADIAN SYLLABICS CO
+148E;N # CANADIAN SYLLABICS COO
+148F;N # CANADIAN SYLLABICS Y-CREE COO
+1490;N # CANADIAN SYLLABICS CA
+1491;N # CANADIAN SYLLABICS CAA
+1492;N # CANADIAN SYLLABICS CWE
+1493;N # CANADIAN SYLLABICS WEST-CREE CWE
+1494;N # CANADIAN SYLLABICS CWI
+1495;N # CANADIAN SYLLABICS WEST-CREE CWI
+1496;N # CANADIAN SYLLABICS CWII
+1497;N # CANADIAN SYLLABICS WEST-CREE CWII
+1498;N # CANADIAN SYLLABICS CWO
+1499;N # CANADIAN SYLLABICS WEST-CREE CWO
+149A;N # CANADIAN SYLLABICS CWOO
+149B;N # CANADIAN SYLLABICS WEST-CREE CWOO
+149C;N # CANADIAN SYLLABICS CWA
+149D;N # CANADIAN SYLLABICS WEST-CREE CWA
+149E;N # CANADIAN SYLLABICS CWAA
+149F;N # CANADIAN SYLLABICS WEST-CREE CWAA
+14A0;N # CANADIAN SYLLABICS NASKAPI CWAA
+14A1;N # CANADIAN SYLLABICS C
+14A2;N # CANADIAN SYLLABICS SAYISI TH
+14A3;N # CANADIAN SYLLABICS ME
+14A4;N # CANADIAN SYLLABICS MAAI
+14A5;N # CANADIAN SYLLABICS MI
+14A6;N # CANADIAN SYLLABICS MII
+14A7;N # CANADIAN SYLLABICS MO
+14A8;N # CANADIAN SYLLABICS MOO
+14A9;N # CANADIAN SYLLABICS Y-CREE MOO
+14AA;N # CANADIAN SYLLABICS MA
+14AB;N # CANADIAN SYLLABICS MAA
+14AC;N # CANADIAN SYLLABICS MWE
+14AD;N # CANADIAN SYLLABICS WEST-CREE MWE
+14AE;N # CANADIAN SYLLABICS MWI
+14AF;N # CANADIAN SYLLABICS WEST-CREE MWI
+14B0;N # CANADIAN SYLLABICS MWII
+14B1;N # CANADIAN SYLLABICS WEST-CREE MWII
+14B2;N # CANADIAN SYLLABICS MWO
+14B3;N # CANADIAN SYLLABICS WEST-CREE MWO
+14B4;N # CANADIAN SYLLABICS MWOO
+14B5;N # CANADIAN SYLLABICS WEST-CREE MWOO
+14B6;N # CANADIAN SYLLABICS MWA
+14B7;N # CANADIAN SYLLABICS WEST-CREE MWA
+14B8;N # CANADIAN SYLLABICS MWAA
+14B9;N # CANADIAN SYLLABICS WEST-CREE MWAA
+14BA;N # CANADIAN SYLLABICS NASKAPI MWAA
+14BB;N # CANADIAN SYLLABICS M
+14BC;N # CANADIAN SYLLABICS WEST-CREE M
+14BD;N # CANADIAN SYLLABICS MH
+14BE;N # CANADIAN SYLLABICS ATHAPASCAN M
+14BF;N # CANADIAN SYLLABICS SAYISI M
+14C0;N # CANADIAN SYLLABICS NE
+14C1;N # CANADIAN SYLLABICS NAAI
+14C2;N # CANADIAN SYLLABICS NI
+14C3;N # CANADIAN SYLLABICS NII
+14C4;N # CANADIAN SYLLABICS NO
+14C5;N # CANADIAN SYLLABICS NOO
+14C6;N # CANADIAN SYLLABICS Y-CREE NOO
+14C7;N # CANADIAN SYLLABICS NA
+14C8;N # CANADIAN SYLLABICS NAA
+14C9;N # CANADIAN SYLLABICS NWE
+14CA;N # CANADIAN SYLLABICS WEST-CREE NWE
+14CB;N # CANADIAN SYLLABICS NWA
+14CC;N # CANADIAN SYLLABICS WEST-CREE NWA
+14CD;N # CANADIAN SYLLABICS NWAA
+14CE;N # CANADIAN SYLLABICS WEST-CREE NWAA
+14CF;N # CANADIAN SYLLABICS NASKAPI NWAA
+14D0;N # CANADIAN SYLLABICS N
+14D1;N # CANADIAN SYLLABICS CARRIER NG
+14D2;N # CANADIAN SYLLABICS NH
+14D3;N # CANADIAN SYLLABICS LE
+14D4;N # CANADIAN SYLLABICS LAAI
+14D5;N # CANADIAN SYLLABICS LI
+14D6;N # CANADIAN SYLLABICS LII
+14D7;N # CANADIAN SYLLABICS LO
+14D8;N # CANADIAN SYLLABICS LOO
+14D9;N # CANADIAN SYLLABICS Y-CREE LOO
+14DA;N # CANADIAN SYLLABICS LA
+14DB;N # CANADIAN SYLLABICS LAA
+14DC;N # CANADIAN SYLLABICS LWE
+14DD;N # CANADIAN SYLLABICS WEST-CREE LWE
+14DE;N # CANADIAN SYLLABICS LWI
+14DF;N # CANADIAN SYLLABICS WEST-CREE LWI
+14E0;N # CANADIAN SYLLABICS LWII
+14E1;N # CANADIAN SYLLABICS WEST-CREE LWII
+14E2;N # CANADIAN SYLLABICS LWO
+14E3;N # CANADIAN SYLLABICS WEST-CREE LWO
+14E4;N # CANADIAN SYLLABICS LWOO
+14E5;N # CANADIAN SYLLABICS WEST-CREE LWOO
+14E6;N # CANADIAN SYLLABICS LWA
+14E7;N # CANADIAN SYLLABICS WEST-CREE LWA
+14E8;N # CANADIAN SYLLABICS LWAA
+14E9;N # CANADIAN SYLLABICS WEST-CREE LWAA
+14EA;N # CANADIAN SYLLABICS L
+14EB;N # CANADIAN SYLLABICS WEST-CREE L
+14EC;N # CANADIAN SYLLABICS MEDIAL L
+14ED;N # CANADIAN SYLLABICS SE
+14EE;N # CANADIAN SYLLABICS SAAI
+14EF;N # CANADIAN SYLLABICS SI
+14F0;N # CANADIAN SYLLABICS SII
+14F1;N # CANADIAN SYLLABICS SO
+14F2;N # CANADIAN SYLLABICS SOO
+14F3;N # CANADIAN SYLLABICS Y-CREE SOO
+14F4;N # CANADIAN SYLLABICS SA
+14F5;N # CANADIAN SYLLABICS SAA
+14F6;N # CANADIAN SYLLABICS SWE
+14F7;N # CANADIAN SYLLABICS WEST-CREE SWE
+14F8;N # CANADIAN SYLLABICS SWI
+14F9;N # CANADIAN SYLLABICS WEST-CREE SWI
+14FA;N # CANADIAN SYLLABICS SWII
+14FB;N # CANADIAN SYLLABICS WEST-CREE SWII
+14FC;N # CANADIAN SYLLABICS SWO
+14FD;N # CANADIAN SYLLABICS WEST-CREE SWO
+14FE;N # CANADIAN SYLLABICS SWOO
+14FF;N # CANADIAN SYLLABICS WEST-CREE SWOO
+1500;N # CANADIAN SYLLABICS SWA
+1501;N # CANADIAN SYLLABICS WEST-CREE SWA
+1502;N # CANADIAN SYLLABICS SWAA
+1503;N # CANADIAN SYLLABICS WEST-CREE SWAA
+1504;N # CANADIAN SYLLABICS NASKAPI SWAA
+1505;N # CANADIAN SYLLABICS S
+1506;N # CANADIAN SYLLABICS ATHAPASCAN S
+1507;N # CANADIAN SYLLABICS SW
+1508;N # CANADIAN SYLLABICS BLACKFOOT S
+1509;N # CANADIAN SYLLABICS MOOSE-CREE SK
+150A;N # CANADIAN SYLLABICS NASKAPI SKW
+150B;N # CANADIAN SYLLABICS NASKAPI S-W
+150C;N # CANADIAN SYLLABICS NASKAPI SPWA
+150D;N # CANADIAN SYLLABICS NASKAPI STWA
+150E;N # CANADIAN SYLLABICS NASKAPI SKWA
+150F;N # CANADIAN SYLLABICS NASKAPI SCWA
+1510;N # CANADIAN SYLLABICS SHE
+1511;N # CANADIAN SYLLABICS SHI
+1512;N # CANADIAN SYLLABICS SHII
+1513;N # CANADIAN SYLLABICS SHO
+1514;N # CANADIAN SYLLABICS SHOO
+1515;N # CANADIAN SYLLABICS SHA
+1516;N # CANADIAN SYLLABICS SHAA
+1517;N # CANADIAN SYLLABICS SHWE
+1518;N # CANADIAN SYLLABICS WEST-CREE SHWE
+1519;N # CANADIAN SYLLABICS SHWI
+151A;N # CANADIAN SYLLABICS WEST-CREE SHWI
+151B;N # CANADIAN SYLLABICS SHWII
+151C;N # CANADIAN SYLLABICS WEST-CREE SHWII
+151D;N # CANADIAN SYLLABICS SHWO
+151E;N # CANADIAN SYLLABICS WEST-CREE SHWO
+151F;N # CANADIAN SYLLABICS SHWOO
+1520;N # CANADIAN SYLLABICS WEST-CREE SHWOO
+1521;N # CANADIAN SYLLABICS SHWA
+1522;N # CANADIAN SYLLABICS WEST-CREE SHWA
+1523;N # CANADIAN SYLLABICS SHWAA
+1524;N # CANADIAN SYLLABICS WEST-CREE SHWAA
+1525;N # CANADIAN SYLLABICS SH
+1526;N # CANADIAN SYLLABICS YE
+1527;N # CANADIAN SYLLABICS YAAI
+1528;N # CANADIAN SYLLABICS YI
+1529;N # CANADIAN SYLLABICS YII
+152A;N # CANADIAN SYLLABICS YO
+152B;N # CANADIAN SYLLABICS YOO
+152C;N # CANADIAN SYLLABICS Y-CREE YOO
+152D;N # CANADIAN SYLLABICS YA
+152E;N # CANADIAN SYLLABICS YAA
+152F;N # CANADIAN SYLLABICS YWE
+1530;N # CANADIAN SYLLABICS WEST-CREE YWE
+1531;N # CANADIAN SYLLABICS YWI
+1532;N # CANADIAN SYLLABICS WEST-CREE YWI
+1533;N # CANADIAN SYLLABICS YWII
+1534;N # CANADIAN SYLLABICS WEST-CREE YWII
+1535;N # CANADIAN SYLLABICS YWO
+1536;N # CANADIAN SYLLABICS WEST-CREE YWO
+1537;N # CANADIAN SYLLABICS YWOO
+1538;N # CANADIAN SYLLABICS WEST-CREE YWOO
+1539;N # CANADIAN SYLLABICS YWA
+153A;N # CANADIAN SYLLABICS WEST-CREE YWA
+153B;N # CANADIAN SYLLABICS YWAA
+153C;N # CANADIAN SYLLABICS WEST-CREE YWAA
+153D;N # CANADIAN SYLLABICS NASKAPI YWAA
+153E;N # CANADIAN SYLLABICS Y
+153F;N # CANADIAN SYLLABICS BIBLE-CREE Y
+1540;N # CANADIAN SYLLABICS WEST-CREE Y
+1541;N # CANADIAN SYLLABICS SAYISI YI
+1542;N # CANADIAN SYLLABICS RE
+1543;N # CANADIAN SYLLABICS R-CREE RE
+1544;N # CANADIAN SYLLABICS WEST-CREE LE
+1545;N # CANADIAN SYLLABICS RAAI
+1546;N # CANADIAN SYLLABICS RI
+1547;N # CANADIAN SYLLABICS RII
+1548;N # CANADIAN SYLLABICS RO
+1549;N # CANADIAN SYLLABICS ROO
+154A;N # CANADIAN SYLLABICS WEST-CREE LO
+154B;N # CANADIAN SYLLABICS RA
+154C;N # CANADIAN SYLLABICS RAA
+154D;N # CANADIAN SYLLABICS WEST-CREE LA
+154E;N # CANADIAN SYLLABICS RWAA
+154F;N # CANADIAN SYLLABICS WEST-CREE RWAA
+1550;N # CANADIAN SYLLABICS R
+1551;N # CANADIAN SYLLABICS WEST-CREE R
+1552;N # CANADIAN SYLLABICS MEDIAL R
+1553;N # CANADIAN SYLLABICS FE
+1554;N # CANADIAN SYLLABICS FAAI
+1555;N # CANADIAN SYLLABICS FI
+1556;N # CANADIAN SYLLABICS FII
+1557;N # CANADIAN SYLLABICS FO
+1558;N # CANADIAN SYLLABICS FOO
+1559;N # CANADIAN SYLLABICS FA
+155A;N # CANADIAN SYLLABICS FAA
+155B;N # CANADIAN SYLLABICS FWAA
+155C;N # CANADIAN SYLLABICS WEST-CREE FWAA
+155D;N # CANADIAN SYLLABICS F
+155E;N # CANADIAN SYLLABICS THE
+155F;N # CANADIAN SYLLABICS N-CREE THE
+1560;N # CANADIAN SYLLABICS THI
+1561;N # CANADIAN SYLLABICS N-CREE THI
+1562;N # CANADIAN SYLLABICS THII
+1563;N # CANADIAN SYLLABICS N-CREE THII
+1564;N # CANADIAN SYLLABICS THO
+1565;N # CANADIAN SYLLABICS THOO
+1566;N # CANADIAN SYLLABICS THA
+1567;N # CANADIAN SYLLABICS THAA
+1568;N # CANADIAN SYLLABICS THWAA
+1569;N # CANADIAN SYLLABICS WEST-CREE THWAA
+156A;N # CANADIAN SYLLABICS TH
+156B;N # CANADIAN SYLLABICS TTHE
+156C;N # CANADIAN SYLLABICS TTHI
+156D;N # CANADIAN SYLLABICS TTHO
+156E;N # CANADIAN SYLLABICS TTHA
+156F;N # CANADIAN SYLLABICS TTH
+1570;N # CANADIAN SYLLABICS TYE
+1571;N # CANADIAN SYLLABICS TYI
+1572;N # CANADIAN SYLLABICS TYO
+1573;N # CANADIAN SYLLABICS TYA
+1574;N # CANADIAN SYLLABICS NUNAVIK HE
+1575;N # CANADIAN SYLLABICS NUNAVIK HI
+1576;N # CANADIAN SYLLABICS NUNAVIK HII
+1577;N # CANADIAN SYLLABICS NUNAVIK HO
+1578;N # CANADIAN SYLLABICS NUNAVIK HOO
+1579;N # CANADIAN SYLLABICS NUNAVIK HA
+157A;N # CANADIAN SYLLABICS NUNAVIK HAA
+157B;N # CANADIAN SYLLABICS NUNAVIK H
+157C;N # CANADIAN SYLLABICS NUNAVUT H
+157D;N # CANADIAN SYLLABICS HK
+157E;N # CANADIAN SYLLABICS QAAI
+157F;N # CANADIAN SYLLABICS QI
+1580;N # CANADIAN SYLLABICS QII
+1581;N # CANADIAN SYLLABICS QO
+1582;N # CANADIAN SYLLABICS QOO
+1583;N # CANADIAN SYLLABICS QA
+1584;N # CANADIAN SYLLABICS QAA
+1585;N # CANADIAN SYLLABICS Q
+1586;N # CANADIAN SYLLABICS TLHE
+1587;N # CANADIAN SYLLABICS TLHI
+1588;N # CANADIAN SYLLABICS TLHO
+1589;N # CANADIAN SYLLABICS TLHA
+158A;N # CANADIAN SYLLABICS WEST-CREE RE
+158B;N # CANADIAN SYLLABICS WEST-CREE RI
+158C;N # CANADIAN SYLLABICS WEST-CREE RO
+158D;N # CANADIAN SYLLABICS WEST-CREE RA
+158E;N # CANADIAN SYLLABICS NGAAI
+158F;N # CANADIAN SYLLABICS NGI
+1590;N # CANADIAN SYLLABICS NGII
+1591;N # CANADIAN SYLLABICS NGO
+1592;N # CANADIAN SYLLABICS NGOO
+1593;N # CANADIAN SYLLABICS NGA
+1594;N # CANADIAN SYLLABICS NGAA
+1595;N # CANADIAN SYLLABICS NG
+1596;N # CANADIAN SYLLABICS NNG
+1597;N # CANADIAN SYLLABICS SAYISI SHE
+1598;N # CANADIAN SYLLABICS SAYISI SHI
+1599;N # CANADIAN SYLLABICS SAYISI SHO
+159A;N # CANADIAN SYLLABICS SAYISI SHA
+159B;N # CANADIAN SYLLABICS WOODS-CREE THE
+159C;N # CANADIAN SYLLABICS WOODS-CREE THI
+159D;N # CANADIAN SYLLABICS WOODS-CREE THO
+159E;N # CANADIAN SYLLABICS WOODS-CREE THA
+159F;N # CANADIAN SYLLABICS WOODS-CREE TH
+15A0;N # CANADIAN SYLLABICS LHI
+15A1;N # CANADIAN SYLLABICS LHII
+15A2;N # CANADIAN SYLLABICS LHO
+15A3;N # CANADIAN SYLLABICS LHOO
+15A4;N # CANADIAN SYLLABICS LHA
+15A5;N # CANADIAN SYLLABICS LHAA
+15A6;N # CANADIAN SYLLABICS LH
+15A7;N # CANADIAN SYLLABICS TH-CREE THE
+15A8;N # CANADIAN SYLLABICS TH-CREE THI
+15A9;N # CANADIAN SYLLABICS TH-CREE THII
+15AA;N # CANADIAN SYLLABICS TH-CREE THO
+15AB;N # CANADIAN SYLLABICS TH-CREE THOO
+15AC;N # CANADIAN SYLLABICS TH-CREE THA
+15AD;N # CANADIAN SYLLABICS TH-CREE THAA
+15AE;N # CANADIAN SYLLABICS TH-CREE TH
+15AF;N # CANADIAN SYLLABICS AIVILIK B
+15B0;N # CANADIAN SYLLABICS BLACKFOOT E
+15B1;N # CANADIAN SYLLABICS BLACKFOOT I
+15B2;N # CANADIAN SYLLABICS BLACKFOOT O
+15B3;N # CANADIAN SYLLABICS BLACKFOOT A
+15B4;N # CANADIAN SYLLABICS BLACKFOOT WE
+15B5;N # CANADIAN SYLLABICS BLACKFOOT WI
+15B6;N # CANADIAN SYLLABICS BLACKFOOT WO
+15B7;N # CANADIAN SYLLABICS BLACKFOOT WA
+15B8;N # CANADIAN SYLLABICS BLACKFOOT NE
+15B9;N # CANADIAN SYLLABICS BLACKFOOT NI
+15BA;N # CANADIAN SYLLABICS BLACKFOOT NO
+15BB;N # CANADIAN SYLLABICS BLACKFOOT NA
+15BC;N # CANADIAN SYLLABICS BLACKFOOT KE
+15BD;N # CANADIAN SYLLABICS BLACKFOOT KI
+15BE;N # CANADIAN SYLLABICS BLACKFOOT KO
+15BF;N # CANADIAN SYLLABICS BLACKFOOT KA
+15C0;N # CANADIAN SYLLABICS SAYISI HE
+15C1;N # CANADIAN SYLLABICS SAYISI HI
+15C2;N # CANADIAN SYLLABICS SAYISI HO
+15C3;N # CANADIAN SYLLABICS SAYISI HA
+15C4;N # CANADIAN SYLLABICS CARRIER GHU
+15C5;N # CANADIAN SYLLABICS CARRIER GHO
+15C6;N # CANADIAN SYLLABICS CARRIER GHE
+15C7;N # CANADIAN SYLLABICS CARRIER GHEE
+15C8;N # CANADIAN SYLLABICS CARRIER GHI
+15C9;N # CANADIAN SYLLABICS CARRIER GHA
+15CA;N # CANADIAN SYLLABICS CARRIER RU
+15CB;N # CANADIAN SYLLABICS CARRIER RO
+15CC;N # CANADIAN SYLLABICS CARRIER RE
+15CD;N # CANADIAN SYLLABICS CARRIER REE
+15CE;N # CANADIAN SYLLABICS CARRIER RI
+15CF;N # CANADIAN SYLLABICS CARRIER RA
+15D0;N # CANADIAN SYLLABICS CARRIER WU
+15D1;N # CANADIAN SYLLABICS CARRIER WO
+15D2;N # CANADIAN SYLLABICS CARRIER WE
+15D3;N # CANADIAN SYLLABICS CARRIER WEE
+15D4;N # CANADIAN SYLLABICS CARRIER WI
+15D5;N # CANADIAN SYLLABICS CARRIER WA
+15D6;N # CANADIAN SYLLABICS CARRIER HWU
+15D7;N # CANADIAN SYLLABICS CARRIER HWO
+15D8;N # CANADIAN SYLLABICS CARRIER HWE
+15D9;N # CANADIAN SYLLABICS CARRIER HWEE
+15DA;N # CANADIAN SYLLABICS CARRIER HWI
+15DB;N # CANADIAN SYLLABICS CARRIER HWA
+15DC;N # CANADIAN SYLLABICS CARRIER THU
+15DD;N # CANADIAN SYLLABICS CARRIER THO
+15DE;N # CANADIAN SYLLABICS CARRIER THE
+15DF;N # CANADIAN SYLLABICS CARRIER THEE
+15E0;N # CANADIAN SYLLABICS CARRIER THI
+15E1;N # CANADIAN SYLLABICS CARRIER THA
+15E2;N # CANADIAN SYLLABICS CARRIER TTU
+15E3;N # CANADIAN SYLLABICS CARRIER TTO
+15E4;N # CANADIAN SYLLABICS CARRIER TTE
+15E5;N # CANADIAN SYLLABICS CARRIER TTEE
+15E6;N # CANADIAN SYLLABICS CARRIER TTI
+15E7;N # CANADIAN SYLLABICS CARRIER TTA
+15E8;N # CANADIAN SYLLABICS CARRIER PU
+15E9;N # CANADIAN SYLLABICS CARRIER PO
+15EA;N # CANADIAN SYLLABICS CARRIER PE
+15EB;N # CANADIAN SYLLABICS CARRIER PEE
+15EC;N # CANADIAN SYLLABICS CARRIER PI
+15ED;N # CANADIAN SYLLABICS CARRIER PA
+15EE;N # CANADIAN SYLLABICS CARRIER P
+15EF;N # CANADIAN SYLLABICS CARRIER GU
+15F0;N # CANADIAN SYLLABICS CARRIER GO
+15F1;N # CANADIAN SYLLABICS CARRIER GE
+15F2;N # CANADIAN SYLLABICS CARRIER GEE
+15F3;N # CANADIAN SYLLABICS CARRIER GI
+15F4;N # CANADIAN SYLLABICS CARRIER GA
+15F5;N # CANADIAN SYLLABICS CARRIER KHU
+15F6;N # CANADIAN SYLLABICS CARRIER KHO
+15F7;N # CANADIAN SYLLABICS CARRIER KHE
+15F8;N # CANADIAN SYLLABICS CARRIER KHEE
+15F9;N # CANADIAN SYLLABICS CARRIER KHI
+15FA;N # CANADIAN SYLLABICS CARRIER KHA
+15FB;N # CANADIAN SYLLABICS CARRIER KKU
+15FC;N # CANADIAN SYLLABICS CARRIER KKO
+15FD;N # CANADIAN SYLLABICS CARRIER KKE
+15FE;N # CANADIAN SYLLABICS CARRIER KKEE
+15FF;N # CANADIAN SYLLABICS CARRIER KKI
+1600;N # CANADIAN SYLLABICS CARRIER KKA
+1601;N # CANADIAN SYLLABICS CARRIER KK
+1602;N # CANADIAN SYLLABICS CARRIER NU
+1603;N # CANADIAN SYLLABICS CARRIER NO
+1604;N # CANADIAN SYLLABICS CARRIER NE
+1605;N # CANADIAN SYLLABICS CARRIER NEE
+1606;N # CANADIAN SYLLABICS CARRIER NI
+1607;N # CANADIAN SYLLABICS CARRIER NA
+1608;N # CANADIAN SYLLABICS CARRIER MU
+1609;N # CANADIAN SYLLABICS CARRIER MO
+160A;N # CANADIAN SYLLABICS CARRIER ME
+160B;N # CANADIAN SYLLABICS CARRIER MEE
+160C;N # CANADIAN SYLLABICS CARRIER MI
+160D;N # CANADIAN SYLLABICS CARRIER MA
+160E;N # CANADIAN SYLLABICS CARRIER YU
+160F;N # CANADIAN SYLLABICS CARRIER YO
+1610;N # CANADIAN SYLLABICS CARRIER YE
+1611;N # CANADIAN SYLLABICS CARRIER YEE
+1612;N # CANADIAN SYLLABICS CARRIER YI
+1613;N # CANADIAN SYLLABICS CARRIER YA
+1614;N # CANADIAN SYLLABICS CARRIER JU
+1615;N # CANADIAN SYLLABICS SAYISI JU
+1616;N # CANADIAN SYLLABICS CARRIER JO
+1617;N # CANADIAN SYLLABICS CARRIER JE
+1618;N # CANADIAN SYLLABICS CARRIER JEE
+1619;N # CANADIAN SYLLABICS CARRIER JI
+161A;N # CANADIAN SYLLABICS SAYISI JI
+161B;N # CANADIAN SYLLABICS CARRIER JA
+161C;N # CANADIAN SYLLABICS CARRIER JJU
+161D;N # CANADIAN SYLLABICS CARRIER JJO
+161E;N # CANADIAN SYLLABICS CARRIER JJE
+161F;N # CANADIAN SYLLABICS CARRIER JJEE
+1620;N # CANADIAN SYLLABICS CARRIER JJI
+1621;N # CANADIAN SYLLABICS CARRIER JJA
+1622;N # CANADIAN SYLLABICS CARRIER LU
+1623;N # CANADIAN SYLLABICS CARRIER LO
+1624;N # CANADIAN SYLLABICS CARRIER LE
+1625;N # CANADIAN SYLLABICS CARRIER LEE
+1626;N # CANADIAN SYLLABICS CARRIER LI
+1627;N # CANADIAN SYLLABICS CARRIER LA
+1628;N # CANADIAN SYLLABICS CARRIER DLU
+1629;N # CANADIAN SYLLABICS CARRIER DLO
+162A;N # CANADIAN SYLLABICS CARRIER DLE
+162B;N # CANADIAN SYLLABICS CARRIER DLEE
+162C;N # CANADIAN SYLLABICS CARRIER DLI
+162D;N # CANADIAN SYLLABICS CARRIER DLA
+162E;N # CANADIAN SYLLABICS CARRIER LHU
+162F;N # CANADIAN SYLLABICS CARRIER LHO
+1630;N # CANADIAN SYLLABICS CARRIER LHE
+1631;N # CANADIAN SYLLABICS CARRIER LHEE
+1632;N # CANADIAN SYLLABICS CARRIER LHI
+1633;N # CANADIAN SYLLABICS CARRIER LHA
+1634;N # CANADIAN SYLLABICS CARRIER TLHU
+1635;N # CANADIAN SYLLABICS CARRIER TLHO
+1636;N # CANADIAN SYLLABICS CARRIER TLHE
+1637;N # CANADIAN SYLLABICS CARRIER TLHEE
+1638;N # CANADIAN SYLLABICS CARRIER TLHI
+1639;N # CANADIAN SYLLABICS CARRIER TLHA
+163A;N # CANADIAN SYLLABICS CARRIER TLU
+163B;N # CANADIAN SYLLABICS CARRIER TLO
+163C;N # CANADIAN SYLLABICS CARRIER TLE
+163D;N # CANADIAN SYLLABICS CARRIER TLEE
+163E;N # CANADIAN SYLLABICS CARRIER TLI
+163F;N # CANADIAN SYLLABICS CARRIER TLA
+1640;N # CANADIAN SYLLABICS CARRIER ZU
+1641;N # CANADIAN SYLLABICS CARRIER ZO
+1642;N # CANADIAN SYLLABICS CARRIER ZE
+1643;N # CANADIAN SYLLABICS CARRIER ZEE
+1644;N # CANADIAN SYLLABICS CARRIER ZI
+1645;N # CANADIAN SYLLABICS CARRIER ZA
+1646;N # CANADIAN SYLLABICS CARRIER Z
+1647;N # CANADIAN SYLLABICS CARRIER INITIAL Z
+1648;N # CANADIAN SYLLABICS CARRIER DZU
+1649;N # CANADIAN SYLLABICS CARRIER DZO
+164A;N # CANADIAN SYLLABICS CARRIER DZE
+164B;N # CANADIAN SYLLABICS CARRIER DZEE
+164C;N # CANADIAN SYLLABICS CARRIER DZI
+164D;N # CANADIAN SYLLABICS CARRIER DZA
+164E;N # CANADIAN SYLLABICS CARRIER SU
+164F;N # CANADIAN SYLLABICS CARRIER SO
+1650;N # CANADIAN SYLLABICS CARRIER SE
+1651;N # CANADIAN SYLLABICS CARRIER SEE
+1652;N # CANADIAN SYLLABICS CARRIER SI
+1653;N # CANADIAN SYLLABICS CARRIER SA
+1654;N # CANADIAN SYLLABICS CARRIER SHU
+1655;N # CANADIAN SYLLABICS CARRIER SHO
+1656;N # CANADIAN SYLLABICS CARRIER SHE
+1657;N # CANADIAN SYLLABICS CARRIER SHEE
+1658;N # CANADIAN SYLLABICS CARRIER SHI
+1659;N # CANADIAN SYLLABICS CARRIER SHA
+165A;N # CANADIAN SYLLABICS CARRIER SH
+165B;N # CANADIAN SYLLABICS CARRIER TSU
+165C;N # CANADIAN SYLLABICS CARRIER TSO
+165D;N # CANADIAN SYLLABICS CARRIER TSE
+165E;N # CANADIAN SYLLABICS CARRIER TSEE
+165F;N # CANADIAN SYLLABICS CARRIER TSI
+1660;N # CANADIAN SYLLABICS CARRIER TSA
+1661;N # CANADIAN SYLLABICS CARRIER CHU
+1662;N # CANADIAN SYLLABICS CARRIER CHO
+1663;N # CANADIAN SYLLABICS CARRIER CHE
+1664;N # CANADIAN SYLLABICS CARRIER CHEE
+1665;N # CANADIAN SYLLABICS CARRIER CHI
+1666;N # CANADIAN SYLLABICS CARRIER CHA
+1667;N # CANADIAN SYLLABICS CARRIER TTSU
+1668;N # CANADIAN SYLLABICS CARRIER TTSO
+1669;N # CANADIAN SYLLABICS CARRIER TTSE
+166A;N # CANADIAN SYLLABICS CARRIER TTSEE
+166B;N # CANADIAN SYLLABICS CARRIER TTSI
+166C;N # CANADIAN SYLLABICS CARRIER TTSA
+166D;N # CANADIAN SYLLABICS CHI SIGN
+166E;N # CANADIAN SYLLABICS FULL STOP
+166F;N # CANADIAN SYLLABICS QAI
+1670;N # CANADIAN SYLLABICS NGAI
+1671;N # CANADIAN SYLLABICS NNGI
+1672;N # CANADIAN SYLLABICS NNGII
+1673;N # CANADIAN SYLLABICS NNGO
+1674;N # CANADIAN SYLLABICS NNGOO
+1675;N # CANADIAN SYLLABICS NNGA
+1676;N # CANADIAN SYLLABICS NNGAA
+1677;N # CANADIAN SYLLABICS WOODS-CREE THWEE
+1678;N # CANADIAN SYLLABICS WOODS-CREE THWI
+1679;N # CANADIAN SYLLABICS WOODS-CREE THWII
+167A;N # CANADIAN SYLLABICS WOODS-CREE THWO
+167B;N # CANADIAN SYLLABICS WOODS-CREE THWOO
+167C;N # CANADIAN SYLLABICS WOODS-CREE THWA
+167D;N # CANADIAN SYLLABICS WOODS-CREE THWAA
+167E;N # CANADIAN SYLLABICS WOODS-CREE FINAL TH
+167F;N # CANADIAN SYLLABICS BLACKFOOT W
+1680;N # OGHAM SPACE MARK
+1681;N # OGHAM LETTER BEITH
+1682;N # OGHAM LETTER LUIS
+1683;N # OGHAM LETTER FEARN
+1684;N # OGHAM LETTER SAIL
+1685;N # OGHAM LETTER NION
+1686;N # OGHAM LETTER UATH
+1687;N # OGHAM LETTER DAIR
+1688;N # OGHAM LETTER TINNE
+1689;N # OGHAM LETTER COLL
+168A;N # OGHAM LETTER CEIRT
+168B;N # OGHAM LETTER MUIN
+168C;N # OGHAM LETTER GORT
+168D;N # OGHAM LETTER NGEADAL
+168E;N # OGHAM LETTER STRAIF
+168F;N # OGHAM LETTER RUIS
+1690;N # OGHAM LETTER AILM
+1691;N # OGHAM LETTER ONN
+1692;N # OGHAM LETTER UR
+1693;N # OGHAM LETTER EADHADH
+1694;N # OGHAM LETTER IODHADH
+1695;N # OGHAM LETTER EABHADH
+1696;N # OGHAM LETTER OR
+1697;N # OGHAM LETTER UILLEANN
+1698;N # OGHAM LETTER IFIN
+1699;N # OGHAM LETTER EAMHANCHOLL
+169A;N # OGHAM LETTER PEITH
+169B;N # OGHAM FEATHER MARK
+169C;N # OGHAM REVERSED FEATHER MARK
+16A0;N # RUNIC LETTER FEHU FEOH FE F
+16A1;N # RUNIC LETTER V
+16A2;N # RUNIC LETTER URUZ UR U
+16A3;N # RUNIC LETTER YR
+16A4;N # RUNIC LETTER Y
+16A5;N # RUNIC LETTER W
+16A6;N # RUNIC LETTER THURISAZ THURS THORN
+16A7;N # RUNIC LETTER ETH
+16A8;N # RUNIC LETTER ANSUZ A
+16A9;N # RUNIC LETTER OS O
+16AA;N # RUNIC LETTER AC A
+16AB;N # RUNIC LETTER AESC
+16AC;N # RUNIC LETTER LONG-BRANCH-OSS O
+16AD;N # RUNIC LETTER SHORT-TWIG-OSS O
+16AE;N # RUNIC LETTER O
+16AF;N # RUNIC LETTER OE
+16B0;N # RUNIC LETTER ON
+16B1;N # RUNIC LETTER RAIDO RAD REID R
+16B2;N # RUNIC LETTER KAUNA
+16B3;N # RUNIC LETTER CEN
+16B4;N # RUNIC LETTER KAUN K
+16B5;N # RUNIC LETTER G
+16B6;N # RUNIC LETTER ENG
+16B7;N # RUNIC LETTER GEBO GYFU G
+16B8;N # RUNIC LETTER GAR
+16B9;N # RUNIC LETTER WUNJO WYNN W
+16BA;N # RUNIC LETTER HAGLAZ H
+16BB;N # RUNIC LETTER HAEGL H
+16BC;N # RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD;N # RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE;N # RUNIC LETTER NAUDIZ NYD NAUD N
+16BF;N # RUNIC LETTER SHORT-TWIG-NAUD N
+16C0;N # RUNIC LETTER DOTTED-N
+16C1;N # RUNIC LETTER ISAZ IS ISS I
+16C2;N # RUNIC LETTER E
+16C3;N # RUNIC LETTER JERAN J
+16C4;N # RUNIC LETTER GER
+16C5;N # RUNIC LETTER LONG-BRANCH-AR AE
+16C6;N # RUNIC LETTER SHORT-TWIG-AR A
+16C7;N # RUNIC LETTER IWAZ EOH
+16C8;N # RUNIC LETTER PERTHO PEORTH P
+16C9;N # RUNIC LETTER ALGIZ EOLHX
+16CA;N # RUNIC LETTER SOWILO S
+16CB;N # RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC;N # RUNIC LETTER SHORT-TWIG-SOL S
+16CD;N # RUNIC LETTER C
+16CE;N # RUNIC LETTER Z
+16CF;N # RUNIC LETTER TIWAZ TIR TYR T
+16D0;N # RUNIC LETTER SHORT-TWIG-TYR T
+16D1;N # RUNIC LETTER D
+16D2;N # RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3;N # RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4;N # RUNIC LETTER DOTTED-P
+16D5;N # RUNIC LETTER OPEN-P
+16D6;N # RUNIC LETTER EHWAZ EH E
+16D7;N # RUNIC LETTER MANNAZ MAN M
+16D8;N # RUNIC LETTER LONG-BRANCH-MADR M
+16D9;N # RUNIC LETTER SHORT-TWIG-MADR M
+16DA;N # RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB;N # RUNIC LETTER DOTTED-L
+16DC;N # RUNIC LETTER INGWAZ
+16DD;N # RUNIC LETTER ING
+16DE;N # RUNIC LETTER DAGAZ DAEG D
+16DF;N # RUNIC LETTER OTHALAN ETHEL O
+16E0;N # RUNIC LETTER EAR
+16E1;N # RUNIC LETTER IOR
+16E2;N # RUNIC LETTER CWEORTH
+16E3;N # RUNIC LETTER CALC
+16E4;N # RUNIC LETTER CEALC
+16E5;N # RUNIC LETTER STAN
+16E6;N # RUNIC LETTER LONG-BRANCH-YR
+16E7;N # RUNIC LETTER SHORT-TWIG-YR
+16E8;N # RUNIC LETTER ICELANDIC-YR
+16E9;N # RUNIC LETTER Q
+16EA;N # RUNIC LETTER X
+16EB;N # RUNIC SINGLE PUNCTUATION
+16EC;N # RUNIC MULTIPLE PUNCTUATION
+16ED;N # RUNIC CROSS PUNCTUATION
+16EE;N # RUNIC ARLAUG SYMBOL
+16EF;N # RUNIC TVIMADUR SYMBOL
+16F0;N # RUNIC BELGTHOR SYMBOL
+1700;N # TAGALOG LETTER A
+1701;N # TAGALOG LETTER I
+1702;N # TAGALOG LETTER U
+1703;N # TAGALOG LETTER KA
+1704;N # TAGALOG LETTER GA
+1705;N # TAGALOG LETTER NGA
+1706;N # TAGALOG LETTER TA
+1707;N # TAGALOG LETTER DA
+1708;N # TAGALOG LETTER NA
+1709;N # TAGALOG LETTER PA
+170A;N # TAGALOG LETTER BA
+170B;N # TAGALOG LETTER MA
+170C;N # TAGALOG LETTER YA
+170E;N # TAGALOG LETTER LA
+170F;N # TAGALOG LETTER WA
+1710;N # TAGALOG LETTER SA
+1711;N # TAGALOG LETTER HA
+1712;N # TAGALOG VOWEL SIGN I
+1713;N # TAGALOG VOWEL SIGN U
+1714;N # TAGALOG SIGN VIRAMA
+1720;N # HANUNOO LETTER A
+1721;N # HANUNOO LETTER I
+1722;N # HANUNOO LETTER U
+1723;N # HANUNOO LETTER KA
+1724;N # HANUNOO LETTER GA
+1725;N # HANUNOO LETTER NGA
+1726;N # HANUNOO LETTER TA
+1727;N # HANUNOO LETTER DA
+1728;N # HANUNOO LETTER NA
+1729;N # HANUNOO LETTER PA
+172A;N # HANUNOO LETTER BA
+172B;N # HANUNOO LETTER MA
+172C;N # HANUNOO LETTER YA
+172D;N # HANUNOO LETTER RA
+172E;N # HANUNOO LETTER LA
+172F;N # HANUNOO LETTER WA
+1730;N # HANUNOO LETTER SA
+1731;N # HANUNOO LETTER HA
+1732;N # HANUNOO VOWEL SIGN I
+1733;N # HANUNOO VOWEL SIGN U
+1734;N # HANUNOO SIGN PAMUDPOD
+1735;N # PHILIPPINE SINGLE PUNCTUATION
+1736;N # PHILIPPINE DOUBLE PUNCTUATION
+1740;N # BUHID LETTER A
+1741;N # BUHID LETTER I
+1742;N # BUHID LETTER U
+1743;N # BUHID LETTER KA
+1744;N # BUHID LETTER GA
+1745;N # BUHID LETTER NGA
+1746;N # BUHID LETTER TA
+1747;N # BUHID LETTER DA
+1748;N # BUHID LETTER NA
+1749;N # BUHID LETTER PA
+174A;N # BUHID LETTER BA
+174B;N # BUHID LETTER MA
+174C;N # BUHID LETTER YA
+174D;N # BUHID LETTER RA
+174E;N # BUHID LETTER LA
+174F;N # BUHID LETTER WA
+1750;N # BUHID LETTER SA
+1751;N # BUHID LETTER HA
+1752;N # BUHID VOWEL SIGN I
+1753;N # BUHID VOWEL SIGN U
+1760;N # TAGBANWA LETTER A
+1761;N # TAGBANWA LETTER I
+1762;N # TAGBANWA LETTER U
+1763;N # TAGBANWA LETTER KA
+1764;N # TAGBANWA LETTER GA
+1765;N # TAGBANWA LETTER NGA
+1766;N # TAGBANWA LETTER TA
+1767;N # TAGBANWA LETTER DA
+1768;N # TAGBANWA LETTER NA
+1769;N # TAGBANWA LETTER PA
+176A;N # TAGBANWA LETTER BA
+176B;N # TAGBANWA LETTER MA
+176C;N # TAGBANWA LETTER YA
+176E;N # TAGBANWA LETTER LA
+176F;N # TAGBANWA LETTER WA
+1770;N # TAGBANWA LETTER SA
+1772;N # TAGBANWA VOWEL SIGN I
+1773;N # TAGBANWA VOWEL SIGN U
+1780;N # KHMER LETTER KA
+1781;N # KHMER LETTER KHA
+1782;N # KHMER LETTER KO
+1783;N # KHMER LETTER KHO
+1784;N # KHMER LETTER NGO
+1785;N # KHMER LETTER CA
+1786;N # KHMER LETTER CHA
+1787;N # KHMER LETTER CO
+1788;N # KHMER LETTER CHO
+1789;N # KHMER LETTER NYO
+178A;N # KHMER LETTER DA
+178B;N # KHMER LETTER TTHA
+178C;N # KHMER LETTER DO
+178D;N # KHMER LETTER TTHO
+178E;N # KHMER LETTER NNO
+178F;N # KHMER LETTER TA
+1790;N # KHMER LETTER THA
+1791;N # KHMER LETTER TO
+1792;N # KHMER LETTER THO
+1793;N # KHMER LETTER NO
+1794;N # KHMER LETTER BA
+1795;N # KHMER LETTER PHA
+1796;N # KHMER LETTER PO
+1797;N # KHMER LETTER PHO
+1798;N # KHMER LETTER MO
+1799;N # KHMER LETTER YO
+179A;N # KHMER LETTER RO
+179B;N # KHMER LETTER LO
+179C;N # KHMER LETTER VO
+179D;N # KHMER LETTER SHA
+179E;N # KHMER LETTER SSO
+179F;N # KHMER LETTER SA
+17A0;N # KHMER LETTER HA
+17A1;N # KHMER LETTER LA
+17A2;N # KHMER LETTER QA
+17A3;N # KHMER INDEPENDENT VOWEL QAQ
+17A4;N # KHMER INDEPENDENT VOWEL QAA
+17A5;N # KHMER INDEPENDENT VOWEL QI
+17A6;N # KHMER INDEPENDENT VOWEL QII
+17A7;N # KHMER INDEPENDENT VOWEL QU
+17A8;N # KHMER INDEPENDENT VOWEL QUK
+17A9;N # KHMER INDEPENDENT VOWEL QUU
+17AA;N # KHMER INDEPENDENT VOWEL QUUV
+17AB;N # KHMER INDEPENDENT VOWEL RY
+17AC;N # KHMER INDEPENDENT VOWEL RYY
+17AD;N # KHMER INDEPENDENT VOWEL LY
+17AE;N # KHMER INDEPENDENT VOWEL LYY
+17AF;N # KHMER INDEPENDENT VOWEL QE
+17B0;N # KHMER INDEPENDENT VOWEL QAI
+17B1;N # KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2;N # KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3;N # KHMER INDEPENDENT VOWEL QAU
+17B4;N # KHMER VOWEL INHERENT AQ
+17B5;N # KHMER VOWEL INHERENT AA
+17B6;N # KHMER VOWEL SIGN AA
+17B7;N # KHMER VOWEL SIGN I
+17B8;N # KHMER VOWEL SIGN II
+17B9;N # KHMER VOWEL SIGN Y
+17BA;N # KHMER VOWEL SIGN YY
+17BB;N # KHMER VOWEL SIGN U
+17BC;N # KHMER VOWEL SIGN UU
+17BD;N # KHMER VOWEL SIGN UA
+17BE;N # KHMER VOWEL SIGN OE
+17BF;N # KHMER VOWEL SIGN YA
+17C0;N # KHMER VOWEL SIGN IE
+17C1;N # KHMER VOWEL SIGN E
+17C2;N # KHMER VOWEL SIGN AE
+17C3;N # KHMER VOWEL SIGN AI
+17C4;N # KHMER VOWEL SIGN OO
+17C5;N # KHMER VOWEL SIGN AU
+17C6;N # KHMER SIGN NIKAHIT
+17C7;N # KHMER SIGN REAHMUK
+17C8;N # KHMER SIGN YUUKALEAPINTU
+17C9;N # KHMER SIGN MUUSIKATOAN
+17CA;N # KHMER SIGN TRIISAP
+17CB;N # KHMER SIGN BANTOC
+17CC;N # KHMER SIGN ROBAT
+17CD;N # KHMER SIGN TOANDAKHIAT
+17CE;N # KHMER SIGN KAKABAT
+17CF;N # KHMER SIGN AHSDA
+17D0;N # KHMER SIGN SAMYOK SANNYA
+17D1;N # KHMER SIGN VIRIAM
+17D2;N # KHMER SIGN COENG
+17D3;N # KHMER SIGN BATHAMASAT
+17D4;N # KHMER SIGN KHAN
+17D5;N # KHMER SIGN BARIYOOSAN
+17D6;N # KHMER SIGN CAMNUC PII KUUH
+17D7;N # KHMER SIGN LEK TOO
+17D8;N # KHMER SIGN BEYYAL
+17D9;N # KHMER SIGN PHNAEK MUAN
+17DA;N # KHMER SIGN KOOMUUT
+17DB;N # KHMER CURRENCY SYMBOL RIEL
+17DC;N # KHMER SIGN AVAKRAHASANYA
+17DD;N # KHMER SIGN ATTHACAN
+17E0;N # KHMER DIGIT ZERO
+17E1;N # KHMER DIGIT ONE
+17E2;N # KHMER DIGIT TWO
+17E3;N # KHMER DIGIT THREE
+17E4;N # KHMER DIGIT FOUR
+17E5;N # KHMER DIGIT FIVE
+17E6;N # KHMER DIGIT SIX
+17E7;N # KHMER DIGIT SEVEN
+17E8;N # KHMER DIGIT EIGHT
+17E9;N # KHMER DIGIT NINE
+17F0;N # KHMER SYMBOL LEK ATTAK SON
+17F1;N # KHMER SYMBOL LEK ATTAK MUOY
+17F2;N # KHMER SYMBOL LEK ATTAK PII
+17F3;N # KHMER SYMBOL LEK ATTAK BEI
+17F4;N # KHMER SYMBOL LEK ATTAK BUON
+17F5;N # KHMER SYMBOL LEK ATTAK PRAM
+17F6;N # KHMER SYMBOL LEK ATTAK PRAM-MUOY
+17F7;N # KHMER SYMBOL LEK ATTAK PRAM-PII
+17F8;N # KHMER SYMBOL LEK ATTAK PRAM-BEI
+17F9;N # KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800;N # MONGOLIAN BIRGA
+1801;N # MONGOLIAN ELLIPSIS
+1802;N # MONGOLIAN COMMA
+1803;N # MONGOLIAN FULL STOP
+1804;N # MONGOLIAN COLON
+1805;N # MONGOLIAN FOUR DOTS
+1806;N # MONGOLIAN TODO SOFT HYPHEN
+1807;N # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808;N # MONGOLIAN MANCHU COMMA
+1809;N # MONGOLIAN MANCHU FULL STOP
+180A;N # MONGOLIAN NIRUGU
+180B;N # MONGOLIAN FREE VARIATION SELECTOR ONE
+180C;N # MONGOLIAN FREE VARIATION SELECTOR TWO
+180D;N # MONGOLIAN FREE VARIATION SELECTOR THREE
+180E;N # MONGOLIAN VOWEL SEPARATOR
+1810;N # MONGOLIAN DIGIT ZERO
+1811;N # MONGOLIAN DIGIT ONE
+1812;N # MONGOLIAN DIGIT TWO
+1813;N # MONGOLIAN DIGIT THREE
+1814;N # MONGOLIAN DIGIT FOUR
+1815;N # MONGOLIAN DIGIT FIVE
+1816;N # MONGOLIAN DIGIT SIX
+1817;N # MONGOLIAN DIGIT SEVEN
+1818;N # MONGOLIAN DIGIT EIGHT
+1819;N # MONGOLIAN DIGIT NINE
+1820;N # MONGOLIAN LETTER A
+1821;N # MONGOLIAN LETTER E
+1822;N # MONGOLIAN LETTER I
+1823;N # MONGOLIAN LETTER O
+1824;N # MONGOLIAN LETTER U
+1825;N # MONGOLIAN LETTER OE
+1826;N # MONGOLIAN LETTER UE
+1827;N # MONGOLIAN LETTER EE
+1828;N # MONGOLIAN LETTER NA
+1829;N # MONGOLIAN LETTER ANG
+182A;N # MONGOLIAN LETTER BA
+182B;N # MONGOLIAN LETTER PA
+182C;N # MONGOLIAN LETTER QA
+182D;N # MONGOLIAN LETTER GA
+182E;N # MONGOLIAN LETTER MA
+182F;N # MONGOLIAN LETTER LA
+1830;N # MONGOLIAN LETTER SA
+1831;N # MONGOLIAN LETTER SHA
+1832;N # MONGOLIAN LETTER TA
+1833;N # MONGOLIAN LETTER DA
+1834;N # MONGOLIAN LETTER CHA
+1835;N # MONGOLIAN LETTER JA
+1836;N # MONGOLIAN LETTER YA
+1837;N # MONGOLIAN LETTER RA
+1838;N # MONGOLIAN LETTER WA
+1839;N # MONGOLIAN LETTER FA
+183A;N # MONGOLIAN LETTER KA
+183B;N # MONGOLIAN LETTER KHA
+183C;N # MONGOLIAN LETTER TSA
+183D;N # MONGOLIAN LETTER ZA
+183E;N # MONGOLIAN LETTER HAA
+183F;N # MONGOLIAN LETTER ZRA
+1840;N # MONGOLIAN LETTER LHA
+1841;N # MONGOLIAN LETTER ZHI
+1842;N # MONGOLIAN LETTER CHI
+1843;N # MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844;N # MONGOLIAN LETTER TODO E
+1845;N # MONGOLIAN LETTER TODO I
+1846;N # MONGOLIAN LETTER TODO O
+1847;N # MONGOLIAN LETTER TODO U
+1848;N # MONGOLIAN LETTER TODO OE
+1849;N # MONGOLIAN LETTER TODO UE
+184A;N # MONGOLIAN LETTER TODO ANG
+184B;N # MONGOLIAN LETTER TODO BA
+184C;N # MONGOLIAN LETTER TODO PA
+184D;N # MONGOLIAN LETTER TODO QA
+184E;N # MONGOLIAN LETTER TODO GA
+184F;N # MONGOLIAN LETTER TODO MA
+1850;N # MONGOLIAN LETTER TODO TA
+1851;N # MONGOLIAN LETTER TODO DA
+1852;N # MONGOLIAN LETTER TODO CHA
+1853;N # MONGOLIAN LETTER TODO JA
+1854;N # MONGOLIAN LETTER TODO TSA
+1855;N # MONGOLIAN LETTER TODO YA
+1856;N # MONGOLIAN LETTER TODO WA
+1857;N # MONGOLIAN LETTER TODO KA
+1858;N # MONGOLIAN LETTER TODO GAA
+1859;N # MONGOLIAN LETTER TODO HAA
+185A;N # MONGOLIAN LETTER TODO JIA
+185B;N # MONGOLIAN LETTER TODO NIA
+185C;N # MONGOLIAN LETTER TODO DZA
+185D;N # MONGOLIAN LETTER SIBE E
+185E;N # MONGOLIAN LETTER SIBE I
+185F;N # MONGOLIAN LETTER SIBE IY
+1860;N # MONGOLIAN LETTER SIBE UE
+1861;N # MONGOLIAN LETTER SIBE U
+1862;N # MONGOLIAN LETTER SIBE ANG
+1863;N # MONGOLIAN LETTER SIBE KA
+1864;N # MONGOLIAN LETTER SIBE GA
+1865;N # MONGOLIAN LETTER SIBE HA
+1866;N # MONGOLIAN LETTER SIBE PA
+1867;N # MONGOLIAN LETTER SIBE SHA
+1868;N # MONGOLIAN LETTER SIBE TA
+1869;N # MONGOLIAN LETTER SIBE DA
+186A;N # MONGOLIAN LETTER SIBE JA
+186B;N # MONGOLIAN LETTER SIBE FA
+186C;N # MONGOLIAN LETTER SIBE GAA
+186D;N # MONGOLIAN LETTER SIBE HAA
+186E;N # MONGOLIAN LETTER SIBE TSA
+186F;N # MONGOLIAN LETTER SIBE ZA
+1870;N # MONGOLIAN LETTER SIBE RAA
+1871;N # MONGOLIAN LETTER SIBE CHA
+1872;N # MONGOLIAN LETTER SIBE ZHA
+1873;N # MONGOLIAN LETTER MANCHU I
+1874;N # MONGOLIAN LETTER MANCHU KA
+1875;N # MONGOLIAN LETTER MANCHU RA
+1876;N # MONGOLIAN LETTER MANCHU FA
+1877;N # MONGOLIAN LETTER MANCHU ZHA
+1880;N # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881;N # MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882;N # MONGOLIAN LETTER ALI GALI DAMARU
+1883;N # MONGOLIAN LETTER ALI GALI UBADAMA
+1884;N # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885;N # MONGOLIAN LETTER ALI GALI BALUDA
+1886;N # MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887;N # MONGOLIAN LETTER ALI GALI A
+1888;N # MONGOLIAN LETTER ALI GALI I
+1889;N # MONGOLIAN LETTER ALI GALI KA
+188A;N # MONGOLIAN LETTER ALI GALI NGA
+188B;N # MONGOLIAN LETTER ALI GALI CA
+188C;N # MONGOLIAN LETTER ALI GALI TTA
+188D;N # MONGOLIAN LETTER ALI GALI TTHA
+188E;N # MONGOLIAN LETTER ALI GALI DDA
+188F;N # MONGOLIAN LETTER ALI GALI NNA
+1890;N # MONGOLIAN LETTER ALI GALI TA
+1891;N # MONGOLIAN LETTER ALI GALI DA
+1892;N # MONGOLIAN LETTER ALI GALI PA
+1893;N # MONGOLIAN LETTER ALI GALI PHA
+1894;N # MONGOLIAN LETTER ALI GALI SSA
+1895;N # MONGOLIAN LETTER ALI GALI ZHA
+1896;N # MONGOLIAN LETTER ALI GALI ZA
+1897;N # MONGOLIAN LETTER ALI GALI AH
+1898;N # MONGOLIAN LETTER TODO ALI GALI TA
+1899;N # MONGOLIAN LETTER TODO ALI GALI ZHA
+189A;N # MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B;N # MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C;N # MONGOLIAN LETTER MANCHU ALI GALI CA
+189D;N # MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E;N # MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F;N # MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0;N # MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1;N # MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2;N # MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3;N # MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4;N # MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5;N # MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6;N # MONGOLIAN LETTER ALI GALI HALF U
+18A7;N # MONGOLIAN LETTER ALI GALI HALF YA
+18A8;N # MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9;N # MONGOLIAN LETTER ALI GALI DAGALGA
+18AA;N # MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0;N # CANADIAN SYLLABICS OY
+18B1;N # CANADIAN SYLLABICS AY
+18B2;N # CANADIAN SYLLABICS AAY
+18B3;N # CANADIAN SYLLABICS WAY
+18B4;N # CANADIAN SYLLABICS POY
+18B5;N # CANADIAN SYLLABICS PAY
+18B6;N # CANADIAN SYLLABICS PWOY
+18B7;N # CANADIAN SYLLABICS TAY
+18B8;N # CANADIAN SYLLABICS KAY
+18B9;N # CANADIAN SYLLABICS KWAY
+18BA;N # CANADIAN SYLLABICS MAY
+18BB;N # CANADIAN SYLLABICS NOY
+18BC;N # CANADIAN SYLLABICS NAY
+18BD;N # CANADIAN SYLLABICS LAY
+18BE;N # CANADIAN SYLLABICS SOY
+18BF;N # CANADIAN SYLLABICS SAY
+18C0;N # CANADIAN SYLLABICS SHOY
+18C1;N # CANADIAN SYLLABICS SHAY
+18C2;N # CANADIAN SYLLABICS SHWOY
+18C3;N # CANADIAN SYLLABICS YOY
+18C4;N # CANADIAN SYLLABICS YAY
+18C5;N # CANADIAN SYLLABICS RAY
+18C6;N # CANADIAN SYLLABICS NWI
+18C7;N # CANADIAN SYLLABICS OJIBWAY NWI
+18C8;N # CANADIAN SYLLABICS NWII
+18C9;N # CANADIAN SYLLABICS OJIBWAY NWII
+18CA;N # CANADIAN SYLLABICS NWO
+18CB;N # CANADIAN SYLLABICS OJIBWAY NWO
+18CC;N # CANADIAN SYLLABICS NWOO
+18CD;N # CANADIAN SYLLABICS OJIBWAY NWOO
+18CE;N # CANADIAN SYLLABICS RWEE
+18CF;N # CANADIAN SYLLABICS RWI
+18D0;N # CANADIAN SYLLABICS RWII
+18D1;N # CANADIAN SYLLABICS RWO
+18D2;N # CANADIAN SYLLABICS RWOO
+18D3;N # CANADIAN SYLLABICS RWA
+18D4;N # CANADIAN SYLLABICS OJIBWAY P
+18D5;N # CANADIAN SYLLABICS OJIBWAY T
+18D6;N # CANADIAN SYLLABICS OJIBWAY K
+18D7;N # CANADIAN SYLLABICS OJIBWAY C
+18D8;N # CANADIAN SYLLABICS OJIBWAY M
+18D9;N # CANADIAN SYLLABICS OJIBWAY N
+18DA;N # CANADIAN SYLLABICS OJIBWAY S
+18DB;N # CANADIAN SYLLABICS OJIBWAY SH
+18DC;N # CANADIAN SYLLABICS EASTERN W
+18DD;N # CANADIAN SYLLABICS WESTERN W
+18DE;N # CANADIAN SYLLABICS FINAL SMALL RING
+18DF;N # CANADIAN SYLLABICS FINAL RAISED DOT
+18E0;N # CANADIAN SYLLABICS R-CREE RWE
+18E1;N # CANADIAN SYLLABICS WEST-CREE LOO
+18E2;N # CANADIAN SYLLABICS WEST-CREE LAA
+18E3;N # CANADIAN SYLLABICS THWE
+18E4;N # CANADIAN SYLLABICS THWA
+18E5;N # CANADIAN SYLLABICS TTHWE
+18E6;N # CANADIAN SYLLABICS TTHOO
+18E7;N # CANADIAN SYLLABICS TTHAA
+18E8;N # CANADIAN SYLLABICS TLHWE
+18E9;N # CANADIAN SYLLABICS TLHOO
+18EA;N # CANADIAN SYLLABICS SAYISI SHWE
+18EB;N # CANADIAN SYLLABICS SAYISI SHOO
+18EC;N # CANADIAN SYLLABICS SAYISI HOO
+18ED;N # CANADIAN SYLLABICS CARRIER GWU
+18EE;N # CANADIAN SYLLABICS CARRIER DENE GEE
+18EF;N # CANADIAN SYLLABICS CARRIER GAA
+18F0;N # CANADIAN SYLLABICS CARRIER GWA
+18F1;N # CANADIAN SYLLABICS SAYISI JUU
+18F2;N # CANADIAN SYLLABICS CARRIER JWA
+18F3;N # CANADIAN SYLLABICS BEAVER DENE L
+18F4;N # CANADIAN SYLLABICS BEAVER DENE R
+18F5;N # CANADIAN SYLLABICS CARRIER DENTAL S
+1900;N # LIMBU VOWEL-CARRIER LETTER
+1901;N # LIMBU LETTER KA
+1902;N # LIMBU LETTER KHA
+1903;N # LIMBU LETTER GA
+1904;N # LIMBU LETTER GHA
+1905;N # LIMBU LETTER NGA
+1906;N # LIMBU LETTER CA
+1907;N # LIMBU LETTER CHA
+1908;N # LIMBU LETTER JA
+1909;N # LIMBU LETTER JHA
+190A;N # LIMBU LETTER YAN
+190B;N # LIMBU LETTER TA
+190C;N # LIMBU LETTER THA
+190D;N # LIMBU LETTER DA
+190E;N # LIMBU LETTER DHA
+190F;N # LIMBU LETTER NA
+1910;N # LIMBU LETTER PA
+1911;N # LIMBU LETTER PHA
+1912;N # LIMBU LETTER BA
+1913;N # LIMBU LETTER BHA
+1914;N # LIMBU LETTER MA
+1915;N # LIMBU LETTER YA
+1916;N # LIMBU LETTER RA
+1917;N # LIMBU LETTER LA
+1918;N # LIMBU LETTER WA
+1919;N # LIMBU LETTER SHA
+191A;N # LIMBU LETTER SSA
+191B;N # LIMBU LETTER SA
+191C;N # LIMBU LETTER HA
+1920;N # LIMBU VOWEL SIGN A
+1921;N # LIMBU VOWEL SIGN I
+1922;N # LIMBU VOWEL SIGN U
+1923;N # LIMBU VOWEL SIGN EE
+1924;N # LIMBU VOWEL SIGN AI
+1925;N # LIMBU VOWEL SIGN OO
+1926;N # LIMBU VOWEL SIGN AU
+1927;N # LIMBU VOWEL SIGN E
+1928;N # LIMBU VOWEL SIGN O
+1929;N # LIMBU SUBJOINED LETTER YA
+192A;N # LIMBU SUBJOINED LETTER RA
+192B;N # LIMBU SUBJOINED LETTER WA
+1930;N # LIMBU SMALL LETTER KA
+1931;N # LIMBU SMALL LETTER NGA
+1932;N # LIMBU SMALL LETTER ANUSVARA
+1933;N # LIMBU SMALL LETTER TA
+1934;N # LIMBU SMALL LETTER NA
+1935;N # LIMBU SMALL LETTER PA
+1936;N # LIMBU SMALL LETTER MA
+1937;N # LIMBU SMALL LETTER RA
+1938;N # LIMBU SMALL LETTER LA
+1939;N # LIMBU SIGN MUKPHRENG
+193A;N # LIMBU SIGN KEMPHRENG
+193B;N # LIMBU SIGN SA-I
+1940;N # LIMBU SIGN LOO
+1944;N # LIMBU EXCLAMATION MARK
+1945;N # LIMBU QUESTION MARK
+1946;N # LIMBU DIGIT ZERO
+1947;N # LIMBU DIGIT ONE
+1948;N # LIMBU DIGIT TWO
+1949;N # LIMBU DIGIT THREE
+194A;N # LIMBU DIGIT FOUR
+194B;N # LIMBU DIGIT FIVE
+194C;N # LIMBU DIGIT SIX
+194D;N # LIMBU DIGIT SEVEN
+194E;N # LIMBU DIGIT EIGHT
+194F;N # LIMBU DIGIT NINE
+1950;N # TAI LE LETTER KA
+1951;N # TAI LE LETTER XA
+1952;N # TAI LE LETTER NGA
+1953;N # TAI LE LETTER TSA
+1954;N # TAI LE LETTER SA
+1955;N # TAI LE LETTER YA
+1956;N # TAI LE LETTER TA
+1957;N # TAI LE LETTER THA
+1958;N # TAI LE LETTER LA
+1959;N # TAI LE LETTER PA
+195A;N # TAI LE LETTER PHA
+195B;N # TAI LE LETTER MA
+195C;N # TAI LE LETTER FA
+195D;N # TAI LE LETTER VA
+195E;N # TAI LE LETTER HA
+195F;N # TAI LE LETTER QA
+1960;N # TAI LE LETTER KHA
+1961;N # TAI LE LETTER TSHA
+1962;N # TAI LE LETTER NA
+1963;N # TAI LE LETTER A
+1964;N # TAI LE LETTER I
+1965;N # TAI LE LETTER EE
+1966;N # TAI LE LETTER EH
+1967;N # TAI LE LETTER U
+1968;N # TAI LE LETTER OO
+1969;N # TAI LE LETTER O
+196A;N # TAI LE LETTER UE
+196B;N # TAI LE LETTER E
+196C;N # TAI LE LETTER AUE
+196D;N # TAI LE LETTER AI
+1970;N # TAI LE LETTER TONE-2
+1971;N # TAI LE LETTER TONE-3
+1972;N # TAI LE LETTER TONE-4
+1973;N # TAI LE LETTER TONE-5
+1974;N # TAI LE LETTER TONE-6
+1980;N # NEW TAI LUE LETTER HIGH QA
+1981;N # NEW TAI LUE LETTER LOW QA
+1982;N # NEW TAI LUE LETTER HIGH KA
+1983;N # NEW TAI LUE LETTER HIGH XA
+1984;N # NEW TAI LUE LETTER HIGH NGA
+1985;N # NEW TAI LUE LETTER LOW KA
+1986;N # NEW TAI LUE LETTER LOW XA
+1987;N # NEW TAI LUE LETTER LOW NGA
+1988;N # NEW TAI LUE LETTER HIGH TSA
+1989;N # NEW TAI LUE LETTER HIGH SA
+198A;N # NEW TAI LUE LETTER HIGH YA
+198B;N # NEW TAI LUE LETTER LOW TSA
+198C;N # NEW TAI LUE LETTER LOW SA
+198D;N # NEW TAI LUE LETTER LOW YA
+198E;N # NEW TAI LUE LETTER HIGH TA
+198F;N # NEW TAI LUE LETTER HIGH THA
+1990;N # NEW TAI LUE LETTER HIGH NA
+1991;N # NEW TAI LUE LETTER LOW TA
+1992;N # NEW TAI LUE LETTER LOW THA
+1993;N # NEW TAI LUE LETTER LOW NA
+1994;N # NEW TAI LUE LETTER HIGH PA
+1995;N # NEW TAI LUE LETTER HIGH PHA
+1996;N # NEW TAI LUE LETTER HIGH MA
+1997;N # NEW TAI LUE LETTER LOW PA
+1998;N # NEW TAI LUE LETTER LOW PHA
+1999;N # NEW TAI LUE LETTER LOW MA
+199A;N # NEW TAI LUE LETTER HIGH FA
+199B;N # NEW TAI LUE LETTER HIGH VA
+199C;N # NEW TAI LUE LETTER HIGH LA
+199D;N # NEW TAI LUE LETTER LOW FA
+199E;N # NEW TAI LUE LETTER LOW VA
+199F;N # NEW TAI LUE LETTER LOW LA
+19A0;N # NEW TAI LUE LETTER HIGH HA
+19A1;N # NEW TAI LUE LETTER HIGH DA
+19A2;N # NEW TAI LUE LETTER HIGH BA
+19A3;N # NEW TAI LUE LETTER LOW HA
+19A4;N # NEW TAI LUE LETTER LOW DA
+19A5;N # NEW TAI LUE LETTER LOW BA
+19A6;N # NEW TAI LUE LETTER HIGH KVA
+19A7;N # NEW TAI LUE LETTER HIGH XVA
+19A8;N # NEW TAI LUE LETTER LOW KVA
+19A9;N # NEW TAI LUE LETTER LOW XVA
+19AA;N # NEW TAI LUE LETTER HIGH SUA
+19AB;N # NEW TAI LUE LETTER LOW SUA
+19B0;N # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1;N # NEW TAI LUE VOWEL SIGN AA
+19B2;N # NEW TAI LUE VOWEL SIGN II
+19B3;N # NEW TAI LUE VOWEL SIGN U
+19B4;N # NEW TAI LUE VOWEL SIGN UU
+19B5;N # NEW TAI LUE VOWEL SIGN E
+19B6;N # NEW TAI LUE VOWEL SIGN AE
+19B7;N # NEW TAI LUE VOWEL SIGN O
+19B8;N # NEW TAI LUE VOWEL SIGN OA
+19B9;N # NEW TAI LUE VOWEL SIGN UE
+19BA;N # NEW TAI LUE VOWEL SIGN AY
+19BB;N # NEW TAI LUE VOWEL SIGN AAY
+19BC;N # NEW TAI LUE VOWEL SIGN UY
+19BD;N # NEW TAI LUE VOWEL SIGN OY
+19BE;N # NEW TAI LUE VOWEL SIGN OAY
+19BF;N # NEW TAI LUE VOWEL SIGN UEY
+19C0;N # NEW TAI LUE VOWEL SIGN IY
+19C1;N # NEW TAI LUE LETTER FINAL V
+19C2;N # NEW TAI LUE LETTER FINAL NG
+19C3;N # NEW TAI LUE LETTER FINAL N
+19C4;N # NEW TAI LUE LETTER FINAL M
+19C5;N # NEW TAI LUE LETTER FINAL K
+19C6;N # NEW TAI LUE LETTER FINAL D
+19C7;N # NEW TAI LUE LETTER FINAL B
+19C8;N # NEW TAI LUE TONE MARK-1
+19C9;N # NEW TAI LUE TONE MARK-2
+19D0;N # NEW TAI LUE DIGIT ZERO
+19D1;N # NEW TAI LUE DIGIT ONE
+19D2;N # NEW TAI LUE DIGIT TWO
+19D3;N # NEW TAI LUE DIGIT THREE
+19D4;N # NEW TAI LUE DIGIT FOUR
+19D5;N # NEW TAI LUE DIGIT FIVE
+19D6;N # NEW TAI LUE DIGIT SIX
+19D7;N # NEW TAI LUE DIGIT SEVEN
+19D8;N # NEW TAI LUE DIGIT EIGHT
+19D9;N # NEW TAI LUE DIGIT NINE
+19DA;N # NEW TAI LUE THAM DIGIT ONE
+19DE;N # NEW TAI LUE SIGN LAE
+19DF;N # NEW TAI LUE SIGN LAEV
+19E0;N # KHMER SYMBOL PATHAMASAT
+19E1;N # KHMER SYMBOL MUOY KOET
+19E2;N # KHMER SYMBOL PII KOET
+19E3;N # KHMER SYMBOL BEI KOET
+19E4;N # KHMER SYMBOL BUON KOET
+19E5;N # KHMER SYMBOL PRAM KOET
+19E6;N # KHMER SYMBOL PRAM-MUOY KOET
+19E7;N # KHMER SYMBOL PRAM-PII KOET
+19E8;N # KHMER SYMBOL PRAM-BEI KOET
+19E9;N # KHMER SYMBOL PRAM-BUON KOET
+19EA;N # KHMER SYMBOL DAP KOET
+19EB;N # KHMER SYMBOL DAP-MUOY KOET
+19EC;N # KHMER SYMBOL DAP-PII KOET
+19ED;N # KHMER SYMBOL DAP-BEI KOET
+19EE;N # KHMER SYMBOL DAP-BUON KOET
+19EF;N # KHMER SYMBOL DAP-PRAM KOET
+19F0;N # KHMER SYMBOL TUTEYASAT
+19F1;N # KHMER SYMBOL MUOY ROC
+19F2;N # KHMER SYMBOL PII ROC
+19F3;N # KHMER SYMBOL BEI ROC
+19F4;N # KHMER SYMBOL BUON ROC
+19F5;N # KHMER SYMBOL PRAM ROC
+19F6;N # KHMER SYMBOL PRAM-MUOY ROC
+19F7;N # KHMER SYMBOL PRAM-PII ROC
+19F8;N # KHMER SYMBOL PRAM-BEI ROC
+19F9;N # KHMER SYMBOL PRAM-BUON ROC
+19FA;N # KHMER SYMBOL DAP ROC
+19FB;N # KHMER SYMBOL DAP-MUOY ROC
+19FC;N # KHMER SYMBOL DAP-PII ROC
+19FD;N # KHMER SYMBOL DAP-BEI ROC
+19FE;N # KHMER SYMBOL DAP-BUON ROC
+19FF;N # KHMER SYMBOL DAP-PRAM ROC
+1A00;N # BUGINESE LETTER KA
+1A01;N # BUGINESE LETTER GA
+1A02;N # BUGINESE LETTER NGA
+1A03;N # BUGINESE LETTER NGKA
+1A04;N # BUGINESE LETTER PA
+1A05;N # BUGINESE LETTER BA
+1A06;N # BUGINESE LETTER MA
+1A07;N # BUGINESE LETTER MPA
+1A08;N # BUGINESE LETTER TA
+1A09;N # BUGINESE LETTER DA
+1A0A;N # BUGINESE LETTER NA
+1A0B;N # BUGINESE LETTER NRA
+1A0C;N # BUGINESE LETTER CA
+1A0D;N # BUGINESE LETTER JA
+1A0E;N # BUGINESE LETTER NYA
+1A0F;N # BUGINESE LETTER NYCA
+1A10;N # BUGINESE LETTER YA
+1A11;N # BUGINESE LETTER RA
+1A12;N # BUGINESE LETTER LA
+1A13;N # BUGINESE LETTER VA
+1A14;N # BUGINESE LETTER SA
+1A15;N # BUGINESE LETTER A
+1A16;N # BUGINESE LETTER HA
+1A17;N # BUGINESE VOWEL SIGN I
+1A18;N # BUGINESE VOWEL SIGN U
+1A19;N # BUGINESE VOWEL SIGN E
+1A1A;N # BUGINESE VOWEL SIGN O
+1A1B;N # BUGINESE VOWEL SIGN AE
+1A1E;N # BUGINESE PALLAWA
+1A1F;N # BUGINESE END OF SECTION
+1A20;N # TAI THAM LETTER HIGH KA
+1A21;N # TAI THAM LETTER HIGH KHA
+1A22;N # TAI THAM LETTER HIGH KXA
+1A23;N # TAI THAM LETTER LOW KA
+1A24;N # TAI THAM LETTER LOW KXA
+1A25;N # TAI THAM LETTER LOW KHA
+1A26;N # TAI THAM LETTER NGA
+1A27;N # TAI THAM LETTER HIGH CA
+1A28;N # TAI THAM LETTER HIGH CHA
+1A29;N # TAI THAM LETTER LOW CA
+1A2A;N # TAI THAM LETTER LOW SA
+1A2B;N # TAI THAM LETTER LOW CHA
+1A2C;N # TAI THAM LETTER NYA
+1A2D;N # TAI THAM LETTER RATA
+1A2E;N # TAI THAM LETTER HIGH RATHA
+1A2F;N # TAI THAM LETTER DA
+1A30;N # TAI THAM LETTER LOW RATHA
+1A31;N # TAI THAM LETTER RANA
+1A32;N # TAI THAM LETTER HIGH TA
+1A33;N # TAI THAM LETTER HIGH THA
+1A34;N # TAI THAM LETTER LOW TA
+1A35;N # TAI THAM LETTER LOW THA
+1A36;N # TAI THAM LETTER NA
+1A37;N # TAI THAM LETTER BA
+1A38;N # TAI THAM LETTER HIGH PA
+1A39;N # TAI THAM LETTER HIGH PHA
+1A3A;N # TAI THAM LETTER HIGH FA
+1A3B;N # TAI THAM LETTER LOW PA
+1A3C;N # TAI THAM LETTER LOW FA
+1A3D;N # TAI THAM LETTER LOW PHA
+1A3E;N # TAI THAM LETTER MA
+1A3F;N # TAI THAM LETTER LOW YA
+1A40;N # TAI THAM LETTER HIGH YA
+1A41;N # TAI THAM LETTER RA
+1A42;N # TAI THAM LETTER RUE
+1A43;N # TAI THAM LETTER LA
+1A44;N # TAI THAM LETTER LUE
+1A45;N # TAI THAM LETTER WA
+1A46;N # TAI THAM LETTER HIGH SHA
+1A47;N # TAI THAM LETTER HIGH SSA
+1A48;N # TAI THAM LETTER HIGH SA
+1A49;N # TAI THAM LETTER HIGH HA
+1A4A;N # TAI THAM LETTER LLA
+1A4B;N # TAI THAM LETTER A
+1A4C;N # TAI THAM LETTER LOW HA
+1A4D;N # TAI THAM LETTER I
+1A4E;N # TAI THAM LETTER II
+1A4F;N # TAI THAM LETTER U
+1A50;N # TAI THAM LETTER UU
+1A51;N # TAI THAM LETTER EE
+1A52;N # TAI THAM LETTER OO
+1A53;N # TAI THAM LETTER LAE
+1A54;N # TAI THAM LETTER GREAT SA
+1A55;N # TAI THAM CONSONANT SIGN MEDIAL RA
+1A56;N # TAI THAM CONSONANT SIGN MEDIAL LA
+1A57;N # TAI THAM CONSONANT SIGN LA TANG LAI
+1A58;N # TAI THAM SIGN MAI KANG LAI
+1A59;N # TAI THAM CONSONANT SIGN FINAL NGA
+1A5A;N # TAI THAM CONSONANT SIGN LOW PA
+1A5B;N # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
+1A5C;N # TAI THAM CONSONANT SIGN MA
+1A5D;N # TAI THAM CONSONANT SIGN BA
+1A5E;N # TAI THAM CONSONANT SIGN SA
+1A60;N # TAI THAM SIGN SAKOT
+1A61;N # TAI THAM VOWEL SIGN A
+1A62;N # TAI THAM VOWEL SIGN MAI SAT
+1A63;N # TAI THAM VOWEL SIGN AA
+1A64;N # TAI THAM VOWEL SIGN TALL AA
+1A65;N # TAI THAM VOWEL SIGN I
+1A66;N # TAI THAM VOWEL SIGN II
+1A67;N # TAI THAM VOWEL SIGN UE
+1A68;N # TAI THAM VOWEL SIGN UUE
+1A69;N # TAI THAM VOWEL SIGN U
+1A6A;N # TAI THAM VOWEL SIGN UU
+1A6B;N # TAI THAM VOWEL SIGN O
+1A6C;N # TAI THAM VOWEL SIGN OA BELOW
+1A6D;N # TAI THAM VOWEL SIGN OY
+1A6E;N # TAI THAM VOWEL SIGN E
+1A6F;N # TAI THAM VOWEL SIGN AE
+1A70;N # TAI THAM VOWEL SIGN OO
+1A71;N # TAI THAM VOWEL SIGN AI
+1A72;N # TAI THAM VOWEL SIGN THAM AI
+1A73;N # TAI THAM VOWEL SIGN OA ABOVE
+1A74;N # TAI THAM SIGN MAI KANG
+1A75;N # TAI THAM SIGN TONE-1
+1A76;N # TAI THAM SIGN TONE-2
+1A77;N # TAI THAM SIGN KHUEN TONE-3
+1A78;N # TAI THAM SIGN KHUEN TONE-4
+1A79;N # TAI THAM SIGN KHUEN TONE-5
+1A7A;N # TAI THAM SIGN RA HAAM
+1A7B;N # TAI THAM SIGN MAI SAM
+1A7C;N # TAI THAM SIGN KHUEN-LUE KARAN
+1A7F;N # TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80;N # TAI THAM HORA DIGIT ZERO
+1A81;N # TAI THAM HORA DIGIT ONE
+1A82;N # TAI THAM HORA DIGIT TWO
+1A83;N # TAI THAM HORA DIGIT THREE
+1A84;N # TAI THAM HORA DIGIT FOUR
+1A85;N # TAI THAM HORA DIGIT FIVE
+1A86;N # TAI THAM HORA DIGIT SIX
+1A87;N # TAI THAM HORA DIGIT SEVEN
+1A88;N # TAI THAM HORA DIGIT EIGHT
+1A89;N # TAI THAM HORA DIGIT NINE
+1A90;N # TAI THAM THAM DIGIT ZERO
+1A91;N # TAI THAM THAM DIGIT ONE
+1A92;N # TAI THAM THAM DIGIT TWO
+1A93;N # TAI THAM THAM DIGIT THREE
+1A94;N # TAI THAM THAM DIGIT FOUR
+1A95;N # TAI THAM THAM DIGIT FIVE
+1A96;N # TAI THAM THAM DIGIT SIX
+1A97;N # TAI THAM THAM DIGIT SEVEN
+1A98;N # TAI THAM THAM DIGIT EIGHT
+1A99;N # TAI THAM THAM DIGIT NINE
+1AA0;N # TAI THAM SIGN WIANG
+1AA1;N # TAI THAM SIGN WIANGWAAK
+1AA2;N # TAI THAM SIGN SAWAN
+1AA3;N # TAI THAM SIGN KEOW
+1AA4;N # TAI THAM SIGN HOY
+1AA5;N # TAI THAM SIGN DOKMAI
+1AA6;N # TAI THAM SIGN REVERSED ROTATED RANA
+1AA7;N # TAI THAM SIGN MAI YAMOK
+1AA8;N # TAI THAM SIGN KAAN
+1AA9;N # TAI THAM SIGN KAANKUU
+1AAA;N # TAI THAM SIGN SATKAAN
+1AAB;N # TAI THAM SIGN SATKAANKUU
+1AAC;N # TAI THAM SIGN HANG
+1AAD;N # TAI THAM SIGN CAANG
+1B00;N # BALINESE SIGN ULU RICEM
+1B01;N # BALINESE SIGN ULU CANDRA
+1B02;N # BALINESE SIGN CECEK
+1B03;N # BALINESE SIGN SURANG
+1B04;N # BALINESE SIGN BISAH
+1B05;N # BALINESE LETTER AKARA
+1B06;N # BALINESE LETTER AKARA TEDUNG
+1B07;N # BALINESE LETTER IKARA
+1B08;N # BALINESE LETTER IKARA TEDUNG
+1B09;N # BALINESE LETTER UKARA
+1B0A;N # BALINESE LETTER UKARA TEDUNG
+1B0B;N # BALINESE LETTER RA REPA
+1B0C;N # BALINESE LETTER RA REPA TEDUNG
+1B0D;N # BALINESE LETTER LA LENGA
+1B0E;N # BALINESE LETTER LA LENGA TEDUNG
+1B0F;N # BALINESE LETTER EKARA
+1B10;N # BALINESE LETTER AIKARA
+1B11;N # BALINESE LETTER OKARA
+1B12;N # BALINESE LETTER OKARA TEDUNG
+1B13;N # BALINESE LETTER KA
+1B14;N # BALINESE LETTER KA MAHAPRANA
+1B15;N # BALINESE LETTER GA
+1B16;N # BALINESE LETTER GA GORA
+1B17;N # BALINESE LETTER NGA
+1B18;N # BALINESE LETTER CA
+1B19;N # BALINESE LETTER CA LACA
+1B1A;N # BALINESE LETTER JA
+1B1B;N # BALINESE LETTER JA JERA
+1B1C;N # BALINESE LETTER NYA
+1B1D;N # BALINESE LETTER TA LATIK
+1B1E;N # BALINESE LETTER TA MURDA MAHAPRANA
+1B1F;N # BALINESE LETTER DA MURDA ALPAPRANA
+1B20;N # BALINESE LETTER DA MURDA MAHAPRANA
+1B21;N # BALINESE LETTER NA RAMBAT
+1B22;N # BALINESE LETTER TA
+1B23;N # BALINESE LETTER TA TAWA
+1B24;N # BALINESE LETTER DA
+1B25;N # BALINESE LETTER DA MADU
+1B26;N # BALINESE LETTER NA
+1B27;N # BALINESE LETTER PA
+1B28;N # BALINESE LETTER PA KAPAL
+1B29;N # BALINESE LETTER BA
+1B2A;N # BALINESE LETTER BA KEMBANG
+1B2B;N # BALINESE LETTER MA
+1B2C;N # BALINESE LETTER YA
+1B2D;N # BALINESE LETTER RA
+1B2E;N # BALINESE LETTER LA
+1B2F;N # BALINESE LETTER WA
+1B30;N # BALINESE LETTER SA SAGA
+1B31;N # BALINESE LETTER SA SAPA
+1B32;N # BALINESE LETTER SA
+1B33;N # BALINESE LETTER HA
+1B34;N # BALINESE SIGN REREKAN
+1B35;N # BALINESE VOWEL SIGN TEDUNG
+1B36;N # BALINESE VOWEL SIGN ULU
+1B37;N # BALINESE VOWEL SIGN ULU SARI
+1B38;N # BALINESE VOWEL SIGN SUKU
+1B39;N # BALINESE VOWEL SIGN SUKU ILUT
+1B3A;N # BALINESE VOWEL SIGN RA REPA
+1B3B;N # BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C;N # BALINESE VOWEL SIGN LA LENGA
+1B3D;N # BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B3E;N # BALINESE VOWEL SIGN TALING
+1B3F;N # BALINESE VOWEL SIGN TALING REPA
+1B40;N # BALINESE VOWEL SIGN TALING TEDUNG
+1B41;N # BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42;N # BALINESE VOWEL SIGN PEPET
+1B43;N # BALINESE VOWEL SIGN PEPET TEDUNG
+1B44;N # BALINESE ADEG ADEG
+1B45;N # BALINESE LETTER KAF SASAK
+1B46;N # BALINESE LETTER KHOT SASAK
+1B47;N # BALINESE LETTER TZIR SASAK
+1B48;N # BALINESE LETTER EF SASAK
+1B49;N # BALINESE LETTER VE SASAK
+1B4A;N # BALINESE LETTER ZAL SASAK
+1B4B;N # BALINESE LETTER ASYURA SASAK
+1B50;N # BALINESE DIGIT ZERO
+1B51;N # BALINESE DIGIT ONE
+1B52;N # BALINESE DIGIT TWO
+1B53;N # BALINESE DIGIT THREE
+1B54;N # BALINESE DIGIT FOUR
+1B55;N # BALINESE DIGIT FIVE
+1B56;N # BALINESE DIGIT SIX
+1B57;N # BALINESE DIGIT SEVEN
+1B58;N # BALINESE DIGIT EIGHT
+1B59;N # BALINESE DIGIT NINE
+1B5A;N # BALINESE PANTI
+1B5B;N # BALINESE PAMADA
+1B5C;N # BALINESE WINDU
+1B5D;N # BALINESE CARIK PAMUNGKAH
+1B5E;N # BALINESE CARIK SIKI
+1B5F;N # BALINESE CARIK PAREREN
+1B60;N # BALINESE PAMENENG
+1B61;N # BALINESE MUSICAL SYMBOL DONG
+1B62;N # BALINESE MUSICAL SYMBOL DENG
+1B63;N # BALINESE MUSICAL SYMBOL DUNG
+1B64;N # BALINESE MUSICAL SYMBOL DANG
+1B65;N # BALINESE MUSICAL SYMBOL DANG SURANG
+1B66;N # BALINESE MUSICAL SYMBOL DING
+1B67;N # BALINESE MUSICAL SYMBOL DAENG
+1B68;N # BALINESE MUSICAL SYMBOL DEUNG
+1B69;N # BALINESE MUSICAL SYMBOL DAING
+1B6A;N # BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B;N # BALINESE MUSICAL SYMBOL COMBINING TEGEH
+1B6C;N # BALINESE MUSICAL SYMBOL COMBINING ENDEP
+1B6D;N # BALINESE MUSICAL SYMBOL COMBINING KEMPUL
+1B6E;N # BALINESE MUSICAL SYMBOL COMBINING KEMPLI
+1B6F;N # BALINESE MUSICAL SYMBOL COMBINING JEGOGAN
+1B70;N # BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN
+1B71;N # BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN
+1B72;N # BALINESE MUSICAL SYMBOL COMBINING BENDE
+1B73;N # BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74;N # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
+1B75;N # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG
+1B76;N # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK
+1B77;N # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK
+1B78;N # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG
+1B79;N # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG
+1B7A;N # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK
+1B7B;N # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK
+1B7C;N # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B80;N # SUNDANESE SIGN PANYECEK
+1B81;N # SUNDANESE SIGN PANGLAYAR
+1B82;N # SUNDANESE SIGN PANGWISAD
+1B83;N # SUNDANESE LETTER A
+1B84;N # SUNDANESE LETTER I
+1B85;N # SUNDANESE LETTER U
+1B86;N # SUNDANESE LETTER AE
+1B87;N # SUNDANESE LETTER O
+1B88;N # SUNDANESE LETTER E
+1B89;N # SUNDANESE LETTER EU
+1B8A;N # SUNDANESE LETTER KA
+1B8B;N # SUNDANESE LETTER QA
+1B8C;N # SUNDANESE LETTER GA
+1B8D;N # SUNDANESE LETTER NGA
+1B8E;N # SUNDANESE LETTER CA
+1B8F;N # SUNDANESE LETTER JA
+1B90;N # SUNDANESE LETTER ZA
+1B91;N # SUNDANESE LETTER NYA
+1B92;N # SUNDANESE LETTER TA
+1B93;N # SUNDANESE LETTER DA
+1B94;N # SUNDANESE LETTER NA
+1B95;N # SUNDANESE LETTER PA
+1B96;N # SUNDANESE LETTER FA
+1B97;N # SUNDANESE LETTER VA
+1B98;N # SUNDANESE LETTER BA
+1B99;N # SUNDANESE LETTER MA
+1B9A;N # SUNDANESE LETTER YA
+1B9B;N # SUNDANESE LETTER RA
+1B9C;N # SUNDANESE LETTER LA
+1B9D;N # SUNDANESE LETTER WA
+1B9E;N # SUNDANESE LETTER SA
+1B9F;N # SUNDANESE LETTER XA
+1BA0;N # SUNDANESE LETTER HA
+1BA1;N # SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2;N # SUNDANESE CONSONANT SIGN PANYAKRA
+1BA3;N # SUNDANESE CONSONANT SIGN PANYIKU
+1BA4;N # SUNDANESE VOWEL SIGN PANGHULU
+1BA5;N # SUNDANESE VOWEL SIGN PANYUKU
+1BA6;N # SUNDANESE VOWEL SIGN PANAELAENG
+1BA7;N # SUNDANESE VOWEL SIGN PANOLONG
+1BA8;N # SUNDANESE VOWEL SIGN PAMEPET
+1BA9;N # SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA;N # SUNDANESE SIGN PAMAAEH
+1BAE;N # SUNDANESE LETTER KHA
+1BAF;N # SUNDANESE LETTER SYA
+1BB0;N # SUNDANESE DIGIT ZERO
+1BB1;N # SUNDANESE DIGIT ONE
+1BB2;N # SUNDANESE DIGIT TWO
+1BB3;N # SUNDANESE DIGIT THREE
+1BB4;N # SUNDANESE DIGIT FOUR
+1BB5;N # SUNDANESE DIGIT FIVE
+1BB6;N # SUNDANESE DIGIT SIX
+1BB7;N # SUNDANESE DIGIT SEVEN
+1BB8;N # SUNDANESE DIGIT EIGHT
+1BB9;N # SUNDANESE DIGIT NINE
+1C00;N # LEPCHA LETTER KA
+1C01;N # LEPCHA LETTER KLA
+1C02;N # LEPCHA LETTER KHA
+1C03;N # LEPCHA LETTER GA
+1C04;N # LEPCHA LETTER GLA
+1C05;N # LEPCHA LETTER NGA
+1C06;N # LEPCHA LETTER CA
+1C07;N # LEPCHA LETTER CHA
+1C08;N # LEPCHA LETTER JA
+1C09;N # LEPCHA LETTER NYA
+1C0A;N # LEPCHA LETTER TA
+1C0B;N # LEPCHA LETTER THA
+1C0C;N # LEPCHA LETTER DA
+1C0D;N # LEPCHA LETTER NA
+1C0E;N # LEPCHA LETTER PA
+1C0F;N # LEPCHA LETTER PLA
+1C10;N # LEPCHA LETTER PHA
+1C11;N # LEPCHA LETTER FA
+1C12;N # LEPCHA LETTER FLA
+1C13;N # LEPCHA LETTER BA
+1C14;N # LEPCHA LETTER BLA
+1C15;N # LEPCHA LETTER MA
+1C16;N # LEPCHA LETTER MLA
+1C17;N # LEPCHA LETTER TSA
+1C18;N # LEPCHA LETTER TSHA
+1C19;N # LEPCHA LETTER DZA
+1C1A;N # LEPCHA LETTER YA
+1C1B;N # LEPCHA LETTER RA
+1C1C;N # LEPCHA LETTER LA
+1C1D;N # LEPCHA LETTER HA
+1C1E;N # LEPCHA LETTER HLA
+1C1F;N # LEPCHA LETTER VA
+1C20;N # LEPCHA LETTER SA
+1C21;N # LEPCHA LETTER SHA
+1C22;N # LEPCHA LETTER WA
+1C23;N # LEPCHA LETTER A
+1C24;N # LEPCHA SUBJOINED LETTER YA
+1C25;N # LEPCHA SUBJOINED LETTER RA
+1C26;N # LEPCHA VOWEL SIGN AA
+1C27;N # LEPCHA VOWEL SIGN I
+1C28;N # LEPCHA VOWEL SIGN O
+1C29;N # LEPCHA VOWEL SIGN OO
+1C2A;N # LEPCHA VOWEL SIGN U
+1C2B;N # LEPCHA VOWEL SIGN UU
+1C2C;N # LEPCHA VOWEL SIGN E
+1C2D;N # LEPCHA CONSONANT SIGN K
+1C2E;N # LEPCHA CONSONANT SIGN M
+1C2F;N # LEPCHA CONSONANT SIGN L
+1C30;N # LEPCHA CONSONANT SIGN N
+1C31;N # LEPCHA CONSONANT SIGN P
+1C32;N # LEPCHA CONSONANT SIGN R
+1C33;N # LEPCHA CONSONANT SIGN T
+1C34;N # LEPCHA CONSONANT SIGN NYIN-DO
+1C35;N # LEPCHA CONSONANT SIGN KANG
+1C36;N # LEPCHA SIGN RAN
+1C37;N # LEPCHA SIGN NUKTA
+1C3B;N # LEPCHA PUNCTUATION TA-ROL
+1C3C;N # LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+1C3D;N # LEPCHA PUNCTUATION CER-WA
+1C3E;N # LEPCHA PUNCTUATION TSHOOK CER-WA
+1C3F;N # LEPCHA PUNCTUATION TSHOOK
+1C40;N # LEPCHA DIGIT ZERO
+1C41;N # LEPCHA DIGIT ONE
+1C42;N # LEPCHA DIGIT TWO
+1C43;N # LEPCHA DIGIT THREE
+1C44;N # LEPCHA DIGIT FOUR
+1C45;N # LEPCHA DIGIT FIVE
+1C46;N # LEPCHA DIGIT SIX
+1C47;N # LEPCHA DIGIT SEVEN
+1C48;N # LEPCHA DIGIT EIGHT
+1C49;N # LEPCHA DIGIT NINE
+1C4D;N # LEPCHA LETTER TTA
+1C4E;N # LEPCHA LETTER TTHA
+1C4F;N # LEPCHA LETTER DDA
+1C50;N # OL CHIKI DIGIT ZERO
+1C51;N # OL CHIKI DIGIT ONE
+1C52;N # OL CHIKI DIGIT TWO
+1C53;N # OL CHIKI DIGIT THREE
+1C54;N # OL CHIKI DIGIT FOUR
+1C55;N # OL CHIKI DIGIT FIVE
+1C56;N # OL CHIKI DIGIT SIX
+1C57;N # OL CHIKI DIGIT SEVEN
+1C58;N # OL CHIKI DIGIT EIGHT
+1C59;N # OL CHIKI DIGIT NINE
+1C5A;N # OL CHIKI LETTER LA
+1C5B;N # OL CHIKI LETTER AT
+1C5C;N # OL CHIKI LETTER AG
+1C5D;N # OL CHIKI LETTER ANG
+1C5E;N # OL CHIKI LETTER AL
+1C5F;N # OL CHIKI LETTER LAA
+1C60;N # OL CHIKI LETTER AAK
+1C61;N # OL CHIKI LETTER AAJ
+1C62;N # OL CHIKI LETTER AAM
+1C63;N # OL CHIKI LETTER AAW
+1C64;N # OL CHIKI LETTER LI
+1C65;N # OL CHIKI LETTER IS
+1C66;N # OL CHIKI LETTER IH
+1C67;N # OL CHIKI LETTER INY
+1C68;N # OL CHIKI LETTER IR
+1C69;N # OL CHIKI LETTER LU
+1C6A;N # OL CHIKI LETTER UC
+1C6B;N # OL CHIKI LETTER UD
+1C6C;N # OL CHIKI LETTER UNN
+1C6D;N # OL CHIKI LETTER UY
+1C6E;N # OL CHIKI LETTER LE
+1C6F;N # OL CHIKI LETTER EP
+1C70;N # OL CHIKI LETTER EDD
+1C71;N # OL CHIKI LETTER EN
+1C72;N # OL CHIKI LETTER ERR
+1C73;N # OL CHIKI LETTER LO
+1C74;N # OL CHIKI LETTER OTT
+1C75;N # OL CHIKI LETTER OB
+1C76;N # OL CHIKI LETTER OV
+1C77;N # OL CHIKI LETTER OH
+1C78;N # OL CHIKI MU TTUDDAG
+1C79;N # OL CHIKI GAAHLAA TTUDDAAG
+1C7A;N # OL CHIKI MU-GAAHLAA TTUDDAAG
+1C7B;N # OL CHIKI RELAA
+1C7C;N # OL CHIKI PHAARKAA
+1C7D;N # OL CHIKI AHAD
+1C7E;N # OL CHIKI PUNCTUATION MUCAAD
+1C7F;N # OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1CD0;N # VEDIC TONE KARSHANA
+1CD1;N # VEDIC TONE SHARA
+1CD2;N # VEDIC TONE PRENKHA
+1CD3;N # VEDIC SIGN NIHSHVASA
+1CD4;N # VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+1CD5;N # VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
+1CD6;N # VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
+1CD7;N # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
+1CD8;N # VEDIC TONE CANDRA BELOW
+1CD9;N # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+1CDA;N # VEDIC TONE DOUBLE SVARITA
+1CDB;N # VEDIC TONE TRIPLE SVARITA
+1CDC;N # VEDIC TONE KATHAKA ANUDATTA
+1CDD;N # VEDIC TONE DOT BELOW
+1CDE;N # VEDIC TONE TWO DOTS BELOW
+1CDF;N # VEDIC TONE THREE DOTS BELOW
+1CE0;N # VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1;N # VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2;N # VEDIC SIGN VISARGA SVARITA
+1CE3;N # VEDIC SIGN VISARGA UDATTA
+1CE4;N # VEDIC SIGN REVERSED VISARGA UDATTA
+1CE5;N # VEDIC SIGN VISARGA ANUDATTA
+1CE6;N # VEDIC SIGN REVERSED VISARGA ANUDATTA
+1CE7;N # VEDIC SIGN VISARGA UDATTA WITH TAIL
+1CE8;N # VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9;N # VEDIC SIGN ANUSVARA ANTARGOMUKHA
+1CEA;N # VEDIC SIGN ANUSVARA BAHIRGOMUKHA
+1CEB;N # VEDIC SIGN ANUSVARA VAMAGOMUKHA
+1CEC;N # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED;N # VEDIC SIGN TIRYAK
+1CEE;N # VEDIC SIGN HEXIFORM LONG ANUSVARA
+1CEF;N # VEDIC SIGN LONG ANUSVARA
+1CF0;N # VEDIC SIGN RTHANG LONG ANUSVARA
+1CF1;N # VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2;N # VEDIC SIGN ARDHAVISARGA
+1D00;N # LATIN LETTER SMALL CAPITAL A
+1D01;N # LATIN LETTER SMALL CAPITAL AE
+1D02;N # LATIN SMALL LETTER TURNED AE
+1D03;N # LATIN LETTER SMALL CAPITAL BARRED B
+1D04;N # LATIN LETTER SMALL CAPITAL C
+1D05;N # LATIN LETTER SMALL CAPITAL D
+1D06;N # LATIN LETTER SMALL CAPITAL ETH
+1D07;N # LATIN LETTER SMALL CAPITAL E
+1D08;N # LATIN SMALL LETTER TURNED OPEN E
+1D09;N # LATIN SMALL LETTER TURNED I
+1D0A;N # LATIN LETTER SMALL CAPITAL J
+1D0B;N # LATIN LETTER SMALL CAPITAL K
+1D0C;N # LATIN LETTER SMALL CAPITAL L WITH STROKE
+1D0D;N # LATIN LETTER SMALL CAPITAL M
+1D0E;N # LATIN LETTER SMALL CAPITAL REVERSED N
+1D0F;N # LATIN LETTER SMALL CAPITAL O
+1D10;N # LATIN LETTER SMALL CAPITAL OPEN O
+1D11;N # LATIN SMALL LETTER SIDEWAYS O
+1D12;N # LATIN SMALL LETTER SIDEWAYS OPEN O
+1D13;N # LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+1D14;N # LATIN SMALL LETTER TURNED OE
+1D15;N # LATIN LETTER SMALL CAPITAL OU
+1D16;N # LATIN SMALL LETTER TOP HALF O
+1D17;N # LATIN SMALL LETTER BOTTOM HALF O
+1D18;N # LATIN LETTER SMALL CAPITAL P
+1D19;N # LATIN LETTER SMALL CAPITAL REVERSED R
+1D1A;N # LATIN LETTER SMALL CAPITAL TURNED R
+1D1B;N # LATIN LETTER SMALL CAPITAL T
+1D1C;N # LATIN LETTER SMALL CAPITAL U
+1D1D;N # LATIN SMALL LETTER SIDEWAYS U
+1D1E;N # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+1D1F;N # LATIN SMALL LETTER SIDEWAYS TURNED M
+1D20;N # LATIN LETTER SMALL CAPITAL V
+1D21;N # LATIN LETTER SMALL CAPITAL W
+1D22;N # LATIN LETTER SMALL CAPITAL Z
+1D23;N # LATIN LETTER SMALL CAPITAL EZH
+1D24;N # LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25;N # LATIN LETTER AIN
+1D26;N # GREEK LETTER SMALL CAPITAL GAMMA
+1D27;N # GREEK LETTER SMALL CAPITAL LAMDA
+1D28;N # GREEK LETTER SMALL CAPITAL PI
+1D29;N # GREEK LETTER SMALL CAPITAL RHO
+1D2A;N # GREEK LETTER SMALL CAPITAL PSI
+1D2B;N # CYRILLIC LETTER SMALL CAPITAL EL
+1D2C;N # MODIFIER LETTER CAPITAL A
+1D2D;N # MODIFIER LETTER CAPITAL AE
+1D2E;N # MODIFIER LETTER CAPITAL B
+1D2F;N # MODIFIER LETTER CAPITAL BARRED B
+1D30;N # MODIFIER LETTER CAPITAL D
+1D31;N # MODIFIER LETTER CAPITAL E
+1D32;N # MODIFIER LETTER CAPITAL REVERSED E
+1D33;N # MODIFIER LETTER CAPITAL G
+1D34;N # MODIFIER LETTER CAPITAL H
+1D35;N # MODIFIER LETTER CAPITAL I
+1D36;N # MODIFIER LETTER CAPITAL J
+1D37;N # MODIFIER LETTER CAPITAL K
+1D38;N # MODIFIER LETTER CAPITAL L
+1D39;N # MODIFIER LETTER CAPITAL M
+1D3A;N # MODIFIER LETTER CAPITAL N
+1D3B;N # MODIFIER LETTER CAPITAL REVERSED N
+1D3C;N # MODIFIER LETTER CAPITAL O
+1D3D;N # MODIFIER LETTER CAPITAL OU
+1D3E;N # MODIFIER LETTER CAPITAL P
+1D3F;N # MODIFIER LETTER CAPITAL R
+1D40;N # MODIFIER LETTER CAPITAL T
+1D41;N # MODIFIER LETTER CAPITAL U
+1D42;N # MODIFIER LETTER CAPITAL W
+1D43;N # MODIFIER LETTER SMALL A
+1D44;N # MODIFIER LETTER SMALL TURNED A
+1D45;N # MODIFIER LETTER SMALL ALPHA
+1D46;N # MODIFIER LETTER SMALL TURNED AE
+1D47;N # MODIFIER LETTER SMALL B
+1D48;N # MODIFIER LETTER SMALL D
+1D49;N # MODIFIER LETTER SMALL E
+1D4A;N # MODIFIER LETTER SMALL SCHWA
+1D4B;N # MODIFIER LETTER SMALL OPEN E
+1D4C;N # MODIFIER LETTER SMALL TURNED OPEN E
+1D4D;N # MODIFIER LETTER SMALL G
+1D4E;N # MODIFIER LETTER SMALL TURNED I
+1D4F;N # MODIFIER LETTER SMALL K
+1D50;N # MODIFIER LETTER SMALL M
+1D51;N # MODIFIER LETTER SMALL ENG
+1D52;N # MODIFIER LETTER SMALL O
+1D53;N # MODIFIER LETTER SMALL OPEN O
+1D54;N # MODIFIER LETTER SMALL TOP HALF O
+1D55;N # MODIFIER LETTER SMALL BOTTOM HALF O
+1D56;N # MODIFIER LETTER SMALL P
+1D57;N # MODIFIER LETTER SMALL T
+1D58;N # MODIFIER LETTER SMALL U
+1D59;N # MODIFIER LETTER SMALL SIDEWAYS U
+1D5A;N # MODIFIER LETTER SMALL TURNED M
+1D5B;N # MODIFIER LETTER SMALL V
+1D5C;N # MODIFIER LETTER SMALL AIN
+1D5D;N # MODIFIER LETTER SMALL BETA
+1D5E;N # MODIFIER LETTER SMALL GREEK GAMMA
+1D5F;N # MODIFIER LETTER SMALL DELTA
+1D60;N # MODIFIER LETTER SMALL GREEK PHI
+1D61;N # MODIFIER LETTER SMALL CHI
+1D62;N # LATIN SUBSCRIPT SMALL LETTER I
+1D63;N # LATIN SUBSCRIPT SMALL LETTER R
+1D64;N # LATIN SUBSCRIPT SMALL LETTER U
+1D65;N # LATIN SUBSCRIPT SMALL LETTER V
+1D66;N # GREEK SUBSCRIPT SMALL LETTER BETA
+1D67;N # GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D68;N # GREEK SUBSCRIPT SMALL LETTER RHO
+1D69;N # GREEK SUBSCRIPT SMALL LETTER PHI
+1D6A;N # GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B;N # LATIN SMALL LETTER UE
+1D6C;N # LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D;N # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E;N # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F;N # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70;N # LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71;N # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72;N # LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73;N # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74;N # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75;N # LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76;N # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77;N # LATIN SMALL LETTER TURNED G
+1D78;N # MODIFIER LETTER CYRILLIC EN
+1D79;N # LATIN SMALL LETTER INSULAR G
+1D7A;N # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B;N # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C;N # LATIN SMALL LETTER IOTA WITH STROKE
+1D7D;N # LATIN SMALL LETTER P WITH STROKE
+1D7E;N # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F;N # LATIN SMALL LETTER UPSILON WITH STROKE
+1D80;N # LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81;N # LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82;N # LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83;N # LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84;N # LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85;N # LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86;N # LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87;N # LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88;N # LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89;N # LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A;N # LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B;N # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C;N # LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D;N # LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E;N # LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F;N # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90;N # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91;N # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92;N # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93;N # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94;N # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95;N # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96;N # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97;N # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98;N # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99;N # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A;N # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B;N # MODIFIER LETTER SMALL TURNED ALPHA
+1D9C;N # MODIFIER LETTER SMALL C
+1D9D;N # MODIFIER LETTER SMALL C WITH CURL
+1D9E;N # MODIFIER LETTER SMALL ETH
+1D9F;N # MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0;N # MODIFIER LETTER SMALL F
+1DA1;N # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2;N # MODIFIER LETTER SMALL SCRIPT G
+1DA3;N # MODIFIER LETTER SMALL TURNED H
+1DA4;N # MODIFIER LETTER SMALL I WITH STROKE
+1DA5;N # MODIFIER LETTER SMALL IOTA
+1DA6;N # MODIFIER LETTER SMALL CAPITAL I
+1DA7;N # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8;N # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9;N # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA;N # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB;N # MODIFIER LETTER SMALL CAPITAL L
+1DAC;N # MODIFIER LETTER SMALL M WITH HOOK
+1DAD;N # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE;N # MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF;N # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0;N # MODIFIER LETTER SMALL CAPITAL N
+1DB1;N # MODIFIER LETTER SMALL BARRED O
+1DB2;N # MODIFIER LETTER SMALL PHI
+1DB3;N # MODIFIER LETTER SMALL S WITH HOOK
+1DB4;N # MODIFIER LETTER SMALL ESH
+1DB5;N # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6;N # MODIFIER LETTER SMALL U BAR
+1DB7;N # MODIFIER LETTER SMALL UPSILON
+1DB8;N # MODIFIER LETTER SMALL CAPITAL U
+1DB9;N # MODIFIER LETTER SMALL V WITH HOOK
+1DBA;N # MODIFIER LETTER SMALL TURNED V
+1DBB;N # MODIFIER LETTER SMALL Z
+1DBC;N # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD;N # MODIFIER LETTER SMALL Z WITH CURL
+1DBE;N # MODIFIER LETTER SMALL EZH
+1DBF;N # MODIFIER LETTER SMALL THETA
+1DC0;N # COMBINING DOTTED GRAVE ACCENT
+1DC1;N # COMBINING DOTTED ACUTE ACCENT
+1DC2;N # COMBINING SNAKE BELOW
+1DC3;N # COMBINING SUSPENSION MARK
+1DC4;N # COMBINING MACRON-ACUTE
+1DC5;N # COMBINING GRAVE-MACRON
+1DC6;N # COMBINING MACRON-GRAVE
+1DC7;N # COMBINING ACUTE-MACRON
+1DC8;N # COMBINING GRAVE-ACUTE-GRAVE
+1DC9;N # COMBINING ACUTE-GRAVE-ACUTE
+1DCA;N # COMBINING LATIN SMALL LETTER R BELOW
+1DCB;N # COMBINING BREVE-MACRON
+1DCC;N # COMBINING MACRON-BREVE
+1DCD;N # COMBINING DOUBLE CIRCUMFLEX ABOVE
+1DCE;N # COMBINING OGONEK ABOVE
+1DCF;N # COMBINING ZIGZAG BELOW
+1DD0;N # COMBINING IS BELOW
+1DD1;N # COMBINING UR ABOVE
+1DD2;N # COMBINING US ABOVE
+1DD3;N # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE
+1DD4;N # COMBINING LATIN SMALL LETTER AE
+1DD5;N # COMBINING LATIN SMALL LETTER AO
+1DD6;N # COMBINING LATIN SMALL LETTER AV
+1DD7;N # COMBINING LATIN SMALL LETTER C CEDILLA
+1DD8;N # COMBINING LATIN SMALL LETTER INSULAR D
+1DD9;N # COMBINING LATIN SMALL LETTER ETH
+1DDA;N # COMBINING LATIN SMALL LETTER G
+1DDB;N # COMBINING LATIN LETTER SMALL CAPITAL G
+1DDC;N # COMBINING LATIN SMALL LETTER K
+1DDD;N # COMBINING LATIN SMALL LETTER L
+1DDE;N # COMBINING LATIN LETTER SMALL CAPITAL L
+1DDF;N # COMBINING LATIN LETTER SMALL CAPITAL M
+1DE0;N # COMBINING LATIN SMALL LETTER N
+1DE1;N # COMBINING LATIN LETTER SMALL CAPITAL N
+1DE2;N # COMBINING LATIN LETTER SMALL CAPITAL R
+1DE3;N # COMBINING LATIN SMALL LETTER R ROTUNDA
+1DE4;N # COMBINING LATIN SMALL LETTER S
+1DE5;N # COMBINING LATIN SMALL LETTER LONG S
+1DE6;N # COMBINING LATIN SMALL LETTER Z
+1DFD;N # COMBINING ALMOST EQUAL TO BELOW
+1DFE;N # COMBINING LEFT ARROWHEAD ABOVE
+1DFF;N # COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00;N # LATIN CAPITAL LETTER A WITH RING BELOW
+1E01;N # LATIN SMALL LETTER A WITH RING BELOW
+1E02;N # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03;N # LATIN SMALL LETTER B WITH DOT ABOVE
+1E04;N # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05;N # LATIN SMALL LETTER B WITH DOT BELOW
+1E06;N # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07;N # LATIN SMALL LETTER B WITH LINE BELOW
+1E08;N # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09;N # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A;N # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B;N # LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C;N # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D;N # LATIN SMALL LETTER D WITH DOT BELOW
+1E0E;N # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F;N # LATIN SMALL LETTER D WITH LINE BELOW
+1E10;N # LATIN CAPITAL LETTER D WITH CEDILLA
+1E11;N # LATIN SMALL LETTER D WITH CEDILLA
+1E12;N # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13;N # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14;N # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15;N # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16;N # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17;N # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19;N # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A;N # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B;N # LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C;N # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D;N # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E;N # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F;N # LATIN SMALL LETTER F WITH DOT ABOVE
+1E20;N # LATIN CAPITAL LETTER G WITH MACRON
+1E21;N # LATIN SMALL LETTER G WITH MACRON
+1E22;N # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23;N # LATIN SMALL LETTER H WITH DOT ABOVE
+1E24;N # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25;N # LATIN SMALL LETTER H WITH DOT BELOW
+1E26;N # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27;N # LATIN SMALL LETTER H WITH DIAERESIS
+1E28;N # LATIN CAPITAL LETTER H WITH CEDILLA
+1E29;N # LATIN SMALL LETTER H WITH CEDILLA
+1E2A;N # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B;N # LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C;N # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D;N # LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E;N # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F;N # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30;N # LATIN CAPITAL LETTER K WITH ACUTE
+1E31;N # LATIN SMALL LETTER K WITH ACUTE
+1E32;N # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33;N # LATIN SMALL LETTER K WITH DOT BELOW
+1E34;N # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35;N # LATIN SMALL LETTER K WITH LINE BELOW
+1E36;N # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37;N # LATIN SMALL LETTER L WITH DOT BELOW
+1E38;N # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39;N # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A;N # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B;N # LATIN SMALL LETTER L WITH LINE BELOW
+1E3C;N # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D;N # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E;N # LATIN CAPITAL LETTER M WITH ACUTE
+1E3F;N # LATIN SMALL LETTER M WITH ACUTE
+1E40;N # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41;N # LATIN SMALL LETTER M WITH DOT ABOVE
+1E42;N # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43;N # LATIN SMALL LETTER M WITH DOT BELOW
+1E44;N # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45;N # LATIN SMALL LETTER N WITH DOT ABOVE
+1E46;N # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47;N # LATIN SMALL LETTER N WITH DOT BELOW
+1E48;N # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49;N # LATIN SMALL LETTER N WITH LINE BELOW
+1E4A;N # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B;N # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C;N # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D;N # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E;N # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F;N # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50;N # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51;N # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52;N # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53;N # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54;N # LATIN CAPITAL LETTER P WITH ACUTE
+1E55;N # LATIN SMALL LETTER P WITH ACUTE
+1E56;N # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57;N # LATIN SMALL LETTER P WITH DOT ABOVE
+1E58;N # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59;N # LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A;N # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B;N # LATIN SMALL LETTER R WITH DOT BELOW
+1E5C;N # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D;N # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E;N # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F;N # LATIN SMALL LETTER R WITH LINE BELOW
+1E60;N # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61;N # LATIN SMALL LETTER S WITH DOT ABOVE
+1E62;N # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63;N # LATIN SMALL LETTER S WITH DOT BELOW
+1E64;N # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65;N # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66;N # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67;N # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68;N # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69;N # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A;N # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B;N # LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C;N # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D;N # LATIN SMALL LETTER T WITH DOT BELOW
+1E6E;N # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F;N # LATIN SMALL LETTER T WITH LINE BELOW
+1E70;N # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71;N # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72;N # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73;N # LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74;N # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75;N # LATIN SMALL LETTER U WITH TILDE BELOW
+1E76;N # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77;N # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78;N # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79;N # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A;N # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B;N # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C;N # LATIN CAPITAL LETTER V WITH TILDE
+1E7D;N # LATIN SMALL LETTER V WITH TILDE
+1E7E;N # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F;N # LATIN SMALL LETTER V WITH DOT BELOW
+1E80;N # LATIN CAPITAL LETTER W WITH GRAVE
+1E81;N # LATIN SMALL LETTER W WITH GRAVE
+1E82;N # LATIN CAPITAL LETTER W WITH ACUTE
+1E83;N # LATIN SMALL LETTER W WITH ACUTE
+1E84;N # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85;N # LATIN SMALL LETTER W WITH DIAERESIS
+1E86;N # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87;N # LATIN SMALL LETTER W WITH DOT ABOVE
+1E88;N # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89;N # LATIN SMALL LETTER W WITH DOT BELOW
+1E8A;N # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B;N # LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C;N # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D;N # LATIN SMALL LETTER X WITH DIAERESIS
+1E8E;N # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F;N # LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90;N # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91;N # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92;N # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93;N # LATIN SMALL LETTER Z WITH DOT BELOW
+1E94;N # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95;N # LATIN SMALL LETTER Z WITH LINE BELOW
+1E96;N # LATIN SMALL LETTER H WITH LINE BELOW
+1E97;N # LATIN SMALL LETTER T WITH DIAERESIS
+1E98;N # LATIN SMALL LETTER W WITH RING ABOVE
+1E99;N # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A;N # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B;N # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9C;N # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
+1E9D;N # LATIN SMALL LETTER LONG S WITH HIGH STROKE
+1E9E;N # LATIN CAPITAL LETTER SHARP S
+1E9F;N # LATIN SMALL LETTER DELTA
+1EA0;N # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1;N # LATIN SMALL LETTER A WITH DOT BELOW
+1EA2;N # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3;N # LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE;N # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF;N # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0;N # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1;N # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2;N # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3;N # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4;N # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5;N # LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6;N # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7;N # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8;N # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9;N # LATIN SMALL LETTER E WITH DOT BELOW
+1EBA;N # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB;N # LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC;N # LATIN CAPITAL LETTER E WITH TILDE
+1EBD;N # LATIN SMALL LETTER E WITH TILDE
+1EBE;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8;N # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9;N # LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA;N # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB;N # LATIN SMALL LETTER I WITH DOT BELOW
+1ECC;N # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD;N # LATIN SMALL LETTER O WITH DOT BELOW
+1ECE;N # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF;N # LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA;N # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB;N # LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC;N # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD;N # LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE;N # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF;N # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0;N # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1;N # LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2;N # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3;N # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4;N # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5;N # LATIN SMALL LETTER U WITH DOT BELOW
+1EE6;N # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7;N # LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8;N # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9;N # LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA;N # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB;N # LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC;N # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED;N # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE;N # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF;N # LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0;N # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1;N # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2;N # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3;N # LATIN SMALL LETTER Y WITH GRAVE
+1EF4;N # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5;N # LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6;N # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7;N # LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8;N # LATIN CAPITAL LETTER Y WITH TILDE
+1EF9;N # LATIN SMALL LETTER Y WITH TILDE
+1EFA;N # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFB;N # LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFC;N # LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFD;N # LATIN SMALL LETTER MIDDLE-WELSH V
+1EFE;N # LATIN CAPITAL LETTER Y WITH LOOP
+1EFF;N # LATIN SMALL LETTER Y WITH LOOP
+1F00;N # GREEK SMALL LETTER ALPHA WITH PSILI
+1F01;N # GREEK SMALL LETTER ALPHA WITH DASIA
+1F02;N # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03;N # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04;N # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05;N # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06;N # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07;N # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08;N # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09;N # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10;N # GREEK SMALL LETTER EPSILON WITH PSILI
+1F11;N # GREEK SMALL LETTER EPSILON WITH DASIA
+1F12;N # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13;N # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14;N # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15;N # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18;N # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19;N # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A;N # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B;N # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C;N # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D;N # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20;N # GREEK SMALL LETTER ETA WITH PSILI
+1F21;N # GREEK SMALL LETTER ETA WITH DASIA
+1F22;N # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23;N # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24;N # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25;N # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26;N # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27;N # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28;N # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29;N # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A;N # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B;N # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C;N # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D;N # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30;N # GREEK SMALL LETTER IOTA WITH PSILI
+1F31;N # GREEK SMALL LETTER IOTA WITH DASIA
+1F32;N # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33;N # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34;N # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35;N # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36;N # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37;N # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38;N # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39;N # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40;N # GREEK SMALL LETTER OMICRON WITH PSILI
+1F41;N # GREEK SMALL LETTER OMICRON WITH DASIA
+1F42;N # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43;N # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44;N # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45;N # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48;N # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49;N # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A;N # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B;N # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C;N # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D;N # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50;N # GREEK SMALL LETTER UPSILON WITH PSILI
+1F51;N # GREEK SMALL LETTER UPSILON WITH DASIA
+1F52;N # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53;N # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54;N # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55;N # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56;N # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57;N # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;N # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60;N # GREEK SMALL LETTER OMEGA WITH PSILI
+1F61;N # GREEK SMALL LETTER OMEGA WITH DASIA
+1F62;N # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63;N # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64;N # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65;N # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66;N # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67;N # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68;N # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69;N # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70;N # GREEK SMALL LETTER ALPHA WITH VARIA
+1F71;N # GREEK SMALL LETTER ALPHA WITH OXIA
+1F72;N # GREEK SMALL LETTER EPSILON WITH VARIA
+1F73;N # GREEK SMALL LETTER EPSILON WITH OXIA
+1F74;N # GREEK SMALL LETTER ETA WITH VARIA
+1F75;N # GREEK SMALL LETTER ETA WITH OXIA
+1F76;N # GREEK SMALL LETTER IOTA WITH VARIA
+1F77;N # GREEK SMALL LETTER IOTA WITH OXIA
+1F78;N # GREEK SMALL LETTER OMICRON WITH VARIA
+1F79;N # GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A;N # GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B;N # GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C;N # GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D;N # GREEK SMALL LETTER OMEGA WITH OXIA
+1F80;N # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81;N # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82;N # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83;N # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84;N # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85;N # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86;N # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87;N # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90;N # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91;N # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92;N # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93;N # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94;N # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95;N # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96;N # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97;N # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A;N # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B;N # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C;N # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D;N # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0;N # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1;N # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2;N # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3;N # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4;N # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5;N # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6;N # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7;N # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0;N # GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1;N # GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2;N # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3;N # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4;N # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6;N # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7;N # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8;N # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9;N # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA;N # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB;N # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC;N # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;N # GREEK KORONIS
+1FBE;N # GREEK PROSGEGRAMMENI
+1FBF;N # GREEK PSILI
+1FC0;N # GREEK PERISPOMENI
+1FC1;N # GREEK DIALYTIKA AND PERISPOMENI
+1FC2;N # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3;N # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4;N # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6;N # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7;N # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8;N # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9;N # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA;N # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB;N # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC;N # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD;N # GREEK PSILI AND VARIA
+1FCE;N # GREEK PSILI AND OXIA
+1FCF;N # GREEK PSILI AND PERISPOMENI
+1FD0;N # GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1;N # GREEK SMALL LETTER IOTA WITH MACRON
+1FD2;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6;N # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8;N # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9;N # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA;N # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB;N # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD;N # GREEK DASIA AND VARIA
+1FDE;N # GREEK DASIA AND OXIA
+1FDF;N # GREEK DASIA AND PERISPOMENI
+1FE0;N # GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1;N # GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4;N # GREEK SMALL LETTER RHO WITH PSILI
+1FE5;N # GREEK SMALL LETTER RHO WITH DASIA
+1FE6;N # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8;N # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9;N # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA;N # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB;N # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC;N # GREEK CAPITAL LETTER RHO WITH DASIA
+1FED;N # GREEK DIALYTIKA AND VARIA
+1FEE;N # GREEK DIALYTIKA AND OXIA
+1FEF;N # GREEK VARIA
+1FF2;N # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3;N # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4;N # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6;N # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7;N # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8;N # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9;N # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA;N # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB;N # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC;N # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD;N # GREEK OXIA
+1FFE;N # GREEK DASIA
+2000;N # EN QUAD
+2001;N # EM QUAD
+2002;N # EN SPACE
+2003;N # EM SPACE
+2004;N # THREE-PER-EM SPACE
+2005;N # FOUR-PER-EM SPACE
+2006;N # SIX-PER-EM SPACE
+2007;N # FIGURE SPACE
+2008;N # PUNCTUATION SPACE
+2009;N # THIN SPACE
+200A;N # HAIR SPACE
+200B;N # ZERO WIDTH SPACE
+200C;N # ZERO WIDTH NON-JOINER
+200D;N # ZERO WIDTH JOINER
+200E;N # LEFT-TO-RIGHT MARK
+200F;N # RIGHT-TO-LEFT MARK
+2010;A # HYPHEN
+2011;N # NON-BREAKING HYPHEN
+2012;N # FIGURE DASH
+2013;A # EN DASH
+2014;A # EM DASH
+2015;A # HORIZONTAL BAR
+2016;A # DOUBLE VERTICAL LINE
+2017;N # DOUBLE LOW LINE
+2018;A # LEFT SINGLE QUOTATION MARK
+2019;A # RIGHT SINGLE QUOTATION MARK
+201A;N # SINGLE LOW-9 QUOTATION MARK
+201B;N # SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C;A # LEFT DOUBLE QUOTATION MARK
+201D;A # RIGHT DOUBLE QUOTATION MARK
+201E;N # DOUBLE LOW-9 QUOTATION MARK
+201F;N # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020;A # DAGGER
+2021;A # DOUBLE DAGGER
+2022;A # BULLET
+2023;N # TRIANGULAR BULLET
+2024;A # ONE DOT LEADER
+2025;A # TWO DOT LEADER
+2026;A # HORIZONTAL ELLIPSIS
+2027;A # HYPHENATION POINT
+2028;N # LINE SEPARATOR
+2029;N # PARAGRAPH SEPARATOR
+202A;N # LEFT-TO-RIGHT EMBEDDING
+202B;N # RIGHT-TO-LEFT EMBEDDING
+202C;N # POP DIRECTIONAL FORMATTING
+202D;N # LEFT-TO-RIGHT OVERRIDE
+202E;N # RIGHT-TO-LEFT OVERRIDE
+202F;N # NARROW NO-BREAK SPACE
+2030;A # PER MILLE SIGN
+2031;N # PER TEN THOUSAND SIGN
+2032;A # PRIME
+2033;A # DOUBLE PRIME
+2034;N # TRIPLE PRIME
+2035;A # REVERSED PRIME
+2036;N # REVERSED DOUBLE PRIME
+2037;N # REVERSED TRIPLE PRIME
+2038;N # CARET
+2039;N # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;N # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B;A # REFERENCE MARK
+203C;N # DOUBLE EXCLAMATION MARK
+203D;N # INTERROBANG
+203E;A # OVERLINE
+203F;N # UNDERTIE
+2040;N # CHARACTER TIE
+2041;N # CARET INSERTION POINT
+2042;N # ASTERISM
+2043;N # HYPHEN BULLET
+2044;N # FRACTION SLASH
+2045;N # LEFT SQUARE BRACKET WITH QUILL
+2046;N # RIGHT SQUARE BRACKET WITH QUILL
+2047;N # DOUBLE QUESTION MARK
+2048;N # QUESTION EXCLAMATION MARK
+2049;N # EXCLAMATION QUESTION MARK
+204A;N # TIRONIAN SIGN ET
+204B;N # REVERSED PILCROW SIGN
+204C;N # BLACK LEFTWARDS BULLET
+204D;N # BLACK RIGHTWARDS BULLET
+204E;N # LOW ASTERISK
+204F;N # REVERSED SEMICOLON
+2050;N # CLOSE UP
+2051;N # TWO ASTERISKS ALIGNED VERTICALLY
+2052;N # COMMERCIAL MINUS SIGN
+2053;N # SWUNG DASH
+2054;N # INVERTED UNDERTIE
+2055;N # FLOWER PUNCTUATION MARK
+2056;N # THREE DOT PUNCTUATION
+2057;N # QUADRUPLE PRIME
+2058;N # FOUR DOT PUNCTUATION
+2059;N # FIVE DOT PUNCTUATION
+205A;N # TWO DOT PUNCTUATION
+205B;N # FOUR DOT MARK
+205C;N # DOTTED CROSS
+205D;N # TRICOLON
+205E;N # VERTICAL FOUR DOTS
+205F;N # MEDIUM MATHEMATICAL SPACE
+2060;N # WORD JOINER
+2061;N # FUNCTION APPLICATION
+2062;N # INVISIBLE TIMES
+2063;N # INVISIBLE SEPARATOR
+2064;N # INVISIBLE PLUS
+206A;N # INHIBIT SYMMETRIC SWAPPING
+206B;N # ACTIVATE SYMMETRIC SWAPPING
+206C;N # INHIBIT ARABIC FORM SHAPING
+206D;N # ACTIVATE ARABIC FORM SHAPING
+206E;N # NATIONAL DIGIT SHAPES
+206F;N # NOMINAL DIGIT SHAPES
+2070;N # SUPERSCRIPT ZERO
+2071;N # SUPERSCRIPT LATIN SMALL LETTER I
+2074;A # SUPERSCRIPT FOUR
+2075;N # SUPERSCRIPT FIVE
+2076;N # SUPERSCRIPT SIX
+2077;N # SUPERSCRIPT SEVEN
+2078;N # SUPERSCRIPT EIGHT
+2079;N # SUPERSCRIPT NINE
+207A;N # SUPERSCRIPT PLUS SIGN
+207B;N # SUPERSCRIPT MINUS
+207C;N # SUPERSCRIPT EQUALS SIGN
+207D;N # SUPERSCRIPT LEFT PARENTHESIS
+207E;N # SUPERSCRIPT RIGHT PARENTHESIS
+207F;A # SUPERSCRIPT LATIN SMALL LETTER N
+2080;N # SUBSCRIPT ZERO
+2081;A # SUBSCRIPT ONE
+2082;A # SUBSCRIPT TWO
+2083;A # SUBSCRIPT THREE
+2084;A # SUBSCRIPT FOUR
+2085;N # SUBSCRIPT FIVE
+2086;N # SUBSCRIPT SIX
+2087;N # SUBSCRIPT SEVEN
+2088;N # SUBSCRIPT EIGHT
+2089;N # SUBSCRIPT NINE
+208A;N # SUBSCRIPT PLUS SIGN
+208B;N # SUBSCRIPT MINUS
+208C;N # SUBSCRIPT EQUALS SIGN
+208D;N # SUBSCRIPT LEFT PARENTHESIS
+208E;N # SUBSCRIPT RIGHT PARENTHESIS
+2090;N # LATIN SUBSCRIPT SMALL LETTER A
+2091;N # LATIN SUBSCRIPT SMALL LETTER E
+2092;N # LATIN SUBSCRIPT SMALL LETTER O
+2093;N # LATIN SUBSCRIPT SMALL LETTER X
+2094;N # LATIN SUBSCRIPT SMALL LETTER SCHWA
+20A0;N # EURO-CURRENCY SIGN
+20A1;N # COLON SIGN
+20A2;N # CRUZEIRO SIGN
+20A3;N # FRENCH FRANC SIGN
+20A4;N # LIRA SIGN
+20A5;N # MILL SIGN
+20A6;N # NAIRA SIGN
+20A7;N # PESETA SIGN
+20A8;N # RUPEE SIGN
+20A9;H # WON SIGN
+20AA;N # NEW SHEQEL SIGN
+20AB;N # DONG SIGN
+20AC;A # EURO SIGN
+20AD;N # KIP SIGN
+20AE;N # TUGRIK SIGN
+20AF;N # DRACHMA SIGN
+20B0;N # GERMAN PENNY SIGN
+20B1;N # PESO SIGN
+20B2;N # GUARANI SIGN
+20B3;N # AUSTRAL SIGN
+20B4;N # HRYVNIA SIGN
+20B5;N # CEDI SIGN
+20B6;N # LIVRE TOURNOIS SIGN
+20B7;N # SPESMILO SIGN
+20B8;N # TENGE SIGN
+20D0;N # COMBINING LEFT HARPOON ABOVE
+20D1;N # COMBINING RIGHT HARPOON ABOVE
+20D2;N # COMBINING LONG VERTICAL LINE OVERLAY
+20D3;N # COMBINING SHORT VERTICAL LINE OVERLAY
+20D4;N # COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5;N # COMBINING CLOCKWISE ARROW ABOVE
+20D6;N # COMBINING LEFT ARROW ABOVE
+20D7;N # COMBINING RIGHT ARROW ABOVE
+20D8;N # COMBINING RING OVERLAY
+20D9;N # COMBINING CLOCKWISE RING OVERLAY
+20DA;N # COMBINING ANTICLOCKWISE RING OVERLAY
+20DB;N # COMBINING THREE DOTS ABOVE
+20DC;N # COMBINING FOUR DOTS ABOVE
+20DD;N # COMBINING ENCLOSING CIRCLE
+20DE;N # COMBINING ENCLOSING SQUARE
+20DF;N # COMBINING ENCLOSING DIAMOND
+20E0;N # COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1;N # COMBINING LEFT RIGHT ARROW ABOVE
+20E2;N # COMBINING ENCLOSING SCREEN
+20E3;N # COMBINING ENCLOSING KEYCAP
+20E4;N # COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5;N # COMBINING REVERSE SOLIDUS OVERLAY
+20E6;N # COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7;N # COMBINING ANNUITY SYMBOL
+20E8;N # COMBINING TRIPLE UNDERDOT
+20E9;N # COMBINING WIDE BRIDGE ABOVE
+20EA;N # COMBINING LEFTWARDS ARROW OVERLAY
+20EB;N # COMBINING LONG DOUBLE SOLIDUS OVERLAY
+20EC;N # COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+20ED;N # COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
+20EE;N # COMBINING LEFT ARROW BELOW
+20EF;N # COMBINING RIGHT ARROW BELOW
+20F0;N # COMBINING ASTERISK ABOVE
+2100;N # ACCOUNT OF
+2101;N # ADDRESSED TO THE SUBJECT
+2102;N # DOUBLE-STRUCK CAPITAL C
+2103;A # DEGREE CELSIUS
+2104;N # CENTRE LINE SYMBOL
+2105;A # CARE OF
+2106;N # CADA UNA
+2107;N # EULER CONSTANT
+2108;N # SCRUPLE
+2109;A # DEGREE FAHRENHEIT
+210A;N # SCRIPT SMALL G
+210B;N # SCRIPT CAPITAL H
+210C;N # BLACK-LETTER CAPITAL H
+210D;N # DOUBLE-STRUCK CAPITAL H
+210E;N # PLANCK CONSTANT
+210F;N # PLANCK CONSTANT OVER TWO PI
+2110;N # SCRIPT CAPITAL I
+2111;N # BLACK-LETTER CAPITAL I
+2112;N # SCRIPT CAPITAL L
+2113;A # SCRIPT SMALL L
+2114;N # L B BAR SYMBOL
+2115;N # DOUBLE-STRUCK CAPITAL N
+2116;A # NUMERO SIGN
+2117;N # SOUND RECORDING COPYRIGHT
+2118;N # SCRIPT CAPITAL P
+2119;N # DOUBLE-STRUCK CAPITAL P
+211A;N # DOUBLE-STRUCK CAPITAL Q
+211B;N # SCRIPT CAPITAL R
+211C;N # BLACK-LETTER CAPITAL R
+211D;N # DOUBLE-STRUCK CAPITAL R
+211E;N # PRESCRIPTION TAKE
+211F;N # RESPONSE
+2120;N # SERVICE MARK
+2121;A # TELEPHONE SIGN
+2122;A # TRADE MARK SIGN
+2123;N # VERSICLE
+2124;N # DOUBLE-STRUCK CAPITAL Z
+2125;N # OUNCE SIGN
+2126;A # OHM SIGN
+2127;N # INVERTED OHM SIGN
+2128;N # BLACK-LETTER CAPITAL Z
+2129;N # TURNED GREEK SMALL LETTER IOTA
+212A;N # KELVIN SIGN
+212B;A # ANGSTROM SIGN
+212C;N # SCRIPT CAPITAL B
+212D;N # BLACK-LETTER CAPITAL C
+212E;N # ESTIMATED SYMBOL
+212F;N # SCRIPT SMALL E
+2130;N # SCRIPT CAPITAL E
+2131;N # SCRIPT CAPITAL F
+2132;N # TURNED CAPITAL F
+2133;N # SCRIPT CAPITAL M
+2134;N # SCRIPT SMALL O
+2135;N # ALEF SYMBOL
+2136;N # BET SYMBOL
+2137;N # GIMEL SYMBOL
+2138;N # DALET SYMBOL
+2139;N # INFORMATION SOURCE
+213A;N # ROTATED CAPITAL Q
+213B;N # FACSIMILE SIGN
+213C;N # DOUBLE-STRUCK SMALL PI
+213D;N # DOUBLE-STRUCK SMALL GAMMA
+213E;N # DOUBLE-STRUCK CAPITAL GAMMA
+213F;N # DOUBLE-STRUCK CAPITAL PI
+2140;N # DOUBLE-STRUCK N-ARY SUMMATION
+2141;N # TURNED SANS-SERIF CAPITAL G
+2142;N # TURNED SANS-SERIF CAPITAL L
+2143;N # REVERSED SANS-SERIF CAPITAL L
+2144;N # TURNED SANS-SERIF CAPITAL Y
+2145;N # DOUBLE-STRUCK ITALIC CAPITAL D
+2146;N # DOUBLE-STRUCK ITALIC SMALL D
+2147;N # DOUBLE-STRUCK ITALIC SMALL E
+2148;N # DOUBLE-STRUCK ITALIC SMALL I
+2149;N # DOUBLE-STRUCK ITALIC SMALL J
+214A;N # PROPERTY LINE
+214B;N # TURNED AMPERSAND
+214C;N # PER SIGN
+214D;N # AKTIESELSKAB
+214E;N # TURNED SMALL F
+214F;N # SYMBOL FOR SAMARITAN SOURCE
+2150;N # VULGAR FRACTION ONE SEVENTH
+2151;N # VULGAR FRACTION ONE NINTH
+2152;N # VULGAR FRACTION ONE TENTH
+2153;A # VULGAR FRACTION ONE THIRD
+2154;A # VULGAR FRACTION TWO THIRDS
+2155;N # VULGAR FRACTION ONE FIFTH
+2156;N # VULGAR FRACTION TWO FIFTHS
+2157;N # VULGAR FRACTION THREE FIFTHS
+2158;N # VULGAR FRACTION FOUR FIFTHS
+2159;N # VULGAR FRACTION ONE SIXTH
+215A;N # VULGAR FRACTION FIVE SIXTHS
+215B;A # VULGAR FRACTION ONE EIGHTH
+215C;A # VULGAR FRACTION THREE EIGHTHS
+215D;A # VULGAR FRACTION FIVE EIGHTHS
+215E;A # VULGAR FRACTION SEVEN EIGHTHS
+215F;N # FRACTION NUMERATOR ONE
+2160;A # ROMAN NUMERAL ONE
+2161;A # ROMAN NUMERAL TWO
+2162;A # ROMAN NUMERAL THREE
+2163;A # ROMAN NUMERAL FOUR
+2164;A # ROMAN NUMERAL FIVE
+2165;A # ROMAN NUMERAL SIX
+2166;A # ROMAN NUMERAL SEVEN
+2167;A # ROMAN NUMERAL EIGHT
+2168;A # ROMAN NUMERAL NINE
+2169;A # ROMAN NUMERAL TEN
+216A;A # ROMAN NUMERAL ELEVEN
+216B;A # ROMAN NUMERAL TWELVE
+216C;N # ROMAN NUMERAL FIFTY
+216D;N # ROMAN NUMERAL ONE HUNDRED
+216E;N # ROMAN NUMERAL FIVE HUNDRED
+216F;N # ROMAN NUMERAL ONE THOUSAND
+2170;A # SMALL ROMAN NUMERAL ONE
+2171;A # SMALL ROMAN NUMERAL TWO
+2172;A # SMALL ROMAN NUMERAL THREE
+2173;A # SMALL ROMAN NUMERAL FOUR
+2174;A # SMALL ROMAN NUMERAL FIVE
+2175;A # SMALL ROMAN NUMERAL SIX
+2176;A # SMALL ROMAN NUMERAL SEVEN
+2177;A # SMALL ROMAN NUMERAL EIGHT
+2178;A # SMALL ROMAN NUMERAL NINE
+2179;A # SMALL ROMAN NUMERAL TEN
+217A;N # SMALL ROMAN NUMERAL ELEVEN
+217B;N # SMALL ROMAN NUMERAL TWELVE
+217C;N # SMALL ROMAN NUMERAL FIFTY
+217D;N # SMALL ROMAN NUMERAL ONE HUNDRED
+217E;N # SMALL ROMAN NUMERAL FIVE HUNDRED
+217F;N # SMALL ROMAN NUMERAL ONE THOUSAND
+2180;N # ROMAN NUMERAL ONE THOUSAND C D
+2181;N # ROMAN NUMERAL FIVE THOUSAND
+2182;N # ROMAN NUMERAL TEN THOUSAND
+2183;N # ROMAN NUMERAL REVERSED ONE HUNDRED
+2184;N # LATIN SMALL LETTER REVERSED C
+2185;N # ROMAN NUMERAL SIX LATE FORM
+2186;N # ROMAN NUMERAL FIFTY EARLY FORM
+2187;N # ROMAN NUMERAL FIFTY THOUSAND
+2188;N # ROMAN NUMERAL ONE HUNDRED THOUSAND
+2189;A # VULGAR FRACTION ZERO THIRDS
+2190;A # LEFTWARDS ARROW
+2191;A # UPWARDS ARROW
+2192;A # RIGHTWARDS ARROW
+2193;A # DOWNWARDS ARROW
+2194;A # LEFT RIGHT ARROW
+2195;A # UP DOWN ARROW
+2196;A # NORTH WEST ARROW
+2197;A # NORTH EAST ARROW
+2198;A # SOUTH EAST ARROW
+2199;A # SOUTH WEST ARROW
+219A;N # LEFTWARDS ARROW WITH STROKE
+219B;N # RIGHTWARDS ARROW WITH STROKE
+219C;N # LEFTWARDS WAVE ARROW
+219D;N # RIGHTWARDS WAVE ARROW
+219E;N # LEFTWARDS TWO HEADED ARROW
+219F;N # UPWARDS TWO HEADED ARROW
+21A0;N # RIGHTWARDS TWO HEADED ARROW
+21A1;N # DOWNWARDS TWO HEADED ARROW
+21A2;N # LEFTWARDS ARROW WITH TAIL
+21A3;N # RIGHTWARDS ARROW WITH TAIL
+21A4;N # LEFTWARDS ARROW FROM BAR
+21A5;N # UPWARDS ARROW FROM BAR
+21A6;N # RIGHTWARDS ARROW FROM BAR
+21A7;N # DOWNWARDS ARROW FROM BAR
+21A8;N # UP DOWN ARROW WITH BASE
+21A9;N # LEFTWARDS ARROW WITH HOOK
+21AA;N # RIGHTWARDS ARROW WITH HOOK
+21AB;N # LEFTWARDS ARROW WITH LOOP
+21AC;N # RIGHTWARDS ARROW WITH LOOP
+21AD;N # LEFT RIGHT WAVE ARROW
+21AE;N # LEFT RIGHT ARROW WITH STROKE
+21AF;N # DOWNWARDS ZIGZAG ARROW
+21B0;N # UPWARDS ARROW WITH TIP LEFTWARDS
+21B1;N # UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2;N # DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3;N # DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4;N # RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5;N # DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6;N # ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7;N # CLOCKWISE TOP SEMICIRCLE ARROW
+21B8;A # NORTH WEST ARROW TO LONG BAR
+21B9;A # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA;N # ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB;N # CLOCKWISE OPEN CIRCLE ARROW
+21BC;N # LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD;N # LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE;N # UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF;N # UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0;N # RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1;N # RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2;N # DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3;N # DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4;N # RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5;N # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6;N # LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7;N # LEFTWARDS PAIRED ARROWS
+21C8;N # UPWARDS PAIRED ARROWS
+21C9;N # RIGHTWARDS PAIRED ARROWS
+21CA;N # DOWNWARDS PAIRED ARROWS
+21CB;N # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC;N # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD;N # LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE;N # LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF;N # RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0;N # LEFTWARDS DOUBLE ARROW
+21D1;N # UPWARDS DOUBLE ARROW
+21D2;A # RIGHTWARDS DOUBLE ARROW
+21D3;N # DOWNWARDS DOUBLE ARROW
+21D4;A # LEFT RIGHT DOUBLE ARROW
+21D5;N # UP DOWN DOUBLE ARROW
+21D6;N # NORTH WEST DOUBLE ARROW
+21D7;N # NORTH EAST DOUBLE ARROW
+21D8;N # SOUTH EAST DOUBLE ARROW
+21D9;N # SOUTH WEST DOUBLE ARROW
+21DA;N # LEFTWARDS TRIPLE ARROW
+21DB;N # RIGHTWARDS TRIPLE ARROW
+21DC;N # LEFTWARDS SQUIGGLE ARROW
+21DD;N # RIGHTWARDS SQUIGGLE ARROW
+21DE;N # UPWARDS ARROW WITH DOUBLE STROKE
+21DF;N # DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0;N # LEFTWARDS DASHED ARROW
+21E1;N # UPWARDS DASHED ARROW
+21E2;N # RIGHTWARDS DASHED ARROW
+21E3;N # DOWNWARDS DASHED ARROW
+21E4;N # LEFTWARDS ARROW TO BAR
+21E5;N # RIGHTWARDS ARROW TO BAR
+21E6;N # LEFTWARDS WHITE ARROW
+21E7;A # UPWARDS WHITE ARROW
+21E8;N # RIGHTWARDS WHITE ARROW
+21E9;N # DOWNWARDS WHITE ARROW
+21EA;N # UPWARDS WHITE ARROW FROM BAR
+21EB;N # UPWARDS WHITE ARROW ON PEDESTAL
+21EC;N # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED;N # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE;N # UPWARDS WHITE DOUBLE ARROW
+21EF;N # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0;N # RIGHTWARDS WHITE ARROW FROM WALL
+21F1;N # NORTH WEST ARROW TO CORNER
+21F2;N # SOUTH EAST ARROW TO CORNER
+21F3;N # UP DOWN WHITE ARROW
+21F4;N # RIGHT ARROW WITH SMALL CIRCLE
+21F5;N # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6;N # THREE RIGHTWARDS ARROWS
+21F7;N # LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8;N # RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9;N # LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA;N # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB;N # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC;N # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD;N # LEFTWARDS OPEN-HEADED ARROW
+21FE;N # RIGHTWARDS OPEN-HEADED ARROW
+21FF;N # LEFT RIGHT OPEN-HEADED ARROW
+2200;A # FOR ALL
+2201;N # COMPLEMENT
+2202;A # PARTIAL DIFFERENTIAL
+2203;A # THERE EXISTS
+2204;N # THERE DOES NOT EXIST
+2205;N # EMPTY SET
+2206;N # INCREMENT
+2207;A # NABLA
+2208;A # ELEMENT OF
+2209;N # NOT AN ELEMENT OF
+220A;N # SMALL ELEMENT OF
+220B;A # CONTAINS AS MEMBER
+220C;N # DOES NOT CONTAIN AS MEMBER
+220D;N # SMALL CONTAINS AS MEMBER
+220E;N # END OF PROOF
+220F;A # N-ARY PRODUCT
+2210;N # N-ARY COPRODUCT
+2211;A # N-ARY SUMMATION
+2212;N # MINUS SIGN
+2213;N # MINUS-OR-PLUS SIGN
+2214;N # DOT PLUS
+2215;A # DIVISION SLASH
+2216;N # SET MINUS
+2217;N # ASTERISK OPERATOR
+2218;N # RING OPERATOR
+2219;N # BULLET OPERATOR
+221A;A # SQUARE ROOT
+221B;N # CUBE ROOT
+221C;N # FOURTH ROOT
+221D;A # PROPORTIONAL TO
+221E;A # INFINITY
+221F;A # RIGHT ANGLE
+2220;A # ANGLE
+2221;N # MEASURED ANGLE
+2222;N # SPHERICAL ANGLE
+2223;A # DIVIDES
+2224;N # DOES NOT DIVIDE
+2225;A # PARALLEL TO
+2226;N # NOT PARALLEL TO
+2227;A # LOGICAL AND
+2228;A # LOGICAL OR
+2229;A # INTERSECTION
+222A;A # UNION
+222B;A # INTEGRAL
+222C;A # DOUBLE INTEGRAL
+222D;N # TRIPLE INTEGRAL
+222E;A # CONTOUR INTEGRAL
+222F;N # SURFACE INTEGRAL
+2230;N # VOLUME INTEGRAL
+2231;N # CLOCKWISE INTEGRAL
+2232;N # CLOCKWISE CONTOUR INTEGRAL
+2233;N # ANTICLOCKWISE CONTOUR INTEGRAL
+2234;A # THEREFORE
+2235;A # BECAUSE
+2236;A # RATIO
+2237;A # PROPORTION
+2238;N # DOT MINUS
+2239;N # EXCESS
+223A;N # GEOMETRIC PROPORTION
+223B;N # HOMOTHETIC
+223C;A # TILDE OPERATOR
+223D;A # REVERSED TILDE
+223E;N # INVERTED LAZY S
+223F;N # SINE WAVE
+2240;N # WREATH PRODUCT
+2241;N # NOT TILDE
+2242;N # MINUS TILDE
+2243;N # ASYMPTOTICALLY EQUAL TO
+2244;N # NOT ASYMPTOTICALLY EQUAL TO
+2245;N # APPROXIMATELY EQUAL TO
+2246;N # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247;N # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248;A # ALMOST EQUAL TO
+2249;N # NOT ALMOST EQUAL TO
+224A;N # ALMOST EQUAL OR EQUAL TO
+224B;N # TRIPLE TILDE
+224C;A # ALL EQUAL TO
+224D;N # EQUIVALENT TO
+224E;N # GEOMETRICALLY EQUIVALENT TO
+224F;N # DIFFERENCE BETWEEN
+2250;N # APPROACHES THE LIMIT
+2251;N # GEOMETRICALLY EQUAL TO
+2252;A # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253;N # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254;N # COLON EQUALS
+2255;N # EQUALS COLON
+2256;N # RING IN EQUAL TO
+2257;N # RING EQUAL TO
+2258;N # CORRESPONDS TO
+2259;N # ESTIMATES
+225A;N # EQUIANGULAR TO
+225B;N # STAR EQUALS
+225C;N # DELTA EQUAL TO
+225D;N # EQUAL TO BY DEFINITION
+225E;N # MEASURED BY
+225F;N # QUESTIONED EQUAL TO
+2260;A # NOT EQUAL TO
+2261;A # IDENTICAL TO
+2262;N # NOT IDENTICAL TO
+2263;N # STRICTLY EQUIVALENT TO
+2264;A # LESS-THAN OR EQUAL TO
+2265;A # GREATER-THAN OR EQUAL TO
+2266;A # LESS-THAN OVER EQUAL TO
+2267;A # GREATER-THAN OVER EQUAL TO
+2268;N # LESS-THAN BUT NOT EQUAL TO
+2269;N # GREATER-THAN BUT NOT EQUAL TO
+226A;A # MUCH LESS-THAN
+226B;A # MUCH GREATER-THAN
+226C;N # BETWEEN
+226D;N # NOT EQUIVALENT TO
+226E;A # NOT LESS-THAN
+226F;A # NOT GREATER-THAN
+2270;N # NEITHER LESS-THAN NOR EQUAL TO
+2271;N # NEITHER GREATER-THAN NOR EQUAL TO
+2272;N # LESS-THAN OR EQUIVALENT TO
+2273;N # GREATER-THAN OR EQUIVALENT TO
+2274;N # NEITHER LESS-THAN NOR EQUIVALENT TO
+2275;N # NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276;N # LESS-THAN OR GREATER-THAN
+2277;N # GREATER-THAN OR LESS-THAN
+2278;N # NEITHER LESS-THAN NOR GREATER-THAN
+2279;N # NEITHER GREATER-THAN NOR LESS-THAN
+227A;N # PRECEDES
+227B;N # SUCCEEDS
+227C;N # PRECEDES OR EQUAL TO
+227D;N # SUCCEEDS OR EQUAL TO
+227E;N # PRECEDES OR EQUIVALENT TO
+227F;N # SUCCEEDS OR EQUIVALENT TO
+2280;N # DOES NOT PRECEDE
+2281;N # DOES NOT SUCCEED
+2282;A # SUBSET OF
+2283;A # SUPERSET OF
+2284;N # NOT A SUBSET OF
+2285;N # NOT A SUPERSET OF
+2286;A # SUBSET OF OR EQUAL TO
+2287;A # SUPERSET OF OR EQUAL TO
+2288;N # NEITHER A SUBSET OF NOR EQUAL TO
+2289;N # NEITHER A SUPERSET OF NOR EQUAL TO
+228A;N # SUBSET OF WITH NOT EQUAL TO
+228B;N # SUPERSET OF WITH NOT EQUAL TO
+228C;N # MULTISET
+228D;N # MULTISET MULTIPLICATION
+228E;N # MULTISET UNION
+228F;N # SQUARE IMAGE OF
+2290;N # SQUARE ORIGINAL OF
+2291;N # SQUARE IMAGE OF OR EQUAL TO
+2292;N # SQUARE ORIGINAL OF OR EQUAL TO
+2293;N # SQUARE CAP
+2294;N # SQUARE CUP
+2295;A # CIRCLED PLUS
+2296;N # CIRCLED MINUS
+2297;N # CIRCLED TIMES
+2298;N # CIRCLED DIVISION SLASH
+2299;A # CIRCLED DOT OPERATOR
+229A;N # CIRCLED RING OPERATOR
+229B;N # CIRCLED ASTERISK OPERATOR
+229C;N # CIRCLED EQUALS
+229D;N # CIRCLED DASH
+229E;N # SQUARED PLUS
+229F;N # SQUARED MINUS
+22A0;N # SQUARED TIMES
+22A1;N # SQUARED DOT OPERATOR
+22A2;N # RIGHT TACK
+22A3;N # LEFT TACK
+22A4;N # DOWN TACK
+22A5;A # UP TACK
+22A6;N # ASSERTION
+22A7;N # MODELS
+22A8;N # TRUE
+22A9;N # FORCES
+22AA;N # TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB;N # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC;N # DOES NOT PROVE
+22AD;N # NOT TRUE
+22AE;N # DOES NOT FORCE
+22AF;N # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0;N # PRECEDES UNDER RELATION
+22B1;N # SUCCEEDS UNDER RELATION
+22B2;N # NORMAL SUBGROUP OF
+22B3;N # CONTAINS AS NORMAL SUBGROUP
+22B4;N # NORMAL SUBGROUP OF OR EQUAL TO
+22B5;N # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6;N # ORIGINAL OF
+22B7;N # IMAGE OF
+22B8;N # MULTIMAP
+22B9;N # HERMITIAN CONJUGATE MATRIX
+22BA;N # INTERCALATE
+22BB;N # XOR
+22BC;N # NAND
+22BD;N # NOR
+22BE;N # RIGHT ANGLE WITH ARC
+22BF;A # RIGHT TRIANGLE
+22C0;N # N-ARY LOGICAL AND
+22C1;N # N-ARY LOGICAL OR
+22C2;N # N-ARY INTERSECTION
+22C3;N # N-ARY UNION
+22C4;N # DIAMOND OPERATOR
+22C5;N # DOT OPERATOR
+22C6;N # STAR OPERATOR
+22C7;N # DIVISION TIMES
+22C8;N # BOWTIE
+22C9;N # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA;N # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB;N # LEFT SEMIDIRECT PRODUCT
+22CC;N # RIGHT SEMIDIRECT PRODUCT
+22CD;N # REVERSED TILDE EQUALS
+22CE;N # CURLY LOGICAL OR
+22CF;N # CURLY LOGICAL AND
+22D0;N # DOUBLE SUBSET
+22D1;N # DOUBLE SUPERSET
+22D2;N # DOUBLE INTERSECTION
+22D3;N # DOUBLE UNION
+22D4;N # PITCHFORK
+22D5;N # EQUAL AND PARALLEL TO
+22D6;N # LESS-THAN WITH DOT
+22D7;N # GREATER-THAN WITH DOT
+22D8;N # VERY MUCH LESS-THAN
+22D9;N # VERY MUCH GREATER-THAN
+22DA;N # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB;N # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC;N # EQUAL TO OR LESS-THAN
+22DD;N # EQUAL TO OR GREATER-THAN
+22DE;N # EQUAL TO OR PRECEDES
+22DF;N # EQUAL TO OR SUCCEEDS
+22E0;N # DOES NOT PRECEDE OR EQUAL
+22E1;N # DOES NOT SUCCEED OR EQUAL
+22E2;N # NOT SQUARE IMAGE OF OR EQUAL TO
+22E3;N # NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4;N # SQUARE IMAGE OF OR NOT EQUAL TO
+22E5;N # SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6;N # LESS-THAN BUT NOT EQUIVALENT TO
+22E7;N # GREATER-THAN BUT NOT EQUIVALENT TO
+22E8;N # PRECEDES BUT NOT EQUIVALENT TO
+22E9;N # SUCCEEDS BUT NOT EQUIVALENT TO
+22EA;N # NOT NORMAL SUBGROUP OF
+22EB;N # DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC;N # NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED;N # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE;N # VERTICAL ELLIPSIS
+22EF;N # MIDLINE HORIZONTAL ELLIPSIS
+22F0;N # UP RIGHT DIAGONAL ELLIPSIS
+22F1;N # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2;N # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3;N # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4;N # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5;N # ELEMENT OF WITH DOT ABOVE
+22F6;N # ELEMENT OF WITH OVERBAR
+22F7;N # SMALL ELEMENT OF WITH OVERBAR
+22F8;N # ELEMENT OF WITH UNDERBAR
+22F9;N # ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA;N # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB;N # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC;N # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD;N # CONTAINS WITH OVERBAR
+22FE;N # SMALL CONTAINS WITH OVERBAR
+22FF;N # Z NOTATION BAG MEMBERSHIP
+2300;N # DIAMETER SIGN
+2301;N # ELECTRIC ARROW
+2302;N # HOUSE
+2303;N # UP ARROWHEAD
+2304;N # DOWN ARROWHEAD
+2305;N # PROJECTIVE
+2306;N # PERSPECTIVE
+2307;N # WAVY LINE
+2308;N # LEFT CEILING
+2309;N # RIGHT CEILING
+230A;N # LEFT FLOOR
+230B;N # RIGHT FLOOR
+230C;N # BOTTOM RIGHT CROP
+230D;N # BOTTOM LEFT CROP
+230E;N # TOP RIGHT CROP
+230F;N # TOP LEFT CROP
+2310;N # REVERSED NOT SIGN
+2311;N # SQUARE LOZENGE
+2312;A # ARC
+2313;N # SEGMENT
+2314;N # SECTOR
+2315;N # TELEPHONE RECORDER
+2316;N # POSITION INDICATOR
+2317;N # VIEWDATA SQUARE
+2318;N # PLACE OF INTEREST SIGN
+2319;N # TURNED NOT SIGN
+231A;N # WATCH
+231B;N # HOURGLASS
+231C;N # TOP LEFT CORNER
+231D;N # TOP RIGHT CORNER
+231E;N # BOTTOM LEFT CORNER
+231F;N # BOTTOM RIGHT CORNER
+2320;N # TOP HALF INTEGRAL
+2321;N # BOTTOM HALF INTEGRAL
+2322;N # FROWN
+2323;N # SMILE
+2324;N # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325;N # OPTION KEY
+2326;N # ERASE TO THE RIGHT
+2327;N # X IN A RECTANGLE BOX
+2328;N # KEYBOARD
+2329;W # LEFT-POINTING ANGLE BRACKET
+232A;W # RIGHT-POINTING ANGLE BRACKET
+232B;N # ERASE TO THE LEFT
+232C;N # BENZENE RING
+232D;N # CYLINDRICITY
+232E;N # ALL AROUND-PROFILE
+232F;N # SYMMETRY
+2330;N # TOTAL RUNOUT
+2331;N # DIMENSION ORIGIN
+2332;N # CONICAL TAPER
+2333;N # SLOPE
+2334;N # COUNTERBORE
+2335;N # COUNTERSINK
+2336;N # APL FUNCTIONAL SYMBOL I-BEAM
+2337;N # APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338;N # APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339;N # APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A;N # APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B;N # APL FUNCTIONAL SYMBOL QUAD JOT
+233C;N # APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D;N # APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E;N # APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F;N # APL FUNCTIONAL SYMBOL SLASH BAR
+2340;N # APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341;N # APL FUNCTIONAL SYMBOL QUAD SLASH
+2342;N # APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343;N # APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344;N # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345;N # APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346;N # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347;N # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348;N # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349;N # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A;N # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B;N # APL FUNCTIONAL SYMBOL DELTA STILE
+234C;N # APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D;N # APL FUNCTIONAL SYMBOL QUAD DELTA
+234E;N # APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F;N # APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350;N # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351;N # APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352;N # APL FUNCTIONAL SYMBOL DEL STILE
+2353;N # APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354;N # APL FUNCTIONAL SYMBOL QUAD DEL
+2355;N # APL FUNCTIONAL SYMBOL UP TACK JOT
+2356;N # APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357;N # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358;N # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359;N # APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A;N # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B;N # APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C;N # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D;N # APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E;N # APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F;N # APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360;N # APL FUNCTIONAL SYMBOL QUAD COLON
+2361;N # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362;N # APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363;N # APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364;N # APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365;N # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366;N # APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367;N # APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368;N # APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369;N # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A;N # APL FUNCTIONAL SYMBOL COMMA BAR
+236B;N # APL FUNCTIONAL SYMBOL DEL TILDE
+236C;N # APL FUNCTIONAL SYMBOL ZILDE
+236D;N # APL FUNCTIONAL SYMBOL STILE TILDE
+236E;N # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F;N # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370;N # APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371;N # APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372;N # APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373;N # APL FUNCTIONAL SYMBOL IOTA
+2374;N # APL FUNCTIONAL SYMBOL RHO
+2375;N # APL FUNCTIONAL SYMBOL OMEGA
+2376;N # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377;N # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378;N # APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379;N # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A;N # APL FUNCTIONAL SYMBOL ALPHA
+237B;N # NOT CHECK MARK
+237C;N # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D;N # SHOULDERED OPEN BOX
+237E;N # BELL SYMBOL
+237F;N # VERTICAL LINE WITH MIDDLE DOT
+2380;N # INSERTION SYMBOL
+2381;N # CONTINUOUS UNDERLINE SYMBOL
+2382;N # DISCONTINUOUS UNDERLINE SYMBOL
+2383;N # EMPHASIS SYMBOL
+2384;N # COMPOSITION SYMBOL
+2385;N # WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386;N # ENTER SYMBOL
+2387;N # ALTERNATIVE KEY SYMBOL
+2388;N # HELM SYMBOL
+2389;N # CIRCLED HORIZONTAL BAR WITH NOTCH
+238A;N # CIRCLED TRIANGLE DOWN
+238B;N # BROKEN CIRCLE WITH NORTHWEST ARROW
+238C;N # UNDO SYMBOL
+238D;N # MONOSTABLE SYMBOL
+238E;N # HYSTERESIS SYMBOL
+238F;N # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390;N # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391;N # PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392;N # PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393;N # DIRECT CURRENT SYMBOL FORM TWO
+2394;N # SOFTWARE-FUNCTION SYMBOL
+2395;N # APL FUNCTIONAL SYMBOL QUAD
+2396;N # DECIMAL SEPARATOR KEY SYMBOL
+2397;N # PREVIOUS PAGE
+2398;N # NEXT PAGE
+2399;N # PRINT SCREEN SYMBOL
+239A;N # CLEAR SCREEN SYMBOL
+239B;N # LEFT PARENTHESIS UPPER HOOK
+239C;N # LEFT PARENTHESIS EXTENSION
+239D;N # LEFT PARENTHESIS LOWER HOOK
+239E;N # RIGHT PARENTHESIS UPPER HOOK
+239F;N # RIGHT PARENTHESIS EXTENSION
+23A0;N # RIGHT PARENTHESIS LOWER HOOK
+23A1;N # LEFT SQUARE BRACKET UPPER CORNER
+23A2;N # LEFT SQUARE BRACKET EXTENSION
+23A3;N # LEFT SQUARE BRACKET LOWER CORNER
+23A4;N # RIGHT SQUARE BRACKET UPPER CORNER
+23A5;N # RIGHT SQUARE BRACKET EXTENSION
+23A6;N # RIGHT SQUARE BRACKET LOWER CORNER
+23A7;N # LEFT CURLY BRACKET UPPER HOOK
+23A8;N # LEFT CURLY BRACKET MIDDLE PIECE
+23A9;N # LEFT CURLY BRACKET LOWER HOOK
+23AA;N # CURLY BRACKET EXTENSION
+23AB;N # RIGHT CURLY BRACKET UPPER HOOK
+23AC;N # RIGHT CURLY BRACKET MIDDLE PIECE
+23AD;N # RIGHT CURLY BRACKET LOWER HOOK
+23AE;N # INTEGRAL EXTENSION
+23AF;N # HORIZONTAL LINE EXTENSION
+23B0;N # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1;N # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2;N # SUMMATION TOP
+23B3;N # SUMMATION BOTTOM
+23B4;N # TOP SQUARE BRACKET
+23B5;N # BOTTOM SQUARE BRACKET
+23B6;N # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7;N # RADICAL SYMBOL BOTTOM
+23B8;N # LEFT VERTICAL BOX LINE
+23B9;N # RIGHT VERTICAL BOX LINE
+23BA;N # HORIZONTAL SCAN LINE-1
+23BB;N # HORIZONTAL SCAN LINE-3
+23BC;N # HORIZONTAL SCAN LINE-7
+23BD;N # HORIZONTAL SCAN LINE-9
+23BE;N # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF;N # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0;N # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3;N # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6;N # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB;N # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC;N # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD;N # SQUARE FOOT
+23CE;N # RETURN SYMBOL
+23CF;N # EJECT SYMBOL
+23D0;N # VERTICAL LINE EXTENSION
+23D1;N # METRICAL BREVE
+23D2;N # METRICAL LONG OVER SHORT
+23D3;N # METRICAL SHORT OVER LONG
+23D4;N # METRICAL LONG OVER TWO SHORTS
+23D5;N # METRICAL TWO SHORTS OVER LONG
+23D6;N # METRICAL TWO SHORTS JOINED
+23D7;N # METRICAL TRISEME
+23D8;N # METRICAL TETRASEME
+23D9;N # METRICAL PENTASEME
+23DA;N # EARTH GROUND
+23DB;N # FUSE
+23DC;N # TOP PARENTHESIS
+23DD;N # BOTTOM PARENTHESIS
+23DE;N # TOP CURLY BRACKET
+23DF;N # BOTTOM CURLY BRACKET
+23E0;N # TOP TORTOISE SHELL BRACKET
+23E1;N # BOTTOM TORTOISE SHELL BRACKET
+23E2;N # WHITE TRAPEZIUM
+23E3;N # BENZENE RING WITH CIRCLE
+23E4;N # STRAIGHTNESS
+23E5;N # FLATNESS
+23E6;N # AC CURRENT
+23E7;N # ELECTRICAL INTERSECTION
+23E8;N # DECIMAL EXPONENT SYMBOL
+2400;N # SYMBOL FOR NULL
+2401;N # SYMBOL FOR START OF HEADING
+2402;N # SYMBOL FOR START OF TEXT
+2403;N # SYMBOL FOR END OF TEXT
+2404;N # SYMBOL FOR END OF TRANSMISSION
+2405;N # SYMBOL FOR ENQUIRY
+2406;N # SYMBOL FOR ACKNOWLEDGE
+2407;N # SYMBOL FOR BELL
+2408;N # SYMBOL FOR BACKSPACE
+2409;N # SYMBOL FOR HORIZONTAL TABULATION
+240A;N # SYMBOL FOR LINE FEED
+240B;N # SYMBOL FOR VERTICAL TABULATION
+240C;N # SYMBOL FOR FORM FEED
+240D;N # SYMBOL FOR CARRIAGE RETURN
+240E;N # SYMBOL FOR SHIFT OUT
+240F;N # SYMBOL FOR SHIFT IN
+2410;N # SYMBOL FOR DATA LINK ESCAPE
+2411;N # SYMBOL FOR DEVICE CONTROL ONE
+2412;N # SYMBOL FOR DEVICE CONTROL TWO
+2413;N # SYMBOL FOR DEVICE CONTROL THREE
+2414;N # SYMBOL FOR DEVICE CONTROL FOUR
+2415;N # SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416;N # SYMBOL FOR SYNCHRONOUS IDLE
+2417;N # SYMBOL FOR END OF TRANSMISSION BLOCK
+2418;N # SYMBOL FOR CANCEL
+2419;N # SYMBOL FOR END OF MEDIUM
+241A;N # SYMBOL FOR SUBSTITUTE
+241B;N # SYMBOL FOR ESCAPE
+241C;N # SYMBOL FOR FILE SEPARATOR
+241D;N # SYMBOL FOR GROUP SEPARATOR
+241E;N # SYMBOL FOR RECORD SEPARATOR
+241F;N # SYMBOL FOR UNIT SEPARATOR
+2420;N # SYMBOL FOR SPACE
+2421;N # SYMBOL FOR DELETE
+2422;N # BLANK SYMBOL
+2423;N # OPEN BOX
+2424;N # SYMBOL FOR NEWLINE
+2425;N # SYMBOL FOR DELETE FORM TWO
+2426;N # SYMBOL FOR SUBSTITUTE FORM TWO
+2440;N # OCR HOOK
+2441;N # OCR CHAIR
+2442;N # OCR FORK
+2443;N # OCR INVERTED FORK
+2444;N # OCR BELT BUCKLE
+2445;N # OCR BOW TIE
+2446;N # OCR BRANCH BANK IDENTIFICATION
+2447;N # OCR AMOUNT OF CHECK
+2448;N # OCR DASH
+2449;N # OCR CUSTOMER ACCOUNT NUMBER
+244A;N # OCR DOUBLE BACKSLASH
+2460;A # CIRCLED DIGIT ONE
+2461;A # CIRCLED DIGIT TWO
+2462;A # CIRCLED DIGIT THREE
+2463;A # CIRCLED DIGIT FOUR
+2464;A # CIRCLED DIGIT FIVE
+2465;A # CIRCLED DIGIT SIX
+2466;A # CIRCLED DIGIT SEVEN
+2467;A # CIRCLED DIGIT EIGHT
+2468;A # CIRCLED DIGIT NINE
+2469;A # CIRCLED NUMBER TEN
+246A;A # CIRCLED NUMBER ELEVEN
+246B;A # CIRCLED NUMBER TWELVE
+246C;A # CIRCLED NUMBER THIRTEEN
+246D;A # CIRCLED NUMBER FOURTEEN
+246E;A # CIRCLED NUMBER FIFTEEN
+246F;A # CIRCLED NUMBER SIXTEEN
+2470;A # CIRCLED NUMBER SEVENTEEN
+2471;A # CIRCLED NUMBER EIGHTEEN
+2472;A # CIRCLED NUMBER NINETEEN
+2473;A # CIRCLED NUMBER TWENTY
+2474;A # PARENTHESIZED DIGIT ONE
+2475;A # PARENTHESIZED DIGIT TWO
+2476;A # PARENTHESIZED DIGIT THREE
+2477;A # PARENTHESIZED DIGIT FOUR
+2478;A # PARENTHESIZED DIGIT FIVE
+2479;A # PARENTHESIZED DIGIT SIX
+247A;A # PARENTHESIZED DIGIT SEVEN
+247B;A # PARENTHESIZED DIGIT EIGHT
+247C;A # PARENTHESIZED DIGIT NINE
+247D;A # PARENTHESIZED NUMBER TEN
+247E;A # PARENTHESIZED NUMBER ELEVEN
+247F;A # PARENTHESIZED NUMBER TWELVE
+2480;A # PARENTHESIZED NUMBER THIRTEEN
+2481;A # PARENTHESIZED NUMBER FOURTEEN
+2482;A # PARENTHESIZED NUMBER FIFTEEN
+2483;A # PARENTHESIZED NUMBER SIXTEEN
+2484;A # PARENTHESIZED NUMBER SEVENTEEN
+2485;A # PARENTHESIZED NUMBER EIGHTEEN
+2486;A # PARENTHESIZED NUMBER NINETEEN
+2487;A # PARENTHESIZED NUMBER TWENTY
+2488;A # DIGIT ONE FULL STOP
+2489;A # DIGIT TWO FULL STOP
+248A;A # DIGIT THREE FULL STOP
+248B;A # DIGIT FOUR FULL STOP
+248C;A # DIGIT FIVE FULL STOP
+248D;A # DIGIT SIX FULL STOP
+248E;A # DIGIT SEVEN FULL STOP
+248F;A # DIGIT EIGHT FULL STOP
+2490;A # DIGIT NINE FULL STOP
+2491;A # NUMBER TEN FULL STOP
+2492;A # NUMBER ELEVEN FULL STOP
+2493;A # NUMBER TWELVE FULL STOP
+2494;A # NUMBER THIRTEEN FULL STOP
+2495;A # NUMBER FOURTEEN FULL STOP
+2496;A # NUMBER FIFTEEN FULL STOP
+2497;A # NUMBER SIXTEEN FULL STOP
+2498;A # NUMBER SEVENTEEN FULL STOP
+2499;A # NUMBER EIGHTEEN FULL STOP
+249A;A # NUMBER NINETEEN FULL STOP
+249B;A # NUMBER TWENTY FULL STOP
+249C;A # PARENTHESIZED LATIN SMALL LETTER A
+249D;A # PARENTHESIZED LATIN SMALL LETTER B
+249E;A # PARENTHESIZED LATIN SMALL LETTER C
+249F;A # PARENTHESIZED LATIN SMALL LETTER D
+24A0;A # PARENTHESIZED LATIN SMALL LETTER E
+24A1;A # PARENTHESIZED LATIN SMALL LETTER F
+24A2;A # PARENTHESIZED LATIN SMALL LETTER G
+24A3;A # PARENTHESIZED LATIN SMALL LETTER H
+24A4;A # PARENTHESIZED LATIN SMALL LETTER I
+24A5;A # PARENTHESIZED LATIN SMALL LETTER J
+24A6;A # PARENTHESIZED LATIN SMALL LETTER K
+24A7;A # PARENTHESIZED LATIN SMALL LETTER L
+24A8;A # PARENTHESIZED LATIN SMALL LETTER M
+24A9;A # PARENTHESIZED LATIN SMALL LETTER N
+24AA;A # PARENTHESIZED LATIN SMALL LETTER O
+24AB;A # PARENTHESIZED LATIN SMALL LETTER P
+24AC;A # PARENTHESIZED LATIN SMALL LETTER Q
+24AD;A # PARENTHESIZED LATIN SMALL LETTER R
+24AE;A # PARENTHESIZED LATIN SMALL LETTER S
+24AF;A # PARENTHESIZED LATIN SMALL LETTER T
+24B0;A # PARENTHESIZED LATIN SMALL LETTER U
+24B1;A # PARENTHESIZED LATIN SMALL LETTER V
+24B2;A # PARENTHESIZED LATIN SMALL LETTER W
+24B3;A # PARENTHESIZED LATIN SMALL LETTER X
+24B4;A # PARENTHESIZED LATIN SMALL LETTER Y
+24B5;A # PARENTHESIZED LATIN SMALL LETTER Z
+24B6;A # CIRCLED LATIN CAPITAL LETTER A
+24B7;A # CIRCLED LATIN CAPITAL LETTER B
+24B8;A # CIRCLED LATIN CAPITAL LETTER C
+24B9;A # CIRCLED LATIN CAPITAL LETTER D
+24BA;A # CIRCLED LATIN CAPITAL LETTER E
+24BB;A # CIRCLED LATIN CAPITAL LETTER F
+24BC;A # CIRCLED LATIN CAPITAL LETTER G
+24BD;A # CIRCLED LATIN CAPITAL LETTER H
+24BE;A # CIRCLED LATIN CAPITAL LETTER I
+24BF;A # CIRCLED LATIN CAPITAL LETTER J
+24C0;A # CIRCLED LATIN CAPITAL LETTER K
+24C1;A # CIRCLED LATIN CAPITAL LETTER L
+24C2;A # CIRCLED LATIN CAPITAL LETTER M
+24C3;A # CIRCLED LATIN CAPITAL LETTER N
+24C4;A # CIRCLED LATIN CAPITAL LETTER O
+24C5;A # CIRCLED LATIN CAPITAL LETTER P
+24C6;A # CIRCLED LATIN CAPITAL LETTER Q
+24C7;A # CIRCLED LATIN CAPITAL LETTER R
+24C8;A # CIRCLED LATIN CAPITAL LETTER S
+24C9;A # CIRCLED LATIN CAPITAL LETTER T
+24CA;A # CIRCLED LATIN CAPITAL LETTER U
+24CB;A # CIRCLED LATIN CAPITAL LETTER V
+24CC;A # CIRCLED LATIN CAPITAL LETTER W
+24CD;A # CIRCLED LATIN CAPITAL LETTER X
+24CE;A # CIRCLED LATIN CAPITAL LETTER Y
+24CF;A # CIRCLED LATIN CAPITAL LETTER Z
+24D0;A # CIRCLED LATIN SMALL LETTER A
+24D1;A # CIRCLED LATIN SMALL LETTER B
+24D2;A # CIRCLED LATIN SMALL LETTER C
+24D3;A # CIRCLED LATIN SMALL LETTER D
+24D4;A # CIRCLED LATIN SMALL LETTER E
+24D5;A # CIRCLED LATIN SMALL LETTER F
+24D6;A # CIRCLED LATIN SMALL LETTER G
+24D7;A # CIRCLED LATIN SMALL LETTER H
+24D8;A # CIRCLED LATIN SMALL LETTER I
+24D9;A # CIRCLED LATIN SMALL LETTER J
+24DA;A # CIRCLED LATIN SMALL LETTER K
+24DB;A # CIRCLED LATIN SMALL LETTER L
+24DC;A # CIRCLED LATIN SMALL LETTER M
+24DD;A # CIRCLED LATIN SMALL LETTER N
+24DE;A # CIRCLED LATIN SMALL LETTER O
+24DF;A # CIRCLED LATIN SMALL LETTER P
+24E0;A # CIRCLED LATIN SMALL LETTER Q
+24E1;A # CIRCLED LATIN SMALL LETTER R
+24E2;A # CIRCLED LATIN SMALL LETTER S
+24E3;A # CIRCLED LATIN SMALL LETTER T
+24E4;A # CIRCLED LATIN SMALL LETTER U
+24E5;A # CIRCLED LATIN SMALL LETTER V
+24E6;A # CIRCLED LATIN SMALL LETTER W
+24E7;A # CIRCLED LATIN SMALL LETTER X
+24E8;A # CIRCLED LATIN SMALL LETTER Y
+24E9;A # CIRCLED LATIN SMALL LETTER Z
+24EA;N # CIRCLED DIGIT ZERO
+24EB;A # NEGATIVE CIRCLED NUMBER ELEVEN
+24EC;A # NEGATIVE CIRCLED NUMBER TWELVE
+24ED;A # NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE;A # NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF;A # NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0;A # NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1;A # NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2;A # NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3;A # NEGATIVE CIRCLED NUMBER NINETEEN
+24F4;A # NEGATIVE CIRCLED NUMBER TWENTY
+24F5;A # DOUBLE CIRCLED DIGIT ONE
+24F6;A # DOUBLE CIRCLED DIGIT TWO
+24F7;A # DOUBLE CIRCLED DIGIT THREE
+24F8;A # DOUBLE CIRCLED DIGIT FOUR
+24F9;A # DOUBLE CIRCLED DIGIT FIVE
+24FA;A # DOUBLE CIRCLED DIGIT SIX
+24FB;A # DOUBLE CIRCLED DIGIT SEVEN
+24FC;A # DOUBLE CIRCLED DIGIT EIGHT
+24FD;A # DOUBLE CIRCLED DIGIT NINE
+24FE;A # DOUBLE CIRCLED NUMBER TEN
+24FF;A # NEGATIVE CIRCLED DIGIT ZERO
+2500;A # BOX DRAWINGS LIGHT HORIZONTAL
+2501;A # BOX DRAWINGS HEAVY HORIZONTAL
+2502;A # BOX DRAWINGS LIGHT VERTICAL
+2503;A # BOX DRAWINGS HEAVY VERTICAL
+2504;A # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505;A # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506;A # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507;A # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508;A # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509;A # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A;A # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B;A # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C;A # BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D;A # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E;A # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F;A # BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510;A # BOX DRAWINGS LIGHT DOWN AND LEFT
+2511;A # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512;A # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513;A # BOX DRAWINGS HEAVY DOWN AND LEFT
+2514;A # BOX DRAWINGS LIGHT UP AND RIGHT
+2515;A # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516;A # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517;A # BOX DRAWINGS HEAVY UP AND RIGHT
+2518;A # BOX DRAWINGS LIGHT UP AND LEFT
+2519;A # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A;A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B;A # BOX DRAWINGS HEAVY UP AND LEFT
+251C;A # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D;A # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E;A # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F;A # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520;A # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521;A # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522;A # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523;A # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524;A # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525;A # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526;A # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527;A # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528;A # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529;A # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A;A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B;A # BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C;A # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D;A # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E;A # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F;A # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530;A # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531;A # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532;A # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533;A # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534;A # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535;A # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536;A # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537;A # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538;A # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539;A # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A;A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B;A # BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C;A # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D;A # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E;A # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F;A # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540;A # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541;A # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542;A # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543;A # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544;A # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545;A # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546;A # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547;A # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548;A # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549;A # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A;A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B;A # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C;N # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D;N # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E;N # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F;N # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550;A # BOX DRAWINGS DOUBLE HORIZONTAL
+2551;A # BOX DRAWINGS DOUBLE VERTICAL
+2552;A # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553;A # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554;A # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555;A # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556;A # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557;A # BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558;A # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559;A # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A;A # BOX DRAWINGS DOUBLE UP AND RIGHT
+255B;A # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C;A # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D;A # BOX DRAWINGS DOUBLE UP AND LEFT
+255E;A # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F;A # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560;A # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561;A # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562;A # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563;A # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564;A # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565;A # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566;A # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567;A # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568;A # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569;A # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A;A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B;A # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C;A # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D;A # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E;A # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F;A # BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570;A # BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571;A # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572;A # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573;A # BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574;N # BOX DRAWINGS LIGHT LEFT
+2575;N # BOX DRAWINGS LIGHT UP
+2576;N # BOX DRAWINGS LIGHT RIGHT
+2577;N # BOX DRAWINGS LIGHT DOWN
+2578;N # BOX DRAWINGS HEAVY LEFT
+2579;N # BOX DRAWINGS HEAVY UP
+257A;N # BOX DRAWINGS HEAVY RIGHT
+257B;N # BOX DRAWINGS HEAVY DOWN
+257C;N # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D;N # BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E;N # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F;N # BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580;A # UPPER HALF BLOCK
+2581;A # LOWER ONE EIGHTH BLOCK
+2582;A # LOWER ONE QUARTER BLOCK
+2583;A # LOWER THREE EIGHTHS BLOCK
+2584;A # LOWER HALF BLOCK
+2585;A # LOWER FIVE EIGHTHS BLOCK
+2586;A # LOWER THREE QUARTERS BLOCK
+2587;A # LOWER SEVEN EIGHTHS BLOCK
+2588;A # FULL BLOCK
+2589;A # LEFT SEVEN EIGHTHS BLOCK
+258A;A # LEFT THREE QUARTERS BLOCK
+258B;A # LEFT FIVE EIGHTHS BLOCK
+258C;A # LEFT HALF BLOCK
+258D;A # LEFT THREE EIGHTHS BLOCK
+258E;A # LEFT ONE QUARTER BLOCK
+258F;A # LEFT ONE EIGHTH BLOCK
+2590;N # RIGHT HALF BLOCK
+2591;N # LIGHT SHADE
+2592;A # MEDIUM SHADE
+2593;A # DARK SHADE
+2594;A # UPPER ONE EIGHTH BLOCK
+2595;A # RIGHT ONE EIGHTH BLOCK
+2596;N # QUADRANT LOWER LEFT
+2597;N # QUADRANT LOWER RIGHT
+2598;N # QUADRANT UPPER LEFT
+2599;N # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A;N # QUADRANT UPPER LEFT AND LOWER RIGHT
+259B;N # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C;N # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D;N # QUADRANT UPPER RIGHT
+259E;N # QUADRANT UPPER RIGHT AND LOWER LEFT
+259F;N # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0;A # BLACK SQUARE
+25A1;A # WHITE SQUARE
+25A2;N # WHITE SQUARE WITH ROUNDED CORNERS
+25A3;A # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4;A # SQUARE WITH HORIZONTAL FILL
+25A5;A # SQUARE WITH VERTICAL FILL
+25A6;A # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7;A # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8;A # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9;A # SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA;N # BLACK SMALL SQUARE
+25AB;N # WHITE SMALL SQUARE
+25AC;N # BLACK RECTANGLE
+25AD;N # WHITE RECTANGLE
+25AE;N # BLACK VERTICAL RECTANGLE
+25AF;N # WHITE VERTICAL RECTANGLE
+25B0;N # BLACK PARALLELOGRAM
+25B1;N # WHITE PARALLELOGRAM
+25B2;A # BLACK UP-POINTING TRIANGLE
+25B3;A # WHITE UP-POINTING TRIANGLE
+25B4;N # BLACK UP-POINTING SMALL TRIANGLE
+25B5;N # WHITE UP-POINTING SMALL TRIANGLE
+25B6;A # BLACK RIGHT-POINTING TRIANGLE
+25B7;A # WHITE RIGHT-POINTING TRIANGLE
+25B8;N # BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9;N # WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA;N # BLACK RIGHT-POINTING POINTER
+25BB;N # WHITE RIGHT-POINTING POINTER
+25BC;A # BLACK DOWN-POINTING TRIANGLE
+25BD;A # WHITE DOWN-POINTING TRIANGLE
+25BE;N # BLACK DOWN-POINTING SMALL TRIANGLE
+25BF;N # WHITE DOWN-POINTING SMALL TRIANGLE
+25C0;A # BLACK LEFT-POINTING TRIANGLE
+25C1;A # WHITE LEFT-POINTING TRIANGLE
+25C2;N # BLACK LEFT-POINTING SMALL TRIANGLE
+25C3;N # WHITE LEFT-POINTING SMALL TRIANGLE
+25C4;N # BLACK LEFT-POINTING POINTER
+25C5;N # WHITE LEFT-POINTING POINTER
+25C6;A # BLACK DIAMOND
+25C7;A # WHITE DIAMOND
+25C8;A # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9;N # FISHEYE
+25CA;N # LOZENGE
+25CB;A # WHITE CIRCLE
+25CC;N # DOTTED CIRCLE
+25CD;N # CIRCLE WITH VERTICAL FILL
+25CE;A # BULLSEYE
+25CF;A # BLACK CIRCLE
+25D0;A # CIRCLE WITH LEFT HALF BLACK
+25D1;A # CIRCLE WITH RIGHT HALF BLACK
+25D2;N # CIRCLE WITH LOWER HALF BLACK
+25D3;N # CIRCLE WITH UPPER HALF BLACK
+25D4;N # CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5;N # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6;N # LEFT HALF BLACK CIRCLE
+25D7;N # RIGHT HALF BLACK CIRCLE
+25D8;N # INVERSE BULLET
+25D9;N # INVERSE WHITE CIRCLE
+25DA;N # UPPER HALF INVERSE WHITE CIRCLE
+25DB;N # LOWER HALF INVERSE WHITE CIRCLE
+25DC;N # UPPER LEFT QUADRANT CIRCULAR ARC
+25DD;N # UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE;N # LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF;N # LOWER LEFT QUADRANT CIRCULAR ARC
+25E0;N # UPPER HALF CIRCLE
+25E1;N # LOWER HALF CIRCLE
+25E2;A # BLACK LOWER RIGHT TRIANGLE
+25E3;A # BLACK LOWER LEFT TRIANGLE
+25E4;A # BLACK UPPER LEFT TRIANGLE
+25E5;A # BLACK UPPER RIGHT TRIANGLE
+25E6;N # WHITE BULLET
+25E7;N # SQUARE WITH LEFT HALF BLACK
+25E8;N # SQUARE WITH RIGHT HALF BLACK
+25E9;N # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA;N # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB;N # WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC;N # WHITE UP-POINTING TRIANGLE WITH DOT
+25ED;N # UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE;N # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF;A # LARGE CIRCLE
+25F0;N # WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1;N # WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2;N # WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3;N # WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4;N # WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5;N # WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6;N # WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7;N # WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8;N # UPPER LEFT TRIANGLE
+25F9;N # UPPER RIGHT TRIANGLE
+25FA;N # LOWER LEFT TRIANGLE
+25FB;N # WHITE MEDIUM SQUARE
+25FC;N # BLACK MEDIUM SQUARE
+25FD;N # WHITE MEDIUM SMALL SQUARE
+25FE;N # BLACK MEDIUM SMALL SQUARE
+25FF;N # LOWER RIGHT TRIANGLE
+2600;N # BLACK SUN WITH RAYS
+2601;N # CLOUD
+2602;N # UMBRELLA
+2603;N # SNOWMAN
+2604;N # COMET
+2605;A # BLACK STAR
+2606;A # WHITE STAR
+2607;N # LIGHTNING
+2608;N # THUNDERSTORM
+2609;A # SUN
+260A;N # ASCENDING NODE
+260B;N # DESCENDING NODE
+260C;N # CONJUNCTION
+260D;N # OPPOSITION
+260E;A # BLACK TELEPHONE
+260F;A # WHITE TELEPHONE
+2610;N # BALLOT BOX
+2611;N # BALLOT BOX WITH CHECK
+2612;N # BALLOT BOX WITH X
+2613;N # SALTIRE
+2614;A # UMBRELLA WITH RAIN DROPS
+2615;A # HOT BEVERAGE
+2616;N # WHITE SHOGI PIECE
+2617;N # BLACK SHOGI PIECE
+2618;N # SHAMROCK
+2619;N # REVERSED ROTATED FLORAL HEART BULLET
+261A;N # BLACK LEFT POINTING INDEX
+261B;N # BLACK RIGHT POINTING INDEX
+261C;A # WHITE LEFT POINTING INDEX
+261D;N # WHITE UP POINTING INDEX
+261E;A # WHITE RIGHT POINTING INDEX
+261F;N # WHITE DOWN POINTING INDEX
+2620;N # SKULL AND CROSSBONES
+2621;N # CAUTION SIGN
+2622;N # RADIOACTIVE SIGN
+2623;N # BIOHAZARD SIGN
+2624;N # CADUCEUS
+2625;N # ANKH
+2626;N # ORTHODOX CROSS
+2627;N # CHI RHO
+2628;N # CROSS OF LORRAINE
+2629;N # CROSS OF JERUSALEM
+262A;N # STAR AND CRESCENT
+262B;N # FARSI SYMBOL
+262C;N # ADI SHAKTI
+262D;N # HAMMER AND SICKLE
+262E;N # PEACE SYMBOL
+262F;N # YIN YANG
+2630;N # TRIGRAM FOR HEAVEN
+2631;N # TRIGRAM FOR LAKE
+2632;N # TRIGRAM FOR FIRE
+2633;N # TRIGRAM FOR THUNDER
+2634;N # TRIGRAM FOR WIND
+2635;N # TRIGRAM FOR WATER
+2636;N # TRIGRAM FOR MOUNTAIN
+2637;N # TRIGRAM FOR EARTH
+2638;N # WHEEL OF DHARMA
+2639;N # WHITE FROWNING FACE
+263A;N # WHITE SMILING FACE
+263B;N # BLACK SMILING FACE
+263C;N # WHITE SUN WITH RAYS
+263D;N # FIRST QUARTER MOON
+263E;N # LAST QUARTER MOON
+263F;N # MERCURY
+2640;A # FEMALE SIGN
+2641;N # EARTH
+2642;A # MALE SIGN
+2643;N # JUPITER
+2644;N # SATURN
+2645;N # URANUS
+2646;N # NEPTUNE
+2647;N # PLUTO
+2648;N # ARIES
+2649;N # TAURUS
+264A;N # GEMINI
+264B;N # CANCER
+264C;N # LEO
+264D;N # VIRGO
+264E;N # LIBRA
+264F;N # SCORPIUS
+2650;N # SAGITTARIUS
+2651;N # CAPRICORN
+2652;N # AQUARIUS
+2653;N # PISCES
+2654;N # WHITE CHESS KING
+2655;N # WHITE CHESS QUEEN
+2656;N # WHITE CHESS ROOK
+2657;N # WHITE CHESS BISHOP
+2658;N # WHITE CHESS KNIGHT
+2659;N # WHITE CHESS PAWN
+265A;N # BLACK CHESS KING
+265B;N # BLACK CHESS QUEEN
+265C;N # BLACK CHESS ROOK
+265D;N # BLACK CHESS BISHOP
+265E;N # BLACK CHESS KNIGHT
+265F;N # BLACK CHESS PAWN
+2660;A # BLACK SPADE SUIT
+2661;A # WHITE HEART SUIT
+2662;N # WHITE DIAMOND SUIT
+2663;A # BLACK CLUB SUIT
+2664;A # WHITE SPADE SUIT
+2665;A # BLACK HEART SUIT
+2666;N # BLACK DIAMOND SUIT
+2667;A # WHITE CLUB SUIT
+2668;A # HOT SPRINGS
+2669;A # QUARTER NOTE
+266A;A # EIGHTH NOTE
+266B;N # BEAMED EIGHTH NOTES
+266C;A # BEAMED SIXTEENTH NOTES
+266D;A # MUSIC FLAT SIGN
+266E;N # MUSIC NATURAL SIGN
+266F;A # MUSIC SHARP SIGN
+2670;N # WEST SYRIAC CROSS
+2671;N # EAST SYRIAC CROSS
+2672;N # UNIVERSAL RECYCLING SYMBOL
+2673;N # RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674;N # RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675;N # RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676;N # RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677;N # RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678;N # RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679;N # RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A;N # RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B;N # BLACK UNIVERSAL RECYCLING SYMBOL
+267C;N # RECYCLED PAPER SYMBOL
+267D;N # PARTIALLY-RECYCLED PAPER SYMBOL
+267E;N # PERMANENT PAPER SIGN
+267F;N # WHEELCHAIR SYMBOL
+2680;N # DIE FACE-1
+2681;N # DIE FACE-2
+2682;N # DIE FACE-3
+2683;N # DIE FACE-4
+2684;N # DIE FACE-5
+2685;N # DIE FACE-6
+2686;N # WHITE CIRCLE WITH DOT RIGHT
+2687;N # WHITE CIRCLE WITH TWO DOTS
+2688;N # BLACK CIRCLE WITH WHITE DOT RIGHT
+2689;N # BLACK CIRCLE WITH TWO WHITE DOTS
+268A;N # MONOGRAM FOR YANG
+268B;N # MONOGRAM FOR YIN
+268C;N # DIGRAM FOR GREATER YANG
+268D;N # DIGRAM FOR LESSER YIN
+268E;N # DIGRAM FOR LESSER YANG
+268F;N # DIGRAM FOR GREATER YIN
+2690;N # WHITE FLAG
+2691;N # BLACK FLAG
+2692;N # HAMMER AND PICK
+2693;N # ANCHOR
+2694;N # CROSSED SWORDS
+2695;N # STAFF OF AESCULAPIUS
+2696;N # SCALES
+2697;N # ALEMBIC
+2698;N # FLOWER
+2699;N # GEAR
+269A;N # STAFF OF HERMES
+269B;N # ATOM SYMBOL
+269C;N # FLEUR-DE-LIS
+269D;N # OUTLINED WHITE STAR
+269E;A # THREE LINES CONVERGING RIGHT
+269F;A # THREE LINES CONVERGING LEFT
+26A0;N # WARNING SIGN
+26A1;N # HIGH VOLTAGE SIGN
+26A2;N # DOUBLED FEMALE SIGN
+26A3;N # DOUBLED MALE SIGN
+26A4;N # INTERLOCKED FEMALE AND MALE SIGN
+26A5;N # MALE AND FEMALE SIGN
+26A6;N # MALE WITH STROKE SIGN
+26A7;N # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8;N # VERTICAL MALE WITH STROKE SIGN
+26A9;N # HORIZONTAL MALE WITH STROKE SIGN
+26AA;N # MEDIUM WHITE CIRCLE
+26AB;N # MEDIUM BLACK CIRCLE
+26AC;N # MEDIUM SMALL WHITE CIRCLE
+26AD;N # MARRIAGE SYMBOL
+26AE;N # DIVORCE SYMBOL
+26AF;N # UNMARRIED PARTNERSHIP SYMBOL
+26B0;N # COFFIN
+26B1;N # FUNERAL URN
+26B2;N # NEUTER
+26B3;N # CERES
+26B4;N # PALLAS
+26B5;N # JUNO
+26B6;N # VESTA
+26B7;N # CHIRON
+26B8;N # BLACK MOON LILITH
+26B9;N # SEXTILE
+26BA;N # SEMISEXTILE
+26BB;N # QUINCUNX
+26BC;N # SESQUIQUADRATE
+26BD;N # SOCCER BALL
+26BE;A # BASEBALL
+26BF;A # SQUARED KEY
+26C0;N # WHITE DRAUGHTS MAN
+26C1;N # WHITE DRAUGHTS KING
+26C2;N # BLACK DRAUGHTS MAN
+26C3;N # BLACK DRAUGHTS KING
+26C4;A # SNOWMAN WITHOUT SNOW
+26C5;A # SUN BEHIND CLOUD
+26C6;A # RAIN
+26C7;A # BLACK SNOWMAN
+26C8;A # THUNDER CLOUD AND RAIN
+26C9;A # TURNED WHITE SHOGI PIECE
+26CA;A # TURNED BLACK SHOGI PIECE
+26CB;A # WHITE DIAMOND IN SQUARE
+26CC;A # CROSSING LANES
+26CD;A # DISABLED CAR
+26CF;A # PICK
+26D0;A # CAR SLIDING
+26D1;A # HELMET WITH WHITE CROSS
+26D2;A # CIRCLED CROSSING LANES
+26D3;A # CHAINS
+26D4;A # NO ENTRY
+26D5;A # ALTERNATE ONE-WAY LEFT WAY TRAFFIC
+26D6;A # BLACK TWO-WAY LEFT WAY TRAFFIC
+26D7;A # WHITE TWO-WAY LEFT WAY TRAFFIC
+26D8;A # BLACK LEFT LANE MERGE
+26D9;A # WHITE LEFT LANE MERGE
+26DA;A # DRIVE SLOW SIGN
+26DB;A # HEAVY WHITE DOWN-POINTING TRIANGLE
+26DC;A # LEFT CLOSED ENTRY
+26DD;A # SQUARED SALTIRE
+26DE;A # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
+26DF;A # BLACK TRUCK
+26E0;A # RESTRICTED LEFT ENTRY-1
+26E1;A # RESTRICTED LEFT ENTRY-2
+26E3;A # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E8;A # BLACK CROSS ON SHIELD
+26E9;A # SHINTO SHRINE
+26EA;A # CHURCH
+26EB;A # CASTLE
+26EC;A # HISTORIC SITE
+26ED;A # GEAR WITHOUT HUB
+26EE;A # GEAR WITH HANDLES
+26EF;A # MAP SYMBOL FOR LIGHTHOUSE
+26F0;A # MOUNTAIN
+26F1;A # UMBRELLA ON GROUND
+26F2;A # FOUNTAIN
+26F3;A # FLAG IN HOLE
+26F4;A # FERRY
+26F5;A # SAILBOAT
+26F6;A # SQUARE FOUR CORNERS
+26F7;A # SKIER
+26F8;A # ICE SKATE
+26F9;A # PERSON WITH BALL
+26FA;A # TENT
+26FB;A # JAPANESE BANK SYMBOL
+26FC;A # HEADSTONE GRAVEYARD SYMBOL
+26FD;A # FUEL PUMP
+26FE;A # CUP ON BLACK SQUARE
+26FF;A # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2701;N # UPPER BLADE SCISSORS
+2702;N # BLACK SCISSORS
+2703;N # LOWER BLADE SCISSORS
+2704;N # WHITE SCISSORS
+2706;N # TELEPHONE LOCATION SIGN
+2707;N # TAPE DRIVE
+2708;N # AIRPLANE
+2709;N # ENVELOPE
+270C;N # VICTORY HAND
+270D;N # WRITING HAND
+270E;N # LOWER RIGHT PENCIL
+270F;N # PENCIL
+2710;N # UPPER RIGHT PENCIL
+2711;N # WHITE NIB
+2712;N # BLACK NIB
+2713;N # CHECK MARK
+2714;N # HEAVY CHECK MARK
+2715;N # MULTIPLICATION X
+2716;N # HEAVY MULTIPLICATION X
+2717;N # BALLOT X
+2718;N # HEAVY BALLOT X
+2719;N # OUTLINED GREEK CROSS
+271A;N # HEAVY GREEK CROSS
+271B;N # OPEN CENTRE CROSS
+271C;N # HEAVY OPEN CENTRE CROSS
+271D;N # LATIN CROSS
+271E;N # SHADOWED WHITE LATIN CROSS
+271F;N # OUTLINED LATIN CROSS
+2720;N # MALTESE CROSS
+2721;N # STAR OF DAVID
+2722;N # FOUR TEARDROP-SPOKED ASTERISK
+2723;N # FOUR BALLOON-SPOKED ASTERISK
+2724;N # HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725;N # FOUR CLUB-SPOKED ASTERISK
+2726;N # BLACK FOUR POINTED STAR
+2727;N # WHITE FOUR POINTED STAR
+2729;N # STRESS OUTLINED WHITE STAR
+272A;N # CIRCLED WHITE STAR
+272B;N # OPEN CENTRE BLACK STAR
+272C;N # BLACK CENTRE WHITE STAR
+272D;N # OUTLINED BLACK STAR
+272E;N # HEAVY OUTLINED BLACK STAR
+272F;N # PINWHEEL STAR
+2730;N # SHADOWED WHITE STAR
+2731;N # HEAVY ASTERISK
+2732;N # OPEN CENTRE ASTERISK
+2733;N # EIGHT SPOKED ASTERISK
+2734;N # EIGHT POINTED BLACK STAR
+2735;N # EIGHT POINTED PINWHEEL STAR
+2736;N # SIX POINTED BLACK STAR
+2737;N # EIGHT POINTED RECTILINEAR BLACK STAR
+2738;N # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739;N # TWELVE POINTED BLACK STAR
+273A;N # SIXTEEN POINTED ASTERISK
+273B;N # TEARDROP-SPOKED ASTERISK
+273C;N # OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D;A # HEAVY TEARDROP-SPOKED ASTERISK
+273E;N # SIX PETALLED BLACK AND WHITE FLORETTE
+273F;N # BLACK FLORETTE
+2740;N # WHITE FLORETTE
+2741;N # EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742;N # CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743;N # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744;N # SNOWFLAKE
+2745;N # TIGHT TRIFOLIATE SNOWFLAKE
+2746;N # HEAVY CHEVRON SNOWFLAKE
+2747;N # SPARKLE
+2748;N # HEAVY SPARKLE
+2749;N # BALLOON-SPOKED ASTERISK
+274A;N # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B;N # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D;N # SHADOWED WHITE CIRCLE
+274F;N # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750;N # UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751;N # LOWER RIGHT SHADOWED WHITE SQUARE
+2752;N # UPPER RIGHT SHADOWED WHITE SQUARE
+2756;N # BLACK DIAMOND MINUS WHITE X
+2757;A # HEAVY EXCLAMATION MARK SYMBOL
+2758;N # LIGHT VERTICAL BAR
+2759;N # MEDIUM VERTICAL BAR
+275A;N # HEAVY VERTICAL BAR
+275B;N # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C;N # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D;N # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E;N # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761;N # CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762;N # HEAVY EXCLAMATION MARK ORNAMENT
+2763;N # HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764;N # HEAVY BLACK HEART
+2765;N # ROTATED HEAVY BLACK HEART BULLET
+2766;N # FLORAL HEART
+2767;N # ROTATED FLORAL HEART BULLET
+2768;N # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769;N # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A;N # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B;N # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C;N # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D;N # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E;N # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F;N # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770;N # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771;N # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772;N # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773;N # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774;N # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775;N # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776;A # DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777;A # DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778;A # DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779;A # DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A;A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B;A # DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C;A # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D;A # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E;A # DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F;A # DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780;N # DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781;N # DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782;N # DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783;N # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784;N # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785;N # DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786;N # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787;N # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788;N # DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789;N # DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794;N # HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798;N # HEAVY SOUTH EAST ARROW
+2799;N # HEAVY RIGHTWARDS ARROW
+279A;N # HEAVY NORTH EAST ARROW
+279B;N # DRAFTING POINT RIGHTWARDS ARROW
+279C;N # HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D;N # TRIANGLE-HEADED RIGHTWARDS ARROW
+279E;N # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F;N # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0;N # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1;N # BLACK RIGHTWARDS ARROW
+27A2;N # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3;N # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4;N # BLACK RIGHTWARDS ARROWHEAD
+27A5;N # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6;N # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7;N # SQUAT BLACK RIGHTWARDS ARROW
+27A8;N # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9;N # RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA;N # LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB;N # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC;N # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD;N # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE;N # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF;N # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1;N # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2;N # CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3;N # WHITE-FEATHERED RIGHTWARDS ARROW
+27B4;N # BLACK-FEATHERED SOUTH EAST ARROW
+27B5;N # BLACK-FEATHERED RIGHTWARDS ARROW
+27B6;N # BLACK-FEATHERED NORTH EAST ARROW
+27B7;N # HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8;N # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9;N # HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA;N # TEARDROP-BARBED RIGHTWARDS ARROW
+27BB;N # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC;N # WEDGE-TAILED RIGHTWARDS ARROW
+27BD;N # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE;N # OPEN-OUTLINED RIGHTWARDS ARROW
+27C0;N # THREE DIMENSIONAL ANGLE
+27C1;N # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2;N # PERPENDICULAR
+27C3;N # OPEN SUBSET
+27C4;N # OPEN SUPERSET
+27C5;N # LEFT S-SHAPED BAG DELIMITER
+27C6;N # RIGHT S-SHAPED BAG DELIMITER
+27C7;N # OR WITH DOT INSIDE
+27C8;N # REVERSE SOLIDUS PRECEDING SUBSET
+27C9;N # SUPERSET PRECEDING SOLIDUS
+27CA;N # VERTICAL BAR WITH HORIZONTAL STROKE
+27CC;N # LONG DIVISION
+27D0;N # WHITE DIAMOND WITH CENTRED DOT
+27D1;N # AND WITH DOT
+27D2;N # ELEMENT OF OPENING UPWARDS
+27D3;N # LOWER RIGHT CORNER WITH DOT
+27D4;N # UPPER LEFT CORNER WITH DOT
+27D5;N # LEFT OUTER JOIN
+27D6;N # RIGHT OUTER JOIN
+27D7;N # FULL OUTER JOIN
+27D8;N # LARGE UP TACK
+27D9;N # LARGE DOWN TACK
+27DA;N # LEFT AND RIGHT DOUBLE TURNSTILE
+27DB;N # LEFT AND RIGHT TACK
+27DC;N # LEFT MULTIMAP
+27DD;N # LONG RIGHT TACK
+27DE;N # LONG LEFT TACK
+27DF;N # UP TACK WITH CIRCLE ABOVE
+27E0;N # LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1;N # WHITE CONCAVE-SIDED DIAMOND
+27E2;N # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3;N # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4;N # WHITE SQUARE WITH LEFTWARDS TICK
+27E5;N # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6;Na # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7;Na # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8;Na # MATHEMATICAL LEFT ANGLE BRACKET
+27E9;Na # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA;Na # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB;Na # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC;Na # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED;Na # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE;N # MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF;N # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0;N # UPWARDS QUADRUPLE ARROW
+27F1;N # DOWNWARDS QUADRUPLE ARROW
+27F2;N # ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3;N # CLOCKWISE GAPPED CIRCLE ARROW
+27F4;N # RIGHT ARROW WITH CIRCLED PLUS
+27F5;N # LONG LEFTWARDS ARROW
+27F6;N # LONG RIGHTWARDS ARROW
+27F7;N # LONG LEFT RIGHT ARROW
+27F8;N # LONG LEFTWARDS DOUBLE ARROW
+27F9;N # LONG RIGHTWARDS DOUBLE ARROW
+27FA;N # LONG LEFT RIGHT DOUBLE ARROW
+27FB;N # LONG LEFTWARDS ARROW FROM BAR
+27FC;N # LONG RIGHTWARDS ARROW FROM BAR
+27FD;N # LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE;N # LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF;N # LONG RIGHTWARDS SQUIGGLE ARROW
+2800;N # BRAILLE PATTERN BLANK
+2801;N # BRAILLE PATTERN DOTS-1
+2802;N # BRAILLE PATTERN DOTS-2
+2803;N # BRAILLE PATTERN DOTS-12
+2804;N # BRAILLE PATTERN DOTS-3
+2805;N # BRAILLE PATTERN DOTS-13
+2806;N # BRAILLE PATTERN DOTS-23
+2807;N # BRAILLE PATTERN DOTS-123
+2808;N # BRAILLE PATTERN DOTS-4
+2809;N # BRAILLE PATTERN DOTS-14
+280A;N # BRAILLE PATTERN DOTS-24
+280B;N # BRAILLE PATTERN DOTS-124
+280C;N # BRAILLE PATTERN DOTS-34
+280D;N # BRAILLE PATTERN DOTS-134
+280E;N # BRAILLE PATTERN DOTS-234
+280F;N # BRAILLE PATTERN DOTS-1234
+2810;N # BRAILLE PATTERN DOTS-5
+2811;N # BRAILLE PATTERN DOTS-15
+2812;N # BRAILLE PATTERN DOTS-25
+2813;N # BRAILLE PATTERN DOTS-125
+2814;N # BRAILLE PATTERN DOTS-35
+2815;N # BRAILLE PATTERN DOTS-135
+2816;N # BRAILLE PATTERN DOTS-235
+2817;N # BRAILLE PATTERN DOTS-1235
+2818;N # BRAILLE PATTERN DOTS-45
+2819;N # BRAILLE PATTERN DOTS-145
+281A;N # BRAILLE PATTERN DOTS-245
+281B;N # BRAILLE PATTERN DOTS-1245
+281C;N # BRAILLE PATTERN DOTS-345
+281D;N # BRAILLE PATTERN DOTS-1345
+281E;N # BRAILLE PATTERN DOTS-2345
+281F;N # BRAILLE PATTERN DOTS-12345
+2820;N # BRAILLE PATTERN DOTS-6
+2821;N # BRAILLE PATTERN DOTS-16
+2822;N # BRAILLE PATTERN DOTS-26
+2823;N # BRAILLE PATTERN DOTS-126
+2824;N # BRAILLE PATTERN DOTS-36
+2825;N # BRAILLE PATTERN DOTS-136
+2826;N # BRAILLE PATTERN DOTS-236
+2827;N # BRAILLE PATTERN DOTS-1236
+2828;N # BRAILLE PATTERN DOTS-46
+2829;N # BRAILLE PATTERN DOTS-146
+282A;N # BRAILLE PATTERN DOTS-246
+282B;N # BRAILLE PATTERN DOTS-1246
+282C;N # BRAILLE PATTERN DOTS-346
+282D;N # BRAILLE PATTERN DOTS-1346
+282E;N # BRAILLE PATTERN DOTS-2346
+282F;N # BRAILLE PATTERN DOTS-12346
+2830;N # BRAILLE PATTERN DOTS-56
+2831;N # BRAILLE PATTERN DOTS-156
+2832;N # BRAILLE PATTERN DOTS-256
+2833;N # BRAILLE PATTERN DOTS-1256
+2834;N # BRAILLE PATTERN DOTS-356
+2835;N # BRAILLE PATTERN DOTS-1356
+2836;N # BRAILLE PATTERN DOTS-2356
+2837;N # BRAILLE PATTERN DOTS-12356
+2838;N # BRAILLE PATTERN DOTS-456
+2839;N # BRAILLE PATTERN DOTS-1456
+283A;N # BRAILLE PATTERN DOTS-2456
+283B;N # BRAILLE PATTERN DOTS-12456
+283C;N # BRAILLE PATTERN DOTS-3456
+283D;N # BRAILLE PATTERN DOTS-13456
+283E;N # BRAILLE PATTERN DOTS-23456
+283F;N # BRAILLE PATTERN DOTS-123456
+2840;N # BRAILLE PATTERN DOTS-7
+2841;N # BRAILLE PATTERN DOTS-17
+2842;N # BRAILLE PATTERN DOTS-27
+2843;N # BRAILLE PATTERN DOTS-127
+2844;N # BRAILLE PATTERN DOTS-37
+2845;N # BRAILLE PATTERN DOTS-137
+2846;N # BRAILLE PATTERN DOTS-237
+2847;N # BRAILLE PATTERN DOTS-1237
+2848;N # BRAILLE PATTERN DOTS-47
+2849;N # BRAILLE PATTERN DOTS-147
+284A;N # BRAILLE PATTERN DOTS-247
+284B;N # BRAILLE PATTERN DOTS-1247
+284C;N # BRAILLE PATTERN DOTS-347
+284D;N # BRAILLE PATTERN DOTS-1347
+284E;N # BRAILLE PATTERN DOTS-2347
+284F;N # BRAILLE PATTERN DOTS-12347
+2850;N # BRAILLE PATTERN DOTS-57
+2851;N # BRAILLE PATTERN DOTS-157
+2852;N # BRAILLE PATTERN DOTS-257
+2853;N # BRAILLE PATTERN DOTS-1257
+2854;N # BRAILLE PATTERN DOTS-357
+2855;N # BRAILLE PATTERN DOTS-1357
+2856;N # BRAILLE PATTERN DOTS-2357
+2857;N # BRAILLE PATTERN DOTS-12357
+2858;N # BRAILLE PATTERN DOTS-457
+2859;N # BRAILLE PATTERN DOTS-1457
+285A;N # BRAILLE PATTERN DOTS-2457
+285B;N # BRAILLE PATTERN DOTS-12457
+285C;N # BRAILLE PATTERN DOTS-3457
+285D;N # BRAILLE PATTERN DOTS-13457
+285E;N # BRAILLE PATTERN DOTS-23457
+285F;N # BRAILLE PATTERN DOTS-123457
+2860;N # BRAILLE PATTERN DOTS-67
+2861;N # BRAILLE PATTERN DOTS-167
+2862;N # BRAILLE PATTERN DOTS-267
+2863;N # BRAILLE PATTERN DOTS-1267
+2864;N # BRAILLE PATTERN DOTS-367
+2865;N # BRAILLE PATTERN DOTS-1367
+2866;N # BRAILLE PATTERN DOTS-2367
+2867;N # BRAILLE PATTERN DOTS-12367
+2868;N # BRAILLE PATTERN DOTS-467
+2869;N # BRAILLE PATTERN DOTS-1467
+286A;N # BRAILLE PATTERN DOTS-2467
+286B;N # BRAILLE PATTERN DOTS-12467
+286C;N # BRAILLE PATTERN DOTS-3467
+286D;N # BRAILLE PATTERN DOTS-13467
+286E;N # BRAILLE PATTERN DOTS-23467
+286F;N # BRAILLE PATTERN DOTS-123467
+2870;N # BRAILLE PATTERN DOTS-567
+2871;N # BRAILLE PATTERN DOTS-1567
+2872;N # BRAILLE PATTERN DOTS-2567
+2873;N # BRAILLE PATTERN DOTS-12567
+2874;N # BRAILLE PATTERN DOTS-3567
+2875;N # BRAILLE PATTERN DOTS-13567
+2876;N # BRAILLE PATTERN DOTS-23567
+2877;N # BRAILLE PATTERN DOTS-123567
+2878;N # BRAILLE PATTERN DOTS-4567
+2879;N # BRAILLE PATTERN DOTS-14567
+287A;N # BRAILLE PATTERN DOTS-24567
+287B;N # BRAILLE PATTERN DOTS-124567
+287C;N # BRAILLE PATTERN DOTS-34567
+287D;N # BRAILLE PATTERN DOTS-134567
+287E;N # BRAILLE PATTERN DOTS-234567
+287F;N # BRAILLE PATTERN DOTS-1234567
+2880;N # BRAILLE PATTERN DOTS-8
+2881;N # BRAILLE PATTERN DOTS-18
+2882;N # BRAILLE PATTERN DOTS-28
+2883;N # BRAILLE PATTERN DOTS-128
+2884;N # BRAILLE PATTERN DOTS-38
+2885;N # BRAILLE PATTERN DOTS-138
+2886;N # BRAILLE PATTERN DOTS-238
+2887;N # BRAILLE PATTERN DOTS-1238
+2888;N # BRAILLE PATTERN DOTS-48
+2889;N # BRAILLE PATTERN DOTS-148
+288A;N # BRAILLE PATTERN DOTS-248
+288B;N # BRAILLE PATTERN DOTS-1248
+288C;N # BRAILLE PATTERN DOTS-348
+288D;N # BRAILLE PATTERN DOTS-1348
+288E;N # BRAILLE PATTERN DOTS-2348
+288F;N # BRAILLE PATTERN DOTS-12348
+2890;N # BRAILLE PATTERN DOTS-58
+2891;N # BRAILLE PATTERN DOTS-158
+2892;N # BRAILLE PATTERN DOTS-258
+2893;N # BRAILLE PATTERN DOTS-1258
+2894;N # BRAILLE PATTERN DOTS-358
+2895;N # BRAILLE PATTERN DOTS-1358
+2896;N # BRAILLE PATTERN DOTS-2358
+2897;N # BRAILLE PATTERN DOTS-12358
+2898;N # BRAILLE PATTERN DOTS-458
+2899;N # BRAILLE PATTERN DOTS-1458
+289A;N # BRAILLE PATTERN DOTS-2458
+289B;N # BRAILLE PATTERN DOTS-12458
+289C;N # BRAILLE PATTERN DOTS-3458
+289D;N # BRAILLE PATTERN DOTS-13458
+289E;N # BRAILLE PATTERN DOTS-23458
+289F;N # BRAILLE PATTERN DOTS-123458
+28A0;N # BRAILLE PATTERN DOTS-68
+28A1;N # BRAILLE PATTERN DOTS-168
+28A2;N # BRAILLE PATTERN DOTS-268
+28A3;N # BRAILLE PATTERN DOTS-1268
+28A4;N # BRAILLE PATTERN DOTS-368
+28A5;N # BRAILLE PATTERN DOTS-1368
+28A6;N # BRAILLE PATTERN DOTS-2368
+28A7;N # BRAILLE PATTERN DOTS-12368
+28A8;N # BRAILLE PATTERN DOTS-468
+28A9;N # BRAILLE PATTERN DOTS-1468
+28AA;N # BRAILLE PATTERN DOTS-2468
+28AB;N # BRAILLE PATTERN DOTS-12468
+28AC;N # BRAILLE PATTERN DOTS-3468
+28AD;N # BRAILLE PATTERN DOTS-13468
+28AE;N # BRAILLE PATTERN DOTS-23468
+28AF;N # BRAILLE PATTERN DOTS-123468
+28B0;N # BRAILLE PATTERN DOTS-568
+28B1;N # BRAILLE PATTERN DOTS-1568
+28B2;N # BRAILLE PATTERN DOTS-2568
+28B3;N # BRAILLE PATTERN DOTS-12568
+28B4;N # BRAILLE PATTERN DOTS-3568
+28B5;N # BRAILLE PATTERN DOTS-13568
+28B6;N # BRAILLE PATTERN DOTS-23568
+28B7;N # BRAILLE PATTERN DOTS-123568
+28B8;N # BRAILLE PATTERN DOTS-4568
+28B9;N # BRAILLE PATTERN DOTS-14568
+28BA;N # BRAILLE PATTERN DOTS-24568
+28BB;N # BRAILLE PATTERN DOTS-124568
+28BC;N # BRAILLE PATTERN DOTS-34568
+28BD;N # BRAILLE PATTERN DOTS-134568
+28BE;N # BRAILLE PATTERN DOTS-234568
+28BF;N # BRAILLE PATTERN DOTS-1234568
+28C0;N # BRAILLE PATTERN DOTS-78
+28C1;N # BRAILLE PATTERN DOTS-178
+28C2;N # BRAILLE PATTERN DOTS-278
+28C3;N # BRAILLE PATTERN DOTS-1278
+28C4;N # BRAILLE PATTERN DOTS-378
+28C5;N # BRAILLE PATTERN DOTS-1378
+28C6;N # BRAILLE PATTERN DOTS-2378
+28C7;N # BRAILLE PATTERN DOTS-12378
+28C8;N # BRAILLE PATTERN DOTS-478
+28C9;N # BRAILLE PATTERN DOTS-1478
+28CA;N # BRAILLE PATTERN DOTS-2478
+28CB;N # BRAILLE PATTERN DOTS-12478
+28CC;N # BRAILLE PATTERN DOTS-3478
+28CD;N # BRAILLE PATTERN DOTS-13478
+28CE;N # BRAILLE PATTERN DOTS-23478
+28CF;N # BRAILLE PATTERN DOTS-123478
+28D0;N # BRAILLE PATTERN DOTS-578
+28D1;N # BRAILLE PATTERN DOTS-1578
+28D2;N # BRAILLE PATTERN DOTS-2578
+28D3;N # BRAILLE PATTERN DOTS-12578
+28D4;N # BRAILLE PATTERN DOTS-3578
+28D5;N # BRAILLE PATTERN DOTS-13578
+28D6;N # BRAILLE PATTERN DOTS-23578
+28D7;N # BRAILLE PATTERN DOTS-123578
+28D8;N # BRAILLE PATTERN DOTS-4578
+28D9;N # BRAILLE PATTERN DOTS-14578
+28DA;N # BRAILLE PATTERN DOTS-24578
+28DB;N # BRAILLE PATTERN DOTS-124578
+28DC;N # BRAILLE PATTERN DOTS-34578
+28DD;N # BRAILLE PATTERN DOTS-134578
+28DE;N # BRAILLE PATTERN DOTS-234578
+28DF;N # BRAILLE PATTERN DOTS-1234578
+28E0;N # BRAILLE PATTERN DOTS-678
+28E1;N # BRAILLE PATTERN DOTS-1678
+28E2;N # BRAILLE PATTERN DOTS-2678
+28E3;N # BRAILLE PATTERN DOTS-12678
+28E4;N # BRAILLE PATTERN DOTS-3678
+28E5;N # BRAILLE PATTERN DOTS-13678
+28E6;N # BRAILLE PATTERN DOTS-23678
+28E7;N # BRAILLE PATTERN DOTS-123678
+28E8;N # BRAILLE PATTERN DOTS-4678
+28E9;N # BRAILLE PATTERN DOTS-14678
+28EA;N # BRAILLE PATTERN DOTS-24678
+28EB;N # BRAILLE PATTERN DOTS-124678
+28EC;N # BRAILLE PATTERN DOTS-34678
+28ED;N # BRAILLE PATTERN DOTS-134678
+28EE;N # BRAILLE PATTERN DOTS-234678
+28EF;N # BRAILLE PATTERN DOTS-1234678
+28F0;N # BRAILLE PATTERN DOTS-5678
+28F1;N # BRAILLE PATTERN DOTS-15678
+28F2;N # BRAILLE PATTERN DOTS-25678
+28F3;N # BRAILLE PATTERN DOTS-125678
+28F4;N # BRAILLE PATTERN DOTS-35678
+28F5;N # BRAILLE PATTERN DOTS-135678
+28F6;N # BRAILLE PATTERN DOTS-235678
+28F7;N # BRAILLE PATTERN DOTS-1235678
+28F8;N # BRAILLE PATTERN DOTS-45678
+28F9;N # BRAILLE PATTERN DOTS-145678
+28FA;N # BRAILLE PATTERN DOTS-245678
+28FB;N # BRAILLE PATTERN DOTS-1245678
+28FC;N # BRAILLE PATTERN DOTS-345678
+28FD;N # BRAILLE PATTERN DOTS-1345678
+28FE;N # BRAILLE PATTERN DOTS-2345678
+28FF;N # BRAILLE PATTERN DOTS-12345678
+2900;N # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901;N # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902;N # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903;N # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904;N # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905;N # RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906;N # LEFTWARDS DOUBLE ARROW FROM BAR
+2907;N # RIGHTWARDS DOUBLE ARROW FROM BAR
+2908;N # DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909;N # UPWARDS ARROW WITH HORIZONTAL STROKE
+290A;N # UPWARDS TRIPLE ARROW
+290B;N # DOWNWARDS TRIPLE ARROW
+290C;N # LEFTWARDS DOUBLE DASH ARROW
+290D;N # RIGHTWARDS DOUBLE DASH ARROW
+290E;N # LEFTWARDS TRIPLE DASH ARROW
+290F;N # RIGHTWARDS TRIPLE DASH ARROW
+2910;N # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911;N # RIGHTWARDS ARROW WITH DOTTED STEM
+2912;N # UPWARDS ARROW TO BAR
+2913;N # DOWNWARDS ARROW TO BAR
+2914;N # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915;N # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919;N # LEFTWARDS ARROW-TAIL
+291A;N # RIGHTWARDS ARROW-TAIL
+291B;N # LEFTWARDS DOUBLE ARROW-TAIL
+291C;N # RIGHTWARDS DOUBLE ARROW-TAIL
+291D;N # LEFTWARDS ARROW TO BLACK DIAMOND
+291E;N # RIGHTWARDS ARROW TO BLACK DIAMOND
+291F;N # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920;N # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921;N # NORTH WEST AND SOUTH EAST ARROW
+2922;N # NORTH EAST AND SOUTH WEST ARROW
+2923;N # NORTH WEST ARROW WITH HOOK
+2924;N # NORTH EAST ARROW WITH HOOK
+2925;N # SOUTH EAST ARROW WITH HOOK
+2926;N # SOUTH WEST ARROW WITH HOOK
+2927;N # NORTH WEST ARROW AND NORTH EAST ARROW
+2928;N # NORTH EAST ARROW AND SOUTH EAST ARROW
+2929;N # SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A;N # SOUTH WEST ARROW AND NORTH WEST ARROW
+292B;N # RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C;N # FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D;N # SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E;N # NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F;N # FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930;N # RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931;N # NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932;N # NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933;N # WAVE ARROW POINTING DIRECTLY RIGHT
+2934;N # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935;N # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936;N # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937;N # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938;N # RIGHT-SIDE ARC CLOCKWISE ARROW
+2939;N # LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A;N # TOP ARC ANTICLOCKWISE ARROW
+293B;N # BOTTOM ARC ANTICLOCKWISE ARROW
+293C;N # TOP ARC CLOCKWISE ARROW WITH MINUS
+293D;N # TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E;N # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F;N # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940;N # ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941;N # CLOCKWISE CLOSED CIRCLE ARROW
+2942;N # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943;N # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944;N # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945;N # RIGHTWARDS ARROW WITH PLUS BELOW
+2946;N # LEFTWARDS ARROW WITH PLUS BELOW
+2947;N # RIGHTWARDS ARROW THROUGH X
+2948;N # LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949;N # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A;N # LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B;N # LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C;N # UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D;N # UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E;N # LEFT BARB UP RIGHT BARB UP HARPOON
+294F;N # UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950;N # LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951;N # UP BARB LEFT DOWN BARB LEFT HARPOON
+2952;N # LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953;N # RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954;N # UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955;N # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956;N # LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957;N # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958;N # UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959;N # DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A;N # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B;N # RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C;N # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D;N # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E;N # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F;N # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960;N # UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961;N # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962;N # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963;N # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965;N # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966;N # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967;N # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969;N # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A;N # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B;N # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D;N # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E;N # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F;N # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970;N # RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971;N # EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972;N # TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973;N # LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974;N # RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975;N # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976;N # LESS-THAN ABOVE LEFTWARDS ARROW
+2977;N # LEFTWARDS ARROW THROUGH LESS-THAN
+2978;N # GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979;N # SUBSET ABOVE RIGHTWARDS ARROW
+297A;N # LEFTWARDS ARROW THROUGH SUBSET
+297B;N # SUPERSET ABOVE LEFTWARDS ARROW
+297C;N # LEFT FISH TAIL
+297D;N # RIGHT FISH TAIL
+297E;N # UP FISH TAIL
+297F;N # DOWN FISH TAIL
+2980;N # TRIPLE VERTICAL BAR DELIMITER
+2981;N # Z NOTATION SPOT
+2982;N # Z NOTATION TYPE COLON
+2983;N # LEFT WHITE CURLY BRACKET
+2984;N # RIGHT WHITE CURLY BRACKET
+2985;Na # LEFT WHITE PARENTHESIS
+2986;Na # RIGHT WHITE PARENTHESIS
+2987;N # Z NOTATION LEFT IMAGE BRACKET
+2988;N # Z NOTATION RIGHT IMAGE BRACKET
+2989;N # Z NOTATION LEFT BINDING BRACKET
+298A;N # Z NOTATION RIGHT BINDING BRACKET
+298B;N # LEFT SQUARE BRACKET WITH UNDERBAR
+298C;N # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D;N # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E;N # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F;N # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990;N # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991;N # LEFT ANGLE BRACKET WITH DOT
+2992;N # RIGHT ANGLE BRACKET WITH DOT
+2993;N # LEFT ARC LESS-THAN BRACKET
+2994;N # RIGHT ARC GREATER-THAN BRACKET
+2995;N # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996;N # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997;N # LEFT BLACK TORTOISE SHELL BRACKET
+2998;N # RIGHT BLACK TORTOISE SHELL BRACKET
+2999;N # DOTTED FENCE
+299A;N # VERTICAL ZIGZAG LINE
+299B;N # MEASURED ANGLE OPENING LEFT
+299C;N # RIGHT ANGLE VARIANT WITH SQUARE
+299D;N # MEASURED RIGHT ANGLE WITH DOT
+299E;N # ANGLE WITH S INSIDE
+299F;N # ACUTE ANGLE
+29A0;N # SPHERICAL ANGLE OPENING LEFT
+29A1;N # SPHERICAL ANGLE OPENING UP
+29A2;N # TURNED ANGLE
+29A3;N # REVERSED ANGLE
+29A4;N # ANGLE WITH UNDERBAR
+29A5;N # REVERSED ANGLE WITH UNDERBAR
+29A6;N # OBLIQUE ANGLE OPENING UP
+29A7;N # OBLIQUE ANGLE OPENING DOWN
+29A8;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0;N # REVERSED EMPTY SET
+29B1;N # EMPTY SET WITH OVERBAR
+29B2;N # EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3;N # EMPTY SET WITH RIGHT ARROW ABOVE
+29B4;N # EMPTY SET WITH LEFT ARROW ABOVE
+29B5;N # CIRCLE WITH HORIZONTAL BAR
+29B6;N # CIRCLED VERTICAL BAR
+29B7;N # CIRCLED PARALLEL
+29B8;N # CIRCLED REVERSE SOLIDUS
+29B9;N # CIRCLED PERPENDICULAR
+29BA;N # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB;N # CIRCLE WITH SUPERIMPOSED X
+29BC;N # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD;N # UP ARROW THROUGH CIRCLE
+29BE;N # CIRCLED WHITE BULLET
+29BF;N # CIRCLED BULLET
+29C0;N # CIRCLED LESS-THAN
+29C1;N # CIRCLED GREATER-THAN
+29C2;N # CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3;N # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4;N # SQUARED RISING DIAGONAL SLASH
+29C5;N # SQUARED FALLING DIAGONAL SLASH
+29C6;N # SQUARED ASTERISK
+29C7;N # SQUARED SMALL CIRCLE
+29C8;N # SQUARED SQUARE
+29C9;N # TWO JOINED SQUARES
+29CA;N # TRIANGLE WITH DOT ABOVE
+29CB;N # TRIANGLE WITH UNDERBAR
+29CC;N # S IN TRIANGLE
+29CD;N # TRIANGLE WITH SERIFS AT BOTTOM
+29CE;N # RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF;N # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0;N # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1;N # BOWTIE WITH LEFT HALF BLACK
+29D2;N # BOWTIE WITH RIGHT HALF BLACK
+29D3;N # BLACK BOWTIE
+29D4;N # TIMES WITH LEFT HALF BLACK
+29D5;N # TIMES WITH RIGHT HALF BLACK
+29D6;N # WHITE HOURGLASS
+29D7;N # BLACK HOURGLASS
+29D8;N # LEFT WIGGLY FENCE
+29D9;N # RIGHT WIGGLY FENCE
+29DA;N # LEFT DOUBLE WIGGLY FENCE
+29DB;N # RIGHT DOUBLE WIGGLY FENCE
+29DC;N # INCOMPLETE INFINITY
+29DD;N # TIE OVER INFINITY
+29DE;N # INFINITY NEGATED WITH VERTICAL BAR
+29DF;N # DOUBLE-ENDED MULTIMAP
+29E0;N # SQUARE WITH CONTOURED OUTLINE
+29E1;N # INCREASES AS
+29E2;N # SHUFFLE PRODUCT
+29E3;N # EQUALS SIGN AND SLANTED PARALLEL
+29E4;N # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5;N # IDENTICAL TO AND SLANTED PARALLEL
+29E6;N # GLEICH STARK
+29E7;N # THERMODYNAMIC
+29E8;N # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9;N # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA;N # BLACK DIAMOND WITH DOWN ARROW
+29EB;N # BLACK LOZENGE
+29EC;N # WHITE CIRCLE WITH DOWN ARROW
+29ED;N # BLACK CIRCLE WITH DOWN ARROW
+29EE;N # ERROR-BARRED WHITE SQUARE
+29EF;N # ERROR-BARRED BLACK SQUARE
+29F0;N # ERROR-BARRED WHITE DIAMOND
+29F1;N # ERROR-BARRED BLACK DIAMOND
+29F2;N # ERROR-BARRED WHITE CIRCLE
+29F3;N # ERROR-BARRED BLACK CIRCLE
+29F4;N # RULE-DELAYED
+29F5;N # REVERSE SOLIDUS OPERATOR
+29F6;N # SOLIDUS WITH OVERBAR
+29F7;N # REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8;N # BIG SOLIDUS
+29F9;N # BIG REVERSE SOLIDUS
+29FA;N # DOUBLE PLUS
+29FB;N # TRIPLE PLUS
+29FC;N # LEFT-POINTING CURVED ANGLE BRACKET
+29FD;N # RIGHT-POINTING CURVED ANGLE BRACKET
+29FE;N # TINY
+29FF;N # MINY
+2A00;N # N-ARY CIRCLED DOT OPERATOR
+2A01;N # N-ARY CIRCLED PLUS OPERATOR
+2A02;N # N-ARY CIRCLED TIMES OPERATOR
+2A03;N # N-ARY UNION OPERATOR WITH DOT
+2A04;N # N-ARY UNION OPERATOR WITH PLUS
+2A05;N # N-ARY SQUARE INTERSECTION OPERATOR
+2A06;N # N-ARY SQUARE UNION OPERATOR
+2A07;N # TWO LOGICAL AND OPERATOR
+2A08;N # TWO LOGICAL OR OPERATOR
+2A09;N # N-ARY TIMES OPERATOR
+2A0A;N # MODULO TWO SUM
+2A0B;N # SUMMATION WITH INTEGRAL
+2A0C;N # QUADRUPLE INTEGRAL OPERATOR
+2A0D;N # FINITE PART INTEGRAL
+2A0E;N # INTEGRAL WITH DOUBLE STROKE
+2A0F;N # INTEGRAL AVERAGE WITH SLASH
+2A10;N # CIRCULATION FUNCTION
+2A11;N # ANTICLOCKWISE INTEGRATION
+2A12;N # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13;N # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14;N # LINE INTEGRATION NOT INCLUDING THE POLE
+2A15;N # INTEGRAL AROUND A POINT OPERATOR
+2A16;N # QUATERNION INTEGRAL OPERATOR
+2A17;N # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18;N # INTEGRAL WITH TIMES SIGN
+2A19;N # INTEGRAL WITH INTERSECTION
+2A1A;N # INTEGRAL WITH UNION
+2A1B;N # INTEGRAL WITH OVERBAR
+2A1C;N # INTEGRAL WITH UNDERBAR
+2A1D;N # JOIN
+2A1E;N # LARGE LEFT TRIANGLE OPERATOR
+2A1F;N # Z NOTATION SCHEMA COMPOSITION
+2A20;N # Z NOTATION SCHEMA PIPING
+2A21;N # Z NOTATION SCHEMA PROJECTION
+2A22;N # PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23;N # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24;N # PLUS SIGN WITH TILDE ABOVE
+2A25;N # PLUS SIGN WITH DOT BELOW
+2A26;N # PLUS SIGN WITH TILDE BELOW
+2A27;N # PLUS SIGN WITH SUBSCRIPT TWO
+2A28;N # PLUS SIGN WITH BLACK TRIANGLE
+2A29;N # MINUS SIGN WITH COMMA ABOVE
+2A2A;N # MINUS SIGN WITH DOT BELOW
+2A2B;N # MINUS SIGN WITH FALLING DOTS
+2A2C;N # MINUS SIGN WITH RISING DOTS
+2A2D;N # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E;N # PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F;N # VECTOR OR CROSS PRODUCT
+2A30;N # MULTIPLICATION SIGN WITH DOT ABOVE
+2A31;N # MULTIPLICATION SIGN WITH UNDERBAR
+2A32;N # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33;N # SMASH PRODUCT
+2A34;N # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35;N # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36;N # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37;N # MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38;N # CIRCLED DIVISION SIGN
+2A39;N # PLUS SIGN IN TRIANGLE
+2A3A;N # MINUS SIGN IN TRIANGLE
+2A3B;N # MULTIPLICATION SIGN IN TRIANGLE
+2A3C;N # INTERIOR PRODUCT
+2A3D;N # RIGHTHAND INTERIOR PRODUCT
+2A3E;N # Z NOTATION RELATIONAL COMPOSITION
+2A3F;N # AMALGAMATION OR COPRODUCT
+2A40;N # INTERSECTION WITH DOT
+2A41;N # UNION WITH MINUS SIGN
+2A42;N # UNION WITH OVERBAR
+2A43;N # INTERSECTION WITH OVERBAR
+2A44;N # INTERSECTION WITH LOGICAL AND
+2A45;N # UNION WITH LOGICAL OR
+2A46;N # UNION ABOVE INTERSECTION
+2A47;N # INTERSECTION ABOVE UNION
+2A48;N # UNION ABOVE BAR ABOVE INTERSECTION
+2A49;N # INTERSECTION ABOVE BAR ABOVE UNION
+2A4A;N # UNION BESIDE AND JOINED WITH UNION
+2A4B;N # INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C;N # CLOSED UNION WITH SERIFS
+2A4D;N # CLOSED INTERSECTION WITH SERIFS
+2A4E;N # DOUBLE SQUARE INTERSECTION
+2A4F;N # DOUBLE SQUARE UNION
+2A50;N # CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51;N # LOGICAL AND WITH DOT ABOVE
+2A52;N # LOGICAL OR WITH DOT ABOVE
+2A53;N # DOUBLE LOGICAL AND
+2A54;N # DOUBLE LOGICAL OR
+2A55;N # TWO INTERSECTING LOGICAL AND
+2A56;N # TWO INTERSECTING LOGICAL OR
+2A57;N # SLOPING LARGE OR
+2A58;N # SLOPING LARGE AND
+2A59;N # LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A;N # LOGICAL AND WITH MIDDLE STEM
+2A5B;N # LOGICAL OR WITH MIDDLE STEM
+2A5C;N # LOGICAL AND WITH HORIZONTAL DASH
+2A5D;N # LOGICAL OR WITH HORIZONTAL DASH
+2A5E;N # LOGICAL AND WITH DOUBLE OVERBAR
+2A5F;N # LOGICAL AND WITH UNDERBAR
+2A60;N # LOGICAL AND WITH DOUBLE UNDERBAR
+2A61;N # SMALL VEE WITH UNDERBAR
+2A62;N # LOGICAL OR WITH DOUBLE OVERBAR
+2A63;N # LOGICAL OR WITH DOUBLE UNDERBAR
+2A64;N # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65;N # Z NOTATION RANGE ANTIRESTRICTION
+2A66;N # EQUALS SIGN WITH DOT BELOW
+2A67;N # IDENTICAL WITH DOT ABOVE
+2A68;N # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69;N # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A;N # TILDE OPERATOR WITH DOT ABOVE
+2A6B;N # TILDE OPERATOR WITH RISING DOTS
+2A6C;N # SIMILAR MINUS SIMILAR
+2A6D;N # CONGRUENT WITH DOT ABOVE
+2A6E;N # EQUALS WITH ASTERISK
+2A6F;N # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70;N # APPROXIMATELY EQUAL OR EQUAL TO
+2A71;N # EQUALS SIGN ABOVE PLUS SIGN
+2A72;N # PLUS SIGN ABOVE EQUALS SIGN
+2A73;N # EQUALS SIGN ABOVE TILDE OPERATOR
+2A74;N # DOUBLE COLON EQUAL
+2A75;N # TWO CONSECUTIVE EQUALS SIGNS
+2A76;N # THREE CONSECUTIVE EQUALS SIGNS
+2A77;N # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78;N # EQUIVALENT WITH FOUR DOTS ABOVE
+2A79;N # LESS-THAN WITH CIRCLE INSIDE
+2A7A;N # GREATER-THAN WITH CIRCLE INSIDE
+2A7B;N # LESS-THAN WITH QUESTION MARK ABOVE
+2A7C;N # GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D;N # LESS-THAN OR SLANTED EQUAL TO
+2A7E;N # GREATER-THAN OR SLANTED EQUAL TO
+2A7F;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85;N # LESS-THAN OR APPROXIMATE
+2A86;N # GREATER-THAN OR APPROXIMATE
+2A87;N # LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88;N # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89;N # LESS-THAN AND NOT APPROXIMATE
+2A8A;N # GREATER-THAN AND NOT APPROXIMATE
+2A8B;N # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C;N # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D;N # LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E;N # GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F;N # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90;N # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91;N # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92;N # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93;N # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94;N # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95;N # SLANTED EQUAL TO OR LESS-THAN
+2A96;N # SLANTED EQUAL TO OR GREATER-THAN
+2A97;N # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98;N # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99;N # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A;N # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B;N # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C;N # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D;N # SIMILAR OR LESS-THAN
+2A9E;N # SIMILAR OR GREATER-THAN
+2A9F;N # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0;N # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1;N # DOUBLE NESTED LESS-THAN
+2AA2;N # DOUBLE NESTED GREATER-THAN
+2AA3;N # DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4;N # GREATER-THAN OVERLAPPING LESS-THAN
+2AA5;N # GREATER-THAN BESIDE LESS-THAN
+2AA6;N # LESS-THAN CLOSED BY CURVE
+2AA7;N # GREATER-THAN CLOSED BY CURVE
+2AA8;N # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9;N # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA;N # SMALLER THAN
+2AAB;N # LARGER THAN
+2AAC;N # SMALLER THAN OR EQUAL TO
+2AAD;N # LARGER THAN OR EQUAL TO
+2AAE;N # EQUALS SIGN WITH BUMPY ABOVE
+2AAF;N # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0;N # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1;N # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2;N # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3;N # PRECEDES ABOVE EQUALS SIGN
+2AB4;N # SUCCEEDS ABOVE EQUALS SIGN
+2AB5;N # PRECEDES ABOVE NOT EQUAL TO
+2AB6;N # SUCCEEDS ABOVE NOT EQUAL TO
+2AB7;N # PRECEDES ABOVE ALMOST EQUAL TO
+2AB8;N # SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9;N # PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA;N # SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB;N # DOUBLE PRECEDES
+2ABC;N # DOUBLE SUCCEEDS
+2ABD;N # SUBSET WITH DOT
+2ABE;N # SUPERSET WITH DOT
+2ABF;N # SUBSET WITH PLUS SIGN BELOW
+2AC0;N # SUPERSET WITH PLUS SIGN BELOW
+2AC1;N # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2;N # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3;N # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4;N # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5;N # SUBSET OF ABOVE EQUALS SIGN
+2AC6;N # SUPERSET OF ABOVE EQUALS SIGN
+2AC7;N # SUBSET OF ABOVE TILDE OPERATOR
+2AC8;N # SUPERSET OF ABOVE TILDE OPERATOR
+2AC9;N # SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA;N # SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB;N # SUBSET OF ABOVE NOT EQUAL TO
+2ACC;N # SUPERSET OF ABOVE NOT EQUAL TO
+2ACD;N # SQUARE LEFT OPEN BOX OPERATOR
+2ACE;N # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF;N # CLOSED SUBSET
+2AD0;N # CLOSED SUPERSET
+2AD1;N # CLOSED SUBSET OR EQUAL TO
+2AD2;N # CLOSED SUPERSET OR EQUAL TO
+2AD3;N # SUBSET ABOVE SUPERSET
+2AD4;N # SUPERSET ABOVE SUBSET
+2AD5;N # SUBSET ABOVE SUBSET
+2AD6;N # SUPERSET ABOVE SUPERSET
+2AD7;N # SUPERSET BESIDE SUBSET
+2AD8;N # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9;N # ELEMENT OF OPENING DOWNWARDS
+2ADA;N # PITCHFORK WITH TEE TOP
+2ADB;N # TRANSVERSAL INTERSECTION
+2ADC;N # FORKING
+2ADD;N # NONFORKING
+2ADE;N # SHORT LEFT TACK
+2ADF;N # SHORT DOWN TACK
+2AE0;N # SHORT UP TACK
+2AE1;N # PERPENDICULAR WITH S
+2AE2;N # VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3;N # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4;N # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5;N # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6;N # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7;N # SHORT DOWN TACK WITH OVERBAR
+2AE8;N # SHORT UP TACK WITH UNDERBAR
+2AE9;N # SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA;N # DOUBLE DOWN TACK
+2AEB;N # DOUBLE UP TACK
+2AEC;N # DOUBLE STROKE NOT SIGN
+2AED;N # REVERSED DOUBLE STROKE NOT SIGN
+2AEE;N # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF;N # VERTICAL LINE WITH CIRCLE ABOVE
+2AF0;N # VERTICAL LINE WITH CIRCLE BELOW
+2AF1;N # DOWN TACK WITH CIRCLE BELOW
+2AF2;N # PARALLEL WITH HORIZONTAL STROKE
+2AF3;N # PARALLEL WITH TILDE OPERATOR
+2AF4;N # TRIPLE VERTICAL BAR BINARY RELATION
+2AF5;N # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6;N # TRIPLE COLON OPERATOR
+2AF7;N # TRIPLE NESTED LESS-THAN
+2AF8;N # TRIPLE NESTED GREATER-THAN
+2AF9;N # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA;N # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB;N # TRIPLE SOLIDUS BINARY RELATION
+2AFC;N # LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD;N # DOUBLE SOLIDUS OPERATOR
+2AFE;N # WHITE VERTICAL BAR
+2AFF;N # N-ARY WHITE VERTICAL BAR
+2B00;N # NORTH EAST WHITE ARROW
+2B01;N # NORTH WEST WHITE ARROW
+2B02;N # SOUTH EAST WHITE ARROW
+2B03;N # SOUTH WEST WHITE ARROW
+2B04;N # LEFT RIGHT WHITE ARROW
+2B05;N # LEFTWARDS BLACK ARROW
+2B06;N # UPWARDS BLACK ARROW
+2B07;N # DOWNWARDS BLACK ARROW
+2B08;N # NORTH EAST BLACK ARROW
+2B09;N # NORTH WEST BLACK ARROW
+2B0A;N # SOUTH EAST BLACK ARROW
+2B0B;N # SOUTH WEST BLACK ARROW
+2B0C;N # LEFT RIGHT BLACK ARROW
+2B0D;N # UP DOWN BLACK ARROW
+2B0E;N # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F;N # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10;N # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11;N # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12;N # SQUARE WITH TOP HALF BLACK
+2B13;N # SQUARE WITH BOTTOM HALF BLACK
+2B14;N # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK
+2B15;N # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK
+2B16;N # DIAMOND WITH LEFT HALF BLACK
+2B17;N # DIAMOND WITH RIGHT HALF BLACK
+2B18;N # DIAMOND WITH TOP HALF BLACK
+2B19;N # DIAMOND WITH BOTTOM HALF BLACK
+2B1A;N # DOTTED SQUARE
+2B1B;N # BLACK LARGE SQUARE
+2B1C;N # WHITE LARGE SQUARE
+2B1D;N # BLACK VERY SMALL SQUARE
+2B1E;N # WHITE VERY SMALL SQUARE
+2B1F;N # BLACK PENTAGON
+2B20;N # WHITE PENTAGON
+2B21;N # WHITE HEXAGON
+2B22;N # BLACK HEXAGON
+2B23;N # HORIZONTAL BLACK HEXAGON
+2B24;N # BLACK LARGE CIRCLE
+2B25;N # BLACK MEDIUM DIAMOND
+2B26;N # WHITE MEDIUM DIAMOND
+2B27;N # BLACK MEDIUM LOZENGE
+2B28;N # WHITE MEDIUM LOZENGE
+2B29;N # BLACK SMALL DIAMOND
+2B2A;N # BLACK SMALL LOZENGE
+2B2B;N # WHITE SMALL LOZENGE
+2B2C;N # BLACK HORIZONTAL ELLIPSE
+2B2D;N # WHITE HORIZONTAL ELLIPSE
+2B2E;N # BLACK VERTICAL ELLIPSE
+2B2F;N # WHITE VERTICAL ELLIPSE
+2B30;N # LEFT ARROW WITH SMALL CIRCLE
+2B31;N # THREE LEFTWARDS ARROWS
+2B32;N # LEFT ARROW WITH CIRCLED PLUS
+2B33;N # LONG LEFTWARDS SQUIGGLE ARROW
+2B34;N # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2B35;N # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2B36;N # LEFTWARDS TWO-HEADED ARROW FROM BAR
+2B37;N # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
+2B38;N # LEFTWARDS ARROW WITH DOTTED STEM
+2B39;N # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2B3A;N # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2B3B;N # LEFTWARDS TWO-HEADED ARROW WITH TAIL
+2B3C;N # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2B3D;N # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2B3E;N # LEFTWARDS ARROW THROUGH X
+2B3F;N # WAVE ARROW POINTING DIRECTLY LEFT
+2B40;N # EQUALS SIGN ABOVE LEFTWARDS ARROW
+2B41;N # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW
+2B42;N # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+2B43;N # RIGHTWARDS ARROW THROUGH GREATER-THAN
+2B44;N # RIGHTWARDS ARROW THROUGH SUPERSET
+2B45;N # LEFTWARDS QUADRUPLE ARROW
+2B46;N # RIGHTWARDS QUADRUPLE ARROW
+2B47;N # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2B48;N # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+2B49;N # TILDE OPERATOR ABOVE LEFTWARDS ARROW
+2B4A;N # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
+2B4B;N # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4C;N # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B50;N # WHITE MEDIUM STAR
+2B51;N # BLACK SMALL STAR
+2B52;N # WHITE SMALL STAR
+2B53;N # BLACK RIGHT-POINTING PENTAGON
+2B54;N # WHITE RIGHT-POINTING PENTAGON
+2B55;A # HEAVY LARGE CIRCLE
+2B56;A # HEAVY OVAL WITH OVAL INSIDE
+2B57;A # HEAVY CIRCLE WITH CIRCLE INSIDE
+2B58;A # HEAVY CIRCLE
+2B59;A # HEAVY CIRCLED SALTIRE
+2C00;N # GLAGOLITIC CAPITAL LETTER AZU
+2C01;N # GLAGOLITIC CAPITAL LETTER BUKY
+2C02;N # GLAGOLITIC CAPITAL LETTER VEDE
+2C03;N # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04;N # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05;N # GLAGOLITIC CAPITAL LETTER YESTU
+2C06;N # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07;N # GLAGOLITIC CAPITAL LETTER DZELO
+2C08;N # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09;N # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A;N # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B;N # GLAGOLITIC CAPITAL LETTER I
+2C0C;N # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D;N # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E;N # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F;N # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10;N # GLAGOLITIC CAPITAL LETTER NASHI
+2C11;N # GLAGOLITIC CAPITAL LETTER ONU
+2C12;N # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13;N # GLAGOLITIC CAPITAL LETTER RITSI
+2C14;N # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15;N # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16;N # GLAGOLITIC CAPITAL LETTER UKU
+2C17;N # GLAGOLITIC CAPITAL LETTER FRITU
+2C18;N # GLAGOLITIC CAPITAL LETTER HERU
+2C19;N # GLAGOLITIC CAPITAL LETTER OTU
+2C1A;N # GLAGOLITIC CAPITAL LETTER PE
+2C1B;N # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C;N # GLAGOLITIC CAPITAL LETTER TSI
+2C1D;N # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E;N # GLAGOLITIC CAPITAL LETTER SHA
+2C1F;N # GLAGOLITIC CAPITAL LETTER YERU
+2C20;N # GLAGOLITIC CAPITAL LETTER YERI
+2C21;N # GLAGOLITIC CAPITAL LETTER YATI
+2C22;N # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23;N # GLAGOLITIC CAPITAL LETTER YU
+2C24;N # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25;N # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26;N # GLAGOLITIC CAPITAL LETTER YO
+2C27;N # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28;N # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29;N # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A;N # GLAGOLITIC CAPITAL LETTER FITA
+2C2B;N # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C;N # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D;N # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E;N # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30;N # GLAGOLITIC SMALL LETTER AZU
+2C31;N # GLAGOLITIC SMALL LETTER BUKY
+2C32;N # GLAGOLITIC SMALL LETTER VEDE
+2C33;N # GLAGOLITIC SMALL LETTER GLAGOLI
+2C34;N # GLAGOLITIC SMALL LETTER DOBRO
+2C35;N # GLAGOLITIC SMALL LETTER YESTU
+2C36;N # GLAGOLITIC SMALL LETTER ZHIVETE
+2C37;N # GLAGOLITIC SMALL LETTER DZELO
+2C38;N # GLAGOLITIC SMALL LETTER ZEMLJA
+2C39;N # GLAGOLITIC SMALL LETTER IZHE
+2C3A;N # GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B;N # GLAGOLITIC SMALL LETTER I
+2C3C;N # GLAGOLITIC SMALL LETTER DJERVI
+2C3D;N # GLAGOLITIC SMALL LETTER KAKO
+2C3E;N # GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F;N # GLAGOLITIC SMALL LETTER MYSLITE
+2C40;N # GLAGOLITIC SMALL LETTER NASHI
+2C41;N # GLAGOLITIC SMALL LETTER ONU
+2C42;N # GLAGOLITIC SMALL LETTER POKOJI
+2C43;N # GLAGOLITIC SMALL LETTER RITSI
+2C44;N # GLAGOLITIC SMALL LETTER SLOVO
+2C45;N # GLAGOLITIC SMALL LETTER TVRIDO
+2C46;N # GLAGOLITIC SMALL LETTER UKU
+2C47;N # GLAGOLITIC SMALL LETTER FRITU
+2C48;N # GLAGOLITIC SMALL LETTER HERU
+2C49;N # GLAGOLITIC SMALL LETTER OTU
+2C4A;N # GLAGOLITIC SMALL LETTER PE
+2C4B;N # GLAGOLITIC SMALL LETTER SHTA
+2C4C;N # GLAGOLITIC SMALL LETTER TSI
+2C4D;N # GLAGOLITIC SMALL LETTER CHRIVI
+2C4E;N # GLAGOLITIC SMALL LETTER SHA
+2C4F;N # GLAGOLITIC SMALL LETTER YERU
+2C50;N # GLAGOLITIC SMALL LETTER YERI
+2C51;N # GLAGOLITIC SMALL LETTER YATI
+2C52;N # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53;N # GLAGOLITIC SMALL LETTER YU
+2C54;N # GLAGOLITIC SMALL LETTER SMALL YUS
+2C55;N # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56;N # GLAGOLITIC SMALL LETTER YO
+2C57;N # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58;N # GLAGOLITIC SMALL LETTER BIG YUS
+2C59;N # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A;N # GLAGOLITIC SMALL LETTER FITA
+2C5B;N # GLAGOLITIC SMALL LETTER IZHITSA
+2C5C;N # GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D;N # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E;N # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60;N # LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C61;N # LATIN SMALL LETTER L WITH DOUBLE BAR
+2C62;N # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+2C63;N # LATIN CAPITAL LETTER P WITH STROKE
+2C64;N # LATIN CAPITAL LETTER R WITH TAIL
+2C65;N # LATIN SMALL LETTER A WITH STROKE
+2C66;N # LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C67;N # LATIN CAPITAL LETTER H WITH DESCENDER
+2C68;N # LATIN SMALL LETTER H WITH DESCENDER
+2C69;N # LATIN CAPITAL LETTER K WITH DESCENDER
+2C6A;N # LATIN SMALL LETTER K WITH DESCENDER
+2C6B;N # LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6C;N # LATIN SMALL LETTER Z WITH DESCENDER
+2C6D;N # LATIN CAPITAL LETTER ALPHA
+2C6E;N # LATIN CAPITAL LETTER M WITH HOOK
+2C6F;N # LATIN CAPITAL LETTER TURNED A
+2C70;N # LATIN CAPITAL LETTER TURNED ALPHA
+2C71;N # LATIN SMALL LETTER V WITH RIGHT HOOK
+2C72;N # LATIN CAPITAL LETTER W WITH HOOK
+2C73;N # LATIN SMALL LETTER W WITH HOOK
+2C74;N # LATIN SMALL LETTER V WITH CURL
+2C75;N # LATIN CAPITAL LETTER HALF H
+2C76;N # LATIN SMALL LETTER HALF H
+2C77;N # LATIN SMALL LETTER TAILLESS PHI
+2C78;N # LATIN SMALL LETTER E WITH NOTCH
+2C79;N # LATIN SMALL LETTER TURNED R WITH TAIL
+2C7A;N # LATIN SMALL LETTER O WITH LOW RING INSIDE
+2C7B;N # LATIN LETTER SMALL CAPITAL TURNED E
+2C7C;N # LATIN SUBSCRIPT SMALL LETTER J
+2C7D;N # MODIFIER LETTER CAPITAL V
+2C7E;N # LATIN CAPITAL LETTER S WITH SWASH TAIL
+2C7F;N # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80;N # COPTIC CAPITAL LETTER ALFA
+2C81;N # COPTIC SMALL LETTER ALFA
+2C82;N # COPTIC CAPITAL LETTER VIDA
+2C83;N # COPTIC SMALL LETTER VIDA
+2C84;N # COPTIC CAPITAL LETTER GAMMA
+2C85;N # COPTIC SMALL LETTER GAMMA
+2C86;N # COPTIC CAPITAL LETTER DALDA
+2C87;N # COPTIC SMALL LETTER DALDA
+2C88;N # COPTIC CAPITAL LETTER EIE
+2C89;N # COPTIC SMALL LETTER EIE
+2C8A;N # COPTIC CAPITAL LETTER SOU
+2C8B;N # COPTIC SMALL LETTER SOU
+2C8C;N # COPTIC CAPITAL LETTER ZATA
+2C8D;N # COPTIC SMALL LETTER ZATA
+2C8E;N # COPTIC CAPITAL LETTER HATE
+2C8F;N # COPTIC SMALL LETTER HATE
+2C90;N # COPTIC CAPITAL LETTER THETHE
+2C91;N # COPTIC SMALL LETTER THETHE
+2C92;N # COPTIC CAPITAL LETTER IAUDA
+2C93;N # COPTIC SMALL LETTER IAUDA
+2C94;N # COPTIC CAPITAL LETTER KAPA
+2C95;N # COPTIC SMALL LETTER KAPA
+2C96;N # COPTIC CAPITAL LETTER LAULA
+2C97;N # COPTIC SMALL LETTER LAULA
+2C98;N # COPTIC CAPITAL LETTER MI
+2C99;N # COPTIC SMALL LETTER MI
+2C9A;N # COPTIC CAPITAL LETTER NI
+2C9B;N # COPTIC SMALL LETTER NI
+2C9C;N # COPTIC CAPITAL LETTER KSI
+2C9D;N # COPTIC SMALL LETTER KSI
+2C9E;N # COPTIC CAPITAL LETTER O
+2C9F;N # COPTIC SMALL LETTER O
+2CA0;N # COPTIC CAPITAL LETTER PI
+2CA1;N # COPTIC SMALL LETTER PI
+2CA2;N # COPTIC CAPITAL LETTER RO
+2CA3;N # COPTIC SMALL LETTER RO
+2CA4;N # COPTIC CAPITAL LETTER SIMA
+2CA5;N # COPTIC SMALL LETTER SIMA
+2CA6;N # COPTIC CAPITAL LETTER TAU
+2CA7;N # COPTIC SMALL LETTER TAU
+2CA8;N # COPTIC CAPITAL LETTER UA
+2CA9;N # COPTIC SMALL LETTER UA
+2CAA;N # COPTIC CAPITAL LETTER FI
+2CAB;N # COPTIC SMALL LETTER FI
+2CAC;N # COPTIC CAPITAL LETTER KHI
+2CAD;N # COPTIC SMALL LETTER KHI
+2CAE;N # COPTIC CAPITAL LETTER PSI
+2CAF;N # COPTIC SMALL LETTER PSI
+2CB0;N # COPTIC CAPITAL LETTER OOU
+2CB1;N # COPTIC SMALL LETTER OOU
+2CB2;N # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3;N # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4;N # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5;N # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7;N # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8;N # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9;N # COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA;N # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB;N # COPTIC SMALL LETTER DIALECT-P NI
+2CBC;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD;N # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE;N # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF;N # COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0;N # COPTIC CAPITAL LETTER SAMPI
+2CC1;N # COPTIC SMALL LETTER SAMPI
+2CC2;N # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3;N # COPTIC SMALL LETTER CROSSED SHEI
+2CC4;N # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5;N # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6;N # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7;N # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8;N # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9;N # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA;N # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB;N # COPTIC SMALL LETTER DIALECT-P HORI
+2CCC;N # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD;N # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE;N # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF;N # COPTIC SMALL LETTER OLD COPTIC HA
+2CD0;N # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1;N # COPTIC SMALL LETTER L-SHAPED HA
+2CD2;N # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3;N # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4;N # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5;N # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6;N # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7;N # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8;N # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9;N # COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA;N # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB;N # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC;N # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD;N # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE;N # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF;N # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0;N # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1;N # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2;N # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3;N # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4;N # COPTIC SYMBOL KAI
+2CE5;N # COPTIC SYMBOL MI RO
+2CE6;N # COPTIC SYMBOL PI RO
+2CE7;N # COPTIC SYMBOL STAUROS
+2CE8;N # COPTIC SYMBOL TAU RO
+2CE9;N # COPTIC SYMBOL KHI RO
+2CEA;N # COPTIC SYMBOL SHIMA SIMA
+2CEB;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CEC;N # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CED;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CEE;N # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF;N # COPTIC COMBINING NI ABOVE
+2CF0;N # COPTIC COMBINING SPIRITUS ASPER
+2CF1;N # COPTIC COMBINING SPIRITUS LENIS
+2CF9;N # COPTIC OLD NUBIAN FULL STOP
+2CFA;N # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB;N # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC;N # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;N # COPTIC FRACTION ONE HALF
+2CFE;N # COPTIC FULL STOP
+2CFF;N # COPTIC MORPHOLOGICAL DIVIDER
+2D00;N # GEORGIAN SMALL LETTER AN
+2D01;N # GEORGIAN SMALL LETTER BAN
+2D02;N # GEORGIAN SMALL LETTER GAN
+2D03;N # GEORGIAN SMALL LETTER DON
+2D04;N # GEORGIAN SMALL LETTER EN
+2D05;N # GEORGIAN SMALL LETTER VIN
+2D06;N # GEORGIAN SMALL LETTER ZEN
+2D07;N # GEORGIAN SMALL LETTER TAN
+2D08;N # GEORGIAN SMALL LETTER IN
+2D09;N # GEORGIAN SMALL LETTER KAN
+2D0A;N # GEORGIAN SMALL LETTER LAS
+2D0B;N # GEORGIAN SMALL LETTER MAN
+2D0C;N # GEORGIAN SMALL LETTER NAR
+2D0D;N # GEORGIAN SMALL LETTER ON
+2D0E;N # GEORGIAN SMALL LETTER PAR
+2D0F;N # GEORGIAN SMALL LETTER ZHAR
+2D10;N # GEORGIAN SMALL LETTER RAE
+2D11;N # GEORGIAN SMALL LETTER SAN
+2D12;N # GEORGIAN SMALL LETTER TAR
+2D13;N # GEORGIAN SMALL LETTER UN
+2D14;N # GEORGIAN SMALL LETTER PHAR
+2D15;N # GEORGIAN SMALL LETTER KHAR
+2D16;N # GEORGIAN SMALL LETTER GHAN
+2D17;N # GEORGIAN SMALL LETTER QAR
+2D18;N # GEORGIAN SMALL LETTER SHIN
+2D19;N # GEORGIAN SMALL LETTER CHIN
+2D1A;N # GEORGIAN SMALL LETTER CAN
+2D1B;N # GEORGIAN SMALL LETTER JIL
+2D1C;N # GEORGIAN SMALL LETTER CIL
+2D1D;N # GEORGIAN SMALL LETTER CHAR
+2D1E;N # GEORGIAN SMALL LETTER XAN
+2D1F;N # GEORGIAN SMALL LETTER JHAN
+2D20;N # GEORGIAN SMALL LETTER HAE
+2D21;N # GEORGIAN SMALL LETTER HE
+2D22;N # GEORGIAN SMALL LETTER HIE
+2D23;N # GEORGIAN SMALL LETTER WE
+2D24;N # GEORGIAN SMALL LETTER HAR
+2D25;N # GEORGIAN SMALL LETTER HOE
+2D30;N # TIFINAGH LETTER YA
+2D31;N # TIFINAGH LETTER YAB
+2D32;N # TIFINAGH LETTER YABH
+2D33;N # TIFINAGH LETTER YAG
+2D34;N # TIFINAGH LETTER YAGHH
+2D35;N # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36;N # TIFINAGH LETTER YAJ
+2D37;N # TIFINAGH LETTER YAD
+2D38;N # TIFINAGH LETTER YADH
+2D39;N # TIFINAGH LETTER YADD
+2D3A;N # TIFINAGH LETTER YADDH
+2D3B;N # TIFINAGH LETTER YEY
+2D3C;N # TIFINAGH LETTER YAF
+2D3D;N # TIFINAGH LETTER YAK
+2D3E;N # TIFINAGH LETTER TUAREG YAK
+2D3F;N # TIFINAGH LETTER YAKHH
+2D40;N # TIFINAGH LETTER YAH
+2D41;N # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42;N # TIFINAGH LETTER TUAREG YAH
+2D43;N # TIFINAGH LETTER YAHH
+2D44;N # TIFINAGH LETTER YAA
+2D45;N # TIFINAGH LETTER YAKH
+2D46;N # TIFINAGH LETTER TUAREG YAKH
+2D47;N # TIFINAGH LETTER YAQ
+2D48;N # TIFINAGH LETTER TUAREG YAQ
+2D49;N # TIFINAGH LETTER YI
+2D4A;N # TIFINAGH LETTER YAZH
+2D4B;N # TIFINAGH LETTER AHAGGAR YAZH
+2D4C;N # TIFINAGH LETTER TUAREG YAZH
+2D4D;N # TIFINAGH LETTER YAL
+2D4E;N # TIFINAGH LETTER YAM
+2D4F;N # TIFINAGH LETTER YAN
+2D50;N # TIFINAGH LETTER TUAREG YAGN
+2D51;N # TIFINAGH LETTER TUAREG YANG
+2D52;N # TIFINAGH LETTER YAP
+2D53;N # TIFINAGH LETTER YU
+2D54;N # TIFINAGH LETTER YAR
+2D55;N # TIFINAGH LETTER YARR
+2D56;N # TIFINAGH LETTER YAGH
+2D57;N # TIFINAGH LETTER TUAREG YAGH
+2D58;N # TIFINAGH LETTER AYER YAGH
+2D59;N # TIFINAGH LETTER YAS
+2D5A;N # TIFINAGH LETTER YASS
+2D5B;N # TIFINAGH LETTER YASH
+2D5C;N # TIFINAGH LETTER YAT
+2D5D;N # TIFINAGH LETTER YATH
+2D5E;N # TIFINAGH LETTER YACH
+2D5F;N # TIFINAGH LETTER YATT
+2D60;N # TIFINAGH LETTER YAV
+2D61;N # TIFINAGH LETTER YAW
+2D62;N # TIFINAGH LETTER YAY
+2D63;N # TIFINAGH LETTER YAZ
+2D64;N # TIFINAGH LETTER TAWELLEMET YAZ
+2D65;N # TIFINAGH LETTER YAZZ
+2D6F;N # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80;N # ETHIOPIC SYLLABLE LOA
+2D81;N # ETHIOPIC SYLLABLE MOA
+2D82;N # ETHIOPIC SYLLABLE ROA
+2D83;N # ETHIOPIC SYLLABLE SOA
+2D84;N # ETHIOPIC SYLLABLE SHOA
+2D85;N # ETHIOPIC SYLLABLE BOA
+2D86;N # ETHIOPIC SYLLABLE TOA
+2D87;N # ETHIOPIC SYLLABLE COA
+2D88;N # ETHIOPIC SYLLABLE NOA
+2D89;N # ETHIOPIC SYLLABLE NYOA
+2D8A;N # ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B;N # ETHIOPIC SYLLABLE ZOA
+2D8C;N # ETHIOPIC SYLLABLE DOA
+2D8D;N # ETHIOPIC SYLLABLE DDOA
+2D8E;N # ETHIOPIC SYLLABLE JOA
+2D8F;N # ETHIOPIC SYLLABLE THOA
+2D90;N # ETHIOPIC SYLLABLE CHOA
+2D91;N # ETHIOPIC SYLLABLE PHOA
+2D92;N # ETHIOPIC SYLLABLE POA
+2D93;N # ETHIOPIC SYLLABLE GGWA
+2D94;N # ETHIOPIC SYLLABLE GGWI
+2D95;N # ETHIOPIC SYLLABLE GGWEE
+2D96;N # ETHIOPIC SYLLABLE GGWE
+2DA0;N # ETHIOPIC SYLLABLE SSA
+2DA1;N # ETHIOPIC SYLLABLE SSU
+2DA2;N # ETHIOPIC SYLLABLE SSI
+2DA3;N # ETHIOPIC SYLLABLE SSAA
+2DA4;N # ETHIOPIC SYLLABLE SSEE
+2DA5;N # ETHIOPIC SYLLABLE SSE
+2DA6;N # ETHIOPIC SYLLABLE SSO
+2DA8;N # ETHIOPIC SYLLABLE CCA
+2DA9;N # ETHIOPIC SYLLABLE CCU
+2DAA;N # ETHIOPIC SYLLABLE CCI
+2DAB;N # ETHIOPIC SYLLABLE CCAA
+2DAC;N # ETHIOPIC SYLLABLE CCEE
+2DAD;N # ETHIOPIC SYLLABLE CCE
+2DAE;N # ETHIOPIC SYLLABLE CCO
+2DB0;N # ETHIOPIC SYLLABLE ZZA
+2DB1;N # ETHIOPIC SYLLABLE ZZU
+2DB2;N # ETHIOPIC SYLLABLE ZZI
+2DB3;N # ETHIOPIC SYLLABLE ZZAA
+2DB4;N # ETHIOPIC SYLLABLE ZZEE
+2DB5;N # ETHIOPIC SYLLABLE ZZE
+2DB6;N # ETHIOPIC SYLLABLE ZZO
+2DB8;N # ETHIOPIC SYLLABLE CCHA
+2DB9;N # ETHIOPIC SYLLABLE CCHU
+2DBA;N # ETHIOPIC SYLLABLE CCHI
+2DBB;N # ETHIOPIC SYLLABLE CCHAA
+2DBC;N # ETHIOPIC SYLLABLE CCHEE
+2DBD;N # ETHIOPIC SYLLABLE CCHE
+2DBE;N # ETHIOPIC SYLLABLE CCHO
+2DC0;N # ETHIOPIC SYLLABLE QYA
+2DC1;N # ETHIOPIC SYLLABLE QYU
+2DC2;N # ETHIOPIC SYLLABLE QYI
+2DC3;N # ETHIOPIC SYLLABLE QYAA
+2DC4;N # ETHIOPIC SYLLABLE QYEE
+2DC5;N # ETHIOPIC SYLLABLE QYE
+2DC6;N # ETHIOPIC SYLLABLE QYO
+2DC8;N # ETHIOPIC SYLLABLE KYA
+2DC9;N # ETHIOPIC SYLLABLE KYU
+2DCA;N # ETHIOPIC SYLLABLE KYI
+2DCB;N # ETHIOPIC SYLLABLE KYAA
+2DCC;N # ETHIOPIC SYLLABLE KYEE
+2DCD;N # ETHIOPIC SYLLABLE KYE
+2DCE;N # ETHIOPIC SYLLABLE KYO
+2DD0;N # ETHIOPIC SYLLABLE XYA
+2DD1;N # ETHIOPIC SYLLABLE XYU
+2DD2;N # ETHIOPIC SYLLABLE XYI
+2DD3;N # ETHIOPIC SYLLABLE XYAA
+2DD4;N # ETHIOPIC SYLLABLE XYEE
+2DD5;N # ETHIOPIC SYLLABLE XYE
+2DD6;N # ETHIOPIC SYLLABLE XYO
+2DD8;N # ETHIOPIC SYLLABLE GYA
+2DD9;N # ETHIOPIC SYLLABLE GYU
+2DDA;N # ETHIOPIC SYLLABLE GYI
+2DDB;N # ETHIOPIC SYLLABLE GYAA
+2DDC;N # ETHIOPIC SYLLABLE GYEE
+2DDD;N # ETHIOPIC SYLLABLE GYE
+2DDE;N # ETHIOPIC SYLLABLE GYO
+2DE0;N # COMBINING CYRILLIC LETTER BE
+2DE1;N # COMBINING CYRILLIC LETTER VE
+2DE2;N # COMBINING CYRILLIC LETTER GHE
+2DE3;N # COMBINING CYRILLIC LETTER DE
+2DE4;N # COMBINING CYRILLIC LETTER ZHE
+2DE5;N # COMBINING CYRILLIC LETTER ZE
+2DE6;N # COMBINING CYRILLIC LETTER KA
+2DE7;N # COMBINING CYRILLIC LETTER EL
+2DE8;N # COMBINING CYRILLIC LETTER EM
+2DE9;N # COMBINING CYRILLIC LETTER EN
+2DEA;N # COMBINING CYRILLIC LETTER O
+2DEB;N # COMBINING CYRILLIC LETTER PE
+2DEC;N # COMBINING CYRILLIC LETTER ER
+2DED;N # COMBINING CYRILLIC LETTER ES
+2DEE;N # COMBINING CYRILLIC LETTER TE
+2DEF;N # COMBINING CYRILLIC LETTER HA
+2DF0;N # COMBINING CYRILLIC LETTER TSE
+2DF1;N # COMBINING CYRILLIC LETTER CHE
+2DF2;N # COMBINING CYRILLIC LETTER SHA
+2DF3;N # COMBINING CYRILLIC LETTER SHCHA
+2DF4;N # COMBINING CYRILLIC LETTER FITA
+2DF5;N # COMBINING CYRILLIC LETTER ES-TE
+2DF6;N # COMBINING CYRILLIC LETTER A
+2DF7;N # COMBINING CYRILLIC LETTER IE
+2DF8;N # COMBINING CYRILLIC LETTER DJERV
+2DF9;N # COMBINING CYRILLIC LETTER MONOGRAPH UK
+2DFA;N # COMBINING CYRILLIC LETTER YAT
+2DFB;N # COMBINING CYRILLIC LETTER YU
+2DFC;N # COMBINING CYRILLIC LETTER IOTIFIED A
+2DFD;N # COMBINING CYRILLIC LETTER LITTLE YUS
+2DFE;N # COMBINING CYRILLIC LETTER BIG YUS
+2DFF;N # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E00;N # RIGHT ANGLE SUBSTITUTION MARKER
+2E01;N # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;N # LEFT SUBSTITUTION BRACKET
+2E03;N # RIGHT SUBSTITUTION BRACKET
+2E04;N # LEFT DOTTED SUBSTITUTION BRACKET
+2E05;N # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06;N # RAISED INTERPOLATION MARKER
+2E07;N # RAISED DOTTED INTERPOLATION MARKER
+2E08;N # DOTTED TRANSPOSITION MARKER
+2E09;N # LEFT TRANSPOSITION BRACKET
+2E0A;N # RIGHT TRANSPOSITION BRACKET
+2E0B;N # RAISED SQUARE
+2E0C;N # LEFT RAISED OMISSION BRACKET
+2E0D;N # RIGHT RAISED OMISSION BRACKET
+2E0E;N # EDITORIAL CORONIS
+2E0F;N # PARAGRAPHOS
+2E10;N # FORKED PARAGRAPHOS
+2E11;N # REVERSED FORKED PARAGRAPHOS
+2E12;N # HYPODIASTOLE
+2E13;N # DOTTED OBELOS
+2E14;N # DOWNWARDS ANCORA
+2E15;N # UPWARDS ANCORA
+2E16;N # DOTTED RIGHT-POINTING ANGLE
+2E17;N # DOUBLE OBLIQUE HYPHEN
+2E18;N # INVERTED INTERROBANG
+2E19;N # PALM BRANCH
+2E1A;N # HYPHEN WITH DIAERESIS
+2E1B;N # TILDE WITH RING ABOVE
+2E1C;N # LEFT LOW PARAPHRASE BRACKET
+2E1D;N # RIGHT LOW PARAPHRASE BRACKET
+2E1E;N # TILDE WITH DOT ABOVE
+2E1F;N # TILDE WITH DOT BELOW
+2E20;N # LEFT VERTICAL BAR WITH QUILL
+2E21;N # RIGHT VERTICAL BAR WITH QUILL
+2E22;N # TOP LEFT HALF BRACKET
+2E23;N # TOP RIGHT HALF BRACKET
+2E24;N # BOTTOM LEFT HALF BRACKET
+2E25;N # BOTTOM RIGHT HALF BRACKET
+2E26;N # LEFT SIDEWAYS U BRACKET
+2E27;N # RIGHT SIDEWAYS U BRACKET
+2E28;N # LEFT DOUBLE PARENTHESIS
+2E29;N # RIGHT DOUBLE PARENTHESIS
+2E2A;N # TWO DOTS OVER ONE DOT PUNCTUATION
+2E2B;N # ONE DOT OVER TWO DOTS PUNCTUATION
+2E2C;N # SQUARED FOUR DOT PUNCTUATION
+2E2D;N # FIVE DOT MARK
+2E2E;N # REVERSED QUESTION MARK
+2E2F;N # VERTICAL TILDE
+2E30;N # RING POINT
+2E31;N # WORD SEPARATOR MIDDLE DOT
+2E80;W # CJK RADICAL REPEAT
+2E81;W # CJK RADICAL CLIFF
+2E82;W # CJK RADICAL SECOND ONE
+2E83;W # CJK RADICAL SECOND TWO
+2E84;W # CJK RADICAL SECOND THREE
+2E85;W # CJK RADICAL PERSON
+2E86;W # CJK RADICAL BOX
+2E87;W # CJK RADICAL TABLE
+2E88;W # CJK RADICAL KNIFE ONE
+2E89;W # CJK RADICAL KNIFE TWO
+2E8A;W # CJK RADICAL DIVINATION
+2E8B;W # CJK RADICAL SEAL
+2E8C;W # CJK RADICAL SMALL ONE
+2E8D;W # CJK RADICAL SMALL TWO
+2E8E;W # CJK RADICAL LAME ONE
+2E8F;W # CJK RADICAL LAME TWO
+2E90;W # CJK RADICAL LAME THREE
+2E91;W # CJK RADICAL LAME FOUR
+2E92;W # CJK RADICAL SNAKE
+2E93;W # CJK RADICAL THREAD
+2E94;W # CJK RADICAL SNOUT ONE
+2E95;W # CJK RADICAL SNOUT TWO
+2E96;W # CJK RADICAL HEART ONE
+2E97;W # CJK RADICAL HEART TWO
+2E98;W # CJK RADICAL HAND
+2E99;W # CJK RADICAL RAP
+2E9B;W # CJK RADICAL CHOKE
+2E9C;W # CJK RADICAL SUN
+2E9D;W # CJK RADICAL MOON
+2E9E;W # CJK RADICAL DEATH
+2E9F;W # CJK RADICAL MOTHER
+2EA0;W # CJK RADICAL CIVILIAN
+2EA1;W # CJK RADICAL WATER ONE
+2EA2;W # CJK RADICAL WATER TWO
+2EA3;W # CJK RADICAL FIRE
+2EA4;W # CJK RADICAL PAW ONE
+2EA5;W # CJK RADICAL PAW TWO
+2EA6;W # CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+2EA7;W # CJK RADICAL COW
+2EA8;W # CJK RADICAL DOG
+2EA9;W # CJK RADICAL JADE
+2EAA;W # CJK RADICAL BOLT OF CLOTH
+2EAB;W # CJK RADICAL EYE
+2EAC;W # CJK RADICAL SPIRIT ONE
+2EAD;W # CJK RADICAL SPIRIT TWO
+2EAE;W # CJK RADICAL BAMBOO
+2EAF;W # CJK RADICAL SILK
+2EB0;W # CJK RADICAL C-SIMPLIFIED SILK
+2EB1;W # CJK RADICAL NET ONE
+2EB2;W # CJK RADICAL NET TWO
+2EB3;W # CJK RADICAL NET THREE
+2EB4;W # CJK RADICAL NET FOUR
+2EB5;W # CJK RADICAL MESH
+2EB6;W # CJK RADICAL SHEEP
+2EB7;W # CJK RADICAL RAM
+2EB8;W # CJK RADICAL EWE
+2EB9;W # CJK RADICAL OLD
+2EBA;W # CJK RADICAL BRUSH ONE
+2EBB;W # CJK RADICAL BRUSH TWO
+2EBC;W # CJK RADICAL MEAT
+2EBD;W # CJK RADICAL MORTAR
+2EBE;W # CJK RADICAL GRASS ONE
+2EBF;W # CJK RADICAL GRASS TWO
+2EC0;W # CJK RADICAL GRASS THREE
+2EC1;W # CJK RADICAL TIGER
+2EC2;W # CJK RADICAL CLOTHES
+2EC3;W # CJK RADICAL WEST ONE
+2EC4;W # CJK RADICAL WEST TWO
+2EC5;W # CJK RADICAL C-SIMPLIFIED SEE
+2EC6;W # CJK RADICAL SIMPLIFIED HORN
+2EC7;W # CJK RADICAL HORN
+2EC8;W # CJK RADICAL C-SIMPLIFIED SPEECH
+2EC9;W # CJK RADICAL C-SIMPLIFIED SHELL
+2ECA;W # CJK RADICAL FOOT
+2ECB;W # CJK RADICAL C-SIMPLIFIED CART
+2ECC;W # CJK RADICAL SIMPLIFIED WALK
+2ECD;W # CJK RADICAL WALK ONE
+2ECE;W # CJK RADICAL WALK TWO
+2ECF;W # CJK RADICAL CITY
+2ED0;W # CJK RADICAL C-SIMPLIFIED GOLD
+2ED1;W # CJK RADICAL LONG ONE
+2ED2;W # CJK RADICAL LONG TWO
+2ED3;W # CJK RADICAL C-SIMPLIFIED LONG
+2ED4;W # CJK RADICAL C-SIMPLIFIED GATE
+2ED5;W # CJK RADICAL MOUND ONE
+2ED6;W # CJK RADICAL MOUND TWO
+2ED7;W # CJK RADICAL RAIN
+2ED8;W # CJK RADICAL BLUE
+2ED9;W # CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2EDA;W # CJK RADICAL C-SIMPLIFIED LEAF
+2EDB;W # CJK RADICAL C-SIMPLIFIED WIND
+2EDC;W # CJK RADICAL C-SIMPLIFIED FLY
+2EDD;W # CJK RADICAL EAT ONE
+2EDE;W # CJK RADICAL EAT TWO
+2EDF;W # CJK RADICAL EAT THREE
+2EE0;W # CJK RADICAL C-SIMPLIFIED EAT
+2EE1;W # CJK RADICAL HEAD
+2EE2;W # CJK RADICAL C-SIMPLIFIED HORSE
+2EE3;W # CJK RADICAL BONE
+2EE4;W # CJK RADICAL GHOST
+2EE5;W # CJK RADICAL C-SIMPLIFIED FISH
+2EE6;W # CJK RADICAL C-SIMPLIFIED BIRD
+2EE7;W # CJK RADICAL C-SIMPLIFIED SALT
+2EE8;W # CJK RADICAL SIMPLIFIED WHEAT
+2EE9;W # CJK RADICAL SIMPLIFIED YELLOW
+2EEA;W # CJK RADICAL C-SIMPLIFIED FROG
+2EEB;W # CJK RADICAL J-SIMPLIFIED EVEN
+2EEC;W # CJK RADICAL C-SIMPLIFIED EVEN
+2EED;W # CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE;W # CJK RADICAL C-SIMPLIFIED TOOTH
+2EEF;W # CJK RADICAL J-SIMPLIFIED DRAGON
+2EF0;W # CJK RADICAL C-SIMPLIFIED DRAGON
+2EF1;W # CJK RADICAL TURTLE
+2EF2;W # CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3;W # CJK RADICAL C-SIMPLIFIED TURTLE
+2F00;W # KANGXI RADICAL ONE
+2F01;W # KANGXI RADICAL LINE
+2F02;W # KANGXI RADICAL DOT
+2F03;W # KANGXI RADICAL SLASH
+2F04;W # KANGXI RADICAL SECOND
+2F05;W # KANGXI RADICAL HOOK
+2F06;W # KANGXI RADICAL TWO
+2F07;W # KANGXI RADICAL LID
+2F08;W # KANGXI RADICAL MAN
+2F09;W # KANGXI RADICAL LEGS
+2F0A;W # KANGXI RADICAL ENTER
+2F0B;W # KANGXI RADICAL EIGHT
+2F0C;W # KANGXI RADICAL DOWN BOX
+2F0D;W # KANGXI RADICAL COVER
+2F0E;W # KANGXI RADICAL ICE
+2F0F;W # KANGXI RADICAL TABLE
+2F10;W # KANGXI RADICAL OPEN BOX
+2F11;W # KANGXI RADICAL KNIFE
+2F12;W # KANGXI RADICAL POWER
+2F13;W # KANGXI RADICAL WRAP
+2F14;W # KANGXI RADICAL SPOON
+2F15;W # KANGXI RADICAL RIGHT OPEN BOX
+2F16;W # KANGXI RADICAL HIDING ENCLOSURE
+2F17;W # KANGXI RADICAL TEN
+2F18;W # KANGXI RADICAL DIVINATION
+2F19;W # KANGXI RADICAL SEAL
+2F1A;W # KANGXI RADICAL CLIFF
+2F1B;W # KANGXI RADICAL PRIVATE
+2F1C;W # KANGXI RADICAL AGAIN
+2F1D;W # KANGXI RADICAL MOUTH
+2F1E;W # KANGXI RADICAL ENCLOSURE
+2F1F;W # KANGXI RADICAL EARTH
+2F20;W # KANGXI RADICAL SCHOLAR
+2F21;W # KANGXI RADICAL GO
+2F22;W # KANGXI RADICAL GO SLOWLY
+2F23;W # KANGXI RADICAL EVENING
+2F24;W # KANGXI RADICAL BIG
+2F25;W # KANGXI RADICAL WOMAN
+2F26;W # KANGXI RADICAL CHILD
+2F27;W # KANGXI RADICAL ROOF
+2F28;W # KANGXI RADICAL INCH
+2F29;W # KANGXI RADICAL SMALL
+2F2A;W # KANGXI RADICAL LAME
+2F2B;W # KANGXI RADICAL CORPSE
+2F2C;W # KANGXI RADICAL SPROUT
+2F2D;W # KANGXI RADICAL MOUNTAIN
+2F2E;W # KANGXI RADICAL RIVER
+2F2F;W # KANGXI RADICAL WORK
+2F30;W # KANGXI RADICAL ONESELF
+2F31;W # KANGXI RADICAL TURBAN
+2F32;W # KANGXI RADICAL DRY
+2F33;W # KANGXI RADICAL SHORT THREAD
+2F34;W # KANGXI RADICAL DOTTED CLIFF
+2F35;W # KANGXI RADICAL LONG STRIDE
+2F36;W # KANGXI RADICAL TWO HANDS
+2F37;W # KANGXI RADICAL SHOOT
+2F38;W # KANGXI RADICAL BOW
+2F39;W # KANGXI RADICAL SNOUT
+2F3A;W # KANGXI RADICAL BRISTLE
+2F3B;W # KANGXI RADICAL STEP
+2F3C;W # KANGXI RADICAL HEART
+2F3D;W # KANGXI RADICAL HALBERD
+2F3E;W # KANGXI RADICAL DOOR
+2F3F;W # KANGXI RADICAL HAND
+2F40;W # KANGXI RADICAL BRANCH
+2F41;W # KANGXI RADICAL RAP
+2F42;W # KANGXI RADICAL SCRIPT
+2F43;W # KANGXI RADICAL DIPPER
+2F44;W # KANGXI RADICAL AXE
+2F45;W # KANGXI RADICAL SQUARE
+2F46;W # KANGXI RADICAL NOT
+2F47;W # KANGXI RADICAL SUN
+2F48;W # KANGXI RADICAL SAY
+2F49;W # KANGXI RADICAL MOON
+2F4A;W # KANGXI RADICAL TREE
+2F4B;W # KANGXI RADICAL LACK
+2F4C;W # KANGXI RADICAL STOP
+2F4D;W # KANGXI RADICAL DEATH
+2F4E;W # KANGXI RADICAL WEAPON
+2F4F;W # KANGXI RADICAL DO NOT
+2F50;W # KANGXI RADICAL COMPARE
+2F51;W # KANGXI RADICAL FUR
+2F52;W # KANGXI RADICAL CLAN
+2F53;W # KANGXI RADICAL STEAM
+2F54;W # KANGXI RADICAL WATER
+2F55;W # KANGXI RADICAL FIRE
+2F56;W # KANGXI RADICAL CLAW
+2F57;W # KANGXI RADICAL FATHER
+2F58;W # KANGXI RADICAL DOUBLE X
+2F59;W # KANGXI RADICAL HALF TREE TRUNK
+2F5A;W # KANGXI RADICAL SLICE
+2F5B;W # KANGXI RADICAL FANG
+2F5C;W # KANGXI RADICAL COW
+2F5D;W # KANGXI RADICAL DOG
+2F5E;W # KANGXI RADICAL PROFOUND
+2F5F;W # KANGXI RADICAL JADE
+2F60;W # KANGXI RADICAL MELON
+2F61;W # KANGXI RADICAL TILE
+2F62;W # KANGXI RADICAL SWEET
+2F63;W # KANGXI RADICAL LIFE
+2F64;W # KANGXI RADICAL USE
+2F65;W # KANGXI RADICAL FIELD
+2F66;W # KANGXI RADICAL BOLT OF CLOTH
+2F67;W # KANGXI RADICAL SICKNESS
+2F68;W # KANGXI RADICAL DOTTED TENT
+2F69;W # KANGXI RADICAL WHITE
+2F6A;W # KANGXI RADICAL SKIN
+2F6B;W # KANGXI RADICAL DISH
+2F6C;W # KANGXI RADICAL EYE
+2F6D;W # KANGXI RADICAL SPEAR
+2F6E;W # KANGXI RADICAL ARROW
+2F6F;W # KANGXI RADICAL STONE
+2F70;W # KANGXI RADICAL SPIRIT
+2F71;W # KANGXI RADICAL TRACK
+2F72;W # KANGXI RADICAL GRAIN
+2F73;W # KANGXI RADICAL CAVE
+2F74;W # KANGXI RADICAL STAND
+2F75;W # KANGXI RADICAL BAMBOO
+2F76;W # KANGXI RADICAL RICE
+2F77;W # KANGXI RADICAL SILK
+2F78;W # KANGXI RADICAL JAR
+2F79;W # KANGXI RADICAL NET
+2F7A;W # KANGXI RADICAL SHEEP
+2F7B;W # KANGXI RADICAL FEATHER
+2F7C;W # KANGXI RADICAL OLD
+2F7D;W # KANGXI RADICAL AND
+2F7E;W # KANGXI RADICAL PLOW
+2F7F;W # KANGXI RADICAL EAR
+2F80;W # KANGXI RADICAL BRUSH
+2F81;W # KANGXI RADICAL MEAT
+2F82;W # KANGXI RADICAL MINISTER
+2F83;W # KANGXI RADICAL SELF
+2F84;W # KANGXI RADICAL ARRIVE
+2F85;W # KANGXI RADICAL MORTAR
+2F86;W # KANGXI RADICAL TONGUE
+2F87;W # KANGXI RADICAL OPPOSE
+2F88;W # KANGXI RADICAL BOAT
+2F89;W # KANGXI RADICAL STOPPING
+2F8A;W # KANGXI RADICAL COLOR
+2F8B;W # KANGXI RADICAL GRASS
+2F8C;W # KANGXI RADICAL TIGER
+2F8D;W # KANGXI RADICAL INSECT
+2F8E;W # KANGXI RADICAL BLOOD
+2F8F;W # KANGXI RADICAL WALK ENCLOSURE
+2F90;W # KANGXI RADICAL CLOTHES
+2F91;W # KANGXI RADICAL WEST
+2F92;W # KANGXI RADICAL SEE
+2F93;W # KANGXI RADICAL HORN
+2F94;W # KANGXI RADICAL SPEECH
+2F95;W # KANGXI RADICAL VALLEY
+2F96;W # KANGXI RADICAL BEAN
+2F97;W # KANGXI RADICAL PIG
+2F98;W # KANGXI RADICAL BADGER
+2F99;W # KANGXI RADICAL SHELL
+2F9A;W # KANGXI RADICAL RED
+2F9B;W # KANGXI RADICAL RUN
+2F9C;W # KANGXI RADICAL FOOT
+2F9D;W # KANGXI RADICAL BODY
+2F9E;W # KANGXI RADICAL CART
+2F9F;W # KANGXI RADICAL BITTER
+2FA0;W # KANGXI RADICAL MORNING
+2FA1;W # KANGXI RADICAL WALK
+2FA2;W # KANGXI RADICAL CITY
+2FA3;W # KANGXI RADICAL WINE
+2FA4;W # KANGXI RADICAL DISTINGUISH
+2FA5;W # KANGXI RADICAL VILLAGE
+2FA6;W # KANGXI RADICAL GOLD
+2FA7;W # KANGXI RADICAL LONG
+2FA8;W # KANGXI RADICAL GATE
+2FA9;W # KANGXI RADICAL MOUND
+2FAA;W # KANGXI RADICAL SLAVE
+2FAB;W # KANGXI RADICAL SHORT TAILED BIRD
+2FAC;W # KANGXI RADICAL RAIN
+2FAD;W # KANGXI RADICAL BLUE
+2FAE;W # KANGXI RADICAL WRONG
+2FAF;W # KANGXI RADICAL FACE
+2FB0;W # KANGXI RADICAL LEATHER
+2FB1;W # KANGXI RADICAL TANNED LEATHER
+2FB2;W # KANGXI RADICAL LEEK
+2FB3;W # KANGXI RADICAL SOUND
+2FB4;W # KANGXI RADICAL LEAF
+2FB5;W # KANGXI RADICAL WIND
+2FB6;W # KANGXI RADICAL FLY
+2FB7;W # KANGXI RADICAL EAT
+2FB8;W # KANGXI RADICAL HEAD
+2FB9;W # KANGXI RADICAL FRAGRANT
+2FBA;W # KANGXI RADICAL HORSE
+2FBB;W # KANGXI RADICAL BONE
+2FBC;W # KANGXI RADICAL TALL
+2FBD;W # KANGXI RADICAL HAIR
+2FBE;W # KANGXI RADICAL FIGHT
+2FBF;W # KANGXI RADICAL SACRIFICIAL WINE
+2FC0;W # KANGXI RADICAL CAULDRON
+2FC1;W # KANGXI RADICAL GHOST
+2FC2;W # KANGXI RADICAL FISH
+2FC3;W # KANGXI RADICAL BIRD
+2FC4;W # KANGXI RADICAL SALT
+2FC5;W # KANGXI RADICAL DEER
+2FC6;W # KANGXI RADICAL WHEAT
+2FC7;W # KANGXI RADICAL HEMP
+2FC8;W # KANGXI RADICAL YELLOW
+2FC9;W # KANGXI RADICAL MILLET
+2FCA;W # KANGXI RADICAL BLACK
+2FCB;W # KANGXI RADICAL EMBROIDERY
+2FCC;W # KANGXI RADICAL FROG
+2FCD;W # KANGXI RADICAL TRIPOD
+2FCE;W # KANGXI RADICAL DRUM
+2FCF;W # KANGXI RADICAL RAT
+2FD0;W # KANGXI RADICAL NOSE
+2FD1;W # KANGXI RADICAL EVEN
+2FD2;W # KANGXI RADICAL TOOTH
+2FD3;W # KANGXI RADICAL DRAGON
+2FD4;W # KANGXI RADICAL TURTLE
+2FD5;W # KANGXI RADICAL FLUTE
+2FF0;W # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1;W # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2;W # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3;W # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4;W # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB;W # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000;F # IDEOGRAPHIC SPACE
+3001;W # IDEOGRAPHIC COMMA
+3002;W # IDEOGRAPHIC FULL STOP
+3003;W # DITTO MARK
+3004;W # JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005;W # IDEOGRAPHIC ITERATION MARK
+3006;W # IDEOGRAPHIC CLOSING MARK
+3007;W # IDEOGRAPHIC NUMBER ZERO
+3008;W # LEFT ANGLE BRACKET
+3009;W # RIGHT ANGLE BRACKET
+300A;W # LEFT DOUBLE ANGLE BRACKET
+300B;W # RIGHT DOUBLE ANGLE BRACKET
+300C;W # LEFT CORNER BRACKET
+300D;W # RIGHT CORNER BRACKET
+300E;W # LEFT WHITE CORNER BRACKET
+300F;W # RIGHT WHITE CORNER BRACKET
+3010;W # LEFT BLACK LENTICULAR BRACKET
+3011;W # RIGHT BLACK LENTICULAR BRACKET
+3012;W # POSTAL MARK
+3013;W # GETA MARK
+3014;W # LEFT TORTOISE SHELL BRACKET
+3015;W # RIGHT TORTOISE SHELL BRACKET
+3016;W # LEFT WHITE LENTICULAR BRACKET
+3017;W # RIGHT WHITE LENTICULAR BRACKET
+3018;W # LEFT WHITE TORTOISE SHELL BRACKET
+3019;W # RIGHT WHITE TORTOISE SHELL BRACKET
+301A;W # LEFT WHITE SQUARE BRACKET
+301B;W # RIGHT WHITE SQUARE BRACKET
+301C;W # WAVE DASH
+301D;W # REVERSED DOUBLE PRIME QUOTATION MARK
+301E;W # DOUBLE PRIME QUOTATION MARK
+301F;W # LOW DOUBLE PRIME QUOTATION MARK
+3020;W # POSTAL MARK FACE
+3021;W # HANGZHOU NUMERAL ONE
+3022;W # HANGZHOU NUMERAL TWO
+3023;W # HANGZHOU NUMERAL THREE
+3024;W # HANGZHOU NUMERAL FOUR
+3025;W # HANGZHOU NUMERAL FIVE
+3026;W # HANGZHOU NUMERAL SIX
+3027;W # HANGZHOU NUMERAL SEVEN
+3028;W # HANGZHOU NUMERAL EIGHT
+3029;W # HANGZHOU NUMERAL NINE
+302A;W # IDEOGRAPHIC LEVEL TONE MARK
+302B;W # IDEOGRAPHIC RISING TONE MARK
+302C;W # IDEOGRAPHIC DEPARTING TONE MARK
+302D;W # IDEOGRAPHIC ENTERING TONE MARK
+302E;W # HANGUL SINGLE DOT TONE MARK
+302F;W # HANGUL DOUBLE DOT TONE MARK
+3030;W # WAVY DASH
+3031;W # VERTICAL KANA REPEAT MARK
+3032;W # VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033;W # VERTICAL KANA REPEAT MARK UPPER HALF
+3034;W # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035;W # VERTICAL KANA REPEAT MARK LOWER HALF
+3036;W # CIRCLED POSTAL MARK
+3037;W # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038;W # HANGZHOU NUMERAL TEN
+3039;W # HANGZHOU NUMERAL TWENTY
+303A;W # HANGZHOU NUMERAL THIRTY
+303B;W # VERTICAL IDEOGRAPHIC ITERATION MARK
+303C;W # MASU MARK
+303D;W # PART ALTERNATION MARK
+303E;W # IDEOGRAPHIC VARIATION INDICATOR
+303F;N # IDEOGRAPHIC HALF FILL SPACE
+3041;W # HIRAGANA LETTER SMALL A
+3042;W # HIRAGANA LETTER A
+3043;W # HIRAGANA LETTER SMALL I
+3044;W # HIRAGANA LETTER I
+3045;W # HIRAGANA LETTER SMALL U
+3046;W # HIRAGANA LETTER U
+3047;W # HIRAGANA LETTER SMALL E
+3048;W # HIRAGANA LETTER E
+3049;W # HIRAGANA LETTER SMALL O
+304A;W # HIRAGANA LETTER O
+304B;W # HIRAGANA LETTER KA
+304C;W # HIRAGANA LETTER GA
+304D;W # HIRAGANA LETTER KI
+304E;W # HIRAGANA LETTER GI
+304F;W # HIRAGANA LETTER KU
+3050;W # HIRAGANA LETTER GU
+3051;W # HIRAGANA LETTER KE
+3052;W # HIRAGANA LETTER GE
+3053;W # HIRAGANA LETTER KO
+3054;W # HIRAGANA LETTER GO
+3055;W # HIRAGANA LETTER SA
+3056;W # HIRAGANA LETTER ZA
+3057;W # HIRAGANA LETTER SI
+3058;W # HIRAGANA LETTER ZI
+3059;W # HIRAGANA LETTER SU
+305A;W # HIRAGANA LETTER ZU
+305B;W # HIRAGANA LETTER SE
+305C;W # HIRAGANA LETTER ZE
+305D;W # HIRAGANA LETTER SO
+305E;W # HIRAGANA LETTER ZO
+305F;W # HIRAGANA LETTER TA
+3060;W # HIRAGANA LETTER DA
+3061;W # HIRAGANA LETTER TI
+3062;W # HIRAGANA LETTER DI
+3063;W # HIRAGANA LETTER SMALL TU
+3064;W # HIRAGANA LETTER TU
+3065;W # HIRAGANA LETTER DU
+3066;W # HIRAGANA LETTER TE
+3067;W # HIRAGANA LETTER DE
+3068;W # HIRAGANA LETTER TO
+3069;W # HIRAGANA LETTER DO
+306A;W # HIRAGANA LETTER NA
+306B;W # HIRAGANA LETTER NI
+306C;W # HIRAGANA LETTER NU
+306D;W # HIRAGANA LETTER NE
+306E;W # HIRAGANA LETTER NO
+306F;W # HIRAGANA LETTER HA
+3070;W # HIRAGANA LETTER BA
+3071;W # HIRAGANA LETTER PA
+3072;W # HIRAGANA LETTER HI
+3073;W # HIRAGANA LETTER BI
+3074;W # HIRAGANA LETTER PI
+3075;W # HIRAGANA LETTER HU
+3076;W # HIRAGANA LETTER BU
+3077;W # HIRAGANA LETTER PU
+3078;W # HIRAGANA LETTER HE
+3079;W # HIRAGANA LETTER BE
+307A;W # HIRAGANA LETTER PE
+307B;W # HIRAGANA LETTER HO
+307C;W # HIRAGANA LETTER BO
+307D;W # HIRAGANA LETTER PO
+307E;W # HIRAGANA LETTER MA
+307F;W # HIRAGANA LETTER MI
+3080;W # HIRAGANA LETTER MU
+3081;W # HIRAGANA LETTER ME
+3082;W # HIRAGANA LETTER MO
+3083;W # HIRAGANA LETTER SMALL YA
+3084;W # HIRAGANA LETTER YA
+3085;W # HIRAGANA LETTER SMALL YU
+3086;W # HIRAGANA LETTER YU
+3087;W # HIRAGANA LETTER SMALL YO
+3088;W # HIRAGANA LETTER YO
+3089;W # HIRAGANA LETTER RA
+308A;W # HIRAGANA LETTER RI
+308B;W # HIRAGANA LETTER RU
+308C;W # HIRAGANA LETTER RE
+308D;W # HIRAGANA LETTER RO
+308E;W # HIRAGANA LETTER SMALL WA
+308F;W # HIRAGANA LETTER WA
+3090;W # HIRAGANA LETTER WI
+3091;W # HIRAGANA LETTER WE
+3092;W # HIRAGANA LETTER WO
+3093;W # HIRAGANA LETTER N
+3094;W # HIRAGANA LETTER VU
+3095;W # HIRAGANA LETTER SMALL KA
+3096;W # HIRAGANA LETTER SMALL KE
+3099;W # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A;W # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B;W # KATAKANA-HIRAGANA VOICED SOUND MARK
+309C;W # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D;W # HIRAGANA ITERATION MARK
+309E;W # HIRAGANA VOICED ITERATION MARK
+309F;W # HIRAGANA DIGRAPH YORI
+30A0;W # KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1;W # KATAKANA LETTER SMALL A
+30A2;W # KATAKANA LETTER A
+30A3;W # KATAKANA LETTER SMALL I
+30A4;W # KATAKANA LETTER I
+30A5;W # KATAKANA LETTER SMALL U
+30A6;W # KATAKANA LETTER U
+30A7;W # KATAKANA LETTER SMALL E
+30A8;W # KATAKANA LETTER E
+30A9;W # KATAKANA LETTER SMALL O
+30AA;W # KATAKANA LETTER O
+30AB;W # KATAKANA LETTER KA
+30AC;W # KATAKANA LETTER GA
+30AD;W # KATAKANA LETTER KI
+30AE;W # KATAKANA LETTER GI
+30AF;W # KATAKANA LETTER KU
+30B0;W # KATAKANA LETTER GU
+30B1;W # KATAKANA LETTER KE
+30B2;W # KATAKANA LETTER GE
+30B3;W # KATAKANA LETTER KO
+30B4;W # KATAKANA LETTER GO
+30B5;W # KATAKANA LETTER SA
+30B6;W # KATAKANA LETTER ZA
+30B7;W # KATAKANA LETTER SI
+30B8;W # KATAKANA LETTER ZI
+30B9;W # KATAKANA LETTER SU
+30BA;W # KATAKANA LETTER ZU
+30BB;W # KATAKANA LETTER SE
+30BC;W # KATAKANA LETTER ZE
+30BD;W # KATAKANA LETTER SO
+30BE;W # KATAKANA LETTER ZO
+30BF;W # KATAKANA LETTER TA
+30C0;W # KATAKANA LETTER DA
+30C1;W # KATAKANA LETTER TI
+30C2;W # KATAKANA LETTER DI
+30C3;W # KATAKANA LETTER SMALL TU
+30C4;W # KATAKANA LETTER TU
+30C5;W # KATAKANA LETTER DU
+30C6;W # KATAKANA LETTER TE
+30C7;W # KATAKANA LETTER DE
+30C8;W # KATAKANA LETTER TO
+30C9;W # KATAKANA LETTER DO
+30CA;W # KATAKANA LETTER NA
+30CB;W # KATAKANA LETTER NI
+30CC;W # KATAKANA LETTER NU
+30CD;W # KATAKANA LETTER NE
+30CE;W # KATAKANA LETTER NO
+30CF;W # KATAKANA LETTER HA
+30D0;W # KATAKANA LETTER BA
+30D1;W # KATAKANA LETTER PA
+30D2;W # KATAKANA LETTER HI
+30D3;W # KATAKANA LETTER BI
+30D4;W # KATAKANA LETTER PI
+30D5;W # KATAKANA LETTER HU
+30D6;W # KATAKANA LETTER BU
+30D7;W # KATAKANA LETTER PU
+30D8;W # KATAKANA LETTER HE
+30D9;W # KATAKANA LETTER BE
+30DA;W # KATAKANA LETTER PE
+30DB;W # KATAKANA LETTER HO
+30DC;W # KATAKANA LETTER BO
+30DD;W # KATAKANA LETTER PO
+30DE;W # KATAKANA LETTER MA
+30DF;W # KATAKANA LETTER MI
+30E0;W # KATAKANA LETTER MU
+30E1;W # KATAKANA LETTER ME
+30E2;W # KATAKANA LETTER MO
+30E3;W # KATAKANA LETTER SMALL YA
+30E4;W # KATAKANA LETTER YA
+30E5;W # KATAKANA LETTER SMALL YU
+30E6;W # KATAKANA LETTER YU
+30E7;W # KATAKANA LETTER SMALL YO
+30E8;W # KATAKANA LETTER YO
+30E9;W # KATAKANA LETTER RA
+30EA;W # KATAKANA LETTER RI
+30EB;W # KATAKANA LETTER RU
+30EC;W # KATAKANA LETTER RE
+30ED;W # KATAKANA LETTER RO
+30EE;W # KATAKANA LETTER SMALL WA
+30EF;W # KATAKANA LETTER WA
+30F0;W # KATAKANA LETTER WI
+30F1;W # KATAKANA LETTER WE
+30F2;W # KATAKANA LETTER WO
+30F3;W # KATAKANA LETTER N
+30F4;W # KATAKANA LETTER VU
+30F5;W # KATAKANA LETTER SMALL KA
+30F6;W # KATAKANA LETTER SMALL KE
+30F7;W # KATAKANA LETTER VA
+30F8;W # KATAKANA LETTER VI
+30F9;W # KATAKANA LETTER VE
+30FA;W # KATAKANA LETTER VO
+30FB;W # KATAKANA MIDDLE DOT
+30FC;W # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD;W # KATAKANA ITERATION MARK
+30FE;W # KATAKANA VOICED ITERATION MARK
+30FF;W # KATAKANA DIGRAPH KOTO
+3105;W # BOPOMOFO LETTER B
+3106;W # BOPOMOFO LETTER P
+3107;W # BOPOMOFO LETTER M
+3108;W # BOPOMOFO LETTER F
+3109;W # BOPOMOFO LETTER D
+310A;W # BOPOMOFO LETTER T
+310B;W # BOPOMOFO LETTER N
+310C;W # BOPOMOFO LETTER L
+310D;W # BOPOMOFO LETTER G
+310E;W # BOPOMOFO LETTER K
+310F;W # BOPOMOFO LETTER H
+3110;W # BOPOMOFO LETTER J
+3111;W # BOPOMOFO LETTER Q
+3112;W # BOPOMOFO LETTER X
+3113;W # BOPOMOFO LETTER ZH
+3114;W # BOPOMOFO LETTER CH
+3115;W # BOPOMOFO LETTER SH
+3116;W # BOPOMOFO LETTER R
+3117;W # BOPOMOFO LETTER Z
+3118;W # BOPOMOFO LETTER C
+3119;W # BOPOMOFO LETTER S
+311A;W # BOPOMOFO LETTER A
+311B;W # BOPOMOFO LETTER O
+311C;W # BOPOMOFO LETTER E
+311D;W # BOPOMOFO LETTER EH
+311E;W # BOPOMOFO LETTER AI
+311F;W # BOPOMOFO LETTER EI
+3120;W # BOPOMOFO LETTER AU
+3121;W # BOPOMOFO LETTER OU
+3122;W # BOPOMOFO LETTER AN
+3123;W # BOPOMOFO LETTER EN
+3124;W # BOPOMOFO LETTER ANG
+3125;W # BOPOMOFO LETTER ENG
+3126;W # BOPOMOFO LETTER ER
+3127;W # BOPOMOFO LETTER I
+3128;W # BOPOMOFO LETTER U
+3129;W # BOPOMOFO LETTER IU
+312A;W # BOPOMOFO LETTER V
+312B;W # BOPOMOFO LETTER NG
+312C;W # BOPOMOFO LETTER GN
+312D;W # BOPOMOFO LETTER IH
+3131;W # HANGUL LETTER KIYEOK
+3132;W # HANGUL LETTER SSANGKIYEOK
+3133;W # HANGUL LETTER KIYEOK-SIOS
+3134;W # HANGUL LETTER NIEUN
+3135;W # HANGUL LETTER NIEUN-CIEUC
+3136;W # HANGUL LETTER NIEUN-HIEUH
+3137;W # HANGUL LETTER TIKEUT
+3138;W # HANGUL LETTER SSANGTIKEUT
+3139;W # HANGUL LETTER RIEUL
+313A;W # HANGUL LETTER RIEUL-KIYEOK
+313B;W # HANGUL LETTER RIEUL-MIEUM
+313C;W # HANGUL LETTER RIEUL-PIEUP
+313D;W # HANGUL LETTER RIEUL-SIOS
+313E;W # HANGUL LETTER RIEUL-THIEUTH
+313F;W # HANGUL LETTER RIEUL-PHIEUPH
+3140;W # HANGUL LETTER RIEUL-HIEUH
+3141;W # HANGUL LETTER MIEUM
+3142;W # HANGUL LETTER PIEUP
+3143;W # HANGUL LETTER SSANGPIEUP
+3144;W # HANGUL LETTER PIEUP-SIOS
+3145;W # HANGUL LETTER SIOS
+3146;W # HANGUL LETTER SSANGSIOS
+3147;W # HANGUL LETTER IEUNG
+3148;W # HANGUL LETTER CIEUC
+3149;W # HANGUL LETTER SSANGCIEUC
+314A;W # HANGUL LETTER CHIEUCH
+314B;W # HANGUL LETTER KHIEUKH
+314C;W # HANGUL LETTER THIEUTH
+314D;W # HANGUL LETTER PHIEUPH
+314E;W # HANGUL LETTER HIEUH
+314F;W # HANGUL LETTER A
+3150;W # HANGUL LETTER AE
+3151;W # HANGUL LETTER YA
+3152;W # HANGUL LETTER YAE
+3153;W # HANGUL LETTER EO
+3154;W # HANGUL LETTER E
+3155;W # HANGUL LETTER YEO
+3156;W # HANGUL LETTER YE
+3157;W # HANGUL LETTER O
+3158;W # HANGUL LETTER WA
+3159;W # HANGUL LETTER WAE
+315A;W # HANGUL LETTER OE
+315B;W # HANGUL LETTER YO
+315C;W # HANGUL LETTER U
+315D;W # HANGUL LETTER WEO
+315E;W # HANGUL LETTER WE
+315F;W # HANGUL LETTER WI
+3160;W # HANGUL LETTER YU
+3161;W # HANGUL LETTER EU
+3162;W # HANGUL LETTER YI
+3163;W # HANGUL LETTER I
+3164;W # HANGUL FILLER
+3165;W # HANGUL LETTER SSANGNIEUN
+3166;W # HANGUL LETTER NIEUN-TIKEUT
+3167;W # HANGUL LETTER NIEUN-SIOS
+3168;W # HANGUL LETTER NIEUN-PANSIOS
+3169;W # HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A;W # HANGUL LETTER RIEUL-TIKEUT
+316B;W # HANGUL LETTER RIEUL-PIEUP-SIOS
+316C;W # HANGUL LETTER RIEUL-PANSIOS
+316D;W # HANGUL LETTER RIEUL-YEORINHIEUH
+316E;W # HANGUL LETTER MIEUM-PIEUP
+316F;W # HANGUL LETTER MIEUM-SIOS
+3170;W # HANGUL LETTER MIEUM-PANSIOS
+3171;W # HANGUL LETTER KAPYEOUNMIEUM
+3172;W # HANGUL LETTER PIEUP-KIYEOK
+3173;W # HANGUL LETTER PIEUP-TIKEUT
+3174;W # HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175;W # HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176;W # HANGUL LETTER PIEUP-CIEUC
+3177;W # HANGUL LETTER PIEUP-THIEUTH
+3178;W # HANGUL LETTER KAPYEOUNPIEUP
+3179;W # HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A;W # HANGUL LETTER SIOS-KIYEOK
+317B;W # HANGUL LETTER SIOS-NIEUN
+317C;W # HANGUL LETTER SIOS-TIKEUT
+317D;W # HANGUL LETTER SIOS-PIEUP
+317E;W # HANGUL LETTER SIOS-CIEUC
+317F;W # HANGUL LETTER PANSIOS
+3180;W # HANGUL LETTER SSANGIEUNG
+3181;W # HANGUL LETTER YESIEUNG
+3182;W # HANGUL LETTER YESIEUNG-SIOS
+3183;W # HANGUL LETTER YESIEUNG-PANSIOS
+3184;W # HANGUL LETTER KAPYEOUNPHIEUPH
+3185;W # HANGUL LETTER SSANGHIEUH
+3186;W # HANGUL LETTER YEORINHIEUH
+3187;W # HANGUL LETTER YO-YA
+3188;W # HANGUL LETTER YO-YAE
+3189;W # HANGUL LETTER YO-I
+318A;W # HANGUL LETTER YU-YEO
+318B;W # HANGUL LETTER YU-YE
+318C;W # HANGUL LETTER YU-I
+318D;W # HANGUL LETTER ARAEA
+318E;W # HANGUL LETTER ARAEAE
+3190;W # IDEOGRAPHIC ANNOTATION LINKING MARK
+3191;W # IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192;W # IDEOGRAPHIC ANNOTATION ONE MARK
+3193;W # IDEOGRAPHIC ANNOTATION TWO MARK
+3194;W # IDEOGRAPHIC ANNOTATION THREE MARK
+3195;W # IDEOGRAPHIC ANNOTATION FOUR MARK
+3196;W # IDEOGRAPHIC ANNOTATION TOP MARK
+3197;W # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198;W # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199;W # IDEOGRAPHIC ANNOTATION FIRST MARK
+319A;W # IDEOGRAPHIC ANNOTATION SECOND MARK
+319B;W # IDEOGRAPHIC ANNOTATION THIRD MARK
+319C;W # IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D;W # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E;W # IDEOGRAPHIC ANNOTATION EARTH MARK
+319F;W # IDEOGRAPHIC ANNOTATION MAN MARK
+31A0;W # BOPOMOFO LETTER BU
+31A1;W # BOPOMOFO LETTER ZI
+31A2;W # BOPOMOFO LETTER JI
+31A3;W # BOPOMOFO LETTER GU
+31A4;W # BOPOMOFO LETTER EE
+31A5;W # BOPOMOFO LETTER ENN
+31A6;W # BOPOMOFO LETTER OO
+31A7;W # BOPOMOFO LETTER ONN
+31A8;W # BOPOMOFO LETTER IR
+31A9;W # BOPOMOFO LETTER ANN
+31AA;W # BOPOMOFO LETTER INN
+31AB;W # BOPOMOFO LETTER UNN
+31AC;W # BOPOMOFO LETTER IM
+31AD;W # BOPOMOFO LETTER NGG
+31AE;W # BOPOMOFO LETTER AINN
+31AF;W # BOPOMOFO LETTER AUNN
+31B0;W # BOPOMOFO LETTER AM
+31B1;W # BOPOMOFO LETTER OM
+31B2;W # BOPOMOFO LETTER ONG
+31B3;W # BOPOMOFO LETTER INNN
+31B4;W # BOPOMOFO FINAL LETTER P
+31B5;W # BOPOMOFO FINAL LETTER T
+31B6;W # BOPOMOFO FINAL LETTER K
+31B7;W # BOPOMOFO FINAL LETTER H
+31C0;W # CJK STROKE T
+31C1;W # CJK STROKE WG
+31C2;W # CJK STROKE XG
+31C3;W # CJK STROKE BXG
+31C4;W # CJK STROKE SW
+31C5;W # CJK STROKE HZZ
+31C6;W # CJK STROKE HZG
+31C7;W # CJK STROKE HP
+31C8;W # CJK STROKE HZWG
+31C9;W # CJK STROKE SZWG
+31CA;W # CJK STROKE HZT
+31CB;W # CJK STROKE HZZP
+31CC;W # CJK STROKE HPWG
+31CD;W # CJK STROKE HZW
+31CE;W # CJK STROKE HZZZ
+31CF;W # CJK STROKE N
+31D0;W # CJK STROKE H
+31D1;W # CJK STROKE S
+31D2;W # CJK STROKE P
+31D3;W # CJK STROKE SP
+31D4;W # CJK STROKE D
+31D5;W # CJK STROKE HZ
+31D6;W # CJK STROKE HG
+31D7;W # CJK STROKE SZ
+31D8;W # CJK STROKE SWZ
+31D9;W # CJK STROKE ST
+31DA;W # CJK STROKE SG
+31DB;W # CJK STROKE PD
+31DC;W # CJK STROKE PZ
+31DD;W # CJK STROKE TN
+31DE;W # CJK STROKE SZZ
+31DF;W # CJK STROKE SWG
+31E0;W # CJK STROKE HXWG
+31E1;W # CJK STROKE HZZZG
+31E2;W # CJK STROKE PG
+31E3;W # CJK STROKE Q
+31F0;W # KATAKANA LETTER SMALL KU
+31F1;W # KATAKANA LETTER SMALL SI
+31F2;W # KATAKANA LETTER SMALL SU
+31F3;W # KATAKANA LETTER SMALL TO
+31F4;W # KATAKANA LETTER SMALL NU
+31F5;W # KATAKANA LETTER SMALL HA
+31F6;W # KATAKANA LETTER SMALL HI
+31F7;W # KATAKANA LETTER SMALL HU
+31F8;W # KATAKANA LETTER SMALL HE
+31F9;W # KATAKANA LETTER SMALL HO
+31FA;W # KATAKANA LETTER SMALL MU
+31FB;W # KATAKANA LETTER SMALL RA
+31FC;W # KATAKANA LETTER SMALL RI
+31FD;W # KATAKANA LETTER SMALL RU
+31FE;W # KATAKANA LETTER SMALL RE
+31FF;W # KATAKANA LETTER SMALL RO
+3200;W # PARENTHESIZED HANGUL KIYEOK
+3201;W # PARENTHESIZED HANGUL NIEUN
+3202;W # PARENTHESIZED HANGUL TIKEUT
+3203;W # PARENTHESIZED HANGUL RIEUL
+3204;W # PARENTHESIZED HANGUL MIEUM
+3205;W # PARENTHESIZED HANGUL PIEUP
+3206;W # PARENTHESIZED HANGUL SIOS
+3207;W # PARENTHESIZED HANGUL IEUNG
+3208;W # PARENTHESIZED HANGUL CIEUC
+3209;W # PARENTHESIZED HANGUL CHIEUCH
+320A;W # PARENTHESIZED HANGUL KHIEUKH
+320B;W # PARENTHESIZED HANGUL THIEUTH
+320C;W # PARENTHESIZED HANGUL PHIEUPH
+320D;W # PARENTHESIZED HANGUL HIEUH
+320E;W # PARENTHESIZED HANGUL KIYEOK A
+320F;W # PARENTHESIZED HANGUL NIEUN A
+3210;W # PARENTHESIZED HANGUL TIKEUT A
+3211;W # PARENTHESIZED HANGUL RIEUL A
+3212;W # PARENTHESIZED HANGUL MIEUM A
+3213;W # PARENTHESIZED HANGUL PIEUP A
+3214;W # PARENTHESIZED HANGUL SIOS A
+3215;W # PARENTHESIZED HANGUL IEUNG A
+3216;W # PARENTHESIZED HANGUL CIEUC A
+3217;W # PARENTHESIZED HANGUL CHIEUCH A
+3218;W # PARENTHESIZED HANGUL KHIEUKH A
+3219;W # PARENTHESIZED HANGUL THIEUTH A
+321A;W # PARENTHESIZED HANGUL PHIEUPH A
+321B;W # PARENTHESIZED HANGUL HIEUH A
+321C;W # PARENTHESIZED HANGUL CIEUC U
+321D;W # PARENTHESIZED KOREAN CHARACTER OJEON
+321E;W # PARENTHESIZED KOREAN CHARACTER O HU
+3220;W # PARENTHESIZED IDEOGRAPH ONE
+3221;W # PARENTHESIZED IDEOGRAPH TWO
+3222;W # PARENTHESIZED IDEOGRAPH THREE
+3223;W # PARENTHESIZED IDEOGRAPH FOUR
+3224;W # PARENTHESIZED IDEOGRAPH FIVE
+3225;W # PARENTHESIZED IDEOGRAPH SIX
+3226;W # PARENTHESIZED IDEOGRAPH SEVEN
+3227;W # PARENTHESIZED IDEOGRAPH EIGHT
+3228;W # PARENTHESIZED IDEOGRAPH NINE
+3229;W # PARENTHESIZED IDEOGRAPH TEN
+322A;W # PARENTHESIZED IDEOGRAPH MOON
+322B;W # PARENTHESIZED IDEOGRAPH FIRE
+322C;W # PARENTHESIZED IDEOGRAPH WATER
+322D;W # PARENTHESIZED IDEOGRAPH WOOD
+322E;W # PARENTHESIZED IDEOGRAPH METAL
+322F;W # PARENTHESIZED IDEOGRAPH EARTH
+3230;W # PARENTHESIZED IDEOGRAPH SUN
+3231;W # PARENTHESIZED IDEOGRAPH STOCK
+3232;W # PARENTHESIZED IDEOGRAPH HAVE
+3233;W # PARENTHESIZED IDEOGRAPH SOCIETY
+3234;W # PARENTHESIZED IDEOGRAPH NAME
+3235;W # PARENTHESIZED IDEOGRAPH SPECIAL
+3236;W # PARENTHESIZED IDEOGRAPH FINANCIAL
+3237;W # PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238;W # PARENTHESIZED IDEOGRAPH LABOR
+3239;W # PARENTHESIZED IDEOGRAPH REPRESENT
+323A;W # PARENTHESIZED IDEOGRAPH CALL
+323B;W # PARENTHESIZED IDEOGRAPH STUDY
+323C;W # PARENTHESIZED IDEOGRAPH SUPERVISE
+323D;W # PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E;W # PARENTHESIZED IDEOGRAPH RESOURCE
+323F;W # PARENTHESIZED IDEOGRAPH ALLIANCE
+3240;W # PARENTHESIZED IDEOGRAPH FESTIVAL
+3241;W # PARENTHESIZED IDEOGRAPH REST
+3242;W # PARENTHESIZED IDEOGRAPH SELF
+3243;W # PARENTHESIZED IDEOGRAPH REACH
+3244;W # CIRCLED IDEOGRAPH QUESTION
+3245;W # CIRCLED IDEOGRAPH KINDERGARTEN
+3246;W # CIRCLED IDEOGRAPH SCHOOL
+3247;W # CIRCLED IDEOGRAPH KOTO
+3248;A # CIRCLED NUMBER TEN ON BLACK SQUARE
+3249;A # CIRCLED NUMBER TWENTY ON BLACK SQUARE
+324A;A # CIRCLED NUMBER THIRTY ON BLACK SQUARE
+324B;A # CIRCLED NUMBER FORTY ON BLACK SQUARE
+324C;A # CIRCLED NUMBER FIFTY ON BLACK SQUARE
+324D;A # CIRCLED NUMBER SIXTY ON BLACK SQUARE
+324E;A # CIRCLED NUMBER SEVENTY ON BLACK SQUARE
+324F;A # CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250;W # PARTNERSHIP SIGN
+3251;W # CIRCLED NUMBER TWENTY ONE
+3252;W # CIRCLED NUMBER TWENTY TWO
+3253;W # CIRCLED NUMBER TWENTY THREE
+3254;W # CIRCLED NUMBER TWENTY FOUR
+3255;W # CIRCLED NUMBER TWENTY FIVE
+3256;W # CIRCLED NUMBER TWENTY SIX
+3257;W # CIRCLED NUMBER TWENTY SEVEN
+3258;W # CIRCLED NUMBER TWENTY EIGHT
+3259;W # CIRCLED NUMBER TWENTY NINE
+325A;W # CIRCLED NUMBER THIRTY
+325B;W # CIRCLED NUMBER THIRTY ONE
+325C;W # CIRCLED NUMBER THIRTY TWO
+325D;W # CIRCLED NUMBER THIRTY THREE
+325E;W # CIRCLED NUMBER THIRTY FOUR
+325F;W # CIRCLED NUMBER THIRTY FIVE
+3260;W # CIRCLED HANGUL KIYEOK
+3261;W # CIRCLED HANGUL NIEUN
+3262;W # CIRCLED HANGUL TIKEUT
+3263;W # CIRCLED HANGUL RIEUL
+3264;W # CIRCLED HANGUL MIEUM
+3265;W # CIRCLED HANGUL PIEUP
+3266;W # CIRCLED HANGUL SIOS
+3267;W # CIRCLED HANGUL IEUNG
+3268;W # CIRCLED HANGUL CIEUC
+3269;W # CIRCLED HANGUL CHIEUCH
+326A;W # CIRCLED HANGUL KHIEUKH
+326B;W # CIRCLED HANGUL THIEUTH
+326C;W # CIRCLED HANGUL PHIEUPH
+326D;W # CIRCLED HANGUL HIEUH
+326E;W # CIRCLED HANGUL KIYEOK A
+326F;W # CIRCLED HANGUL NIEUN A
+3270;W # CIRCLED HANGUL TIKEUT A
+3271;W # CIRCLED HANGUL RIEUL A
+3272;W # CIRCLED HANGUL MIEUM A
+3273;W # CIRCLED HANGUL PIEUP A
+3274;W # CIRCLED HANGUL SIOS A
+3275;W # CIRCLED HANGUL IEUNG A
+3276;W # CIRCLED HANGUL CIEUC A
+3277;W # CIRCLED HANGUL CHIEUCH A
+3278;W # CIRCLED HANGUL KHIEUKH A
+3279;W # CIRCLED HANGUL THIEUTH A
+327A;W # CIRCLED HANGUL PHIEUPH A
+327B;W # CIRCLED HANGUL HIEUH A
+327C;W # CIRCLED KOREAN CHARACTER CHAMKO
+327D;W # CIRCLED KOREAN CHARACTER JUEUI
+327E;W # CIRCLED HANGUL IEUNG U
+327F;W # KOREAN STANDARD SYMBOL
+3280;W # CIRCLED IDEOGRAPH ONE
+3281;W # CIRCLED IDEOGRAPH TWO
+3282;W # CIRCLED IDEOGRAPH THREE
+3283;W # CIRCLED IDEOGRAPH FOUR
+3284;W # CIRCLED IDEOGRAPH FIVE
+3285;W # CIRCLED IDEOGRAPH SIX
+3286;W # CIRCLED IDEOGRAPH SEVEN
+3287;W # CIRCLED IDEOGRAPH EIGHT
+3288;W # CIRCLED IDEOGRAPH NINE
+3289;W # CIRCLED IDEOGRAPH TEN
+328A;W # CIRCLED IDEOGRAPH MOON
+328B;W # CIRCLED IDEOGRAPH FIRE
+328C;W # CIRCLED IDEOGRAPH WATER
+328D;W # CIRCLED IDEOGRAPH WOOD
+328E;W # CIRCLED IDEOGRAPH METAL
+328F;W # CIRCLED IDEOGRAPH EARTH
+3290;W # CIRCLED IDEOGRAPH SUN
+3291;W # CIRCLED IDEOGRAPH STOCK
+3292;W # CIRCLED IDEOGRAPH HAVE
+3293;W # CIRCLED IDEOGRAPH SOCIETY
+3294;W # CIRCLED IDEOGRAPH NAME
+3295;W # CIRCLED IDEOGRAPH SPECIAL
+3296;W # CIRCLED IDEOGRAPH FINANCIAL
+3297;W # CIRCLED IDEOGRAPH CONGRATULATION
+3298;W # CIRCLED IDEOGRAPH LABOR
+3299;W # CIRCLED IDEOGRAPH SECRET
+329A;W # CIRCLED IDEOGRAPH MALE
+329B;W # CIRCLED IDEOGRAPH FEMALE
+329C;W # CIRCLED IDEOGRAPH SUITABLE
+329D;W # CIRCLED IDEOGRAPH EXCELLENT
+329E;W # CIRCLED IDEOGRAPH PRINT
+329F;W # CIRCLED IDEOGRAPH ATTENTION
+32A0;W # CIRCLED IDEOGRAPH ITEM
+32A1;W # CIRCLED IDEOGRAPH REST
+32A2;W # CIRCLED IDEOGRAPH COPY
+32A3;W # CIRCLED IDEOGRAPH CORRECT
+32A4;W # CIRCLED IDEOGRAPH HIGH
+32A5;W # CIRCLED IDEOGRAPH CENTRE
+32A6;W # CIRCLED IDEOGRAPH LOW
+32A7;W # CIRCLED IDEOGRAPH LEFT
+32A8;W # CIRCLED IDEOGRAPH RIGHT
+32A9;W # CIRCLED IDEOGRAPH MEDICINE
+32AA;W # CIRCLED IDEOGRAPH RELIGION
+32AB;W # CIRCLED IDEOGRAPH STUDY
+32AC;W # CIRCLED IDEOGRAPH SUPERVISE
+32AD;W # CIRCLED IDEOGRAPH ENTERPRISE
+32AE;W # CIRCLED IDEOGRAPH RESOURCE
+32AF;W # CIRCLED IDEOGRAPH ALLIANCE
+32B0;W # CIRCLED IDEOGRAPH NIGHT
+32B1;W # CIRCLED NUMBER THIRTY SIX
+32B2;W # CIRCLED NUMBER THIRTY SEVEN
+32B3;W # CIRCLED NUMBER THIRTY EIGHT
+32B4;W # CIRCLED NUMBER THIRTY NINE
+32B5;W # CIRCLED NUMBER FORTY
+32B6;W # CIRCLED NUMBER FORTY ONE
+32B7;W # CIRCLED NUMBER FORTY TWO
+32B8;W # CIRCLED NUMBER FORTY THREE
+32B9;W # CIRCLED NUMBER FORTY FOUR
+32BA;W # CIRCLED NUMBER FORTY FIVE
+32BB;W # CIRCLED NUMBER FORTY SIX
+32BC;W # CIRCLED NUMBER FORTY SEVEN
+32BD;W # CIRCLED NUMBER FORTY EIGHT
+32BE;W # CIRCLED NUMBER FORTY NINE
+32BF;W # CIRCLED NUMBER FIFTY
+32C0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC;W # SQUARE HG
+32CD;W # SQUARE ERG
+32CE;W # SQUARE EV
+32CF;W # LIMITED LIABILITY SIGN
+32D0;W # CIRCLED KATAKANA A
+32D1;W # CIRCLED KATAKANA I
+32D2;W # CIRCLED KATAKANA U
+32D3;W # CIRCLED KATAKANA E
+32D4;W # CIRCLED KATAKANA O
+32D5;W # CIRCLED KATAKANA KA
+32D6;W # CIRCLED KATAKANA KI
+32D7;W # CIRCLED KATAKANA KU
+32D8;W # CIRCLED KATAKANA KE
+32D9;W # CIRCLED KATAKANA KO
+32DA;W # CIRCLED KATAKANA SA
+32DB;W # CIRCLED KATAKANA SI
+32DC;W # CIRCLED KATAKANA SU
+32DD;W # CIRCLED KATAKANA SE
+32DE;W # CIRCLED KATAKANA SO
+32DF;W # CIRCLED KATAKANA TA
+32E0;W # CIRCLED KATAKANA TI
+32E1;W # CIRCLED KATAKANA TU
+32E2;W # CIRCLED KATAKANA TE
+32E3;W # CIRCLED KATAKANA TO
+32E4;W # CIRCLED KATAKANA NA
+32E5;W # CIRCLED KATAKANA NI
+32E6;W # CIRCLED KATAKANA NU
+32E7;W # CIRCLED KATAKANA NE
+32E8;W # CIRCLED KATAKANA NO
+32E9;W # CIRCLED KATAKANA HA
+32EA;W # CIRCLED KATAKANA HI
+32EB;W # CIRCLED KATAKANA HU
+32EC;W # CIRCLED KATAKANA HE
+32ED;W # CIRCLED KATAKANA HO
+32EE;W # CIRCLED KATAKANA MA
+32EF;W # CIRCLED KATAKANA MI
+32F0;W # CIRCLED KATAKANA MU
+32F1;W # CIRCLED KATAKANA ME
+32F2;W # CIRCLED KATAKANA MO
+32F3;W # CIRCLED KATAKANA YA
+32F4;W # CIRCLED KATAKANA YU
+32F5;W # CIRCLED KATAKANA YO
+32F6;W # CIRCLED KATAKANA RA
+32F7;W # CIRCLED KATAKANA RI
+32F8;W # CIRCLED KATAKANA RU
+32F9;W # CIRCLED KATAKANA RE
+32FA;W # CIRCLED KATAKANA RO
+32FB;W # CIRCLED KATAKANA WA
+32FC;W # CIRCLED KATAKANA WI
+32FD;W # CIRCLED KATAKANA WE
+32FE;W # CIRCLED KATAKANA WO
+3300;W # SQUARE APAATO
+3301;W # SQUARE ARUHUA
+3302;W # SQUARE ANPEA
+3303;W # SQUARE AARU
+3304;W # SQUARE ININGU
+3305;W # SQUARE INTI
+3306;W # SQUARE UON
+3307;W # SQUARE ESUKUUDO
+3308;W # SQUARE EEKAA
+3309;W # SQUARE ONSU
+330A;W # SQUARE OOMU
+330B;W # SQUARE KAIRI
+330C;W # SQUARE KARATTO
+330D;W # SQUARE KARORII
+330E;W # SQUARE GARON
+330F;W # SQUARE GANMA
+3310;W # SQUARE GIGA
+3311;W # SQUARE GINII
+3312;W # SQUARE KYURII
+3313;W # SQUARE GIRUDAA
+3314;W # SQUARE KIRO
+3315;W # SQUARE KIROGURAMU
+3316;W # SQUARE KIROMEETORU
+3317;W # SQUARE KIROWATTO
+3318;W # SQUARE GURAMU
+3319;W # SQUARE GURAMUTON
+331A;W # SQUARE KURUZEIRO
+331B;W # SQUARE KUROONE
+331C;W # SQUARE KEESU
+331D;W # SQUARE KORUNA
+331E;W # SQUARE KOOPO
+331F;W # SQUARE SAIKURU
+3320;W # SQUARE SANTIIMU
+3321;W # SQUARE SIRINGU
+3322;W # SQUARE SENTI
+3323;W # SQUARE SENTO
+3324;W # SQUARE DAASU
+3325;W # SQUARE DESI
+3326;W # SQUARE DORU
+3327;W # SQUARE TON
+3328;W # SQUARE NANO
+3329;W # SQUARE NOTTO
+332A;W # SQUARE HAITU
+332B;W # SQUARE PAASENTO
+332C;W # SQUARE PAATU
+332D;W # SQUARE BAARERU
+332E;W # SQUARE PIASUTORU
+332F;W # SQUARE PIKURU
+3330;W # SQUARE PIKO
+3331;W # SQUARE BIRU
+3332;W # SQUARE HUARADDO
+3333;W # SQUARE HUIITO
+3334;W # SQUARE BUSSYERU
+3335;W # SQUARE HURAN
+3336;W # SQUARE HEKUTAARU
+3337;W # SQUARE PESO
+3338;W # SQUARE PENIHI
+3339;W # SQUARE HERUTU
+333A;W # SQUARE PENSU
+333B;W # SQUARE PEEZI
+333C;W # SQUARE BEETA
+333D;W # SQUARE POINTO
+333E;W # SQUARE BORUTO
+333F;W # SQUARE HON
+3340;W # SQUARE PONDO
+3341;W # SQUARE HOORU
+3342;W # SQUARE HOON
+3343;W # SQUARE MAIKURO
+3344;W # SQUARE MAIRU
+3345;W # SQUARE MAHHA
+3346;W # SQUARE MARUKU
+3347;W # SQUARE MANSYON
+3348;W # SQUARE MIKURON
+3349;W # SQUARE MIRI
+334A;W # SQUARE MIRIBAARU
+334B;W # SQUARE MEGA
+334C;W # SQUARE MEGATON
+334D;W # SQUARE MEETORU
+334E;W # SQUARE YAADO
+334F;W # SQUARE YAARU
+3350;W # SQUARE YUAN
+3351;W # SQUARE RITTORU
+3352;W # SQUARE RIRA
+3353;W # SQUARE RUPII
+3354;W # SQUARE RUUBURU
+3355;W # SQUARE REMU
+3356;W # SQUARE RENTOGEN
+3357;W # SQUARE WATTO
+3358;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371;W # SQUARE HPA
+3372;W # SQUARE DA
+3373;W # SQUARE AU
+3374;W # SQUARE BAR
+3375;W # SQUARE OV
+3376;W # SQUARE PC
+3377;W # SQUARE DM
+3378;W # SQUARE DM SQUARED
+3379;W # SQUARE DM CUBED
+337A;W # SQUARE IU
+337B;W # SQUARE ERA NAME HEISEI
+337C;W # SQUARE ERA NAME SYOUWA
+337D;W # SQUARE ERA NAME TAISYOU
+337E;W # SQUARE ERA NAME MEIZI
+337F;W # SQUARE CORPORATION
+3380;W # SQUARE PA AMPS
+3381;W # SQUARE NA
+3382;W # SQUARE MU A
+3383;W # SQUARE MA
+3384;W # SQUARE KA
+3385;W # SQUARE KB
+3386;W # SQUARE MB
+3387;W # SQUARE GB
+3388;W # SQUARE CAL
+3389;W # SQUARE KCAL
+338A;W # SQUARE PF
+338B;W # SQUARE NF
+338C;W # SQUARE MU F
+338D;W # SQUARE MU G
+338E;W # SQUARE MG
+338F;W # SQUARE KG
+3390;W # SQUARE HZ
+3391;W # SQUARE KHZ
+3392;W # SQUARE MHZ
+3393;W # SQUARE GHZ
+3394;W # SQUARE THZ
+3395;W # SQUARE MU L
+3396;W # SQUARE ML
+3397;W # SQUARE DL
+3398;W # SQUARE KL
+3399;W # SQUARE FM
+339A;W # SQUARE NM
+339B;W # SQUARE MU M
+339C;W # SQUARE MM
+339D;W # SQUARE CM
+339E;W # SQUARE KM
+339F;W # SQUARE MM SQUARED
+33A0;W # SQUARE CM SQUARED
+33A1;W # SQUARE M SQUARED
+33A2;W # SQUARE KM SQUARED
+33A3;W # SQUARE MM CUBED
+33A4;W # SQUARE CM CUBED
+33A5;W # SQUARE M CUBED
+33A6;W # SQUARE KM CUBED
+33A7;W # SQUARE M OVER S
+33A8;W # SQUARE M OVER S SQUARED
+33A9;W # SQUARE PA
+33AA;W # SQUARE KPA
+33AB;W # SQUARE MPA
+33AC;W # SQUARE GPA
+33AD;W # SQUARE RAD
+33AE;W # SQUARE RAD OVER S
+33AF;W # SQUARE RAD OVER S SQUARED
+33B0;W # SQUARE PS
+33B1;W # SQUARE NS
+33B2;W # SQUARE MU S
+33B3;W # SQUARE MS
+33B4;W # SQUARE PV
+33B5;W # SQUARE NV
+33B6;W # SQUARE MU V
+33B7;W # SQUARE MV
+33B8;W # SQUARE KV
+33B9;W # SQUARE MV MEGA
+33BA;W # SQUARE PW
+33BB;W # SQUARE NW
+33BC;W # SQUARE MU W
+33BD;W # SQUARE MW
+33BE;W # SQUARE KW
+33BF;W # SQUARE MW MEGA
+33C0;W # SQUARE K OHM
+33C1;W # SQUARE M OHM
+33C2;W # SQUARE AM
+33C3;W # SQUARE BQ
+33C4;W # SQUARE CC
+33C5;W # SQUARE CD
+33C6;W # SQUARE C OVER KG
+33C7;W # SQUARE CO
+33C8;W # SQUARE DB
+33C9;W # SQUARE GY
+33CA;W # SQUARE HA
+33CB;W # SQUARE HP
+33CC;W # SQUARE IN
+33CD;W # SQUARE KK
+33CE;W # SQUARE KM CAPITAL
+33CF;W # SQUARE KT
+33D0;W # SQUARE LM
+33D1;W # SQUARE LN
+33D2;W # SQUARE LOG
+33D3;W # SQUARE LX
+33D4;W # SQUARE MB SMALL
+33D5;W # SQUARE MIL
+33D6;W # SQUARE MOL
+33D7;W # SQUARE PH
+33D8;W # SQUARE PM
+33D9;W # SQUARE PPM
+33DA;W # SQUARE PR
+33DB;W # SQUARE SR
+33DC;W # SQUARE SV
+33DD;W # SQUARE WB
+33DE;W # SQUARE V OVER M
+33DF;W # SQUARE A OVER M
+33E0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF;W # SQUARE GAL
+3400..4DB5;W # <CJK Ideograph Extension A, First>..<CJK Ideograph Extension A, Last>
+4DB6..4DBF;W # <reserved-4DB6>..<reserved-4DBF>
+4DC0;N # HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1;N # HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2;N # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3;N # HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4;N # HEXAGRAM FOR WAITING
+4DC5;N # HEXAGRAM FOR CONFLICT
+4DC6;N # HEXAGRAM FOR THE ARMY
+4DC7;N # HEXAGRAM FOR HOLDING TOGETHER
+4DC8;N # HEXAGRAM FOR SMALL TAMING
+4DC9;N # HEXAGRAM FOR TREADING
+4DCA;N # HEXAGRAM FOR PEACE
+4DCB;N # HEXAGRAM FOR STANDSTILL
+4DCC;N # HEXAGRAM FOR FELLOWSHIP
+4DCD;N # HEXAGRAM FOR GREAT POSSESSION
+4DCE;N # HEXAGRAM FOR MODESTY
+4DCF;N # HEXAGRAM FOR ENTHUSIASM
+4DD0;N # HEXAGRAM FOR FOLLOWING
+4DD1;N # HEXAGRAM FOR WORK ON THE DECAYED
+4DD2;N # HEXAGRAM FOR APPROACH
+4DD3;N # HEXAGRAM FOR CONTEMPLATION
+4DD4;N # HEXAGRAM FOR BITING THROUGH
+4DD5;N # HEXAGRAM FOR GRACE
+4DD6;N # HEXAGRAM FOR SPLITTING APART
+4DD7;N # HEXAGRAM FOR RETURN
+4DD8;N # HEXAGRAM FOR INNOCENCE
+4DD9;N # HEXAGRAM FOR GREAT TAMING
+4DDA;N # HEXAGRAM FOR MOUTH CORNERS
+4DDB;N # HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC;N # HEXAGRAM FOR THE ABYSMAL WATER
+4DDD;N # HEXAGRAM FOR THE CLINGING FIRE
+4DDE;N # HEXAGRAM FOR INFLUENCE
+4DDF;N # HEXAGRAM FOR DURATION
+4DE0;N # HEXAGRAM FOR RETREAT
+4DE1;N # HEXAGRAM FOR GREAT POWER
+4DE2;N # HEXAGRAM FOR PROGRESS
+4DE3;N # HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4;N # HEXAGRAM FOR THE FAMILY
+4DE5;N # HEXAGRAM FOR OPPOSITION
+4DE6;N # HEXAGRAM FOR OBSTRUCTION
+4DE7;N # HEXAGRAM FOR DELIVERANCE
+4DE8;N # HEXAGRAM FOR DECREASE
+4DE9;N # HEXAGRAM FOR INCREASE
+4DEA;N # HEXAGRAM FOR BREAKTHROUGH
+4DEB;N # HEXAGRAM FOR COMING TO MEET
+4DEC;N # HEXAGRAM FOR GATHERING TOGETHER
+4DED;N # HEXAGRAM FOR PUSHING UPWARD
+4DEE;N # HEXAGRAM FOR OPPRESSION
+4DEF;N # HEXAGRAM FOR THE WELL
+4DF0;N # HEXAGRAM FOR REVOLUTION
+4DF1;N # HEXAGRAM FOR THE CAULDRON
+4DF2;N # HEXAGRAM FOR THE AROUSING THUNDER
+4DF3;N # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4;N # HEXAGRAM FOR DEVELOPMENT
+4DF5;N # HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6;N # HEXAGRAM FOR ABUNDANCE
+4DF7;N # HEXAGRAM FOR THE WANDERER
+4DF8;N # HEXAGRAM FOR THE GENTLE WIND
+4DF9;N # HEXAGRAM FOR THE JOYOUS LAKE
+4DFA;N # HEXAGRAM FOR DISPERSION
+4DFB;N # HEXAGRAM FOR LIMITATION
+4DFC;N # HEXAGRAM FOR INNER TRUTH
+4DFD;N # HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE;N # HEXAGRAM FOR AFTER COMPLETION
+4DFF;N # HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FCB;W # <CJK Ideograph, First>..<CJK Ideograph, Last>
+9FCC..9FFF;W # <reserved-9FCC>..<reserved-9FFF>
+A000;W # YI SYLLABLE IT
+A001;W # YI SYLLABLE IX
+A002;W # YI SYLLABLE I
+A003;W # YI SYLLABLE IP
+A004;W # YI SYLLABLE IET
+A005;W # YI SYLLABLE IEX
+A006;W # YI SYLLABLE IE
+A007;W # YI SYLLABLE IEP
+A008;W # YI SYLLABLE AT
+A009;W # YI SYLLABLE AX
+A00A;W # YI SYLLABLE A
+A00B;W # YI SYLLABLE AP
+A00C;W # YI SYLLABLE UOX
+A00D;W # YI SYLLABLE UO
+A00E;W # YI SYLLABLE UOP
+A00F;W # YI SYLLABLE OT
+A010;W # YI SYLLABLE OX
+A011;W # YI SYLLABLE O
+A012;W # YI SYLLABLE OP
+A013;W # YI SYLLABLE EX
+A014;W # YI SYLLABLE E
+A015;W # YI SYLLABLE WU
+A016;W # YI SYLLABLE BIT
+A017;W # YI SYLLABLE BIX
+A018;W # YI SYLLABLE BI
+A019;W # YI SYLLABLE BIP
+A01A;W # YI SYLLABLE BIET
+A01B;W # YI SYLLABLE BIEX
+A01C;W # YI SYLLABLE BIE
+A01D;W # YI SYLLABLE BIEP
+A01E;W # YI SYLLABLE BAT
+A01F;W # YI SYLLABLE BAX
+A020;W # YI SYLLABLE BA
+A021;W # YI SYLLABLE BAP
+A022;W # YI SYLLABLE BUOX
+A023;W # YI SYLLABLE BUO
+A024;W # YI SYLLABLE BUOP
+A025;W # YI SYLLABLE BOT
+A026;W # YI SYLLABLE BOX
+A027;W # YI SYLLABLE BO
+A028;W # YI SYLLABLE BOP
+A029;W # YI SYLLABLE BEX
+A02A;W # YI SYLLABLE BE
+A02B;W # YI SYLLABLE BEP
+A02C;W # YI SYLLABLE BUT
+A02D;W # YI SYLLABLE BUX
+A02E;W # YI SYLLABLE BU
+A02F;W # YI SYLLABLE BUP
+A030;W # YI SYLLABLE BURX
+A031;W # YI SYLLABLE BUR
+A032;W # YI SYLLABLE BYT
+A033;W # YI SYLLABLE BYX
+A034;W # YI SYLLABLE BY
+A035;W # YI SYLLABLE BYP
+A036;W # YI SYLLABLE BYRX
+A037;W # YI SYLLABLE BYR
+A038;W # YI SYLLABLE PIT
+A039;W # YI SYLLABLE PIX
+A03A;W # YI SYLLABLE PI
+A03B;W # YI SYLLABLE PIP
+A03C;W # YI SYLLABLE PIEX
+A03D;W # YI SYLLABLE PIE
+A03E;W # YI SYLLABLE PIEP
+A03F;W # YI SYLLABLE PAT
+A040;W # YI SYLLABLE PAX
+A041;W # YI SYLLABLE PA
+A042;W # YI SYLLABLE PAP
+A043;W # YI SYLLABLE PUOX
+A044;W # YI SYLLABLE PUO
+A045;W # YI SYLLABLE PUOP
+A046;W # YI SYLLABLE POT
+A047;W # YI SYLLABLE POX
+A048;W # YI SYLLABLE PO
+A049;W # YI SYLLABLE POP
+A04A;W # YI SYLLABLE PUT
+A04B;W # YI SYLLABLE PUX
+A04C;W # YI SYLLABLE PU
+A04D;W # YI SYLLABLE PUP
+A04E;W # YI SYLLABLE PURX
+A04F;W # YI SYLLABLE PUR
+A050;W # YI SYLLABLE PYT
+A051;W # YI SYLLABLE PYX
+A052;W # YI SYLLABLE PY
+A053;W # YI SYLLABLE PYP
+A054;W # YI SYLLABLE PYRX
+A055;W # YI SYLLABLE PYR
+A056;W # YI SYLLABLE BBIT
+A057;W # YI SYLLABLE BBIX
+A058;W # YI SYLLABLE BBI
+A059;W # YI SYLLABLE BBIP
+A05A;W # YI SYLLABLE BBIET
+A05B;W # YI SYLLABLE BBIEX
+A05C;W # YI SYLLABLE BBIE
+A05D;W # YI SYLLABLE BBIEP
+A05E;W # YI SYLLABLE BBAT
+A05F;W # YI SYLLABLE BBAX
+A060;W # YI SYLLABLE BBA
+A061;W # YI SYLLABLE BBAP
+A062;W # YI SYLLABLE BBUOX
+A063;W # YI SYLLABLE BBUO
+A064;W # YI SYLLABLE BBUOP
+A065;W # YI SYLLABLE BBOT
+A066;W # YI SYLLABLE BBOX
+A067;W # YI SYLLABLE BBO
+A068;W # YI SYLLABLE BBOP
+A069;W # YI SYLLABLE BBEX
+A06A;W # YI SYLLABLE BBE
+A06B;W # YI SYLLABLE BBEP
+A06C;W # YI SYLLABLE BBUT
+A06D;W # YI SYLLABLE BBUX
+A06E;W # YI SYLLABLE BBU
+A06F;W # YI SYLLABLE BBUP
+A070;W # YI SYLLABLE BBURX
+A071;W # YI SYLLABLE BBUR
+A072;W # YI SYLLABLE BBYT
+A073;W # YI SYLLABLE BBYX
+A074;W # YI SYLLABLE BBY
+A075;W # YI SYLLABLE BBYP
+A076;W # YI SYLLABLE NBIT
+A077;W # YI SYLLABLE NBIX
+A078;W # YI SYLLABLE NBI
+A079;W # YI SYLLABLE NBIP
+A07A;W # YI SYLLABLE NBIEX
+A07B;W # YI SYLLABLE NBIE
+A07C;W # YI SYLLABLE NBIEP
+A07D;W # YI SYLLABLE NBAT
+A07E;W # YI SYLLABLE NBAX
+A07F;W # YI SYLLABLE NBA
+A080;W # YI SYLLABLE NBAP
+A081;W # YI SYLLABLE NBOT
+A082;W # YI SYLLABLE NBOX
+A083;W # YI SYLLABLE NBO
+A084;W # YI SYLLABLE NBOP
+A085;W # YI SYLLABLE NBUT
+A086;W # YI SYLLABLE NBUX
+A087;W # YI SYLLABLE NBU
+A088;W # YI SYLLABLE NBUP
+A089;W # YI SYLLABLE NBURX
+A08A;W # YI SYLLABLE NBUR
+A08B;W # YI SYLLABLE NBYT
+A08C;W # YI SYLLABLE NBYX
+A08D;W # YI SYLLABLE NBY
+A08E;W # YI SYLLABLE NBYP
+A08F;W # YI SYLLABLE NBYRX
+A090;W # YI SYLLABLE NBYR
+A091;W # YI SYLLABLE HMIT
+A092;W # YI SYLLABLE HMIX
+A093;W # YI SYLLABLE HMI
+A094;W # YI SYLLABLE HMIP
+A095;W # YI SYLLABLE HMIEX
+A096;W # YI SYLLABLE HMIE
+A097;W # YI SYLLABLE HMIEP
+A098;W # YI SYLLABLE HMAT
+A099;W # YI SYLLABLE HMAX
+A09A;W # YI SYLLABLE HMA
+A09B;W # YI SYLLABLE HMAP
+A09C;W # YI SYLLABLE HMUOX
+A09D;W # YI SYLLABLE HMUO
+A09E;W # YI SYLLABLE HMUOP
+A09F;W # YI SYLLABLE HMOT
+A0A0;W # YI SYLLABLE HMOX
+A0A1;W # YI SYLLABLE HMO
+A0A2;W # YI SYLLABLE HMOP
+A0A3;W # YI SYLLABLE HMUT
+A0A4;W # YI SYLLABLE HMUX
+A0A5;W # YI SYLLABLE HMU
+A0A6;W # YI SYLLABLE HMUP
+A0A7;W # YI SYLLABLE HMURX
+A0A8;W # YI SYLLABLE HMUR
+A0A9;W # YI SYLLABLE HMYX
+A0AA;W # YI SYLLABLE HMY
+A0AB;W # YI SYLLABLE HMYP
+A0AC;W # YI SYLLABLE HMYRX
+A0AD;W # YI SYLLABLE HMYR
+A0AE;W # YI SYLLABLE MIT
+A0AF;W # YI SYLLABLE MIX
+A0B0;W # YI SYLLABLE MI
+A0B1;W # YI SYLLABLE MIP
+A0B2;W # YI SYLLABLE MIEX
+A0B3;W # YI SYLLABLE MIE
+A0B4;W # YI SYLLABLE MIEP
+A0B5;W # YI SYLLABLE MAT
+A0B6;W # YI SYLLABLE MAX
+A0B7;W # YI SYLLABLE MA
+A0B8;W # YI SYLLABLE MAP
+A0B9;W # YI SYLLABLE MUOT
+A0BA;W # YI SYLLABLE MUOX
+A0BB;W # YI SYLLABLE MUO
+A0BC;W # YI SYLLABLE MUOP
+A0BD;W # YI SYLLABLE MOT
+A0BE;W # YI SYLLABLE MOX
+A0BF;W # YI SYLLABLE MO
+A0C0;W # YI SYLLABLE MOP
+A0C1;W # YI SYLLABLE MEX
+A0C2;W # YI SYLLABLE ME
+A0C3;W # YI SYLLABLE MUT
+A0C4;W # YI SYLLABLE MUX
+A0C5;W # YI SYLLABLE MU
+A0C6;W # YI SYLLABLE MUP
+A0C7;W # YI SYLLABLE MURX
+A0C8;W # YI SYLLABLE MUR
+A0C9;W # YI SYLLABLE MYT
+A0CA;W # YI SYLLABLE MYX
+A0CB;W # YI SYLLABLE MY
+A0CC;W # YI SYLLABLE MYP
+A0CD;W # YI SYLLABLE FIT
+A0CE;W # YI SYLLABLE FIX
+A0CF;W # YI SYLLABLE FI
+A0D0;W # YI SYLLABLE FIP
+A0D1;W # YI SYLLABLE FAT
+A0D2;W # YI SYLLABLE FAX
+A0D3;W # YI SYLLABLE FA
+A0D4;W # YI SYLLABLE FAP
+A0D5;W # YI SYLLABLE FOX
+A0D6;W # YI SYLLABLE FO
+A0D7;W # YI SYLLABLE FOP
+A0D8;W # YI SYLLABLE FUT
+A0D9;W # YI SYLLABLE FUX
+A0DA;W # YI SYLLABLE FU
+A0DB;W # YI SYLLABLE FUP
+A0DC;W # YI SYLLABLE FURX
+A0DD;W # YI SYLLABLE FUR
+A0DE;W # YI SYLLABLE FYT
+A0DF;W # YI SYLLABLE FYX
+A0E0;W # YI SYLLABLE FY
+A0E1;W # YI SYLLABLE FYP
+A0E2;W # YI SYLLABLE VIT
+A0E3;W # YI SYLLABLE VIX
+A0E4;W # YI SYLLABLE VI
+A0E5;W # YI SYLLABLE VIP
+A0E6;W # YI SYLLABLE VIET
+A0E7;W # YI SYLLABLE VIEX
+A0E8;W # YI SYLLABLE VIE
+A0E9;W # YI SYLLABLE VIEP
+A0EA;W # YI SYLLABLE VAT
+A0EB;W # YI SYLLABLE VAX
+A0EC;W # YI SYLLABLE VA
+A0ED;W # YI SYLLABLE VAP
+A0EE;W # YI SYLLABLE VOT
+A0EF;W # YI SYLLABLE VOX
+A0F0;W # YI SYLLABLE VO
+A0F1;W # YI SYLLABLE VOP
+A0F2;W # YI SYLLABLE VEX
+A0F3;W # YI SYLLABLE VEP
+A0F4;W # YI SYLLABLE VUT
+A0F5;W # YI SYLLABLE VUX
+A0F6;W # YI SYLLABLE VU
+A0F7;W # YI SYLLABLE VUP
+A0F8;W # YI SYLLABLE VURX
+A0F9;W # YI SYLLABLE VUR
+A0FA;W # YI SYLLABLE VYT
+A0FB;W # YI SYLLABLE VYX
+A0FC;W # YI SYLLABLE VY
+A0FD;W # YI SYLLABLE VYP
+A0FE;W # YI SYLLABLE VYRX
+A0FF;W # YI SYLLABLE VYR
+A100;W # YI SYLLABLE DIT
+A101;W # YI SYLLABLE DIX
+A102;W # YI SYLLABLE DI
+A103;W # YI SYLLABLE DIP
+A104;W # YI SYLLABLE DIEX
+A105;W # YI SYLLABLE DIE
+A106;W # YI SYLLABLE DIEP
+A107;W # YI SYLLABLE DAT
+A108;W # YI SYLLABLE DAX
+A109;W # YI SYLLABLE DA
+A10A;W # YI SYLLABLE DAP
+A10B;W # YI SYLLABLE DUOX
+A10C;W # YI SYLLABLE DUO
+A10D;W # YI SYLLABLE DOT
+A10E;W # YI SYLLABLE DOX
+A10F;W # YI SYLLABLE DO
+A110;W # YI SYLLABLE DOP
+A111;W # YI SYLLABLE DEX
+A112;W # YI SYLLABLE DE
+A113;W # YI SYLLABLE DEP
+A114;W # YI SYLLABLE DUT
+A115;W # YI SYLLABLE DUX
+A116;W # YI SYLLABLE DU
+A117;W # YI SYLLABLE DUP
+A118;W # YI SYLLABLE DURX
+A119;W # YI SYLLABLE DUR
+A11A;W # YI SYLLABLE TIT
+A11B;W # YI SYLLABLE TIX
+A11C;W # YI SYLLABLE TI
+A11D;W # YI SYLLABLE TIP
+A11E;W # YI SYLLABLE TIEX
+A11F;W # YI SYLLABLE TIE
+A120;W # YI SYLLABLE TIEP
+A121;W # YI SYLLABLE TAT
+A122;W # YI SYLLABLE TAX
+A123;W # YI SYLLABLE TA
+A124;W # YI SYLLABLE TAP
+A125;W # YI SYLLABLE TUOT
+A126;W # YI SYLLABLE TUOX
+A127;W # YI SYLLABLE TUO
+A128;W # YI SYLLABLE TUOP
+A129;W # YI SYLLABLE TOT
+A12A;W # YI SYLLABLE TOX
+A12B;W # YI SYLLABLE TO
+A12C;W # YI SYLLABLE TOP
+A12D;W # YI SYLLABLE TEX
+A12E;W # YI SYLLABLE TE
+A12F;W # YI SYLLABLE TEP
+A130;W # YI SYLLABLE TUT
+A131;W # YI SYLLABLE TUX
+A132;W # YI SYLLABLE TU
+A133;W # YI SYLLABLE TUP
+A134;W # YI SYLLABLE TURX
+A135;W # YI SYLLABLE TUR
+A136;W # YI SYLLABLE DDIT
+A137;W # YI SYLLABLE DDIX
+A138;W # YI SYLLABLE DDI
+A139;W # YI SYLLABLE DDIP
+A13A;W # YI SYLLABLE DDIEX
+A13B;W # YI SYLLABLE DDIE
+A13C;W # YI SYLLABLE DDIEP
+A13D;W # YI SYLLABLE DDAT
+A13E;W # YI SYLLABLE DDAX
+A13F;W # YI SYLLABLE DDA
+A140;W # YI SYLLABLE DDAP
+A141;W # YI SYLLABLE DDUOX
+A142;W # YI SYLLABLE DDUO
+A143;W # YI SYLLABLE DDUOP
+A144;W # YI SYLLABLE DDOT
+A145;W # YI SYLLABLE DDOX
+A146;W # YI SYLLABLE DDO
+A147;W # YI SYLLABLE DDOP
+A148;W # YI SYLLABLE DDEX
+A149;W # YI SYLLABLE DDE
+A14A;W # YI SYLLABLE DDEP
+A14B;W # YI SYLLABLE DDUT
+A14C;W # YI SYLLABLE DDUX
+A14D;W # YI SYLLABLE DDU
+A14E;W # YI SYLLABLE DDUP
+A14F;W # YI SYLLABLE DDURX
+A150;W # YI SYLLABLE DDUR
+A151;W # YI SYLLABLE NDIT
+A152;W # YI SYLLABLE NDIX
+A153;W # YI SYLLABLE NDI
+A154;W # YI SYLLABLE NDIP
+A155;W # YI SYLLABLE NDIEX
+A156;W # YI SYLLABLE NDIE
+A157;W # YI SYLLABLE NDAT
+A158;W # YI SYLLABLE NDAX
+A159;W # YI SYLLABLE NDA
+A15A;W # YI SYLLABLE NDAP
+A15B;W # YI SYLLABLE NDOT
+A15C;W # YI SYLLABLE NDOX
+A15D;W # YI SYLLABLE NDO
+A15E;W # YI SYLLABLE NDOP
+A15F;W # YI SYLLABLE NDEX
+A160;W # YI SYLLABLE NDE
+A161;W # YI SYLLABLE NDEP
+A162;W # YI SYLLABLE NDUT
+A163;W # YI SYLLABLE NDUX
+A164;W # YI SYLLABLE NDU
+A165;W # YI SYLLABLE NDUP
+A166;W # YI SYLLABLE NDURX
+A167;W # YI SYLLABLE NDUR
+A168;W # YI SYLLABLE HNIT
+A169;W # YI SYLLABLE HNIX
+A16A;W # YI SYLLABLE HNI
+A16B;W # YI SYLLABLE HNIP
+A16C;W # YI SYLLABLE HNIET
+A16D;W # YI SYLLABLE HNIEX
+A16E;W # YI SYLLABLE HNIE
+A16F;W # YI SYLLABLE HNIEP
+A170;W # YI SYLLABLE HNAT
+A171;W # YI SYLLABLE HNAX
+A172;W # YI SYLLABLE HNA
+A173;W # YI SYLLABLE HNAP
+A174;W # YI SYLLABLE HNUOX
+A175;W # YI SYLLABLE HNUO
+A176;W # YI SYLLABLE HNOT
+A177;W # YI SYLLABLE HNOX
+A178;W # YI SYLLABLE HNOP
+A179;W # YI SYLLABLE HNEX
+A17A;W # YI SYLLABLE HNE
+A17B;W # YI SYLLABLE HNEP
+A17C;W # YI SYLLABLE HNUT
+A17D;W # YI SYLLABLE NIT
+A17E;W # YI SYLLABLE NIX
+A17F;W # YI SYLLABLE NI
+A180;W # YI SYLLABLE NIP
+A181;W # YI SYLLABLE NIEX
+A182;W # YI SYLLABLE NIE
+A183;W # YI SYLLABLE NIEP
+A184;W # YI SYLLABLE NAX
+A185;W # YI SYLLABLE NA
+A186;W # YI SYLLABLE NAP
+A187;W # YI SYLLABLE NUOX
+A188;W # YI SYLLABLE NUO
+A189;W # YI SYLLABLE NUOP
+A18A;W # YI SYLLABLE NOT
+A18B;W # YI SYLLABLE NOX
+A18C;W # YI SYLLABLE NO
+A18D;W # YI SYLLABLE NOP
+A18E;W # YI SYLLABLE NEX
+A18F;W # YI SYLLABLE NE
+A190;W # YI SYLLABLE NEP
+A191;W # YI SYLLABLE NUT
+A192;W # YI SYLLABLE NUX
+A193;W # YI SYLLABLE NU
+A194;W # YI SYLLABLE NUP
+A195;W # YI SYLLABLE NURX
+A196;W # YI SYLLABLE NUR
+A197;W # YI SYLLABLE HLIT
+A198;W # YI SYLLABLE HLIX
+A199;W # YI SYLLABLE HLI
+A19A;W # YI SYLLABLE HLIP
+A19B;W # YI SYLLABLE HLIEX
+A19C;W # YI SYLLABLE HLIE
+A19D;W # YI SYLLABLE HLIEP
+A19E;W # YI SYLLABLE HLAT
+A19F;W # YI SYLLABLE HLAX
+A1A0;W # YI SYLLABLE HLA
+A1A1;W # YI SYLLABLE HLAP
+A1A2;W # YI SYLLABLE HLUOX
+A1A3;W # YI SYLLABLE HLUO
+A1A4;W # YI SYLLABLE HLUOP
+A1A5;W # YI SYLLABLE HLOX
+A1A6;W # YI SYLLABLE HLO
+A1A7;W # YI SYLLABLE HLOP
+A1A8;W # YI SYLLABLE HLEX
+A1A9;W # YI SYLLABLE HLE
+A1AA;W # YI SYLLABLE HLEP
+A1AB;W # YI SYLLABLE HLUT
+A1AC;W # YI SYLLABLE HLUX
+A1AD;W # YI SYLLABLE HLU
+A1AE;W # YI SYLLABLE HLUP
+A1AF;W # YI SYLLABLE HLURX
+A1B0;W # YI SYLLABLE HLUR
+A1B1;W # YI SYLLABLE HLYT
+A1B2;W # YI SYLLABLE HLYX
+A1B3;W # YI SYLLABLE HLY
+A1B4;W # YI SYLLABLE HLYP
+A1B5;W # YI SYLLABLE HLYRX
+A1B6;W # YI SYLLABLE HLYR
+A1B7;W # YI SYLLABLE LIT
+A1B8;W # YI SYLLABLE LIX
+A1B9;W # YI SYLLABLE LI
+A1BA;W # YI SYLLABLE LIP
+A1BB;W # YI SYLLABLE LIET
+A1BC;W # YI SYLLABLE LIEX
+A1BD;W # YI SYLLABLE LIE
+A1BE;W # YI SYLLABLE LIEP
+A1BF;W # YI SYLLABLE LAT
+A1C0;W # YI SYLLABLE LAX
+A1C1;W # YI SYLLABLE LA
+A1C2;W # YI SYLLABLE LAP
+A1C3;W # YI SYLLABLE LUOT
+A1C4;W # YI SYLLABLE LUOX
+A1C5;W # YI SYLLABLE LUO
+A1C6;W # YI SYLLABLE LUOP
+A1C7;W # YI SYLLABLE LOT
+A1C8;W # YI SYLLABLE LOX
+A1C9;W # YI SYLLABLE LO
+A1CA;W # YI SYLLABLE LOP
+A1CB;W # YI SYLLABLE LEX
+A1CC;W # YI SYLLABLE LE
+A1CD;W # YI SYLLABLE LEP
+A1CE;W # YI SYLLABLE LUT
+A1CF;W # YI SYLLABLE LUX
+A1D0;W # YI SYLLABLE LU
+A1D1;W # YI SYLLABLE LUP
+A1D2;W # YI SYLLABLE LURX
+A1D3;W # YI SYLLABLE LUR
+A1D4;W # YI SYLLABLE LYT
+A1D5;W # YI SYLLABLE LYX
+A1D6;W # YI SYLLABLE LY
+A1D7;W # YI SYLLABLE LYP
+A1D8;W # YI SYLLABLE LYRX
+A1D9;W # YI SYLLABLE LYR
+A1DA;W # YI SYLLABLE GIT
+A1DB;W # YI SYLLABLE GIX
+A1DC;W # YI SYLLABLE GI
+A1DD;W # YI SYLLABLE GIP
+A1DE;W # YI SYLLABLE GIET
+A1DF;W # YI SYLLABLE GIEX
+A1E0;W # YI SYLLABLE GIE
+A1E1;W # YI SYLLABLE GIEP
+A1E2;W # YI SYLLABLE GAT
+A1E3;W # YI SYLLABLE GAX
+A1E4;W # YI SYLLABLE GA
+A1E5;W # YI SYLLABLE GAP
+A1E6;W # YI SYLLABLE GUOT
+A1E7;W # YI SYLLABLE GUOX
+A1E8;W # YI SYLLABLE GUO
+A1E9;W # YI SYLLABLE GUOP
+A1EA;W # YI SYLLABLE GOT
+A1EB;W # YI SYLLABLE GOX
+A1EC;W # YI SYLLABLE GO
+A1ED;W # YI SYLLABLE GOP
+A1EE;W # YI SYLLABLE GET
+A1EF;W # YI SYLLABLE GEX
+A1F0;W # YI SYLLABLE GE
+A1F1;W # YI SYLLABLE GEP
+A1F2;W # YI SYLLABLE GUT
+A1F3;W # YI SYLLABLE GUX
+A1F4;W # YI SYLLABLE GU
+A1F5;W # YI SYLLABLE GUP
+A1F6;W # YI SYLLABLE GURX
+A1F7;W # YI SYLLABLE GUR
+A1F8;W # YI SYLLABLE KIT
+A1F9;W # YI SYLLABLE KIX
+A1FA;W # YI SYLLABLE KI
+A1FB;W # YI SYLLABLE KIP
+A1FC;W # YI SYLLABLE KIEX
+A1FD;W # YI SYLLABLE KIE
+A1FE;W # YI SYLLABLE KIEP
+A1FF;W # YI SYLLABLE KAT
+A200;W # YI SYLLABLE KAX
+A201;W # YI SYLLABLE KA
+A202;W # YI SYLLABLE KAP
+A203;W # YI SYLLABLE KUOX
+A204;W # YI SYLLABLE KUO
+A205;W # YI SYLLABLE KUOP
+A206;W # YI SYLLABLE KOT
+A207;W # YI SYLLABLE KOX
+A208;W # YI SYLLABLE KO
+A209;W # YI SYLLABLE KOP
+A20A;W # YI SYLLABLE KET
+A20B;W # YI SYLLABLE KEX
+A20C;W # YI SYLLABLE KE
+A20D;W # YI SYLLABLE KEP
+A20E;W # YI SYLLABLE KUT
+A20F;W # YI SYLLABLE KUX
+A210;W # YI SYLLABLE KU
+A211;W # YI SYLLABLE KUP
+A212;W # YI SYLLABLE KURX
+A213;W # YI SYLLABLE KUR
+A214;W # YI SYLLABLE GGIT
+A215;W # YI SYLLABLE GGIX
+A216;W # YI SYLLABLE GGI
+A217;W # YI SYLLABLE GGIEX
+A218;W # YI SYLLABLE GGIE
+A219;W # YI SYLLABLE GGIEP
+A21A;W # YI SYLLABLE GGAT
+A21B;W # YI SYLLABLE GGAX
+A21C;W # YI SYLLABLE GGA
+A21D;W # YI SYLLABLE GGAP
+A21E;W # YI SYLLABLE GGUOT
+A21F;W # YI SYLLABLE GGUOX
+A220;W # YI SYLLABLE GGUO
+A221;W # YI SYLLABLE GGUOP
+A222;W # YI SYLLABLE GGOT
+A223;W # YI SYLLABLE GGOX
+A224;W # YI SYLLABLE GGO
+A225;W # YI SYLLABLE GGOP
+A226;W # YI SYLLABLE GGET
+A227;W # YI SYLLABLE GGEX
+A228;W # YI SYLLABLE GGE
+A229;W # YI SYLLABLE GGEP
+A22A;W # YI SYLLABLE GGUT
+A22B;W # YI SYLLABLE GGUX
+A22C;W # YI SYLLABLE GGU
+A22D;W # YI SYLLABLE GGUP
+A22E;W # YI SYLLABLE GGURX
+A22F;W # YI SYLLABLE GGUR
+A230;W # YI SYLLABLE MGIEX
+A231;W # YI SYLLABLE MGIE
+A232;W # YI SYLLABLE MGAT
+A233;W # YI SYLLABLE MGAX
+A234;W # YI SYLLABLE MGA
+A235;W # YI SYLLABLE MGAP
+A236;W # YI SYLLABLE MGUOX
+A237;W # YI SYLLABLE MGUO
+A238;W # YI SYLLABLE MGUOP
+A239;W # YI SYLLABLE MGOT
+A23A;W # YI SYLLABLE MGOX
+A23B;W # YI SYLLABLE MGO
+A23C;W # YI SYLLABLE MGOP
+A23D;W # YI SYLLABLE MGEX
+A23E;W # YI SYLLABLE MGE
+A23F;W # YI SYLLABLE MGEP
+A240;W # YI SYLLABLE MGUT
+A241;W # YI SYLLABLE MGUX
+A242;W # YI SYLLABLE MGU
+A243;W # YI SYLLABLE MGUP
+A244;W # YI SYLLABLE MGURX
+A245;W # YI SYLLABLE MGUR
+A246;W # YI SYLLABLE HXIT
+A247;W # YI SYLLABLE HXIX
+A248;W # YI SYLLABLE HXI
+A249;W # YI SYLLABLE HXIP
+A24A;W # YI SYLLABLE HXIET
+A24B;W # YI SYLLABLE HXIEX
+A24C;W # YI SYLLABLE HXIE
+A24D;W # YI SYLLABLE HXIEP
+A24E;W # YI SYLLABLE HXAT
+A24F;W # YI SYLLABLE HXAX
+A250;W # YI SYLLABLE HXA
+A251;W # YI SYLLABLE HXAP
+A252;W # YI SYLLABLE HXUOT
+A253;W # YI SYLLABLE HXUOX
+A254;W # YI SYLLABLE HXUO
+A255;W # YI SYLLABLE HXUOP
+A256;W # YI SYLLABLE HXOT
+A257;W # YI SYLLABLE HXOX
+A258;W # YI SYLLABLE HXO
+A259;W # YI SYLLABLE HXOP
+A25A;W # YI SYLLABLE HXEX
+A25B;W # YI SYLLABLE HXE
+A25C;W # YI SYLLABLE HXEP
+A25D;W # YI SYLLABLE NGIEX
+A25E;W # YI SYLLABLE NGIE
+A25F;W # YI SYLLABLE NGIEP
+A260;W # YI SYLLABLE NGAT
+A261;W # YI SYLLABLE NGAX
+A262;W # YI SYLLABLE NGA
+A263;W # YI SYLLABLE NGAP
+A264;W # YI SYLLABLE NGUOT
+A265;W # YI SYLLABLE NGUOX
+A266;W # YI SYLLABLE NGUO
+A267;W # YI SYLLABLE NGOT
+A268;W # YI SYLLABLE NGOX
+A269;W # YI SYLLABLE NGO
+A26A;W # YI SYLLABLE NGOP
+A26B;W # YI SYLLABLE NGEX
+A26C;W # YI SYLLABLE NGE
+A26D;W # YI SYLLABLE NGEP
+A26E;W # YI SYLLABLE HIT
+A26F;W # YI SYLLABLE HIEX
+A270;W # YI SYLLABLE HIE
+A271;W # YI SYLLABLE HAT
+A272;W # YI SYLLABLE HAX
+A273;W # YI SYLLABLE HA
+A274;W # YI SYLLABLE HAP
+A275;W # YI SYLLABLE HUOT
+A276;W # YI SYLLABLE HUOX
+A277;W # YI SYLLABLE HUO
+A278;W # YI SYLLABLE HUOP
+A279;W # YI SYLLABLE HOT
+A27A;W # YI SYLLABLE HOX
+A27B;W # YI SYLLABLE HO
+A27C;W # YI SYLLABLE HOP
+A27D;W # YI SYLLABLE HEX
+A27E;W # YI SYLLABLE HE
+A27F;W # YI SYLLABLE HEP
+A280;W # YI SYLLABLE WAT
+A281;W # YI SYLLABLE WAX
+A282;W # YI SYLLABLE WA
+A283;W # YI SYLLABLE WAP
+A284;W # YI SYLLABLE WUOX
+A285;W # YI SYLLABLE WUO
+A286;W # YI SYLLABLE WUOP
+A287;W # YI SYLLABLE WOX
+A288;W # YI SYLLABLE WO
+A289;W # YI SYLLABLE WOP
+A28A;W # YI SYLLABLE WEX
+A28B;W # YI SYLLABLE WE
+A28C;W # YI SYLLABLE WEP
+A28D;W # YI SYLLABLE ZIT
+A28E;W # YI SYLLABLE ZIX
+A28F;W # YI SYLLABLE ZI
+A290;W # YI SYLLABLE ZIP
+A291;W # YI SYLLABLE ZIEX
+A292;W # YI SYLLABLE ZIE
+A293;W # YI SYLLABLE ZIEP
+A294;W # YI SYLLABLE ZAT
+A295;W # YI SYLLABLE ZAX
+A296;W # YI SYLLABLE ZA
+A297;W # YI SYLLABLE ZAP
+A298;W # YI SYLLABLE ZUOX
+A299;W # YI SYLLABLE ZUO
+A29A;W # YI SYLLABLE ZUOP
+A29B;W # YI SYLLABLE ZOT
+A29C;W # YI SYLLABLE ZOX
+A29D;W # YI SYLLABLE ZO
+A29E;W # YI SYLLABLE ZOP
+A29F;W # YI SYLLABLE ZEX
+A2A0;W # YI SYLLABLE ZE
+A2A1;W # YI SYLLABLE ZEP
+A2A2;W # YI SYLLABLE ZUT
+A2A3;W # YI SYLLABLE ZUX
+A2A4;W # YI SYLLABLE ZU
+A2A5;W # YI SYLLABLE ZUP
+A2A6;W # YI SYLLABLE ZURX
+A2A7;W # YI SYLLABLE ZUR
+A2A8;W # YI SYLLABLE ZYT
+A2A9;W # YI SYLLABLE ZYX
+A2AA;W # YI SYLLABLE ZY
+A2AB;W # YI SYLLABLE ZYP
+A2AC;W # YI SYLLABLE ZYRX
+A2AD;W # YI SYLLABLE ZYR
+A2AE;W # YI SYLLABLE CIT
+A2AF;W # YI SYLLABLE CIX
+A2B0;W # YI SYLLABLE CI
+A2B1;W # YI SYLLABLE CIP
+A2B2;W # YI SYLLABLE CIET
+A2B3;W # YI SYLLABLE CIEX
+A2B4;W # YI SYLLABLE CIE
+A2B5;W # YI SYLLABLE CIEP
+A2B6;W # YI SYLLABLE CAT
+A2B7;W # YI SYLLABLE CAX
+A2B8;W # YI SYLLABLE CA
+A2B9;W # YI SYLLABLE CAP
+A2BA;W # YI SYLLABLE CUOX
+A2BB;W # YI SYLLABLE CUO
+A2BC;W # YI SYLLABLE CUOP
+A2BD;W # YI SYLLABLE COT
+A2BE;W # YI SYLLABLE COX
+A2BF;W # YI SYLLABLE CO
+A2C0;W # YI SYLLABLE COP
+A2C1;W # YI SYLLABLE CEX
+A2C2;W # YI SYLLABLE CE
+A2C3;W # YI SYLLABLE CEP
+A2C4;W # YI SYLLABLE CUT
+A2C5;W # YI SYLLABLE CUX
+A2C6;W # YI SYLLABLE CU
+A2C7;W # YI SYLLABLE CUP
+A2C8;W # YI SYLLABLE CURX
+A2C9;W # YI SYLLABLE CUR
+A2CA;W # YI SYLLABLE CYT
+A2CB;W # YI SYLLABLE CYX
+A2CC;W # YI SYLLABLE CY
+A2CD;W # YI SYLLABLE CYP
+A2CE;W # YI SYLLABLE CYRX
+A2CF;W # YI SYLLABLE CYR
+A2D0;W # YI SYLLABLE ZZIT
+A2D1;W # YI SYLLABLE ZZIX
+A2D2;W # YI SYLLABLE ZZI
+A2D3;W # YI SYLLABLE ZZIP
+A2D4;W # YI SYLLABLE ZZIET
+A2D5;W # YI SYLLABLE ZZIEX
+A2D6;W # YI SYLLABLE ZZIE
+A2D7;W # YI SYLLABLE ZZIEP
+A2D8;W # YI SYLLABLE ZZAT
+A2D9;W # YI SYLLABLE ZZAX
+A2DA;W # YI SYLLABLE ZZA
+A2DB;W # YI SYLLABLE ZZAP
+A2DC;W # YI SYLLABLE ZZOX
+A2DD;W # YI SYLLABLE ZZO
+A2DE;W # YI SYLLABLE ZZOP
+A2DF;W # YI SYLLABLE ZZEX
+A2E0;W # YI SYLLABLE ZZE
+A2E1;W # YI SYLLABLE ZZEP
+A2E2;W # YI SYLLABLE ZZUX
+A2E3;W # YI SYLLABLE ZZU
+A2E4;W # YI SYLLABLE ZZUP
+A2E5;W # YI SYLLABLE ZZURX
+A2E6;W # YI SYLLABLE ZZUR
+A2E7;W # YI SYLLABLE ZZYT
+A2E8;W # YI SYLLABLE ZZYX
+A2E9;W # YI SYLLABLE ZZY
+A2EA;W # YI SYLLABLE ZZYP
+A2EB;W # YI SYLLABLE ZZYRX
+A2EC;W # YI SYLLABLE ZZYR
+A2ED;W # YI SYLLABLE NZIT
+A2EE;W # YI SYLLABLE NZIX
+A2EF;W # YI SYLLABLE NZI
+A2F0;W # YI SYLLABLE NZIP
+A2F1;W # YI SYLLABLE NZIEX
+A2F2;W # YI SYLLABLE NZIE
+A2F3;W # YI SYLLABLE NZIEP
+A2F4;W # YI SYLLABLE NZAT
+A2F5;W # YI SYLLABLE NZAX
+A2F6;W # YI SYLLABLE NZA
+A2F7;W # YI SYLLABLE NZAP
+A2F8;W # YI SYLLABLE NZUOX
+A2F9;W # YI SYLLABLE NZUO
+A2FA;W # YI SYLLABLE NZOX
+A2FB;W # YI SYLLABLE NZOP
+A2FC;W # YI SYLLABLE NZEX
+A2FD;W # YI SYLLABLE NZE
+A2FE;W # YI SYLLABLE NZUX
+A2FF;W # YI SYLLABLE NZU
+A300;W # YI SYLLABLE NZUP
+A301;W # YI SYLLABLE NZURX
+A302;W # YI SYLLABLE NZUR
+A303;W # YI SYLLABLE NZYT
+A304;W # YI SYLLABLE NZYX
+A305;W # YI SYLLABLE NZY
+A306;W # YI SYLLABLE NZYP
+A307;W # YI SYLLABLE NZYRX
+A308;W # YI SYLLABLE NZYR
+A309;W # YI SYLLABLE SIT
+A30A;W # YI SYLLABLE SIX
+A30B;W # YI SYLLABLE SI
+A30C;W # YI SYLLABLE SIP
+A30D;W # YI SYLLABLE SIEX
+A30E;W # YI SYLLABLE SIE
+A30F;W # YI SYLLABLE SIEP
+A310;W # YI SYLLABLE SAT
+A311;W # YI SYLLABLE SAX
+A312;W # YI SYLLABLE SA
+A313;W # YI SYLLABLE SAP
+A314;W # YI SYLLABLE SUOX
+A315;W # YI SYLLABLE SUO
+A316;W # YI SYLLABLE SUOP
+A317;W # YI SYLLABLE SOT
+A318;W # YI SYLLABLE SOX
+A319;W # YI SYLLABLE SO
+A31A;W # YI SYLLABLE SOP
+A31B;W # YI SYLLABLE SEX
+A31C;W # YI SYLLABLE SE
+A31D;W # YI SYLLABLE SEP
+A31E;W # YI SYLLABLE SUT
+A31F;W # YI SYLLABLE SUX
+A320;W # YI SYLLABLE SU
+A321;W # YI SYLLABLE SUP
+A322;W # YI SYLLABLE SURX
+A323;W # YI SYLLABLE SUR
+A324;W # YI SYLLABLE SYT
+A325;W # YI SYLLABLE SYX
+A326;W # YI SYLLABLE SY
+A327;W # YI SYLLABLE SYP
+A328;W # YI SYLLABLE SYRX
+A329;W # YI SYLLABLE SYR
+A32A;W # YI SYLLABLE SSIT
+A32B;W # YI SYLLABLE SSIX
+A32C;W # YI SYLLABLE SSI
+A32D;W # YI SYLLABLE SSIP
+A32E;W # YI SYLLABLE SSIEX
+A32F;W # YI SYLLABLE SSIE
+A330;W # YI SYLLABLE SSIEP
+A331;W # YI SYLLABLE SSAT
+A332;W # YI SYLLABLE SSAX
+A333;W # YI SYLLABLE SSA
+A334;W # YI SYLLABLE SSAP
+A335;W # YI SYLLABLE SSOT
+A336;W # YI SYLLABLE SSOX
+A337;W # YI SYLLABLE SSO
+A338;W # YI SYLLABLE SSOP
+A339;W # YI SYLLABLE SSEX
+A33A;W # YI SYLLABLE SSE
+A33B;W # YI SYLLABLE SSEP
+A33C;W # YI SYLLABLE SSUT
+A33D;W # YI SYLLABLE SSUX
+A33E;W # YI SYLLABLE SSU
+A33F;W # YI SYLLABLE SSUP
+A340;W # YI SYLLABLE SSYT
+A341;W # YI SYLLABLE SSYX
+A342;W # YI SYLLABLE SSY
+A343;W # YI SYLLABLE SSYP
+A344;W # YI SYLLABLE SSYRX
+A345;W # YI SYLLABLE SSYR
+A346;W # YI SYLLABLE ZHAT
+A347;W # YI SYLLABLE ZHAX
+A348;W # YI SYLLABLE ZHA
+A349;W # YI SYLLABLE ZHAP
+A34A;W # YI SYLLABLE ZHUOX
+A34B;W # YI SYLLABLE ZHUO
+A34C;W # YI SYLLABLE ZHUOP
+A34D;W # YI SYLLABLE ZHOT
+A34E;W # YI SYLLABLE ZHOX
+A34F;W # YI SYLLABLE ZHO
+A350;W # YI SYLLABLE ZHOP
+A351;W # YI SYLLABLE ZHET
+A352;W # YI SYLLABLE ZHEX
+A353;W # YI SYLLABLE ZHE
+A354;W # YI SYLLABLE ZHEP
+A355;W # YI SYLLABLE ZHUT
+A356;W # YI SYLLABLE ZHUX
+A357;W # YI SYLLABLE ZHU
+A358;W # YI SYLLABLE ZHUP
+A359;W # YI SYLLABLE ZHURX
+A35A;W # YI SYLLABLE ZHUR
+A35B;W # YI SYLLABLE ZHYT
+A35C;W # YI SYLLABLE ZHYX
+A35D;W # YI SYLLABLE ZHY
+A35E;W # YI SYLLABLE ZHYP
+A35F;W # YI SYLLABLE ZHYRX
+A360;W # YI SYLLABLE ZHYR
+A361;W # YI SYLLABLE CHAT
+A362;W # YI SYLLABLE CHAX
+A363;W # YI SYLLABLE CHA
+A364;W # YI SYLLABLE CHAP
+A365;W # YI SYLLABLE CHUOT
+A366;W # YI SYLLABLE CHUOX
+A367;W # YI SYLLABLE CHUO
+A368;W # YI SYLLABLE CHUOP
+A369;W # YI SYLLABLE CHOT
+A36A;W # YI SYLLABLE CHOX
+A36B;W # YI SYLLABLE CHO
+A36C;W # YI SYLLABLE CHOP
+A36D;W # YI SYLLABLE CHET
+A36E;W # YI SYLLABLE CHEX
+A36F;W # YI SYLLABLE CHE
+A370;W # YI SYLLABLE CHEP
+A371;W # YI SYLLABLE CHUX
+A372;W # YI SYLLABLE CHU
+A373;W # YI SYLLABLE CHUP
+A374;W # YI SYLLABLE CHURX
+A375;W # YI SYLLABLE CHUR
+A376;W # YI SYLLABLE CHYT
+A377;W # YI SYLLABLE CHYX
+A378;W # YI SYLLABLE CHY
+A379;W # YI SYLLABLE CHYP
+A37A;W # YI SYLLABLE CHYRX
+A37B;W # YI SYLLABLE CHYR
+A37C;W # YI SYLLABLE RRAX
+A37D;W # YI SYLLABLE RRA
+A37E;W # YI SYLLABLE RRUOX
+A37F;W # YI SYLLABLE RRUO
+A380;W # YI SYLLABLE RROT
+A381;W # YI SYLLABLE RROX
+A382;W # YI SYLLABLE RRO
+A383;W # YI SYLLABLE RROP
+A384;W # YI SYLLABLE RRET
+A385;W # YI SYLLABLE RREX
+A386;W # YI SYLLABLE RRE
+A387;W # YI SYLLABLE RREP
+A388;W # YI SYLLABLE RRUT
+A389;W # YI SYLLABLE RRUX
+A38A;W # YI SYLLABLE RRU
+A38B;W # YI SYLLABLE RRUP
+A38C;W # YI SYLLABLE RRURX
+A38D;W # YI SYLLABLE RRUR
+A38E;W # YI SYLLABLE RRYT
+A38F;W # YI SYLLABLE RRYX
+A390;W # YI SYLLABLE RRY
+A391;W # YI SYLLABLE RRYP
+A392;W # YI SYLLABLE RRYRX
+A393;W # YI SYLLABLE RRYR
+A394;W # YI SYLLABLE NRAT
+A395;W # YI SYLLABLE NRAX
+A396;W # YI SYLLABLE NRA
+A397;W # YI SYLLABLE NRAP
+A398;W # YI SYLLABLE NROX
+A399;W # YI SYLLABLE NRO
+A39A;W # YI SYLLABLE NROP
+A39B;W # YI SYLLABLE NRET
+A39C;W # YI SYLLABLE NREX
+A39D;W # YI SYLLABLE NRE
+A39E;W # YI SYLLABLE NREP
+A39F;W # YI SYLLABLE NRUT
+A3A0;W # YI SYLLABLE NRUX
+A3A1;W # YI SYLLABLE NRU
+A3A2;W # YI SYLLABLE NRUP
+A3A3;W # YI SYLLABLE NRURX
+A3A4;W # YI SYLLABLE NRUR
+A3A5;W # YI SYLLABLE NRYT
+A3A6;W # YI SYLLABLE NRYX
+A3A7;W # YI SYLLABLE NRY
+A3A8;W # YI SYLLABLE NRYP
+A3A9;W # YI SYLLABLE NRYRX
+A3AA;W # YI SYLLABLE NRYR
+A3AB;W # YI SYLLABLE SHAT
+A3AC;W # YI SYLLABLE SHAX
+A3AD;W # YI SYLLABLE SHA
+A3AE;W # YI SYLLABLE SHAP
+A3AF;W # YI SYLLABLE SHUOX
+A3B0;W # YI SYLLABLE SHUO
+A3B1;W # YI SYLLABLE SHUOP
+A3B2;W # YI SYLLABLE SHOT
+A3B3;W # YI SYLLABLE SHOX
+A3B4;W # YI SYLLABLE SHO
+A3B5;W # YI SYLLABLE SHOP
+A3B6;W # YI SYLLABLE SHET
+A3B7;W # YI SYLLABLE SHEX
+A3B8;W # YI SYLLABLE SHE
+A3B9;W # YI SYLLABLE SHEP
+A3BA;W # YI SYLLABLE SHUT
+A3BB;W # YI SYLLABLE SHUX
+A3BC;W # YI SYLLABLE SHU
+A3BD;W # YI SYLLABLE SHUP
+A3BE;W # YI SYLLABLE SHURX
+A3BF;W # YI SYLLABLE SHUR
+A3C0;W # YI SYLLABLE SHYT
+A3C1;W # YI SYLLABLE SHYX
+A3C2;W # YI SYLLABLE SHY
+A3C3;W # YI SYLLABLE SHYP
+A3C4;W # YI SYLLABLE SHYRX
+A3C5;W # YI SYLLABLE SHYR
+A3C6;W # YI SYLLABLE RAT
+A3C7;W # YI SYLLABLE RAX
+A3C8;W # YI SYLLABLE RA
+A3C9;W # YI SYLLABLE RAP
+A3CA;W # YI SYLLABLE RUOX
+A3CB;W # YI SYLLABLE RUO
+A3CC;W # YI SYLLABLE RUOP
+A3CD;W # YI SYLLABLE ROT
+A3CE;W # YI SYLLABLE ROX
+A3CF;W # YI SYLLABLE RO
+A3D0;W # YI SYLLABLE ROP
+A3D1;W # YI SYLLABLE REX
+A3D2;W # YI SYLLABLE RE
+A3D3;W # YI SYLLABLE REP
+A3D4;W # YI SYLLABLE RUT
+A3D5;W # YI SYLLABLE RUX
+A3D6;W # YI SYLLABLE RU
+A3D7;W # YI SYLLABLE RUP
+A3D8;W # YI SYLLABLE RURX
+A3D9;W # YI SYLLABLE RUR
+A3DA;W # YI SYLLABLE RYT
+A3DB;W # YI SYLLABLE RYX
+A3DC;W # YI SYLLABLE RY
+A3DD;W # YI SYLLABLE RYP
+A3DE;W # YI SYLLABLE RYRX
+A3DF;W # YI SYLLABLE RYR
+A3E0;W # YI SYLLABLE JIT
+A3E1;W # YI SYLLABLE JIX
+A3E2;W # YI SYLLABLE JI
+A3E3;W # YI SYLLABLE JIP
+A3E4;W # YI SYLLABLE JIET
+A3E5;W # YI SYLLABLE JIEX
+A3E6;W # YI SYLLABLE JIE
+A3E7;W # YI SYLLABLE JIEP
+A3E8;W # YI SYLLABLE JUOT
+A3E9;W # YI SYLLABLE JUOX
+A3EA;W # YI SYLLABLE JUO
+A3EB;W # YI SYLLABLE JUOP
+A3EC;W # YI SYLLABLE JOT
+A3ED;W # YI SYLLABLE JOX
+A3EE;W # YI SYLLABLE JO
+A3EF;W # YI SYLLABLE JOP
+A3F0;W # YI SYLLABLE JUT
+A3F1;W # YI SYLLABLE JUX
+A3F2;W # YI SYLLABLE JU
+A3F3;W # YI SYLLABLE JUP
+A3F4;W # YI SYLLABLE JURX
+A3F5;W # YI SYLLABLE JUR
+A3F6;W # YI SYLLABLE JYT
+A3F7;W # YI SYLLABLE JYX
+A3F8;W # YI SYLLABLE JY
+A3F9;W # YI SYLLABLE JYP
+A3FA;W # YI SYLLABLE JYRX
+A3FB;W # YI SYLLABLE JYR
+A3FC;W # YI SYLLABLE QIT
+A3FD;W # YI SYLLABLE QIX
+A3FE;W # YI SYLLABLE QI
+A3FF;W # YI SYLLABLE QIP
+A400;W # YI SYLLABLE QIET
+A401;W # YI SYLLABLE QIEX
+A402;W # YI SYLLABLE QIE
+A403;W # YI SYLLABLE QIEP
+A404;W # YI SYLLABLE QUOT
+A405;W # YI SYLLABLE QUOX
+A406;W # YI SYLLABLE QUO
+A407;W # YI SYLLABLE QUOP
+A408;W # YI SYLLABLE QOT
+A409;W # YI SYLLABLE QOX
+A40A;W # YI SYLLABLE QO
+A40B;W # YI SYLLABLE QOP
+A40C;W # YI SYLLABLE QUT
+A40D;W # YI SYLLABLE QUX
+A40E;W # YI SYLLABLE QU
+A40F;W # YI SYLLABLE QUP
+A410;W # YI SYLLABLE QURX
+A411;W # YI SYLLABLE QUR
+A412;W # YI SYLLABLE QYT
+A413;W # YI SYLLABLE QYX
+A414;W # YI SYLLABLE QY
+A415;W # YI SYLLABLE QYP
+A416;W # YI SYLLABLE QYRX
+A417;W # YI SYLLABLE QYR
+A418;W # YI SYLLABLE JJIT
+A419;W # YI SYLLABLE JJIX
+A41A;W # YI SYLLABLE JJI
+A41B;W # YI SYLLABLE JJIP
+A41C;W # YI SYLLABLE JJIET
+A41D;W # YI SYLLABLE JJIEX
+A41E;W # YI SYLLABLE JJIE
+A41F;W # YI SYLLABLE JJIEP
+A420;W # YI SYLLABLE JJUOX
+A421;W # YI SYLLABLE JJUO
+A422;W # YI SYLLABLE JJUOP
+A423;W # YI SYLLABLE JJOT
+A424;W # YI SYLLABLE JJOX
+A425;W # YI SYLLABLE JJO
+A426;W # YI SYLLABLE JJOP
+A427;W # YI SYLLABLE JJUT
+A428;W # YI SYLLABLE JJUX
+A429;W # YI SYLLABLE JJU
+A42A;W # YI SYLLABLE JJUP
+A42B;W # YI SYLLABLE JJURX
+A42C;W # YI SYLLABLE JJUR
+A42D;W # YI SYLLABLE JJYT
+A42E;W # YI SYLLABLE JJYX
+A42F;W # YI SYLLABLE JJY
+A430;W # YI SYLLABLE JJYP
+A431;W # YI SYLLABLE NJIT
+A432;W # YI SYLLABLE NJIX
+A433;W # YI SYLLABLE NJI
+A434;W # YI SYLLABLE NJIP
+A435;W # YI SYLLABLE NJIET
+A436;W # YI SYLLABLE NJIEX
+A437;W # YI SYLLABLE NJIE
+A438;W # YI SYLLABLE NJIEP
+A439;W # YI SYLLABLE NJUOX
+A43A;W # YI SYLLABLE NJUO
+A43B;W # YI SYLLABLE NJOT
+A43C;W # YI SYLLABLE NJOX
+A43D;W # YI SYLLABLE NJO
+A43E;W # YI SYLLABLE NJOP
+A43F;W # YI SYLLABLE NJUX
+A440;W # YI SYLLABLE NJU
+A441;W # YI SYLLABLE NJUP
+A442;W # YI SYLLABLE NJURX
+A443;W # YI SYLLABLE NJUR
+A444;W # YI SYLLABLE NJYT
+A445;W # YI SYLLABLE NJYX
+A446;W # YI SYLLABLE NJY
+A447;W # YI SYLLABLE NJYP
+A448;W # YI SYLLABLE NJYRX
+A449;W # YI SYLLABLE NJYR
+A44A;W # YI SYLLABLE NYIT
+A44B;W # YI SYLLABLE NYIX
+A44C;W # YI SYLLABLE NYI
+A44D;W # YI SYLLABLE NYIP
+A44E;W # YI SYLLABLE NYIET
+A44F;W # YI SYLLABLE NYIEX
+A450;W # YI SYLLABLE NYIE
+A451;W # YI SYLLABLE NYIEP
+A452;W # YI SYLLABLE NYUOX
+A453;W # YI SYLLABLE NYUO
+A454;W # YI SYLLABLE NYUOP
+A455;W # YI SYLLABLE NYOT
+A456;W # YI SYLLABLE NYOX
+A457;W # YI SYLLABLE NYO
+A458;W # YI SYLLABLE NYOP
+A459;W # YI SYLLABLE NYUT
+A45A;W # YI SYLLABLE NYUX
+A45B;W # YI SYLLABLE NYU
+A45C;W # YI SYLLABLE NYUP
+A45D;W # YI SYLLABLE XIT
+A45E;W # YI SYLLABLE XIX
+A45F;W # YI SYLLABLE XI
+A460;W # YI SYLLABLE XIP
+A461;W # YI SYLLABLE XIET
+A462;W # YI SYLLABLE XIEX
+A463;W # YI SYLLABLE XIE
+A464;W # YI SYLLABLE XIEP
+A465;W # YI SYLLABLE XUOX
+A466;W # YI SYLLABLE XUO
+A467;W # YI SYLLABLE XOT
+A468;W # YI SYLLABLE XOX
+A469;W # YI SYLLABLE XO
+A46A;W # YI SYLLABLE XOP
+A46B;W # YI SYLLABLE XYT
+A46C;W # YI SYLLABLE XYX
+A46D;W # YI SYLLABLE XY
+A46E;W # YI SYLLABLE XYP
+A46F;W # YI SYLLABLE XYRX
+A470;W # YI SYLLABLE XYR
+A471;W # YI SYLLABLE YIT
+A472;W # YI SYLLABLE YIX
+A473;W # YI SYLLABLE YI
+A474;W # YI SYLLABLE YIP
+A475;W # YI SYLLABLE YIET
+A476;W # YI SYLLABLE YIEX
+A477;W # YI SYLLABLE YIE
+A478;W # YI SYLLABLE YIEP
+A479;W # YI SYLLABLE YUOT
+A47A;W # YI SYLLABLE YUOX
+A47B;W # YI SYLLABLE YUO
+A47C;W # YI SYLLABLE YUOP
+A47D;W # YI SYLLABLE YOT
+A47E;W # YI SYLLABLE YOX
+A47F;W # YI SYLLABLE YO
+A480;W # YI SYLLABLE YOP
+A481;W # YI SYLLABLE YUT
+A482;W # YI SYLLABLE YUX
+A483;W # YI SYLLABLE YU
+A484;W # YI SYLLABLE YUP
+A485;W # YI SYLLABLE YURX
+A486;W # YI SYLLABLE YUR
+A487;W # YI SYLLABLE YYT
+A488;W # YI SYLLABLE YYX
+A489;W # YI SYLLABLE YY
+A48A;W # YI SYLLABLE YYP
+A48B;W # YI SYLLABLE YYRX
+A48C;W # YI SYLLABLE YYR
+A490;W # YI RADICAL QOT
+A491;W # YI RADICAL LI
+A492;W # YI RADICAL KIT
+A493;W # YI RADICAL NYIP
+A494;W # YI RADICAL CYP
+A495;W # YI RADICAL SSI
+A496;W # YI RADICAL GGOP
+A497;W # YI RADICAL GEP
+A498;W # YI RADICAL MI
+A499;W # YI RADICAL HXIT
+A49A;W # YI RADICAL LYR
+A49B;W # YI RADICAL BBUT
+A49C;W # YI RADICAL MOP
+A49D;W # YI RADICAL YO
+A49E;W # YI RADICAL PUT
+A49F;W # YI RADICAL HXUO
+A4A0;W # YI RADICAL TAT
+A4A1;W # YI RADICAL GA
+A4A2;W # YI RADICAL ZUP
+A4A3;W # YI RADICAL CYT
+A4A4;W # YI RADICAL DDUR
+A4A5;W # YI RADICAL BUR
+A4A6;W # YI RADICAL GGUO
+A4A7;W # YI RADICAL NYOP
+A4A8;W # YI RADICAL TU
+A4A9;W # YI RADICAL OP
+A4AA;W # YI RADICAL JJUT
+A4AB;W # YI RADICAL ZOT
+A4AC;W # YI RADICAL PYT
+A4AD;W # YI RADICAL HMO
+A4AE;W # YI RADICAL YIT
+A4AF;W # YI RADICAL VUR
+A4B0;W # YI RADICAL SHY
+A4B1;W # YI RADICAL VEP
+A4B2;W # YI RADICAL ZA
+A4B3;W # YI RADICAL JO
+A4B4;W # YI RADICAL NZUP
+A4B5;W # YI RADICAL JJY
+A4B6;W # YI RADICAL GOT
+A4B7;W # YI RADICAL JJIE
+A4B8;W # YI RADICAL WO
+A4B9;W # YI RADICAL DU
+A4BA;W # YI RADICAL SHUR
+A4BB;W # YI RADICAL LIE
+A4BC;W # YI RADICAL CY
+A4BD;W # YI RADICAL CUOP
+A4BE;W # YI RADICAL CIP
+A4BF;W # YI RADICAL HXOP
+A4C0;W # YI RADICAL SHAT
+A4C1;W # YI RADICAL ZUR
+A4C2;W # YI RADICAL SHOP
+A4C3;W # YI RADICAL CHE
+A4C4;W # YI RADICAL ZZIET
+A4C5;W # YI RADICAL NBIE
+A4C6;W # YI RADICAL KE
+A4D0;N # LISU LETTER BA
+A4D1;N # LISU LETTER PA
+A4D2;N # LISU LETTER PHA
+A4D3;N # LISU LETTER DA
+A4D4;N # LISU LETTER TA
+A4D5;N # LISU LETTER THA
+A4D6;N # LISU LETTER GA
+A4D7;N # LISU LETTER KA
+A4D8;N # LISU LETTER KHA
+A4D9;N # LISU LETTER JA
+A4DA;N # LISU LETTER CA
+A4DB;N # LISU LETTER CHA
+A4DC;N # LISU LETTER DZA
+A4DD;N # LISU LETTER TSA
+A4DE;N # LISU LETTER TSHA
+A4DF;N # LISU LETTER MA
+A4E0;N # LISU LETTER NA
+A4E1;N # LISU LETTER LA
+A4E2;N # LISU LETTER SA
+A4E3;N # LISU LETTER ZHA
+A4E4;N # LISU LETTER ZA
+A4E5;N # LISU LETTER NGA
+A4E6;N # LISU LETTER HA
+A4E7;N # LISU LETTER XA
+A4E8;N # LISU LETTER HHA
+A4E9;N # LISU LETTER FA
+A4EA;N # LISU LETTER WA
+A4EB;N # LISU LETTER SHA
+A4EC;N # LISU LETTER YA
+A4ED;N # LISU LETTER GHA
+A4EE;N # LISU LETTER A
+A4EF;N # LISU LETTER AE
+A4F0;N # LISU LETTER E
+A4F1;N # LISU LETTER EU
+A4F2;N # LISU LETTER I
+A4F3;N # LISU LETTER O
+A4F4;N # LISU LETTER U
+A4F5;N # LISU LETTER UE
+A4F6;N # LISU LETTER UH
+A4F7;N # LISU LETTER OE
+A4F8;N # LISU LETTER TONE MYA TI
+A4F9;N # LISU LETTER TONE NA PO
+A4FA;N # LISU LETTER TONE MYA CYA
+A4FB;N # LISU LETTER TONE MYA BO
+A4FC;N # LISU LETTER TONE MYA NA
+A4FD;N # LISU LETTER TONE MYA JEU
+A4FE;N # LISU PUNCTUATION COMMA
+A4FF;N # LISU PUNCTUATION FULL STOP
+A500;N # VAI SYLLABLE EE
+A501;N # VAI SYLLABLE EEN
+A502;N # VAI SYLLABLE HEE
+A503;N # VAI SYLLABLE WEE
+A504;N # VAI SYLLABLE WEEN
+A505;N # VAI SYLLABLE PEE
+A506;N # VAI SYLLABLE BHEE
+A507;N # VAI SYLLABLE BEE
+A508;N # VAI SYLLABLE MBEE
+A509;N # VAI SYLLABLE KPEE
+A50A;N # VAI SYLLABLE MGBEE
+A50B;N # VAI SYLLABLE GBEE
+A50C;N # VAI SYLLABLE FEE
+A50D;N # VAI SYLLABLE VEE
+A50E;N # VAI SYLLABLE TEE
+A50F;N # VAI SYLLABLE THEE
+A510;N # VAI SYLLABLE DHEE
+A511;N # VAI SYLLABLE DHHEE
+A512;N # VAI SYLLABLE LEE
+A513;N # VAI SYLLABLE REE
+A514;N # VAI SYLLABLE DEE
+A515;N # VAI SYLLABLE NDEE
+A516;N # VAI SYLLABLE SEE
+A517;N # VAI SYLLABLE SHEE
+A518;N # VAI SYLLABLE ZEE
+A519;N # VAI SYLLABLE ZHEE
+A51A;N # VAI SYLLABLE CEE
+A51B;N # VAI SYLLABLE JEE
+A51C;N # VAI SYLLABLE NJEE
+A51D;N # VAI SYLLABLE YEE
+A51E;N # VAI SYLLABLE KEE
+A51F;N # VAI SYLLABLE NGGEE
+A520;N # VAI SYLLABLE GEE
+A521;N # VAI SYLLABLE MEE
+A522;N # VAI SYLLABLE NEE
+A523;N # VAI SYLLABLE NYEE
+A524;N # VAI SYLLABLE I
+A525;N # VAI SYLLABLE IN
+A526;N # VAI SYLLABLE HI
+A527;N # VAI SYLLABLE HIN
+A528;N # VAI SYLLABLE WI
+A529;N # VAI SYLLABLE WIN
+A52A;N # VAI SYLLABLE PI
+A52B;N # VAI SYLLABLE BHI
+A52C;N # VAI SYLLABLE BI
+A52D;N # VAI SYLLABLE MBI
+A52E;N # VAI SYLLABLE KPI
+A52F;N # VAI SYLLABLE MGBI
+A530;N # VAI SYLLABLE GBI
+A531;N # VAI SYLLABLE FI
+A532;N # VAI SYLLABLE VI
+A533;N # VAI SYLLABLE TI
+A534;N # VAI SYLLABLE THI
+A535;N # VAI SYLLABLE DHI
+A536;N # VAI SYLLABLE DHHI
+A537;N # VAI SYLLABLE LI
+A538;N # VAI SYLLABLE RI
+A539;N # VAI SYLLABLE DI
+A53A;N # VAI SYLLABLE NDI
+A53B;N # VAI SYLLABLE SI
+A53C;N # VAI SYLLABLE SHI
+A53D;N # VAI SYLLABLE ZI
+A53E;N # VAI SYLLABLE ZHI
+A53F;N # VAI SYLLABLE CI
+A540;N # VAI SYLLABLE JI
+A541;N # VAI SYLLABLE NJI
+A542;N # VAI SYLLABLE YI
+A543;N # VAI SYLLABLE KI
+A544;N # VAI SYLLABLE NGGI
+A545;N # VAI SYLLABLE GI
+A546;N # VAI SYLLABLE MI
+A547;N # VAI SYLLABLE NI
+A548;N # VAI SYLLABLE NYI
+A549;N # VAI SYLLABLE A
+A54A;N # VAI SYLLABLE AN
+A54B;N # VAI SYLLABLE NGAN
+A54C;N # VAI SYLLABLE HA
+A54D;N # VAI SYLLABLE HAN
+A54E;N # VAI SYLLABLE WA
+A54F;N # VAI SYLLABLE WAN
+A550;N # VAI SYLLABLE PA
+A551;N # VAI SYLLABLE BHA
+A552;N # VAI SYLLABLE BA
+A553;N # VAI SYLLABLE MBA
+A554;N # VAI SYLLABLE KPA
+A555;N # VAI SYLLABLE KPAN
+A556;N # VAI SYLLABLE MGBA
+A557;N # VAI SYLLABLE GBA
+A558;N # VAI SYLLABLE FA
+A559;N # VAI SYLLABLE VA
+A55A;N # VAI SYLLABLE TA
+A55B;N # VAI SYLLABLE THA
+A55C;N # VAI SYLLABLE DHA
+A55D;N # VAI SYLLABLE DHHA
+A55E;N # VAI SYLLABLE LA
+A55F;N # VAI SYLLABLE RA
+A560;N # VAI SYLLABLE DA
+A561;N # VAI SYLLABLE NDA
+A562;N # VAI SYLLABLE SA
+A563;N # VAI SYLLABLE SHA
+A564;N # VAI SYLLABLE ZA
+A565;N # VAI SYLLABLE ZHA
+A566;N # VAI SYLLABLE CA
+A567;N # VAI SYLLABLE JA
+A568;N # VAI SYLLABLE NJA
+A569;N # VAI SYLLABLE YA
+A56A;N # VAI SYLLABLE KA
+A56B;N # VAI SYLLABLE KAN
+A56C;N # VAI SYLLABLE NGGA
+A56D;N # VAI SYLLABLE GA
+A56E;N # VAI SYLLABLE MA
+A56F;N # VAI SYLLABLE NA
+A570;N # VAI SYLLABLE NYA
+A571;N # VAI SYLLABLE OO
+A572;N # VAI SYLLABLE OON
+A573;N # VAI SYLLABLE HOO
+A574;N # VAI SYLLABLE WOO
+A575;N # VAI SYLLABLE WOON
+A576;N # VAI SYLLABLE POO
+A577;N # VAI SYLLABLE BHOO
+A578;N # VAI SYLLABLE BOO
+A579;N # VAI SYLLABLE MBOO
+A57A;N # VAI SYLLABLE KPOO
+A57B;N # VAI SYLLABLE MGBOO
+A57C;N # VAI SYLLABLE GBOO
+A57D;N # VAI SYLLABLE FOO
+A57E;N # VAI SYLLABLE VOO
+A57F;N # VAI SYLLABLE TOO
+A580;N # VAI SYLLABLE THOO
+A581;N # VAI SYLLABLE DHOO
+A582;N # VAI SYLLABLE DHHOO
+A583;N # VAI SYLLABLE LOO
+A584;N # VAI SYLLABLE ROO
+A585;N # VAI SYLLABLE DOO
+A586;N # VAI SYLLABLE NDOO
+A587;N # VAI SYLLABLE SOO
+A588;N # VAI SYLLABLE SHOO
+A589;N # VAI SYLLABLE ZOO
+A58A;N # VAI SYLLABLE ZHOO
+A58B;N # VAI SYLLABLE COO
+A58C;N # VAI SYLLABLE JOO
+A58D;N # VAI SYLLABLE NJOO
+A58E;N # VAI SYLLABLE YOO
+A58F;N # VAI SYLLABLE KOO
+A590;N # VAI SYLLABLE NGGOO
+A591;N # VAI SYLLABLE GOO
+A592;N # VAI SYLLABLE MOO
+A593;N # VAI SYLLABLE NOO
+A594;N # VAI SYLLABLE NYOO
+A595;N # VAI SYLLABLE U
+A596;N # VAI SYLLABLE UN
+A597;N # VAI SYLLABLE HU
+A598;N # VAI SYLLABLE HUN
+A599;N # VAI SYLLABLE WU
+A59A;N # VAI SYLLABLE WUN
+A59B;N # VAI SYLLABLE PU
+A59C;N # VAI SYLLABLE BHU
+A59D;N # VAI SYLLABLE BU
+A59E;N # VAI SYLLABLE MBU
+A59F;N # VAI SYLLABLE KPU
+A5A0;N # VAI SYLLABLE MGBU
+A5A1;N # VAI SYLLABLE GBU
+A5A2;N # VAI SYLLABLE FU
+A5A3;N # VAI SYLLABLE VU
+A5A4;N # VAI SYLLABLE TU
+A5A5;N # VAI SYLLABLE THU
+A5A6;N # VAI SYLLABLE DHU
+A5A7;N # VAI SYLLABLE DHHU
+A5A8;N # VAI SYLLABLE LU
+A5A9;N # VAI SYLLABLE RU
+A5AA;N # VAI SYLLABLE DU
+A5AB;N # VAI SYLLABLE NDU
+A5AC;N # VAI SYLLABLE SU
+A5AD;N # VAI SYLLABLE SHU
+A5AE;N # VAI SYLLABLE ZU
+A5AF;N # VAI SYLLABLE ZHU
+A5B0;N # VAI SYLLABLE CU
+A5B1;N # VAI SYLLABLE JU
+A5B2;N # VAI SYLLABLE NJU
+A5B3;N # VAI SYLLABLE YU
+A5B4;N # VAI SYLLABLE KU
+A5B5;N # VAI SYLLABLE NGGU
+A5B6;N # VAI SYLLABLE GU
+A5B7;N # VAI SYLLABLE MU
+A5B8;N # VAI SYLLABLE NU
+A5B9;N # VAI SYLLABLE NYU
+A5BA;N # VAI SYLLABLE O
+A5BB;N # VAI SYLLABLE ON
+A5BC;N # VAI SYLLABLE NGON
+A5BD;N # VAI SYLLABLE HO
+A5BE;N # VAI SYLLABLE HON
+A5BF;N # VAI SYLLABLE WO
+A5C0;N # VAI SYLLABLE WON
+A5C1;N # VAI SYLLABLE PO
+A5C2;N # VAI SYLLABLE BHO
+A5C3;N # VAI SYLLABLE BO
+A5C4;N # VAI SYLLABLE MBO
+A5C5;N # VAI SYLLABLE KPO
+A5C6;N # VAI SYLLABLE MGBO
+A5C7;N # VAI SYLLABLE GBO
+A5C8;N # VAI SYLLABLE GBON
+A5C9;N # VAI SYLLABLE FO
+A5CA;N # VAI SYLLABLE VO
+A5CB;N # VAI SYLLABLE TO
+A5CC;N # VAI SYLLABLE THO
+A5CD;N # VAI SYLLABLE DHO
+A5CE;N # VAI SYLLABLE DHHO
+A5CF;N # VAI SYLLABLE LO
+A5D0;N # VAI SYLLABLE RO
+A5D1;N # VAI SYLLABLE DO
+A5D2;N # VAI SYLLABLE NDO
+A5D3;N # VAI SYLLABLE SO
+A5D4;N # VAI SYLLABLE SHO
+A5D5;N # VAI SYLLABLE ZO
+A5D6;N # VAI SYLLABLE ZHO
+A5D7;N # VAI SYLLABLE CO
+A5D8;N # VAI SYLLABLE JO
+A5D9;N # VAI SYLLABLE NJO
+A5DA;N # VAI SYLLABLE YO
+A5DB;N # VAI SYLLABLE KO
+A5DC;N # VAI SYLLABLE NGGO
+A5DD;N # VAI SYLLABLE GO
+A5DE;N # VAI SYLLABLE MO
+A5DF;N # VAI SYLLABLE NO
+A5E0;N # VAI SYLLABLE NYO
+A5E1;N # VAI SYLLABLE E
+A5E2;N # VAI SYLLABLE EN
+A5E3;N # VAI SYLLABLE NGEN
+A5E4;N # VAI SYLLABLE HE
+A5E5;N # VAI SYLLABLE HEN
+A5E6;N # VAI SYLLABLE WE
+A5E7;N # VAI SYLLABLE WEN
+A5E8;N # VAI SYLLABLE PE
+A5E9;N # VAI SYLLABLE BHE
+A5EA;N # VAI SYLLABLE BE
+A5EB;N # VAI SYLLABLE MBE
+A5EC;N # VAI SYLLABLE KPE
+A5ED;N # VAI SYLLABLE KPEN
+A5EE;N # VAI SYLLABLE MGBE
+A5EF;N # VAI SYLLABLE GBE
+A5F0;N # VAI SYLLABLE GBEN
+A5F1;N # VAI SYLLABLE FE
+A5F2;N # VAI SYLLABLE VE
+A5F3;N # VAI SYLLABLE TE
+A5F4;N # VAI SYLLABLE THE
+A5F5;N # VAI SYLLABLE DHE
+A5F6;N # VAI SYLLABLE DHHE
+A5F7;N # VAI SYLLABLE LE
+A5F8;N # VAI SYLLABLE RE
+A5F9;N # VAI SYLLABLE DE
+A5FA;N # VAI SYLLABLE NDE
+A5FB;N # VAI SYLLABLE SE
+A5FC;N # VAI SYLLABLE SHE
+A5FD;N # VAI SYLLABLE ZE
+A5FE;N # VAI SYLLABLE ZHE
+A5FF;N # VAI SYLLABLE CE
+A600;N # VAI SYLLABLE JE
+A601;N # VAI SYLLABLE NJE
+A602;N # VAI SYLLABLE YE
+A603;N # VAI SYLLABLE KE
+A604;N # VAI SYLLABLE NGGE
+A605;N # VAI SYLLABLE NGGEN
+A606;N # VAI SYLLABLE GE
+A607;N # VAI SYLLABLE GEN
+A608;N # VAI SYLLABLE ME
+A609;N # VAI SYLLABLE NE
+A60A;N # VAI SYLLABLE NYE
+A60B;N # VAI SYLLABLE NG
+A60C;N # VAI SYLLABLE LENGTHENER
+A60D;N # VAI COMMA
+A60E;N # VAI FULL STOP
+A60F;N # VAI QUESTION MARK
+A610;N # VAI SYLLABLE NDOLE FA
+A611;N # VAI SYLLABLE NDOLE KA
+A612;N # VAI SYLLABLE NDOLE SOO
+A613;N # VAI SYMBOL FEENG
+A614;N # VAI SYMBOL KEENG
+A615;N # VAI SYMBOL TING
+A616;N # VAI SYMBOL NII
+A617;N # VAI SYMBOL BANG
+A618;N # VAI SYMBOL FAA
+A619;N # VAI SYMBOL TAA
+A61A;N # VAI SYMBOL DANG
+A61B;N # VAI SYMBOL DOONG
+A61C;N # VAI SYMBOL KUNG
+A61D;N # VAI SYMBOL TONG
+A61E;N # VAI SYMBOL DO-O
+A61F;N # VAI SYMBOL JONG
+A620;N # VAI DIGIT ZERO
+A621;N # VAI DIGIT ONE
+A622;N # VAI DIGIT TWO
+A623;N # VAI DIGIT THREE
+A624;N # VAI DIGIT FOUR
+A625;N # VAI DIGIT FIVE
+A626;N # VAI DIGIT SIX
+A627;N # VAI DIGIT SEVEN
+A628;N # VAI DIGIT EIGHT
+A629;N # VAI DIGIT NINE
+A62A;N # VAI SYLLABLE NDOLE MA
+A62B;N # VAI SYLLABLE NDOLE DO
+A640;N # CYRILLIC CAPITAL LETTER ZEMLYA
+A641;N # CYRILLIC SMALL LETTER ZEMLYA
+A642;N # CYRILLIC CAPITAL LETTER DZELO
+A643;N # CYRILLIC SMALL LETTER DZELO
+A644;N # CYRILLIC CAPITAL LETTER REVERSED DZE
+A645;N # CYRILLIC SMALL LETTER REVERSED DZE
+A646;N # CYRILLIC CAPITAL LETTER IOTA
+A647;N # CYRILLIC SMALL LETTER IOTA
+A648;N # CYRILLIC CAPITAL LETTER DJERV
+A649;N # CYRILLIC SMALL LETTER DJERV
+A64A;N # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64B;N # CYRILLIC SMALL LETTER MONOGRAPH UK
+A64C;N # CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64D;N # CYRILLIC SMALL LETTER BROAD OMEGA
+A64E;N # CYRILLIC CAPITAL LETTER NEUTRAL YER
+A64F;N # CYRILLIC SMALL LETTER NEUTRAL YER
+A650;N # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A651;N # CYRILLIC SMALL LETTER YERU WITH BACK YER
+A652;N # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A653;N # CYRILLIC SMALL LETTER IOTIFIED YAT
+A654;N # CYRILLIC CAPITAL LETTER REVERSED YU
+A655;N # CYRILLIC SMALL LETTER REVERSED YU
+A656;N # CYRILLIC CAPITAL LETTER IOTIFIED A
+A657;N # CYRILLIC SMALL LETTER IOTIFIED A
+A658;N # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A659;N # CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65A;N # CYRILLIC CAPITAL LETTER BLENDED YUS
+A65B;N # CYRILLIC SMALL LETTER BLENDED YUS
+A65C;N # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65D;N # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E;N # CYRILLIC CAPITAL LETTER YN
+A65F;N # CYRILLIC SMALL LETTER YN
+A662;N # CYRILLIC CAPITAL LETTER SOFT DE
+A663;N # CYRILLIC SMALL LETTER SOFT DE
+A664;N # CYRILLIC CAPITAL LETTER SOFT EL
+A665;N # CYRILLIC SMALL LETTER SOFT EL
+A666;N # CYRILLIC CAPITAL LETTER SOFT EM
+A667;N # CYRILLIC SMALL LETTER SOFT EM
+A668;N # CYRILLIC CAPITAL LETTER MONOCULAR O
+A669;N # CYRILLIC SMALL LETTER MONOCULAR O
+A66A;N # CYRILLIC CAPITAL LETTER BINOCULAR O
+A66B;N # CYRILLIC SMALL LETTER BINOCULAR O
+A66C;N # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A66D;N # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E;N # CYRILLIC LETTER MULTIOCULAR O
+A66F;N # COMBINING CYRILLIC VZMET
+A670;N # COMBINING CYRILLIC TEN MILLIONS SIGN
+A671;N # COMBINING CYRILLIC HUNDRED MILLIONS SIGN
+A672;N # COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673;N # SLAVONIC ASTERISK
+A67C;N # COMBINING CYRILLIC KAVYKA
+A67D;N # COMBINING CYRILLIC PAYEROK
+A67E;N # CYRILLIC KAVYKA
+A67F;N # CYRILLIC PAYEROK
+A680;N # CYRILLIC CAPITAL LETTER DWE
+A681;N # CYRILLIC SMALL LETTER DWE
+A682;N # CYRILLIC CAPITAL LETTER DZWE
+A683;N # CYRILLIC SMALL LETTER DZWE
+A684;N # CYRILLIC CAPITAL LETTER ZHWE
+A685;N # CYRILLIC SMALL LETTER ZHWE
+A686;N # CYRILLIC CAPITAL LETTER CCHE
+A687;N # CYRILLIC SMALL LETTER CCHE
+A688;N # CYRILLIC CAPITAL LETTER DZZE
+A689;N # CYRILLIC SMALL LETTER DZZE
+A68A;N # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68B;N # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68C;N # CYRILLIC CAPITAL LETTER TWE
+A68D;N # CYRILLIC SMALL LETTER TWE
+A68E;N # CYRILLIC CAPITAL LETTER TSWE
+A68F;N # CYRILLIC SMALL LETTER TSWE
+A690;N # CYRILLIC CAPITAL LETTER TSSE
+A691;N # CYRILLIC SMALL LETTER TSSE
+A692;N # CYRILLIC CAPITAL LETTER TCHE
+A693;N # CYRILLIC SMALL LETTER TCHE
+A694;N # CYRILLIC CAPITAL LETTER HWE
+A695;N # CYRILLIC SMALL LETTER HWE
+A696;N # CYRILLIC CAPITAL LETTER SHWE
+A697;N # CYRILLIC SMALL LETTER SHWE
+A6A0;N # BAMUM LETTER A
+A6A1;N # BAMUM LETTER KA
+A6A2;N # BAMUM LETTER U
+A6A3;N # BAMUM LETTER KU
+A6A4;N # BAMUM LETTER EE
+A6A5;N # BAMUM LETTER REE
+A6A6;N # BAMUM LETTER TAE
+A6A7;N # BAMUM LETTER O
+A6A8;N # BAMUM LETTER NYI
+A6A9;N # BAMUM LETTER I
+A6AA;N # BAMUM LETTER LA
+A6AB;N # BAMUM LETTER PA
+A6AC;N # BAMUM LETTER RII
+A6AD;N # BAMUM LETTER RIEE
+A6AE;N # BAMUM LETTER LEEEE
+A6AF;N # BAMUM LETTER MEEEE
+A6B0;N # BAMUM LETTER TAA
+A6B1;N # BAMUM LETTER NDAA
+A6B2;N # BAMUM LETTER NJAEM
+A6B3;N # BAMUM LETTER M
+A6B4;N # BAMUM LETTER SUU
+A6B5;N # BAMUM LETTER MU
+A6B6;N # BAMUM LETTER SHII
+A6B7;N # BAMUM LETTER SI
+A6B8;N # BAMUM LETTER SHEUX
+A6B9;N # BAMUM LETTER SEUX
+A6BA;N # BAMUM LETTER KYEE
+A6BB;N # BAMUM LETTER KET
+A6BC;N # BAMUM LETTER NUAE
+A6BD;N # BAMUM LETTER NU
+A6BE;N # BAMUM LETTER NJUAE
+A6BF;N # BAMUM LETTER YOQ
+A6C0;N # BAMUM LETTER SHU
+A6C1;N # BAMUM LETTER YUQ
+A6C2;N # BAMUM LETTER YA
+A6C3;N # BAMUM LETTER NSHA
+A6C4;N # BAMUM LETTER KEUX
+A6C5;N # BAMUM LETTER PEUX
+A6C6;N # BAMUM LETTER NJEE
+A6C7;N # BAMUM LETTER NTEE
+A6C8;N # BAMUM LETTER PUE
+A6C9;N # BAMUM LETTER WUE
+A6CA;N # BAMUM LETTER PEE
+A6CB;N # BAMUM LETTER FEE
+A6CC;N # BAMUM LETTER RU
+A6CD;N # BAMUM LETTER LU
+A6CE;N # BAMUM LETTER MI
+A6CF;N # BAMUM LETTER NI
+A6D0;N # BAMUM LETTER REUX
+A6D1;N # BAMUM LETTER RAE
+A6D2;N # BAMUM LETTER KEN
+A6D3;N # BAMUM LETTER NGKWAEN
+A6D4;N # BAMUM LETTER NGGA
+A6D5;N # BAMUM LETTER NGA
+A6D6;N # BAMUM LETTER SHO
+A6D7;N # BAMUM LETTER PUAE
+A6D8;N # BAMUM LETTER FU
+A6D9;N # BAMUM LETTER FOM
+A6DA;N # BAMUM LETTER WA
+A6DB;N # BAMUM LETTER NA
+A6DC;N # BAMUM LETTER LI
+A6DD;N # BAMUM LETTER PI
+A6DE;N # BAMUM LETTER LOQ
+A6DF;N # BAMUM LETTER KO
+A6E0;N # BAMUM LETTER MBEN
+A6E1;N # BAMUM LETTER REN
+A6E2;N # BAMUM LETTER MEN
+A6E3;N # BAMUM LETTER MA
+A6E4;N # BAMUM LETTER TI
+A6E5;N # BAMUM LETTER KI
+A6E6;N # BAMUM LETTER MO
+A6E7;N # BAMUM LETTER MBAA
+A6E8;N # BAMUM LETTER TET
+A6E9;N # BAMUM LETTER KPA
+A6EA;N # BAMUM LETTER TEN
+A6EB;N # BAMUM LETTER NTUU
+A6EC;N # BAMUM LETTER SAMBA
+A6ED;N # BAMUM LETTER FAAMAE
+A6EE;N # BAMUM LETTER KOVUU
+A6EF;N # BAMUM LETTER KOGHOM
+A6F0;N # BAMUM COMBINING MARK KOQNDON
+A6F1;N # BAMUM COMBINING MARK TUKWENTIS
+A6F2;N # BAMUM NJAEMLI
+A6F3;N # BAMUM FULL STOP
+A6F4;N # BAMUM COLON
+A6F5;N # BAMUM COMMA
+A6F6;N # BAMUM SEMICOLON
+A6F7;N # BAMUM QUESTION MARK
+A700;N # MODIFIER LETTER CHINESE TONE YIN PING
+A701;N # MODIFIER LETTER CHINESE TONE YANG PING
+A702;N # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703;N # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704;N # MODIFIER LETTER CHINESE TONE YIN QU
+A705;N # MODIFIER LETTER CHINESE TONE YANG QU
+A706;N # MODIFIER LETTER CHINESE TONE YIN RU
+A707;N # MODIFIER LETTER CHINESE TONE YANG RU
+A708;N # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709;N # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A;N # MODIFIER LETTER MID DOTTED TONE BAR
+A70B;N # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C;N # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D;N # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E;N # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F;N # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710;N # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711;N # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712;N # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713;N # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714;N # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715;N # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716;N # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717;N # MODIFIER LETTER DOT VERTICAL BAR
+A718;N # MODIFIER LETTER DOT SLASH
+A719;N # MODIFIER LETTER DOT HORIZONTAL BAR
+A71A;N # MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+A71B;N # MODIFIER LETTER RAISED UP ARROW
+A71C;N # MODIFIER LETTER RAISED DOWN ARROW
+A71D;N # MODIFIER LETTER RAISED EXCLAMATION MARK
+A71E;N # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK
+A71F;N # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720;N # MODIFIER LETTER STRESS AND HIGH TONE
+A721;N # MODIFIER LETTER STRESS AND LOW TONE
+A722;N # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A723;N # LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A724;N # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A725;N # LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A726;N # LATIN CAPITAL LETTER HENG
+A727;N # LATIN SMALL LETTER HENG
+A728;N # LATIN CAPITAL LETTER TZ
+A729;N # LATIN SMALL LETTER TZ
+A72A;N # LATIN CAPITAL LETTER TRESILLO
+A72B;N # LATIN SMALL LETTER TRESILLO
+A72C;N # LATIN CAPITAL LETTER CUATRILLO
+A72D;N # LATIN SMALL LETTER CUATRILLO
+A72E;N # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A72F;N # LATIN SMALL LETTER CUATRILLO WITH COMMA
+A730;N # LATIN LETTER SMALL CAPITAL F
+A731;N # LATIN LETTER SMALL CAPITAL S
+A732;N # LATIN CAPITAL LETTER AA
+A733;N # LATIN SMALL LETTER AA
+A734;N # LATIN CAPITAL LETTER AO
+A735;N # LATIN SMALL LETTER AO
+A736;N # LATIN CAPITAL LETTER AU
+A737;N # LATIN SMALL LETTER AU
+A738;N # LATIN CAPITAL LETTER AV
+A739;N # LATIN SMALL LETTER AV
+A73A;N # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73B;N # LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73C;N # LATIN CAPITAL LETTER AY
+A73D;N # LATIN SMALL LETTER AY
+A73E;N # LATIN CAPITAL LETTER REVERSED C WITH DOT
+A73F;N # LATIN SMALL LETTER REVERSED C WITH DOT
+A740;N # LATIN CAPITAL LETTER K WITH STROKE
+A741;N # LATIN SMALL LETTER K WITH STROKE
+A742;N # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A743;N # LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A744;N # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A745;N # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746;N # LATIN CAPITAL LETTER BROKEN L
+A747;N # LATIN SMALL LETTER BROKEN L
+A748;N # LATIN CAPITAL LETTER L WITH HIGH STROKE
+A749;N # LATIN SMALL LETTER L WITH HIGH STROKE
+A74A;N # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74B;N # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74C;N # LATIN CAPITAL LETTER O WITH LOOP
+A74D;N # LATIN SMALL LETTER O WITH LOOP
+A74E;N # LATIN CAPITAL LETTER OO
+A74F;N # LATIN SMALL LETTER OO
+A750;N # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A751;N # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A752;N # LATIN CAPITAL LETTER P WITH FLOURISH
+A753;N # LATIN SMALL LETTER P WITH FLOURISH
+A754;N # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A755;N # LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A756;N # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A757;N # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A758;N # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A759;N # LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75A;N # LATIN CAPITAL LETTER R ROTUNDA
+A75B;N # LATIN SMALL LETTER R ROTUNDA
+A75C;N # LATIN CAPITAL LETTER RUM ROTUNDA
+A75D;N # LATIN SMALL LETTER RUM ROTUNDA
+A75E;N # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A75F;N # LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A760;N # LATIN CAPITAL LETTER VY
+A761;N # LATIN SMALL LETTER VY
+A762;N # LATIN CAPITAL LETTER VISIGOTHIC Z
+A763;N # LATIN SMALL LETTER VISIGOTHIC Z
+A764;N # LATIN CAPITAL LETTER THORN WITH STROKE
+A765;N # LATIN SMALL LETTER THORN WITH STROKE
+A766;N # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A767;N # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768;N # LATIN CAPITAL LETTER VEND
+A769;N # LATIN SMALL LETTER VEND
+A76A;N # LATIN CAPITAL LETTER ET
+A76B;N # LATIN SMALL LETTER ET
+A76C;N # LATIN CAPITAL LETTER IS
+A76D;N # LATIN SMALL LETTER IS
+A76E;N # LATIN CAPITAL LETTER CON
+A76F;N # LATIN SMALL LETTER CON
+A770;N # MODIFIER LETTER US
+A771;N # LATIN SMALL LETTER DUM
+A772;N # LATIN SMALL LETTER LUM
+A773;N # LATIN SMALL LETTER MUM
+A774;N # LATIN SMALL LETTER NUM
+A775;N # LATIN SMALL LETTER RUM
+A776;N # LATIN LETTER SMALL CAPITAL RUM
+A777;N # LATIN SMALL LETTER TUM
+A778;N # LATIN SMALL LETTER UM
+A779;N # LATIN CAPITAL LETTER INSULAR D
+A77A;N # LATIN SMALL LETTER INSULAR D
+A77B;N # LATIN CAPITAL LETTER INSULAR F
+A77C;N # LATIN SMALL LETTER INSULAR F
+A77D;N # LATIN CAPITAL LETTER INSULAR G
+A77E;N # LATIN CAPITAL LETTER TURNED INSULAR G
+A77F;N # LATIN SMALL LETTER TURNED INSULAR G
+A780;N # LATIN CAPITAL LETTER TURNED L
+A781;N # LATIN SMALL LETTER TURNED L
+A782;N # LATIN CAPITAL LETTER INSULAR R
+A783;N # LATIN SMALL LETTER INSULAR R
+A784;N # LATIN CAPITAL LETTER INSULAR S
+A785;N # LATIN SMALL LETTER INSULAR S
+A786;N # LATIN CAPITAL LETTER INSULAR T
+A787;N # LATIN SMALL LETTER INSULAR T
+A788;N # MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789;N # MODIFIER LETTER COLON
+A78A;N # MODIFIER LETTER SHORT EQUALS SIGN
+A78B;N # LATIN CAPITAL LETTER SALTILLO
+A78C;N # LATIN SMALL LETTER SALTILLO
+A7FB;N # LATIN EPIGRAPHIC LETTER REVERSED F
+A7FC;N # LATIN EPIGRAPHIC LETTER REVERSED P
+A7FD;N # LATIN EPIGRAPHIC LETTER INVERTED M
+A7FE;N # LATIN EPIGRAPHIC LETTER I LONGA
+A7FF;N # LATIN EPIGRAPHIC LETTER ARCHAIC M
+A800;N # SYLOTI NAGRI LETTER A
+A801;N # SYLOTI NAGRI LETTER I
+A802;N # SYLOTI NAGRI SIGN DVISVARA
+A803;N # SYLOTI NAGRI LETTER U
+A804;N # SYLOTI NAGRI LETTER E
+A805;N # SYLOTI NAGRI LETTER O
+A806;N # SYLOTI NAGRI SIGN HASANTA
+A807;N # SYLOTI NAGRI LETTER KO
+A808;N # SYLOTI NAGRI LETTER KHO
+A809;N # SYLOTI NAGRI LETTER GO
+A80A;N # SYLOTI NAGRI LETTER GHO
+A80B;N # SYLOTI NAGRI SIGN ANUSVARA
+A80C;N # SYLOTI NAGRI LETTER CO
+A80D;N # SYLOTI NAGRI LETTER CHO
+A80E;N # SYLOTI NAGRI LETTER JO
+A80F;N # SYLOTI NAGRI LETTER JHO
+A810;N # SYLOTI NAGRI LETTER TTO
+A811;N # SYLOTI NAGRI LETTER TTHO
+A812;N # SYLOTI NAGRI LETTER DDO
+A813;N # SYLOTI NAGRI LETTER DDHO
+A814;N # SYLOTI NAGRI LETTER TO
+A815;N # SYLOTI NAGRI LETTER THO
+A816;N # SYLOTI NAGRI LETTER DO
+A817;N # SYLOTI NAGRI LETTER DHO
+A818;N # SYLOTI NAGRI LETTER NO
+A819;N # SYLOTI NAGRI LETTER PO
+A81A;N # SYLOTI NAGRI LETTER PHO
+A81B;N # SYLOTI NAGRI LETTER BO
+A81C;N # SYLOTI NAGRI LETTER BHO
+A81D;N # SYLOTI NAGRI LETTER MO
+A81E;N # SYLOTI NAGRI LETTER RO
+A81F;N # SYLOTI NAGRI LETTER LO
+A820;N # SYLOTI NAGRI LETTER RRO
+A821;N # SYLOTI NAGRI LETTER SO
+A822;N # SYLOTI NAGRI LETTER HO
+A823;N # SYLOTI NAGRI VOWEL SIGN A
+A824;N # SYLOTI NAGRI VOWEL SIGN I
+A825;N # SYLOTI NAGRI VOWEL SIGN U
+A826;N # SYLOTI NAGRI VOWEL SIGN E
+A827;N # SYLOTI NAGRI VOWEL SIGN OO
+A828;N # SYLOTI NAGRI POETRY MARK-1
+A829;N # SYLOTI NAGRI POETRY MARK-2
+A82A;N # SYLOTI NAGRI POETRY MARK-3
+A82B;N # SYLOTI NAGRI POETRY MARK-4
+A830;N # NORTH INDIC FRACTION ONE QUARTER
+A831;N # NORTH INDIC FRACTION ONE HALF
+A832;N # NORTH INDIC FRACTION THREE QUARTERS
+A833;N # NORTH INDIC FRACTION ONE SIXTEENTH
+A834;N # NORTH INDIC FRACTION ONE EIGHTH
+A835;N # NORTH INDIC FRACTION THREE SIXTEENTHS
+A836;N # NORTH INDIC QUARTER MARK
+A837;N # NORTH INDIC PLACEHOLDER MARK
+A838;N # NORTH INDIC RUPEE MARK
+A839;N # NORTH INDIC QUANTITY MARK
+A840;N # PHAGS-PA LETTER KA
+A841;N # PHAGS-PA LETTER KHA
+A842;N # PHAGS-PA LETTER GA
+A843;N # PHAGS-PA LETTER NGA
+A844;N # PHAGS-PA LETTER CA
+A845;N # PHAGS-PA LETTER CHA
+A846;N # PHAGS-PA LETTER JA
+A847;N # PHAGS-PA LETTER NYA
+A848;N # PHAGS-PA LETTER TA
+A849;N # PHAGS-PA LETTER THA
+A84A;N # PHAGS-PA LETTER DA
+A84B;N # PHAGS-PA LETTER NA
+A84C;N # PHAGS-PA LETTER PA
+A84D;N # PHAGS-PA LETTER PHA
+A84E;N # PHAGS-PA LETTER BA
+A84F;N # PHAGS-PA LETTER MA
+A850;N # PHAGS-PA LETTER TSA
+A851;N # PHAGS-PA LETTER TSHA
+A852;N # PHAGS-PA LETTER DZA
+A853;N # PHAGS-PA LETTER WA
+A854;N # PHAGS-PA LETTER ZHA
+A855;N # PHAGS-PA LETTER ZA
+A856;N # PHAGS-PA LETTER SMALL A
+A857;N # PHAGS-PA LETTER YA
+A858;N # PHAGS-PA LETTER RA
+A859;N # PHAGS-PA LETTER LA
+A85A;N # PHAGS-PA LETTER SHA
+A85B;N # PHAGS-PA LETTER SA
+A85C;N # PHAGS-PA LETTER HA
+A85D;N # PHAGS-PA LETTER A
+A85E;N # PHAGS-PA LETTER I
+A85F;N # PHAGS-PA LETTER U
+A860;N # PHAGS-PA LETTER E
+A861;N # PHAGS-PA LETTER O
+A862;N # PHAGS-PA LETTER QA
+A863;N # PHAGS-PA LETTER XA
+A864;N # PHAGS-PA LETTER FA
+A865;N # PHAGS-PA LETTER GGA
+A866;N # PHAGS-PA LETTER EE
+A867;N # PHAGS-PA SUBJOINED LETTER WA
+A868;N # PHAGS-PA SUBJOINED LETTER YA
+A869;N # PHAGS-PA LETTER TTA
+A86A;N # PHAGS-PA LETTER TTHA
+A86B;N # PHAGS-PA LETTER DDA
+A86C;N # PHAGS-PA LETTER NNA
+A86D;N # PHAGS-PA LETTER ALTERNATE YA
+A86E;N # PHAGS-PA LETTER VOICELESS SHA
+A86F;N # PHAGS-PA LETTER VOICED HA
+A870;N # PHAGS-PA LETTER ASPIRATED FA
+A871;N # PHAGS-PA SUBJOINED LETTER RA
+A872;N # PHAGS-PA SUPERFIXED LETTER RA
+A873;N # PHAGS-PA LETTER CANDRABINDU
+A874;N # PHAGS-PA SINGLE HEAD MARK
+A875;N # PHAGS-PA DOUBLE HEAD MARK
+A876;N # PHAGS-PA MARK SHAD
+A877;N # PHAGS-PA MARK DOUBLE SHAD
+A880;N # SAURASHTRA SIGN ANUSVARA
+A881;N # SAURASHTRA SIGN VISARGA
+A882;N # SAURASHTRA LETTER A
+A883;N # SAURASHTRA LETTER AA
+A884;N # SAURASHTRA LETTER I
+A885;N # SAURASHTRA LETTER II
+A886;N # SAURASHTRA LETTER U
+A887;N # SAURASHTRA LETTER UU
+A888;N # SAURASHTRA LETTER VOCALIC R
+A889;N # SAURASHTRA LETTER VOCALIC RR
+A88A;N # SAURASHTRA LETTER VOCALIC L
+A88B;N # SAURASHTRA LETTER VOCALIC LL
+A88C;N # SAURASHTRA LETTER E
+A88D;N # SAURASHTRA LETTER EE
+A88E;N # SAURASHTRA LETTER AI
+A88F;N # SAURASHTRA LETTER O
+A890;N # SAURASHTRA LETTER OO
+A891;N # SAURASHTRA LETTER AU
+A892;N # SAURASHTRA LETTER KA
+A893;N # SAURASHTRA LETTER KHA
+A894;N # SAURASHTRA LETTER GA
+A895;N # SAURASHTRA LETTER GHA
+A896;N # SAURASHTRA LETTER NGA
+A897;N # SAURASHTRA LETTER CA
+A898;N # SAURASHTRA LETTER CHA
+A899;N # SAURASHTRA LETTER JA
+A89A;N # SAURASHTRA LETTER JHA
+A89B;N # SAURASHTRA LETTER NYA
+A89C;N # SAURASHTRA LETTER TTA
+A89D;N # SAURASHTRA LETTER TTHA
+A89E;N # SAURASHTRA LETTER DDA
+A89F;N # SAURASHTRA LETTER DDHA
+A8A0;N # SAURASHTRA LETTER NNA
+A8A1;N # SAURASHTRA LETTER TA
+A8A2;N # SAURASHTRA LETTER THA
+A8A3;N # SAURASHTRA LETTER DA
+A8A4;N # SAURASHTRA LETTER DHA
+A8A5;N # SAURASHTRA LETTER NA
+A8A6;N # SAURASHTRA LETTER PA
+A8A7;N # SAURASHTRA LETTER PHA
+A8A8;N # SAURASHTRA LETTER BA
+A8A9;N # SAURASHTRA LETTER BHA
+A8AA;N # SAURASHTRA LETTER MA
+A8AB;N # SAURASHTRA LETTER YA
+A8AC;N # SAURASHTRA LETTER RA
+A8AD;N # SAURASHTRA LETTER LA
+A8AE;N # SAURASHTRA LETTER VA
+A8AF;N # SAURASHTRA LETTER SHA
+A8B0;N # SAURASHTRA LETTER SSA
+A8B1;N # SAURASHTRA LETTER SA
+A8B2;N # SAURASHTRA LETTER HA
+A8B3;N # SAURASHTRA LETTER LLA
+A8B4;N # SAURASHTRA CONSONANT SIGN HAARU
+A8B5;N # SAURASHTRA VOWEL SIGN AA
+A8B6;N # SAURASHTRA VOWEL SIGN I
+A8B7;N # SAURASHTRA VOWEL SIGN II
+A8B8;N # SAURASHTRA VOWEL SIGN U
+A8B9;N # SAURASHTRA VOWEL SIGN UU
+A8BA;N # SAURASHTRA VOWEL SIGN VOCALIC R
+A8BB;N # SAURASHTRA VOWEL SIGN VOCALIC RR
+A8BC;N # SAURASHTRA VOWEL SIGN VOCALIC L
+A8BD;N # SAURASHTRA VOWEL SIGN VOCALIC LL
+A8BE;N # SAURASHTRA VOWEL SIGN E
+A8BF;N # SAURASHTRA VOWEL SIGN EE
+A8C0;N # SAURASHTRA VOWEL SIGN AI
+A8C1;N # SAURASHTRA VOWEL SIGN O
+A8C2;N # SAURASHTRA VOWEL SIGN OO
+A8C3;N # SAURASHTRA VOWEL SIGN AU
+A8C4;N # SAURASHTRA SIGN VIRAMA
+A8CE;N # SAURASHTRA DANDA
+A8CF;N # SAURASHTRA DOUBLE DANDA
+A8D0;N # SAURASHTRA DIGIT ZERO
+A8D1;N # SAURASHTRA DIGIT ONE
+A8D2;N # SAURASHTRA DIGIT TWO
+A8D3;N # SAURASHTRA DIGIT THREE
+A8D4;N # SAURASHTRA DIGIT FOUR
+A8D5;N # SAURASHTRA DIGIT FIVE
+A8D6;N # SAURASHTRA DIGIT SIX
+A8D7;N # SAURASHTRA DIGIT SEVEN
+A8D8;N # SAURASHTRA DIGIT EIGHT
+A8D9;N # SAURASHTRA DIGIT NINE
+A8E0;N # COMBINING DEVANAGARI DIGIT ZERO
+A8E1;N # COMBINING DEVANAGARI DIGIT ONE
+A8E2;N # COMBINING DEVANAGARI DIGIT TWO
+A8E3;N # COMBINING DEVANAGARI DIGIT THREE
+A8E4;N # COMBINING DEVANAGARI DIGIT FOUR
+A8E5;N # COMBINING DEVANAGARI DIGIT FIVE
+A8E6;N # COMBINING DEVANAGARI DIGIT SIX
+A8E7;N # COMBINING DEVANAGARI DIGIT SEVEN
+A8E8;N # COMBINING DEVANAGARI DIGIT EIGHT
+A8E9;N # COMBINING DEVANAGARI DIGIT NINE
+A8EA;N # COMBINING DEVANAGARI LETTER A
+A8EB;N # COMBINING DEVANAGARI LETTER U
+A8EC;N # COMBINING DEVANAGARI LETTER KA
+A8ED;N # COMBINING DEVANAGARI LETTER NA
+A8EE;N # COMBINING DEVANAGARI LETTER PA
+A8EF;N # COMBINING DEVANAGARI LETTER RA
+A8F0;N # COMBINING DEVANAGARI LETTER VI
+A8F1;N # COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2;N # DEVANAGARI SIGN SPACING CANDRABINDU
+A8F3;N # DEVANAGARI SIGN CANDRABINDU VIRAMA
+A8F4;N # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
+A8F5;N # DEVANAGARI SIGN CANDRABINDU TWO
+A8F6;N # DEVANAGARI SIGN CANDRABINDU THREE
+A8F7;N # DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8;N # DEVANAGARI SIGN PUSHPIKA
+A8F9;N # DEVANAGARI GAP FILLER
+A8FA;N # DEVANAGARI CARET
+A8FB;N # DEVANAGARI HEADSTROKE
+A900;N # KAYAH LI DIGIT ZERO
+A901;N # KAYAH LI DIGIT ONE
+A902;N # KAYAH LI DIGIT TWO
+A903;N # KAYAH LI DIGIT THREE
+A904;N # KAYAH LI DIGIT FOUR
+A905;N # KAYAH LI DIGIT FIVE
+A906;N # KAYAH LI DIGIT SIX
+A907;N # KAYAH LI DIGIT SEVEN
+A908;N # KAYAH LI DIGIT EIGHT
+A909;N # KAYAH LI DIGIT NINE
+A90A;N # KAYAH LI LETTER KA
+A90B;N # KAYAH LI LETTER KHA
+A90C;N # KAYAH LI LETTER GA
+A90D;N # KAYAH LI LETTER NGA
+A90E;N # KAYAH LI LETTER SA
+A90F;N # KAYAH LI LETTER SHA
+A910;N # KAYAH LI LETTER ZA
+A911;N # KAYAH LI LETTER NYA
+A912;N # KAYAH LI LETTER TA
+A913;N # KAYAH LI LETTER HTA
+A914;N # KAYAH LI LETTER NA
+A915;N # KAYAH LI LETTER PA
+A916;N # KAYAH LI LETTER PHA
+A917;N # KAYAH LI LETTER MA
+A918;N # KAYAH LI LETTER DA
+A919;N # KAYAH LI LETTER BA
+A91A;N # KAYAH LI LETTER RA
+A91B;N # KAYAH LI LETTER YA
+A91C;N # KAYAH LI LETTER LA
+A91D;N # KAYAH LI LETTER WA
+A91E;N # KAYAH LI LETTER THA
+A91F;N # KAYAH LI LETTER HA
+A920;N # KAYAH LI LETTER VA
+A921;N # KAYAH LI LETTER CA
+A922;N # KAYAH LI LETTER A
+A923;N # KAYAH LI LETTER OE
+A924;N # KAYAH LI LETTER I
+A925;N # KAYAH LI LETTER OO
+A926;N # KAYAH LI VOWEL UE
+A927;N # KAYAH LI VOWEL E
+A928;N # KAYAH LI VOWEL U
+A929;N # KAYAH LI VOWEL EE
+A92A;N # KAYAH LI VOWEL O
+A92B;N # KAYAH LI TONE PLOPHU
+A92C;N # KAYAH LI TONE CALYA
+A92D;N # KAYAH LI TONE CALYA PLOPHU
+A92E;N # KAYAH LI SIGN CWI
+A92F;N # KAYAH LI SIGN SHYA
+A930;N # REJANG LETTER KA
+A931;N # REJANG LETTER GA
+A932;N # REJANG LETTER NGA
+A933;N # REJANG LETTER TA
+A934;N # REJANG LETTER DA
+A935;N # REJANG LETTER NA
+A936;N # REJANG LETTER PA
+A937;N # REJANG LETTER BA
+A938;N # REJANG LETTER MA
+A939;N # REJANG LETTER CA
+A93A;N # REJANG LETTER JA
+A93B;N # REJANG LETTER NYA
+A93C;N # REJANG LETTER SA
+A93D;N # REJANG LETTER RA
+A93E;N # REJANG LETTER LA
+A93F;N # REJANG LETTER YA
+A940;N # REJANG LETTER WA
+A941;N # REJANG LETTER HA
+A942;N # REJANG LETTER MBA
+A943;N # REJANG LETTER NGGA
+A944;N # REJANG LETTER NDA
+A945;N # REJANG LETTER NYJA
+A946;N # REJANG LETTER A
+A947;N # REJANG VOWEL SIGN I
+A948;N # REJANG VOWEL SIGN U
+A949;N # REJANG VOWEL SIGN E
+A94A;N # REJANG VOWEL SIGN AI
+A94B;N # REJANG VOWEL SIGN O
+A94C;N # REJANG VOWEL SIGN AU
+A94D;N # REJANG VOWEL SIGN EU
+A94E;N # REJANG VOWEL SIGN EA
+A94F;N # REJANG CONSONANT SIGN NG
+A950;N # REJANG CONSONANT SIGN N
+A951;N # REJANG CONSONANT SIGN R
+A952;N # REJANG CONSONANT SIGN H
+A953;N # REJANG VIRAMA
+A95F;N # REJANG SECTION MARK
+A960;W # HANGUL CHOSEONG TIKEUT-MIEUM
+A961;W # HANGUL CHOSEONG TIKEUT-PIEUP
+A962;W # HANGUL CHOSEONG TIKEUT-SIOS
+A963;W # HANGUL CHOSEONG TIKEUT-CIEUC
+A964;W # HANGUL CHOSEONG RIEUL-KIYEOK
+A965;W # HANGUL CHOSEONG RIEUL-SSANGKIYEOK
+A966;W # HANGUL CHOSEONG RIEUL-TIKEUT
+A967;W # HANGUL CHOSEONG RIEUL-SSANGTIKEUT
+A968;W # HANGUL CHOSEONG RIEUL-MIEUM
+A969;W # HANGUL CHOSEONG RIEUL-PIEUP
+A96A;W # HANGUL CHOSEONG RIEUL-SSANGPIEUP
+A96B;W # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
+A96C;W # HANGUL CHOSEONG RIEUL-SIOS
+A96D;W # HANGUL CHOSEONG RIEUL-CIEUC
+A96E;W # HANGUL CHOSEONG RIEUL-KHIEUKH
+A96F;W # HANGUL CHOSEONG MIEUM-KIYEOK
+A970;W # HANGUL CHOSEONG MIEUM-TIKEUT
+A971;W # HANGUL CHOSEONG MIEUM-SIOS
+A972;W # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
+A973;W # HANGUL CHOSEONG PIEUP-KHIEUKH
+A974;W # HANGUL CHOSEONG PIEUP-HIEUH
+A975;W # HANGUL CHOSEONG SSANGSIOS-PIEUP
+A976;W # HANGUL CHOSEONG IEUNG-RIEUL
+A977;W # HANGUL CHOSEONG IEUNG-HIEUH
+A978;W # HANGUL CHOSEONG SSANGCIEUC-HIEUH
+A979;W # HANGUL CHOSEONG SSANGTHIEUTH
+A97A;W # HANGUL CHOSEONG PHIEUPH-HIEUH
+A97B;W # HANGUL CHOSEONG HIEUH-SIOS
+A97C;W # HANGUL CHOSEONG SSANGYEORINHIEUH
+A980;N # JAVANESE SIGN PANYANGGA
+A981;N # JAVANESE SIGN CECAK
+A982;N # JAVANESE SIGN LAYAR
+A983;N # JAVANESE SIGN WIGNYAN
+A984;N # JAVANESE LETTER A
+A985;N # JAVANESE LETTER I KAWI
+A986;N # JAVANESE LETTER I
+A987;N # JAVANESE LETTER II
+A988;N # JAVANESE LETTER U
+A989;N # JAVANESE LETTER PA CEREK
+A98A;N # JAVANESE LETTER NGA LELET
+A98B;N # JAVANESE LETTER NGA LELET RASWADI
+A98C;N # JAVANESE LETTER E
+A98D;N # JAVANESE LETTER AI
+A98E;N # JAVANESE LETTER O
+A98F;N # JAVANESE LETTER KA
+A990;N # JAVANESE LETTER KA SASAK
+A991;N # JAVANESE LETTER KA MURDA
+A992;N # JAVANESE LETTER GA
+A993;N # JAVANESE LETTER GA MURDA
+A994;N # JAVANESE LETTER NGA
+A995;N # JAVANESE LETTER CA
+A996;N # JAVANESE LETTER CA MURDA
+A997;N # JAVANESE LETTER JA
+A998;N # JAVANESE LETTER NYA MURDA
+A999;N # JAVANESE LETTER JA MAHAPRANA
+A99A;N # JAVANESE LETTER NYA
+A99B;N # JAVANESE LETTER TTA
+A99C;N # JAVANESE LETTER TTA MAHAPRANA
+A99D;N # JAVANESE LETTER DDA
+A99E;N # JAVANESE LETTER DDA MAHAPRANA
+A99F;N # JAVANESE LETTER NA MURDA
+A9A0;N # JAVANESE LETTER TA
+A9A1;N # JAVANESE LETTER TA MURDA
+A9A2;N # JAVANESE LETTER DA
+A9A3;N # JAVANESE LETTER DA MAHAPRANA
+A9A4;N # JAVANESE LETTER NA
+A9A5;N # JAVANESE LETTER PA
+A9A6;N # JAVANESE LETTER PA MURDA
+A9A7;N # JAVANESE LETTER BA
+A9A8;N # JAVANESE LETTER BA MURDA
+A9A9;N # JAVANESE LETTER MA
+A9AA;N # JAVANESE LETTER YA
+A9AB;N # JAVANESE LETTER RA
+A9AC;N # JAVANESE LETTER RA AGUNG
+A9AD;N # JAVANESE LETTER LA
+A9AE;N # JAVANESE LETTER WA
+A9AF;N # JAVANESE LETTER SA MURDA
+A9B0;N # JAVANESE LETTER SA MAHAPRANA
+A9B1;N # JAVANESE LETTER SA
+A9B2;N # JAVANESE LETTER HA
+A9B3;N # JAVANESE SIGN CECAK TELU
+A9B4;N # JAVANESE VOWEL SIGN TARUNG
+A9B5;N # JAVANESE VOWEL SIGN TOLONG
+A9B6;N # JAVANESE VOWEL SIGN WULU
+A9B7;N # JAVANESE VOWEL SIGN WULU MELIK
+A9B8;N # JAVANESE VOWEL SIGN SUKU
+A9B9;N # JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA;N # JAVANESE VOWEL SIGN TALING
+A9BB;N # JAVANESE VOWEL SIGN DIRGA MURE
+A9BC;N # JAVANESE VOWEL SIGN PEPET
+A9BD;N # JAVANESE CONSONANT SIGN KERET
+A9BE;N # JAVANESE CONSONANT SIGN PENGKAL
+A9BF;N # JAVANESE CONSONANT SIGN CAKRA
+A9C0;N # JAVANESE PANGKON
+A9C1;N # JAVANESE LEFT RERENGGAN
+A9C2;N # JAVANESE RIGHT RERENGGAN
+A9C3;N # JAVANESE PADA ANDAP
+A9C4;N # JAVANESE PADA MADYA
+A9C5;N # JAVANESE PADA LUHUR
+A9C6;N # JAVANESE PADA WINDU
+A9C7;N # JAVANESE PADA PANGKAT
+A9C8;N # JAVANESE PADA LINGSA
+A9C9;N # JAVANESE PADA LUNGSI
+A9CA;N # JAVANESE PADA ADEG
+A9CB;N # JAVANESE PADA ADEG ADEG
+A9CC;N # JAVANESE PADA PISELEH
+A9CD;N # JAVANESE TURNED PADA PISELEH
+A9CF;N # JAVANESE PANGRANGKEP
+A9D0;N # JAVANESE DIGIT ZERO
+A9D1;N # JAVANESE DIGIT ONE
+A9D2;N # JAVANESE DIGIT TWO
+A9D3;N # JAVANESE DIGIT THREE
+A9D4;N # JAVANESE DIGIT FOUR
+A9D5;N # JAVANESE DIGIT FIVE
+A9D6;N # JAVANESE DIGIT SIX
+A9D7;N # JAVANESE DIGIT SEVEN
+A9D8;N # JAVANESE DIGIT EIGHT
+A9D9;N # JAVANESE DIGIT NINE
+A9DE;N # JAVANESE PADA TIRTA TUMETES
+A9DF;N # JAVANESE PADA ISEN-ISEN
+AA00;N # CHAM LETTER A
+AA01;N # CHAM LETTER I
+AA02;N # CHAM LETTER U
+AA03;N # CHAM LETTER E
+AA04;N # CHAM LETTER AI
+AA05;N # CHAM LETTER O
+AA06;N # CHAM LETTER KA
+AA07;N # CHAM LETTER KHA
+AA08;N # CHAM LETTER GA
+AA09;N # CHAM LETTER GHA
+AA0A;N # CHAM LETTER NGUE
+AA0B;N # CHAM LETTER NGA
+AA0C;N # CHAM LETTER CHA
+AA0D;N # CHAM LETTER CHHA
+AA0E;N # CHAM LETTER JA
+AA0F;N # CHAM LETTER JHA
+AA10;N # CHAM LETTER NHUE
+AA11;N # CHAM LETTER NHA
+AA12;N # CHAM LETTER NHJA
+AA13;N # CHAM LETTER TA
+AA14;N # CHAM LETTER THA
+AA15;N # CHAM LETTER DA
+AA16;N # CHAM LETTER DHA
+AA17;N # CHAM LETTER NUE
+AA18;N # CHAM LETTER NA
+AA19;N # CHAM LETTER DDA
+AA1A;N # CHAM LETTER PA
+AA1B;N # CHAM LETTER PPA
+AA1C;N # CHAM LETTER PHA
+AA1D;N # CHAM LETTER BA
+AA1E;N # CHAM LETTER BHA
+AA1F;N # CHAM LETTER MUE
+AA20;N # CHAM LETTER MA
+AA21;N # CHAM LETTER BBA
+AA22;N # CHAM LETTER YA
+AA23;N # CHAM LETTER RA
+AA24;N # CHAM LETTER LA
+AA25;N # CHAM LETTER VA
+AA26;N # CHAM LETTER SSA
+AA27;N # CHAM LETTER SA
+AA28;N # CHAM LETTER HA
+AA29;N # CHAM VOWEL SIGN AA
+AA2A;N # CHAM VOWEL SIGN I
+AA2B;N # CHAM VOWEL SIGN II
+AA2C;N # CHAM VOWEL SIGN EI
+AA2D;N # CHAM VOWEL SIGN U
+AA2E;N # CHAM VOWEL SIGN OE
+AA2F;N # CHAM VOWEL SIGN O
+AA30;N # CHAM VOWEL SIGN AI
+AA31;N # CHAM VOWEL SIGN AU
+AA32;N # CHAM VOWEL SIGN UE
+AA33;N # CHAM CONSONANT SIGN YA
+AA34;N # CHAM CONSONANT SIGN RA
+AA35;N # CHAM CONSONANT SIGN LA
+AA36;N # CHAM CONSONANT SIGN WA
+AA40;N # CHAM LETTER FINAL K
+AA41;N # CHAM LETTER FINAL G
+AA42;N # CHAM LETTER FINAL NG
+AA43;N # CHAM CONSONANT SIGN FINAL NG
+AA44;N # CHAM LETTER FINAL CH
+AA45;N # CHAM LETTER FINAL T
+AA46;N # CHAM LETTER FINAL N
+AA47;N # CHAM LETTER FINAL P
+AA48;N # CHAM LETTER FINAL Y
+AA49;N # CHAM LETTER FINAL R
+AA4A;N # CHAM LETTER FINAL L
+AA4B;N # CHAM LETTER FINAL SS
+AA4C;N # CHAM CONSONANT SIGN FINAL M
+AA4D;N # CHAM CONSONANT SIGN FINAL H
+AA50;N # CHAM DIGIT ZERO
+AA51;N # CHAM DIGIT ONE
+AA52;N # CHAM DIGIT TWO
+AA53;N # CHAM DIGIT THREE
+AA54;N # CHAM DIGIT FOUR
+AA55;N # CHAM DIGIT FIVE
+AA56;N # CHAM DIGIT SIX
+AA57;N # CHAM DIGIT SEVEN
+AA58;N # CHAM DIGIT EIGHT
+AA59;N # CHAM DIGIT NINE
+AA5C;N # CHAM PUNCTUATION SPIRAL
+AA5D;N # CHAM PUNCTUATION DANDA
+AA5E;N # CHAM PUNCTUATION DOUBLE DANDA
+AA5F;N # CHAM PUNCTUATION TRIPLE DANDA
+AA60;N # MYANMAR LETTER KHAMTI GA
+AA61;N # MYANMAR LETTER KHAMTI CA
+AA62;N # MYANMAR LETTER KHAMTI CHA
+AA63;N # MYANMAR LETTER KHAMTI JA
+AA64;N # MYANMAR LETTER KHAMTI JHA
+AA65;N # MYANMAR LETTER KHAMTI NYA
+AA66;N # MYANMAR LETTER KHAMTI TTA
+AA67;N # MYANMAR LETTER KHAMTI TTHA
+AA68;N # MYANMAR LETTER KHAMTI DDA
+AA69;N # MYANMAR LETTER KHAMTI DDHA
+AA6A;N # MYANMAR LETTER KHAMTI DHA
+AA6B;N # MYANMAR LETTER KHAMTI NA
+AA6C;N # MYANMAR LETTER KHAMTI SA
+AA6D;N # MYANMAR LETTER KHAMTI HA
+AA6E;N # MYANMAR LETTER KHAMTI HHA
+AA6F;N # MYANMAR LETTER KHAMTI FA
+AA70;N # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71;N # MYANMAR LETTER KHAMTI XA
+AA72;N # MYANMAR LETTER KHAMTI ZA
+AA73;N # MYANMAR LETTER KHAMTI RA
+AA74;N # MYANMAR LOGOGRAM KHAMTI OAY
+AA75;N # MYANMAR LOGOGRAM KHAMTI QN
+AA76;N # MYANMAR LOGOGRAM KHAMTI HM
+AA77;N # MYANMAR SYMBOL AITON EXCLAMATION
+AA78;N # MYANMAR SYMBOL AITON ONE
+AA79;N # MYANMAR SYMBOL AITON TWO
+AA7A;N # MYANMAR LETTER AITON RA
+AA7B;N # MYANMAR SIGN PAO KAREN TONE
+AA80;N # TAI VIET LETTER LOW KO
+AA81;N # TAI VIET LETTER HIGH KO
+AA82;N # TAI VIET LETTER LOW KHO
+AA83;N # TAI VIET LETTER HIGH KHO
+AA84;N # TAI VIET LETTER LOW KHHO
+AA85;N # TAI VIET LETTER HIGH KHHO
+AA86;N # TAI VIET LETTER LOW GO
+AA87;N # TAI VIET LETTER HIGH GO
+AA88;N # TAI VIET LETTER LOW NGO
+AA89;N # TAI VIET LETTER HIGH NGO
+AA8A;N # TAI VIET LETTER LOW CO
+AA8B;N # TAI VIET LETTER HIGH CO
+AA8C;N # TAI VIET LETTER LOW CHO
+AA8D;N # TAI VIET LETTER HIGH CHO
+AA8E;N # TAI VIET LETTER LOW SO
+AA8F;N # TAI VIET LETTER HIGH SO
+AA90;N # TAI VIET LETTER LOW NYO
+AA91;N # TAI VIET LETTER HIGH NYO
+AA92;N # TAI VIET LETTER LOW DO
+AA93;N # TAI VIET LETTER HIGH DO
+AA94;N # TAI VIET LETTER LOW TO
+AA95;N # TAI VIET LETTER HIGH TO
+AA96;N # TAI VIET LETTER LOW THO
+AA97;N # TAI VIET LETTER HIGH THO
+AA98;N # TAI VIET LETTER LOW NO
+AA99;N # TAI VIET LETTER HIGH NO
+AA9A;N # TAI VIET LETTER LOW BO
+AA9B;N # TAI VIET LETTER HIGH BO
+AA9C;N # TAI VIET LETTER LOW PO
+AA9D;N # TAI VIET LETTER HIGH PO
+AA9E;N # TAI VIET LETTER LOW PHO
+AA9F;N # TAI VIET LETTER HIGH PHO
+AAA0;N # TAI VIET LETTER LOW FO
+AAA1;N # TAI VIET LETTER HIGH FO
+AAA2;N # TAI VIET LETTER LOW MO
+AAA3;N # TAI VIET LETTER HIGH MO
+AAA4;N # TAI VIET LETTER LOW YO
+AAA5;N # TAI VIET LETTER HIGH YO
+AAA6;N # TAI VIET LETTER LOW RO
+AAA7;N # TAI VIET LETTER HIGH RO
+AAA8;N # TAI VIET LETTER LOW LO
+AAA9;N # TAI VIET LETTER HIGH LO
+AAAA;N # TAI VIET LETTER LOW VO
+AAAB;N # TAI VIET LETTER HIGH VO
+AAAC;N # TAI VIET LETTER LOW HO
+AAAD;N # TAI VIET LETTER HIGH HO
+AAAE;N # TAI VIET LETTER LOW O
+AAAF;N # TAI VIET LETTER HIGH O
+AAB0;N # TAI VIET MAI KANG
+AAB1;N # TAI VIET VOWEL AA
+AAB2;N # TAI VIET VOWEL I
+AAB3;N # TAI VIET VOWEL UE
+AAB4;N # TAI VIET VOWEL U
+AAB5;N # TAI VIET VOWEL E
+AAB6;N # TAI VIET VOWEL O
+AAB7;N # TAI VIET MAI KHIT
+AAB8;N # TAI VIET VOWEL IA
+AAB9;N # TAI VIET VOWEL UEA
+AABA;N # TAI VIET VOWEL UA
+AABB;N # TAI VIET VOWEL AUE
+AABC;N # TAI VIET VOWEL AY
+AABD;N # TAI VIET VOWEL AN
+AABE;N # TAI VIET VOWEL AM
+AABF;N # TAI VIET TONE MAI EK
+AAC0;N # TAI VIET TONE MAI NUENG
+AAC1;N # TAI VIET TONE MAI THO
+AAC2;N # TAI VIET TONE MAI SONG
+AADB;N # TAI VIET SYMBOL KON
+AADC;N # TAI VIET SYMBOL NUENG
+AADD;N # TAI VIET SYMBOL SAM
+AADE;N # TAI VIET SYMBOL HO HOI
+AADF;N # TAI VIET SYMBOL KOI KOI
+ABC0;N # MEETEI MAYEK LETTER KOK
+ABC1;N # MEETEI MAYEK LETTER SAM
+ABC2;N # MEETEI MAYEK LETTER LAI
+ABC3;N # MEETEI MAYEK LETTER MIT
+ABC4;N # MEETEI MAYEK LETTER PA
+ABC5;N # MEETEI MAYEK LETTER NA
+ABC6;N # MEETEI MAYEK LETTER CHIL
+ABC7;N # MEETEI MAYEK LETTER TIL
+ABC8;N # MEETEI MAYEK LETTER KHOU
+ABC9;N # MEETEI MAYEK LETTER NGOU
+ABCA;N # MEETEI MAYEK LETTER THOU
+ABCB;N # MEETEI MAYEK LETTER WAI
+ABCC;N # MEETEI MAYEK LETTER YANG
+ABCD;N # MEETEI MAYEK LETTER HUK
+ABCE;N # MEETEI MAYEK LETTER UN
+ABCF;N # MEETEI MAYEK LETTER I
+ABD0;N # MEETEI MAYEK LETTER PHAM
+ABD1;N # MEETEI MAYEK LETTER ATIYA
+ABD2;N # MEETEI MAYEK LETTER GOK
+ABD3;N # MEETEI MAYEK LETTER JHAM
+ABD4;N # MEETEI MAYEK LETTER RAI
+ABD5;N # MEETEI MAYEK LETTER BA
+ABD6;N # MEETEI MAYEK LETTER JIL
+ABD7;N # MEETEI MAYEK LETTER DIL
+ABD8;N # MEETEI MAYEK LETTER GHOU
+ABD9;N # MEETEI MAYEK LETTER DHOU
+ABDA;N # MEETEI MAYEK LETTER BHAM
+ABDB;N # MEETEI MAYEK LETTER KOK LONSUM
+ABDC;N # MEETEI MAYEK LETTER LAI LONSUM
+ABDD;N # MEETEI MAYEK LETTER MIT LONSUM
+ABDE;N # MEETEI MAYEK LETTER PA LONSUM
+ABDF;N # MEETEI MAYEK LETTER NA LONSUM
+ABE0;N # MEETEI MAYEK LETTER TIL LONSUM
+ABE1;N # MEETEI MAYEK LETTER NGOU LONSUM
+ABE2;N # MEETEI MAYEK LETTER I LONSUM
+ABE3;N # MEETEI MAYEK VOWEL SIGN ONAP
+ABE4;N # MEETEI MAYEK VOWEL SIGN INAP
+ABE5;N # MEETEI MAYEK VOWEL SIGN ANAP
+ABE6;N # MEETEI MAYEK VOWEL SIGN YENAP
+ABE7;N # MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8;N # MEETEI MAYEK VOWEL SIGN UNAP
+ABE9;N # MEETEI MAYEK VOWEL SIGN CHEINAP
+ABEA;N # MEETEI MAYEK VOWEL SIGN NUNG
+ABEB;N # MEETEI MAYEK CHEIKHEI
+ABEC;N # MEETEI MAYEK LUM IYEK
+ABED;N # MEETEI MAYEK APUN IYEK
+ABF0;N # MEETEI MAYEK DIGIT ZERO
+ABF1;N # MEETEI MAYEK DIGIT ONE
+ABF2;N # MEETEI MAYEK DIGIT TWO
+ABF3;N # MEETEI MAYEK DIGIT THREE
+ABF4;N # MEETEI MAYEK DIGIT FOUR
+ABF5;N # MEETEI MAYEK DIGIT FIVE
+ABF6;N # MEETEI MAYEK DIGIT SIX
+ABF7;N # MEETEI MAYEK DIGIT SEVEN
+ABF8;N # MEETEI MAYEK DIGIT EIGHT
+ABF9;N # MEETEI MAYEK DIGIT NINE
+AC00..D7A3;W # <Hangul Syllable, First>..<Hangul Syllable, Last>
+D7B0;W # HANGUL JUNGSEONG O-YEO
+D7B1;W # HANGUL JUNGSEONG O-O-I
+D7B2;W # HANGUL JUNGSEONG YO-A
+D7B3;W # HANGUL JUNGSEONG YO-AE
+D7B4;W # HANGUL JUNGSEONG YO-EO
+D7B5;W # HANGUL JUNGSEONG U-YEO
+D7B6;W # HANGUL JUNGSEONG U-I-I
+D7B7;W # HANGUL JUNGSEONG YU-AE
+D7B8;W # HANGUL JUNGSEONG YU-O
+D7B9;W # HANGUL JUNGSEONG EU-A
+D7BA;W # HANGUL JUNGSEONG EU-EO
+D7BB;W # HANGUL JUNGSEONG EU-E
+D7BC;W # HANGUL JUNGSEONG EU-O
+D7BD;W # HANGUL JUNGSEONG I-YA-O
+D7BE;W # HANGUL JUNGSEONG I-YAE
+D7BF;W # HANGUL JUNGSEONG I-YEO
+D7C0;W # HANGUL JUNGSEONG I-YE
+D7C1;W # HANGUL JUNGSEONG I-O-I
+D7C2;W # HANGUL JUNGSEONG I-YO
+D7C3;W # HANGUL JUNGSEONG I-YU
+D7C4;W # HANGUL JUNGSEONG I-I
+D7C5;W # HANGUL JUNGSEONG ARAEA-A
+D7C6;W # HANGUL JUNGSEONG ARAEA-E
+D7CB;W # HANGUL JONGSEONG NIEUN-RIEUL
+D7CC;W # HANGUL JONGSEONG NIEUN-CHIEUCH
+D7CD;W # HANGUL JONGSEONG SSANGTIKEUT
+D7CE;W # HANGUL JONGSEONG SSANGTIKEUT-PIEUP
+D7CF;W # HANGUL JONGSEONG TIKEUT-PIEUP
+D7D0;W # HANGUL JONGSEONG TIKEUT-SIOS
+D7D1;W # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
+D7D2;W # HANGUL JONGSEONG TIKEUT-CIEUC
+D7D3;W # HANGUL JONGSEONG TIKEUT-CHIEUCH
+D7D4;W # HANGUL JONGSEONG TIKEUT-THIEUTH
+D7D5;W # HANGUL JONGSEONG RIEUL-SSANGKIYEOK
+D7D6;W # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
+D7D7;W # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
+D7D8;W # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
+D7D9;W # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
+D7DA;W # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
+D7DB;W # HANGUL JONGSEONG RIEUL-YESIEUNG
+D7DC;W # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
+D7DD;W # HANGUL JONGSEONG KAPYEOUNRIEUL
+D7DE;W # HANGUL JONGSEONG MIEUM-NIEUN
+D7DF;W # HANGUL JONGSEONG MIEUM-SSANGNIEUN
+D7E0;W # HANGUL JONGSEONG SSANGMIEUM
+D7E1;W # HANGUL JONGSEONG MIEUM-PIEUP-SIOS
+D7E2;W # HANGUL JONGSEONG MIEUM-CIEUC
+D7E3;W # HANGUL JONGSEONG PIEUP-TIKEUT
+D7E4;W # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
+D7E5;W # HANGUL JONGSEONG PIEUP-MIEUM
+D7E6;W # HANGUL JONGSEONG SSANGPIEUP
+D7E7;W # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
+D7E8;W # HANGUL JONGSEONG PIEUP-CIEUC
+D7E9;W # HANGUL JONGSEONG PIEUP-CHIEUCH
+D7EA;W # HANGUL JONGSEONG SIOS-MIEUM
+D7EB;W # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
+D7EC;W # HANGUL JONGSEONG SSANGSIOS-KIYEOK
+D7ED;W # HANGUL JONGSEONG SSANGSIOS-TIKEUT
+D7EE;W # HANGUL JONGSEONG SIOS-PANSIOS
+D7EF;W # HANGUL JONGSEONG SIOS-CIEUC
+D7F0;W # HANGUL JONGSEONG SIOS-CHIEUCH
+D7F1;W # HANGUL JONGSEONG SIOS-THIEUTH
+D7F2;W # HANGUL JONGSEONG SIOS-HIEUH
+D7F3;W # HANGUL JONGSEONG PANSIOS-PIEUP
+D7F4;W # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
+D7F5;W # HANGUL JONGSEONG YESIEUNG-MIEUM
+D7F6;W # HANGUL JONGSEONG YESIEUNG-HIEUH
+D7F7;W # HANGUL JONGSEONG CIEUC-PIEUP
+D7F8;W # HANGUL JONGSEONG CIEUC-SSANGPIEUP
+D7F9;W # HANGUL JONGSEONG SSANGCIEUC
+D7FA;W # HANGUL JONGSEONG PHIEUPH-SIOS
+D7FB;W # HANGUL JONGSEONG PHIEUPH-THIEUTH
+D800..DB7F;N # <Non Private Use High Surrogate, First>..<Non Private Use High Surrogate, Last>
+DB80..DBFF;N # <Private Use High Surrogate, First>..<Private Use High Surrogate, Last>
+DC00..DFFF;N # <Low Surrogate, First>..<Low Surrogate, Last>
+E000..F8FF;A # <Private Use, First>..<Private Use, Last>
+F900;W # CJK COMPATIBILITY IDEOGRAPH-F900
+F901;W # CJK COMPATIBILITY IDEOGRAPH-F901
+F902;W # CJK COMPATIBILITY IDEOGRAPH-F902
+F903;W # CJK COMPATIBILITY IDEOGRAPH-F903
+F904;W # CJK COMPATIBILITY IDEOGRAPH-F904
+F905;W # CJK COMPATIBILITY IDEOGRAPH-F905
+F906;W # CJK COMPATIBILITY IDEOGRAPH-F906
+F907;W # CJK COMPATIBILITY IDEOGRAPH-F907
+F908;W # CJK COMPATIBILITY IDEOGRAPH-F908
+F909;W # CJK COMPATIBILITY IDEOGRAPH-F909
+F90A;W # CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B;W # CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C;W # CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D;W # CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E;W # CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F;W # CJK COMPATIBILITY IDEOGRAPH-F90F
+F910;W # CJK COMPATIBILITY IDEOGRAPH-F910
+F911;W # CJK COMPATIBILITY IDEOGRAPH-F911
+F912;W # CJK COMPATIBILITY IDEOGRAPH-F912
+F913;W # CJK COMPATIBILITY IDEOGRAPH-F913
+F914;W # CJK COMPATIBILITY IDEOGRAPH-F914
+F915;W # CJK COMPATIBILITY IDEOGRAPH-F915
+F916;W # CJK COMPATIBILITY IDEOGRAPH-F916
+F917;W # CJK COMPATIBILITY IDEOGRAPH-F917
+F918;W # CJK COMPATIBILITY IDEOGRAPH-F918
+F919;W # CJK COMPATIBILITY IDEOGRAPH-F919
+F91A;W # CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B;W # CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C;W # CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D;W # CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E;W # CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F;W # CJK COMPATIBILITY IDEOGRAPH-F91F
+F920;W # CJK COMPATIBILITY IDEOGRAPH-F920
+F921;W # CJK COMPATIBILITY IDEOGRAPH-F921
+F922;W # CJK COMPATIBILITY IDEOGRAPH-F922
+F923;W # CJK COMPATIBILITY IDEOGRAPH-F923
+F924;W # CJK COMPATIBILITY IDEOGRAPH-F924
+F925;W # CJK COMPATIBILITY IDEOGRAPH-F925
+F926;W # CJK COMPATIBILITY IDEOGRAPH-F926
+F927;W # CJK COMPATIBILITY IDEOGRAPH-F927
+F928;W # CJK COMPATIBILITY IDEOGRAPH-F928
+F929;W # CJK COMPATIBILITY IDEOGRAPH-F929
+F92A;W # CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B;W # CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C;W # CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D;W # CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E;W # CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F;W # CJK COMPATIBILITY IDEOGRAPH-F92F
+F930;W # CJK COMPATIBILITY IDEOGRAPH-F930
+F931;W # CJK COMPATIBILITY IDEOGRAPH-F931
+F932;W # CJK COMPATIBILITY IDEOGRAPH-F932
+F933;W # CJK COMPATIBILITY IDEOGRAPH-F933
+F934;W # CJK COMPATIBILITY IDEOGRAPH-F934
+F935;W # CJK COMPATIBILITY IDEOGRAPH-F935
+F936;W # CJK COMPATIBILITY IDEOGRAPH-F936
+F937;W # CJK COMPATIBILITY IDEOGRAPH-F937
+F938;W # CJK COMPATIBILITY IDEOGRAPH-F938
+F939;W # CJK COMPATIBILITY IDEOGRAPH-F939
+F93A;W # CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B;W # CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C;W # CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D;W # CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E;W # CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F;W # CJK COMPATIBILITY IDEOGRAPH-F93F
+F940;W # CJK COMPATIBILITY IDEOGRAPH-F940
+F941;W # CJK COMPATIBILITY IDEOGRAPH-F941
+F942;W # CJK COMPATIBILITY IDEOGRAPH-F942
+F943;W # CJK COMPATIBILITY IDEOGRAPH-F943
+F944;W # CJK COMPATIBILITY IDEOGRAPH-F944
+F945;W # CJK COMPATIBILITY IDEOGRAPH-F945
+F946;W # CJK COMPATIBILITY IDEOGRAPH-F946
+F947;W # CJK COMPATIBILITY IDEOGRAPH-F947
+F948;W # CJK COMPATIBILITY IDEOGRAPH-F948
+F949;W # CJK COMPATIBILITY IDEOGRAPH-F949
+F94A;W # CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B;W # CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C;W # CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D;W # CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E;W # CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F;W # CJK COMPATIBILITY IDEOGRAPH-F94F
+F950;W # CJK COMPATIBILITY IDEOGRAPH-F950
+F951;W # CJK COMPATIBILITY IDEOGRAPH-F951
+F952;W # CJK COMPATIBILITY IDEOGRAPH-F952
+F953;W # CJK COMPATIBILITY IDEOGRAPH-F953
+F954;W # CJK COMPATIBILITY IDEOGRAPH-F954
+F955;W # CJK COMPATIBILITY IDEOGRAPH-F955
+F956;W # CJK COMPATIBILITY IDEOGRAPH-F956
+F957;W # CJK COMPATIBILITY IDEOGRAPH-F957
+F958;W # CJK COMPATIBILITY IDEOGRAPH-F958
+F959;W # CJK COMPATIBILITY IDEOGRAPH-F959
+F95A;W # CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B;W # CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C;W # CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D;W # CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E;W # CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F;W # CJK COMPATIBILITY IDEOGRAPH-F95F
+F960;W # CJK COMPATIBILITY IDEOGRAPH-F960
+F961;W # CJK COMPATIBILITY IDEOGRAPH-F961
+F962;W # CJK COMPATIBILITY IDEOGRAPH-F962
+F963;W # CJK COMPATIBILITY IDEOGRAPH-F963
+F964;W # CJK COMPATIBILITY IDEOGRAPH-F964
+F965;W # CJK COMPATIBILITY IDEOGRAPH-F965
+F966;W # CJK COMPATIBILITY IDEOGRAPH-F966
+F967;W # CJK COMPATIBILITY IDEOGRAPH-F967
+F968;W # CJK COMPATIBILITY IDEOGRAPH-F968
+F969;W # CJK COMPATIBILITY IDEOGRAPH-F969
+F96A;W # CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B;W # CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C;W # CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D;W # CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E;W # CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F;W # CJK COMPATIBILITY IDEOGRAPH-F96F
+F970;W # CJK COMPATIBILITY IDEOGRAPH-F970
+F971;W # CJK COMPATIBILITY IDEOGRAPH-F971
+F972;W # CJK COMPATIBILITY IDEOGRAPH-F972
+F973;W # CJK COMPATIBILITY IDEOGRAPH-F973
+F974;W # CJK COMPATIBILITY IDEOGRAPH-F974
+F975;W # CJK COMPATIBILITY IDEOGRAPH-F975
+F976;W # CJK COMPATIBILITY IDEOGRAPH-F976
+F977;W # CJK COMPATIBILITY IDEOGRAPH-F977
+F978;W # CJK COMPATIBILITY IDEOGRAPH-F978
+F979;W # CJK COMPATIBILITY IDEOGRAPH-F979
+F97A;W # CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B;W # CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C;W # CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D;W # CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E;W # CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F;W # CJK COMPATIBILITY IDEOGRAPH-F97F
+F980;W # CJK COMPATIBILITY IDEOGRAPH-F980
+F981;W # CJK COMPATIBILITY IDEOGRAPH-F981
+F982;W # CJK COMPATIBILITY IDEOGRAPH-F982
+F983;W # CJK COMPATIBILITY IDEOGRAPH-F983
+F984;W # CJK COMPATIBILITY IDEOGRAPH-F984
+F985;W # CJK COMPATIBILITY IDEOGRAPH-F985
+F986;W # CJK COMPATIBILITY IDEOGRAPH-F986
+F987;W # CJK COMPATIBILITY IDEOGRAPH-F987
+F988;W # CJK COMPATIBILITY IDEOGRAPH-F988
+F989;W # CJK COMPATIBILITY IDEOGRAPH-F989
+F98A;W # CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B;W # CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C;W # CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D;W # CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E;W # CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F;W # CJK COMPATIBILITY IDEOGRAPH-F98F
+F990;W # CJK COMPATIBILITY IDEOGRAPH-F990
+F991;W # CJK COMPATIBILITY IDEOGRAPH-F991
+F992;W # CJK COMPATIBILITY IDEOGRAPH-F992
+F993;W # CJK COMPATIBILITY IDEOGRAPH-F993
+F994;W # CJK COMPATIBILITY IDEOGRAPH-F994
+F995;W # CJK COMPATIBILITY IDEOGRAPH-F995
+F996;W # CJK COMPATIBILITY IDEOGRAPH-F996
+F997;W # CJK COMPATIBILITY IDEOGRAPH-F997
+F998;W # CJK COMPATIBILITY IDEOGRAPH-F998
+F999;W # CJK COMPATIBILITY IDEOGRAPH-F999
+F99A;W # CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B;W # CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C;W # CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D;W # CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E;W # CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F;W # CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0;W # CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1;W # CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2;W # CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3;W # CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4;W # CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5;W # CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6;W # CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7;W # CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8;W # CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9;W # CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA;W # CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB;W # CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC;W # CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD;W # CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE;W # CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF;W # CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0;W # CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1;W # CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2;W # CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3;W # CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4;W # CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5;W # CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6;W # CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7;W # CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8;W # CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9;W # CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA;W # CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB;W # CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC;W # CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD;W # CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE;W # CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF;W # CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0;W # CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1;W # CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2;W # CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3;W # CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4;W # CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5;W # CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6;W # CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7;W # CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8;W # CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9;W # CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA;W # CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB;W # CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC;W # CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD;W # CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE;W # CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF;W # CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0;W # CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1;W # CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2;W # CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3;W # CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4;W # CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5;W # CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6;W # CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7;W # CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8;W # CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9;W # CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA;W # CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB;W # CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC;W # CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD;W # CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE;W # CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF;W # CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0;W # CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1;W # CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2;W # CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3;W # CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4;W # CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5;W # CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6;W # CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7;W # CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8;W # CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9;W # CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA;W # CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB;W # CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC;W # CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED;W # CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE;W # CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF;W # CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0;W # CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1;W # CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2;W # CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3;W # CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4;W # CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5;W # CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6;W # CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7;W # CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8;W # CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9;W # CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA;W # CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB;W # CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC;W # CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD;W # CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE;W # CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF;W # CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00;W # CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01;W # CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02;W # CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03;W # CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04;W # CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05;W # CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06;W # CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07;W # CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08;W # CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09;W # CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A;W # CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B;W # CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C;W # CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D;W # CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA0E;W # CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F;W # CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA10;W # CJK COMPATIBILITY IDEOGRAPH-FA10
+FA11;W # CJK COMPATIBILITY IDEOGRAPH-FA11
+FA12;W # CJK COMPATIBILITY IDEOGRAPH-FA12
+FA13;W # CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14;W # CJK COMPATIBILITY IDEOGRAPH-FA14
+FA15;W # CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16;W # CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17;W # CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18;W # CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19;W # CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A;W # CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B;W # CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C;W # CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D;W # CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E;W # CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA1F;W # CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA20;W # CJK COMPATIBILITY IDEOGRAPH-FA20
+FA21;W # CJK COMPATIBILITY IDEOGRAPH-FA21
+FA22;W # CJK COMPATIBILITY IDEOGRAPH-FA22
+FA23;W # CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24;W # CJK COMPATIBILITY IDEOGRAPH-FA24
+FA25;W # CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26;W # CJK COMPATIBILITY IDEOGRAPH-FA26
+FA27;W # CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28;W # CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29;W # CJK COMPATIBILITY IDEOGRAPH-FA29
+FA2A;W # CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B;W # CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C;W # CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D;W # CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA2E..FA2F;W # <reserved-FA2E>..<reserved-FA2F>
+FA30;W # CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31;W # CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32;W # CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33;W # CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34;W # CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35;W # CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36;W # CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37;W # CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38;W # CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39;W # CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A;W # CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B;W # CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C;W # CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D;W # CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E;W # CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F;W # CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40;W # CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41;W # CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42;W # CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43;W # CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44;W # CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45;W # CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46;W # CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47;W # CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48;W # CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49;W # CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A;W # CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B;W # CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C;W # CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D;W # CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E;W # CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F;W # CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50;W # CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51;W # CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52;W # CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53;W # CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54;W # CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55;W # CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56;W # CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57;W # CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58;W # CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59;W # CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A;W # CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B;W # CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C;W # CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D;W # CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E;W # CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F;W # CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60;W # CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61;W # CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62;W # CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63;W # CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64;W # CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65;W # CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66;W # CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67;W # CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68;W # CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69;W # CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A;W # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA6B;W # CJK COMPATIBILITY IDEOGRAPH-FA6B
+FA6C;W # CJK COMPATIBILITY IDEOGRAPH-FA6C
+FA6D;W # CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA6E..FA6F;W # <reserved-FA6E>..<reserved-FA6F>
+FA70;W # CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71;W # CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72;W # CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73;W # CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74;W # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75;W # CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76;W # CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77;W # CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78;W # CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79;W # CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A;W # CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B;W # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C;W # CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D;W # CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E;W # CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F;W # CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80;W # CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81;W # CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82;W # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83;W # CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84;W # CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85;W # CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86;W # CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87;W # CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88;W # CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89;W # CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A;W # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B;W # CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C;W # CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D;W # CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E;W # CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F;W # CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90;W # CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91;W # CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92;W # CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93;W # CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94;W # CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95;W # CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96;W # CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97;W # CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98;W # CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99;W # CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A;W # CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B;W # CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C;W # CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D;W # CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E;W # CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F;W # CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0;W # CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1;W # CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2;W # CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3;W # CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4;W # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5;W # CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6;W # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7;W # CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8;W # CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9;W # CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA;W # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB;W # CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC;W # CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD;W # CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE;W # CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF;W # CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0;W # CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1;W # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2;W # CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3;W # CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4;W # CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5;W # CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6;W # CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7;W # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8;W # CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9;W # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA;W # CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB;W # CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC;W # CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD;W # CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE;W # CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF;W # CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0;W # CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1;W # CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2;W # CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3;W # CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4;W # CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5;W # CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6;W # CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7;W # CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8;W # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9;W # CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA;W # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB;W # CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC;W # CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD;W # CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE;W # CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF;W # CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0;W # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1;W # CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2;W # CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3;W # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4;W # CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5;W # CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6;W # CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7;W # CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8;W # CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9;W # CJK COMPATIBILITY IDEOGRAPH-FAD9
+FADA..FAFF;W # <reserved-FADA>..<reserved-FAFF>
+FB00;N # LATIN SMALL LIGATURE FF
+FB01;N # LATIN SMALL LIGATURE FI
+FB02;N # LATIN SMALL LIGATURE FL
+FB03;N # LATIN SMALL LIGATURE FFI
+FB04;N # LATIN SMALL LIGATURE FFL
+FB05;N # LATIN SMALL LIGATURE LONG S T
+FB06;N # LATIN SMALL LIGATURE ST
+FB13;N # ARMENIAN SMALL LIGATURE MEN NOW
+FB14;N # ARMENIAN SMALL LIGATURE MEN ECH
+FB15;N # ARMENIAN SMALL LIGATURE MEN INI
+FB16;N # ARMENIAN SMALL LIGATURE VEW NOW
+FB17;N # ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;N # HEBREW LETTER YOD WITH HIRIQ
+FB1E;N # HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F;N # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20;N # HEBREW LETTER ALTERNATIVE AYIN
+FB21;N # HEBREW LETTER WIDE ALEF
+FB22;N # HEBREW LETTER WIDE DALET
+FB23;N # HEBREW LETTER WIDE HE
+FB24;N # HEBREW LETTER WIDE KAF
+FB25;N # HEBREW LETTER WIDE LAMED
+FB26;N # HEBREW LETTER WIDE FINAL MEM
+FB27;N # HEBREW LETTER WIDE RESH
+FB28;N # HEBREW LETTER WIDE TAV
+FB29;N # HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A;N # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B;N # HEBREW LETTER SHIN WITH SIN DOT
+FB2C;N # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D;N # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E;N # HEBREW LETTER ALEF WITH PATAH
+FB2F;N # HEBREW LETTER ALEF WITH QAMATS
+FB30;N # HEBREW LETTER ALEF WITH MAPIQ
+FB31;N # HEBREW LETTER BET WITH DAGESH
+FB32;N # HEBREW LETTER GIMEL WITH DAGESH
+FB33;N # HEBREW LETTER DALET WITH DAGESH
+FB34;N # HEBREW LETTER HE WITH MAPIQ
+FB35;N # HEBREW LETTER VAV WITH DAGESH
+FB36;N # HEBREW LETTER ZAYIN WITH DAGESH
+FB38;N # HEBREW LETTER TET WITH DAGESH
+FB39;N # HEBREW LETTER YOD WITH DAGESH
+FB3A;N # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B;N # HEBREW LETTER KAF WITH DAGESH
+FB3C;N # HEBREW LETTER LAMED WITH DAGESH
+FB3E;N # HEBREW LETTER MEM WITH DAGESH
+FB40;N # HEBREW LETTER NUN WITH DAGESH
+FB41;N # HEBREW LETTER SAMEKH WITH DAGESH
+FB43;N # HEBREW LETTER FINAL PE WITH DAGESH
+FB44;N # HEBREW LETTER PE WITH DAGESH
+FB46;N # HEBREW LETTER TSADI WITH DAGESH
+FB47;N # HEBREW LETTER QOF WITH DAGESH
+FB48;N # HEBREW LETTER RESH WITH DAGESH
+FB49;N # HEBREW LETTER SHIN WITH DAGESH
+FB4A;N # HEBREW LETTER TAV WITH DAGESH
+FB4B;N # HEBREW LETTER VAV WITH HOLAM
+FB4C;N # HEBREW LETTER BET WITH RAFE
+FB4D;N # HEBREW LETTER KAF WITH RAFE
+FB4E;N # HEBREW LETTER PE WITH RAFE
+FB4F;N # HEBREW LIGATURE ALEF LAMED
+FB50;N # ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51;N # ARABIC LETTER ALEF WASLA FINAL FORM
+FB52;N # ARABIC LETTER BEEH ISOLATED FORM
+FB53;N # ARABIC LETTER BEEH FINAL FORM
+FB54;N # ARABIC LETTER BEEH INITIAL FORM
+FB55;N # ARABIC LETTER BEEH MEDIAL FORM
+FB56;N # ARABIC LETTER PEH ISOLATED FORM
+FB57;N # ARABIC LETTER PEH FINAL FORM
+FB58;N # ARABIC LETTER PEH INITIAL FORM
+FB59;N # ARABIC LETTER PEH MEDIAL FORM
+FB5A;N # ARABIC LETTER BEHEH ISOLATED FORM
+FB5B;N # ARABIC LETTER BEHEH FINAL FORM
+FB5C;N # ARABIC LETTER BEHEH INITIAL FORM
+FB5D;N # ARABIC LETTER BEHEH MEDIAL FORM
+FB5E;N # ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F;N # ARABIC LETTER TTEHEH FINAL FORM
+FB60;N # ARABIC LETTER TTEHEH INITIAL FORM
+FB61;N # ARABIC LETTER TTEHEH MEDIAL FORM
+FB62;N # ARABIC LETTER TEHEH ISOLATED FORM
+FB63;N # ARABIC LETTER TEHEH FINAL FORM
+FB64;N # ARABIC LETTER TEHEH INITIAL FORM
+FB65;N # ARABIC LETTER TEHEH MEDIAL FORM
+FB66;N # ARABIC LETTER TTEH ISOLATED FORM
+FB67;N # ARABIC LETTER TTEH FINAL FORM
+FB68;N # ARABIC LETTER TTEH INITIAL FORM
+FB69;N # ARABIC LETTER TTEH MEDIAL FORM
+FB6A;N # ARABIC LETTER VEH ISOLATED FORM
+FB6B;N # ARABIC LETTER VEH FINAL FORM
+FB6C;N # ARABIC LETTER VEH INITIAL FORM
+FB6D;N # ARABIC LETTER VEH MEDIAL FORM
+FB6E;N # ARABIC LETTER PEHEH ISOLATED FORM
+FB6F;N # ARABIC LETTER PEHEH FINAL FORM
+FB70;N # ARABIC LETTER PEHEH INITIAL FORM
+FB71;N # ARABIC LETTER PEHEH MEDIAL FORM
+FB72;N # ARABIC LETTER DYEH ISOLATED FORM
+FB73;N # ARABIC LETTER DYEH FINAL FORM
+FB74;N # ARABIC LETTER DYEH INITIAL FORM
+FB75;N # ARABIC LETTER DYEH MEDIAL FORM
+FB76;N # ARABIC LETTER NYEH ISOLATED FORM
+FB77;N # ARABIC LETTER NYEH FINAL FORM
+FB78;N # ARABIC LETTER NYEH INITIAL FORM
+FB79;N # ARABIC LETTER NYEH MEDIAL FORM
+FB7A;N # ARABIC LETTER TCHEH ISOLATED FORM
+FB7B;N # ARABIC LETTER TCHEH FINAL FORM
+FB7C;N # ARABIC LETTER TCHEH INITIAL FORM
+FB7D;N # ARABIC LETTER TCHEH MEDIAL FORM
+FB7E;N # ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F;N # ARABIC LETTER TCHEHEH FINAL FORM
+FB80;N # ARABIC LETTER TCHEHEH INITIAL FORM
+FB81;N # ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82;N # ARABIC LETTER DDAHAL ISOLATED FORM
+FB83;N # ARABIC LETTER DDAHAL FINAL FORM
+FB84;N # ARABIC LETTER DAHAL ISOLATED FORM
+FB85;N # ARABIC LETTER DAHAL FINAL FORM
+FB86;N # ARABIC LETTER DUL ISOLATED FORM
+FB87;N # ARABIC LETTER DUL FINAL FORM
+FB88;N # ARABIC LETTER DDAL ISOLATED FORM
+FB89;N # ARABIC LETTER DDAL FINAL FORM
+FB8A;N # ARABIC LETTER JEH ISOLATED FORM
+FB8B;N # ARABIC LETTER JEH FINAL FORM
+FB8C;N # ARABIC LETTER RREH ISOLATED FORM
+FB8D;N # ARABIC LETTER RREH FINAL FORM
+FB8E;N # ARABIC LETTER KEHEH ISOLATED FORM
+FB8F;N # ARABIC LETTER KEHEH FINAL FORM
+FB90;N # ARABIC LETTER KEHEH INITIAL FORM
+FB91;N # ARABIC LETTER KEHEH MEDIAL FORM
+FB92;N # ARABIC LETTER GAF ISOLATED FORM
+FB93;N # ARABIC LETTER GAF FINAL FORM
+FB94;N # ARABIC LETTER GAF INITIAL FORM
+FB95;N # ARABIC LETTER GAF MEDIAL FORM
+FB96;N # ARABIC LETTER GUEH ISOLATED FORM
+FB97;N # ARABIC LETTER GUEH FINAL FORM
+FB98;N # ARABIC LETTER GUEH INITIAL FORM
+FB99;N # ARABIC LETTER GUEH MEDIAL FORM
+FB9A;N # ARABIC LETTER NGOEH ISOLATED FORM
+FB9B;N # ARABIC LETTER NGOEH FINAL FORM
+FB9C;N # ARABIC LETTER NGOEH INITIAL FORM
+FB9D;N # ARABIC LETTER NGOEH MEDIAL FORM
+FB9E;N # ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F;N # ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0;N # ARABIC LETTER RNOON ISOLATED FORM
+FBA1;N # ARABIC LETTER RNOON FINAL FORM
+FBA2;N # ARABIC LETTER RNOON INITIAL FORM
+FBA3;N # ARABIC LETTER RNOON MEDIAL FORM
+FBA4;N # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5;N # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6;N # ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7;N # ARABIC LETTER HEH GOAL FINAL FORM
+FBA8;N # ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9;N # ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA;N # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB;N # ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC;N # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD;N # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE;N # ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF;N # ARABIC LETTER YEH BARREE FINAL FORM
+FBB0;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3;N # ARABIC LETTER NG ISOLATED FORM
+FBD4;N # ARABIC LETTER NG FINAL FORM
+FBD5;N # ARABIC LETTER NG INITIAL FORM
+FBD6;N # ARABIC LETTER NG MEDIAL FORM
+FBD7;N # ARABIC LETTER U ISOLATED FORM
+FBD8;N # ARABIC LETTER U FINAL FORM
+FBD9;N # ARABIC LETTER OE ISOLATED FORM
+FBDA;N # ARABIC LETTER OE FINAL FORM
+FBDB;N # ARABIC LETTER YU ISOLATED FORM
+FBDC;N # ARABIC LETTER YU FINAL FORM
+FBDD;N # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE;N # ARABIC LETTER VE ISOLATED FORM
+FBDF;N # ARABIC LETTER VE FINAL FORM
+FBE0;N # ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1;N # ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2;N # ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3;N # ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4;N # ARABIC LETTER E ISOLATED FORM
+FBE5;N # ARABIC LETTER E FINAL FORM
+FBE6;N # ARABIC LETTER E INITIAL FORM
+FBE7;N # ARABIC LETTER E MEDIAL FORM
+FBE8;N # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9;N # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC;N # ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD;N # ARABIC LETTER FARSI YEH FINAL FORM
+FBFE;N # ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF;N # ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05;N # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06;N # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07;N # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08;N # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09;N # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A;N # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B;N # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C;N # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D;N # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E;N # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F;N # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10;N # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11;N # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12;N # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13;N # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14;N # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15;N # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16;N # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17;N # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18;N # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19;N # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A;N # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B;N # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C;N # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D;N # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E;N # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F;N # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20;N # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21;N # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22;N # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23;N # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24;N # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25;N # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26;N # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27;N # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28;N # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29;N # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A;N # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B;N # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C;N # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D;N # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E;N # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F;N # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30;N # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31;N # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32;N # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33;N # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34;N # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35;N # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36;N # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37;N # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38;N # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39;N # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A;N # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B;N # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C;N # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D;N # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E;N # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F;N # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40;N # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41;N # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42;N # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43;N # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44;N # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45;N # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46;N # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47;N # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48;N # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49;N # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A;N # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B;N # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C;N # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D;N # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E;N # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F;N # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50;N # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51;N # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52;N # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53;N # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54;N # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55;N # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56;N # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57;N # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58;N # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59;N # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A;N # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B;N # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C;N # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D;N # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E;N # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F;N # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60;N # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61;N # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62;N # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63;N # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A;N # ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B;N # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C;N # ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D;N # ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E;N # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F;N # ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70;N # ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71;N # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72;N # ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73;N # ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74;N # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75;N # ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76;N # ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77;N # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78;N # ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79;N # ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A;N # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B;N # ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C;N # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D;N # ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E;N # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F;N # ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80;N # ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81;N # ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82;N # ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83;N # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84;N # ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85;N # ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86;N # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87;N # ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88;N # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89;N # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A;N # ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B;N # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C;N # ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D;N # ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E;N # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F;N # ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90;N # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91;N # ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92;N # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93;N # ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94;N # ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95;N # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96;N # ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C;N # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D;N # ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E;N # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F;N # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0;N # ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1;N # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2;N # ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3;N # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4;N # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5;N # ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6;N # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7;N # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8;N # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9;N # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA;N # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB;N # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC;N # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD;N # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE;N # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF;N # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0;N # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1;N # ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2;N # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3;N # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4;N # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5;N # ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6;N # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7;N # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8;N # ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9;N # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA;N # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB;N # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC;N # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD;N # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE;N # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF;N # ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0;N # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1;N # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2;N # ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3;N # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4;N # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5;N # ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6;N # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7;N # ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8;N # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9;N # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA;N # ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB;N # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC;N # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD;N # ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE;N # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF;N # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0;N # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1;N # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2;N # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3;N # ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4;N # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5;N # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6;N # ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7;N # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8;N # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9;N # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA;N # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB;N # ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC;N # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD;N # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE;N # ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1;N # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2;N # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3;N # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4;N # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5;N # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6;N # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7;N # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8;N # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9;N # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA;N # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB;N # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC;N # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED;N # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE;N # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF;N # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0;N # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1;N # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2;N # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3;N # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4;N # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5;N # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6;N # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7;N # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8;N # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9;N # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA;N # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB;N # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC;N # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD;N # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE;N # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF;N # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00;N # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01;N # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02;N # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03;N # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04;N # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05;N # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06;N # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07;N # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08;N # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09;N # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A;N # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B;N # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C;N # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D;N # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E;N # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F;N # ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10;N # ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11;N # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12;N # ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13;N # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14;N # ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15;N # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16;N # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17;N # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18;N # ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19;N # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A;N # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B;N # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C;N # ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D;N # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E;N # ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F;N # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20;N # ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21;N # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22;N # ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23;N # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24;N # ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25;N # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26;N # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27;N # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28;N # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29;N # ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A;N # ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B;N # ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C;N # ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D;N # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E;N # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F;N # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30;N # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31;N # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32;N # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33;N # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34;N # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35;N # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36;N # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37;N # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38;N # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39;N # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A;N # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B;N # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C;N # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D;N # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E;N # ORNATE LEFT PARENTHESIS
+FD3F;N # ORNATE RIGHT PARENTHESIS
+FD50;N # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51;N # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52;N # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53;N # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54;N # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55;N # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56;N # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57;N # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58;N # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59;N # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A;N # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B;N # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C;N # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D;N # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E;N # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F;N # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60;N # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61;N # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62;N # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63;N # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64;N # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65;N # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66;N # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67;N # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68;N # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69;N # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A;N # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B;N # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C;N # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D;N # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E;N # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F;N # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70;N # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71;N # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72;N # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73;N # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74;N # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75;N # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76;N # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77;N # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78;N # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79;N # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A;N # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B;N # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C;N # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D;N # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E;N # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F;N # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80;N # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81;N # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82;N # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83;N # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84;N # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85;N # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86;N # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87;N # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88;N # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89;N # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A;N # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B;N # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C;N # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D;N # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E;N # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F;N # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92;N # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93;N # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94;N # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95;N # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96;N # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97;N # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98;N # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99;N # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A;N # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B;N # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C;N # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D;N # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E;N # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F;N # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0;N # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1;N # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2;N # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3;N # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4;N # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5;N # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6;N # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7;N # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8;N # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9;N # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA;N # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB;N # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC;N # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD;N # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE;N # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF;N # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0;N # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1;N # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2;N # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3;N # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4;N # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5;N # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6;N # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7;N # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8;N # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9;N # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA;N # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB;N # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC;N # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD;N # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE;N # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF;N # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0;N # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1;N # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2;N # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3;N # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4;N # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5;N # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6;N # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7;N # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0;N # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1;N # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2;N # ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3;N # ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4;N # ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5;N # ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6;N # ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7;N # ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8;N # ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9;N # ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA;N # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB;N # ARABIC LIGATURE JALLAJALALOUHOU
+FDFC;N # RIAL SIGN
+FDFD;N # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00;A # VARIATION SELECTOR-1
+FE01;A # VARIATION SELECTOR-2
+FE02;A # VARIATION SELECTOR-3
+FE03;A # VARIATION SELECTOR-4
+FE04;A # VARIATION SELECTOR-5
+FE05;A # VARIATION SELECTOR-6
+FE06;A # VARIATION SELECTOR-7
+FE07;A # VARIATION SELECTOR-8
+FE08;A # VARIATION SELECTOR-9
+FE09;A # VARIATION SELECTOR-10
+FE0A;A # VARIATION SELECTOR-11
+FE0B;A # VARIATION SELECTOR-12
+FE0C;A # VARIATION SELECTOR-13
+FE0D;A # VARIATION SELECTOR-14
+FE0E;A # VARIATION SELECTOR-15
+FE0F;A # VARIATION SELECTOR-16
+FE10;W # PRESENTATION FORM FOR VERTICAL COMMA
+FE11;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13;W # PRESENTATION FORM FOR VERTICAL COLON
+FE14;W # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15;W # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16;W # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;W # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;W # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;W # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20;N # COMBINING LIGATURE LEFT HALF
+FE21;N # COMBINING LIGATURE RIGHT HALF
+FE22;N # COMBINING DOUBLE TILDE LEFT HALF
+FE23;N # COMBINING DOUBLE TILDE RIGHT HALF
+FE24;N # COMBINING MACRON LEFT HALF
+FE25;N # COMBINING MACRON RIGHT HALF
+FE26;N # COMBINING CONJOINING MACRON
+FE30;W # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31;W # PRESENTATION FORM FOR VERTICAL EM DASH
+FE32;W # PRESENTATION FORM FOR VERTICAL EN DASH
+FE33;W # PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34;W # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;W # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;W # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;W # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;W # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;W # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;W # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;W # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;W # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;W # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;W # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;W # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;W # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;W # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;W # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;W # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;W # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45;W # SESAME DOT
+FE46;W # WHITE SESAME DOT
+FE47;W # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48;W # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49;W # DASHED OVERLINE
+FE4A;W # CENTRELINE OVERLINE
+FE4B;W # WAVY OVERLINE
+FE4C;W # DOUBLE WAVY OVERLINE
+FE4D;W # DASHED LOW LINE
+FE4E;W # CENTRELINE LOW LINE
+FE4F;W # WAVY LOW LINE
+FE50;W # SMALL COMMA
+FE51;W # SMALL IDEOGRAPHIC COMMA
+FE52;W # SMALL FULL STOP
+FE54;W # SMALL SEMICOLON
+FE55;W # SMALL COLON
+FE56;W # SMALL QUESTION MARK
+FE57;W # SMALL EXCLAMATION MARK
+FE58;W # SMALL EM DASH
+FE59;W # SMALL LEFT PARENTHESIS
+FE5A;W # SMALL RIGHT PARENTHESIS
+FE5B;W # SMALL LEFT CURLY BRACKET
+FE5C;W # SMALL RIGHT CURLY BRACKET
+FE5D;W # SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;W # SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F;W # SMALL NUMBER SIGN
+FE60;W # SMALL AMPERSAND
+FE61;W # SMALL ASTERISK
+FE62;W # SMALL PLUS SIGN
+FE63;W # SMALL HYPHEN-MINUS
+FE64;W # SMALL LESS-THAN SIGN
+FE65;W # SMALL GREATER-THAN SIGN
+FE66;W # SMALL EQUALS SIGN
+FE68;W # SMALL REVERSE SOLIDUS
+FE69;W # SMALL DOLLAR SIGN
+FE6A;W # SMALL PERCENT SIGN
+FE6B;W # SMALL COMMERCIAL AT
+FE70;N # ARABIC FATHATAN ISOLATED FORM
+FE71;N # ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72;N # ARABIC DAMMATAN ISOLATED FORM
+FE73;N # ARABIC TAIL FRAGMENT
+FE74;N # ARABIC KASRATAN ISOLATED FORM
+FE76;N # ARABIC FATHA ISOLATED FORM
+FE77;N # ARABIC FATHA MEDIAL FORM
+FE78;N # ARABIC DAMMA ISOLATED FORM
+FE79;N # ARABIC DAMMA MEDIAL FORM
+FE7A;N # ARABIC KASRA ISOLATED FORM
+FE7B;N # ARABIC KASRA MEDIAL FORM
+FE7C;N # ARABIC SHADDA ISOLATED FORM
+FE7D;N # ARABIC SHADDA MEDIAL FORM
+FE7E;N # ARABIC SUKUN ISOLATED FORM
+FE7F;N # ARABIC SUKUN MEDIAL FORM
+FE80;N # ARABIC LETTER HAMZA ISOLATED FORM
+FE81;N # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82;N # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83;N # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84;N # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85;N # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86;N # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87;N # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88;N # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89;N # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A;N # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B;N # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C;N # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D;N # ARABIC LETTER ALEF ISOLATED FORM
+FE8E;N # ARABIC LETTER ALEF FINAL FORM
+FE8F;N # ARABIC LETTER BEH ISOLATED FORM
+FE90;N # ARABIC LETTER BEH FINAL FORM
+FE91;N # ARABIC LETTER BEH INITIAL FORM
+FE92;N # ARABIC LETTER BEH MEDIAL FORM
+FE93;N # ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94;N # ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95;N # ARABIC LETTER TEH ISOLATED FORM
+FE96;N # ARABIC LETTER TEH FINAL FORM
+FE97;N # ARABIC LETTER TEH INITIAL FORM
+FE98;N # ARABIC LETTER TEH MEDIAL FORM
+FE99;N # ARABIC LETTER THEH ISOLATED FORM
+FE9A;N # ARABIC LETTER THEH FINAL FORM
+FE9B;N # ARABIC LETTER THEH INITIAL FORM
+FE9C;N # ARABIC LETTER THEH MEDIAL FORM
+FE9D;N # ARABIC LETTER JEEM ISOLATED FORM
+FE9E;N # ARABIC LETTER JEEM FINAL FORM
+FE9F;N # ARABIC LETTER JEEM INITIAL FORM
+FEA0;N # ARABIC LETTER JEEM MEDIAL FORM
+FEA1;N # ARABIC LETTER HAH ISOLATED FORM
+FEA2;N # ARABIC LETTER HAH FINAL FORM
+FEA3;N # ARABIC LETTER HAH INITIAL FORM
+FEA4;N # ARABIC LETTER HAH MEDIAL FORM
+FEA5;N # ARABIC LETTER KHAH ISOLATED FORM
+FEA6;N # ARABIC LETTER KHAH FINAL FORM
+FEA7;N # ARABIC LETTER KHAH INITIAL FORM
+FEA8;N # ARABIC LETTER KHAH MEDIAL FORM
+FEA9;N # ARABIC LETTER DAL ISOLATED FORM
+FEAA;N # ARABIC LETTER DAL FINAL FORM
+FEAB;N # ARABIC LETTER THAL ISOLATED FORM
+FEAC;N # ARABIC LETTER THAL FINAL FORM
+FEAD;N # ARABIC LETTER REH ISOLATED FORM
+FEAE;N # ARABIC LETTER REH FINAL FORM
+FEAF;N # ARABIC LETTER ZAIN ISOLATED FORM
+FEB0;N # ARABIC LETTER ZAIN FINAL FORM
+FEB1;N # ARABIC LETTER SEEN ISOLATED FORM
+FEB2;N # ARABIC LETTER SEEN FINAL FORM
+FEB3;N # ARABIC LETTER SEEN INITIAL FORM
+FEB4;N # ARABIC LETTER SEEN MEDIAL FORM
+FEB5;N # ARABIC LETTER SHEEN ISOLATED FORM
+FEB6;N # ARABIC LETTER SHEEN FINAL FORM
+FEB7;N # ARABIC LETTER SHEEN INITIAL FORM
+FEB8;N # ARABIC LETTER SHEEN MEDIAL FORM
+FEB9;N # ARABIC LETTER SAD ISOLATED FORM
+FEBA;N # ARABIC LETTER SAD FINAL FORM
+FEBB;N # ARABIC LETTER SAD INITIAL FORM
+FEBC;N # ARABIC LETTER SAD MEDIAL FORM
+FEBD;N # ARABIC LETTER DAD ISOLATED FORM
+FEBE;N # ARABIC LETTER DAD FINAL FORM
+FEBF;N # ARABIC LETTER DAD INITIAL FORM
+FEC0;N # ARABIC LETTER DAD MEDIAL FORM
+FEC1;N # ARABIC LETTER TAH ISOLATED FORM
+FEC2;N # ARABIC LETTER TAH FINAL FORM
+FEC3;N # ARABIC LETTER TAH INITIAL FORM
+FEC4;N # ARABIC LETTER TAH MEDIAL FORM
+FEC5;N # ARABIC LETTER ZAH ISOLATED FORM
+FEC6;N # ARABIC LETTER ZAH FINAL FORM
+FEC7;N # ARABIC LETTER ZAH INITIAL FORM
+FEC8;N # ARABIC LETTER ZAH MEDIAL FORM
+FEC9;N # ARABIC LETTER AIN ISOLATED FORM
+FECA;N # ARABIC LETTER AIN FINAL FORM
+FECB;N # ARABIC LETTER AIN INITIAL FORM
+FECC;N # ARABIC LETTER AIN MEDIAL FORM
+FECD;N # ARABIC LETTER GHAIN ISOLATED FORM
+FECE;N # ARABIC LETTER GHAIN FINAL FORM
+FECF;N # ARABIC LETTER GHAIN INITIAL FORM
+FED0;N # ARABIC LETTER GHAIN MEDIAL FORM
+FED1;N # ARABIC LETTER FEH ISOLATED FORM
+FED2;N # ARABIC LETTER FEH FINAL FORM
+FED3;N # ARABIC LETTER FEH INITIAL FORM
+FED4;N # ARABIC LETTER FEH MEDIAL FORM
+FED5;N # ARABIC LETTER QAF ISOLATED FORM
+FED6;N # ARABIC LETTER QAF FINAL FORM
+FED7;N # ARABIC LETTER QAF INITIAL FORM
+FED8;N # ARABIC LETTER QAF MEDIAL FORM
+FED9;N # ARABIC LETTER KAF ISOLATED FORM
+FEDA;N # ARABIC LETTER KAF FINAL FORM
+FEDB;N # ARABIC LETTER KAF INITIAL FORM
+FEDC;N # ARABIC LETTER KAF MEDIAL FORM
+FEDD;N # ARABIC LETTER LAM ISOLATED FORM
+FEDE;N # ARABIC LETTER LAM FINAL FORM
+FEDF;N # ARABIC LETTER LAM INITIAL FORM
+FEE0;N # ARABIC LETTER LAM MEDIAL FORM
+FEE1;N # ARABIC LETTER MEEM ISOLATED FORM
+FEE2;N # ARABIC LETTER MEEM FINAL FORM
+FEE3;N # ARABIC LETTER MEEM INITIAL FORM
+FEE4;N # ARABIC LETTER MEEM MEDIAL FORM
+FEE5;N # ARABIC LETTER NOON ISOLATED FORM
+FEE6;N # ARABIC LETTER NOON FINAL FORM
+FEE7;N # ARABIC LETTER NOON INITIAL FORM
+FEE8;N # ARABIC LETTER NOON MEDIAL FORM
+FEE9;N # ARABIC LETTER HEH ISOLATED FORM
+FEEA;N # ARABIC LETTER HEH FINAL FORM
+FEEB;N # ARABIC LETTER HEH INITIAL FORM
+FEEC;N # ARABIC LETTER HEH MEDIAL FORM
+FEED;N # ARABIC LETTER WAW ISOLATED FORM
+FEEE;N # ARABIC LETTER WAW FINAL FORM
+FEEF;N # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0;N # ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1;N # ARABIC LETTER YEH ISOLATED FORM
+FEF2;N # ARABIC LETTER YEH FINAL FORM
+FEF3;N # ARABIC LETTER YEH INITIAL FORM
+FEF4;N # ARABIC LETTER YEH MEDIAL FORM
+FEF5;N # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6;N # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB;N # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC;N # ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF;N # ZERO WIDTH NO-BREAK SPACE
+FF01;F # FULLWIDTH EXCLAMATION MARK
+FF02;F # FULLWIDTH QUOTATION MARK
+FF03;F # FULLWIDTH NUMBER SIGN
+FF04;F # FULLWIDTH DOLLAR SIGN
+FF05;F # FULLWIDTH PERCENT SIGN
+FF06;F # FULLWIDTH AMPERSAND
+FF07;F # FULLWIDTH APOSTROPHE
+FF08;F # FULLWIDTH LEFT PARENTHESIS
+FF09;F # FULLWIDTH RIGHT PARENTHESIS
+FF0A;F # FULLWIDTH ASTERISK
+FF0B;F # FULLWIDTH PLUS SIGN
+FF0C;F # FULLWIDTH COMMA
+FF0D;F # FULLWIDTH HYPHEN-MINUS
+FF0E;F # FULLWIDTH FULL STOP
+FF0F;F # FULLWIDTH SOLIDUS
+FF10;F # FULLWIDTH DIGIT ZERO
+FF11;F # FULLWIDTH DIGIT ONE
+FF12;F # FULLWIDTH DIGIT TWO
+FF13;F # FULLWIDTH DIGIT THREE
+FF14;F # FULLWIDTH DIGIT FOUR
+FF15;F # FULLWIDTH DIGIT FIVE
+FF16;F # FULLWIDTH DIGIT SIX
+FF17;F # FULLWIDTH DIGIT SEVEN
+FF18;F # FULLWIDTH DIGIT EIGHT
+FF19;F # FULLWIDTH DIGIT NINE
+FF1A;F # FULLWIDTH COLON
+FF1B;F # FULLWIDTH SEMICOLON
+FF1C;F # FULLWIDTH LESS-THAN SIGN
+FF1D;F # FULLWIDTH EQUALS SIGN
+FF1E;F # FULLWIDTH GREATER-THAN SIGN
+FF1F;F # FULLWIDTH QUESTION MARK
+FF20;F # FULLWIDTH COMMERCIAL AT
+FF21;F # FULLWIDTH LATIN CAPITAL LETTER A
+FF22;F # FULLWIDTH LATIN CAPITAL LETTER B
+FF23;F # FULLWIDTH LATIN CAPITAL LETTER C
+FF24;F # FULLWIDTH LATIN CAPITAL LETTER D
+FF25;F # FULLWIDTH LATIN CAPITAL LETTER E
+FF26;F # FULLWIDTH LATIN CAPITAL LETTER F
+FF27;F # FULLWIDTH LATIN CAPITAL LETTER G
+FF28;F # FULLWIDTH LATIN CAPITAL LETTER H
+FF29;F # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A;F # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B;F # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C;F # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D;F # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E;F # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F;F # FULLWIDTH LATIN CAPITAL LETTER O
+FF30;F # FULLWIDTH LATIN CAPITAL LETTER P
+FF31;F # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32;F # FULLWIDTH LATIN CAPITAL LETTER R
+FF33;F # FULLWIDTH LATIN CAPITAL LETTER S
+FF34;F # FULLWIDTH LATIN CAPITAL LETTER T
+FF35;F # FULLWIDTH LATIN CAPITAL LETTER U
+FF36;F # FULLWIDTH LATIN CAPITAL LETTER V
+FF37;F # FULLWIDTH LATIN CAPITAL LETTER W
+FF38;F # FULLWIDTH LATIN CAPITAL LETTER X
+FF39;F # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A;F # FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;F # FULLWIDTH LEFT SQUARE BRACKET
+FF3C;F # FULLWIDTH REVERSE SOLIDUS
+FF3D;F # FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;F # FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;F # FULLWIDTH LOW LINE
+FF40;F # FULLWIDTH GRAVE ACCENT
+FF41;F # FULLWIDTH LATIN SMALL LETTER A
+FF42;F # FULLWIDTH LATIN SMALL LETTER B
+FF43;F # FULLWIDTH LATIN SMALL LETTER C
+FF44;F # FULLWIDTH LATIN SMALL LETTER D
+FF45;F # FULLWIDTH LATIN SMALL LETTER E
+FF46;F # FULLWIDTH LATIN SMALL LETTER F
+FF47;F # FULLWIDTH LATIN SMALL LETTER G
+FF48;F # FULLWIDTH LATIN SMALL LETTER H
+FF49;F # FULLWIDTH LATIN SMALL LETTER I
+FF4A;F # FULLWIDTH LATIN SMALL LETTER J
+FF4B;F # FULLWIDTH LATIN SMALL LETTER K
+FF4C;F # FULLWIDTH LATIN SMALL LETTER L
+FF4D;F # FULLWIDTH LATIN SMALL LETTER M
+FF4E;F # FULLWIDTH LATIN SMALL LETTER N
+FF4F;F # FULLWIDTH LATIN SMALL LETTER O
+FF50;F # FULLWIDTH LATIN SMALL LETTER P
+FF51;F # FULLWIDTH LATIN SMALL LETTER Q
+FF52;F # FULLWIDTH LATIN SMALL LETTER R
+FF53;F # FULLWIDTH LATIN SMALL LETTER S
+FF54;F # FULLWIDTH LATIN SMALL LETTER T
+FF55;F # FULLWIDTH LATIN SMALL LETTER U
+FF56;F # FULLWIDTH LATIN SMALL LETTER V
+FF57;F # FULLWIDTH LATIN SMALL LETTER W
+FF58;F # FULLWIDTH LATIN SMALL LETTER X
+FF59;F # FULLWIDTH LATIN SMALL LETTER Y
+FF5A;F # FULLWIDTH LATIN SMALL LETTER Z
+FF5B;F # FULLWIDTH LEFT CURLY BRACKET
+FF5C;F # FULLWIDTH VERTICAL LINE
+FF5D;F # FULLWIDTH RIGHT CURLY BRACKET
+FF5E;F # FULLWIDTH TILDE
+FF5F;F # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60;F # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61;H # HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;H # HALFWIDTH LEFT CORNER BRACKET
+FF63;H # HALFWIDTH RIGHT CORNER BRACKET
+FF64;H # HALFWIDTH IDEOGRAPHIC COMMA
+FF65;H # HALFWIDTH KATAKANA MIDDLE DOT
+FF66;H # HALFWIDTH KATAKANA LETTER WO
+FF67;H # HALFWIDTH KATAKANA LETTER SMALL A
+FF68;H # HALFWIDTH KATAKANA LETTER SMALL I
+FF69;H # HALFWIDTH KATAKANA LETTER SMALL U
+FF6A;H # HALFWIDTH KATAKANA LETTER SMALL E
+FF6B;H # HALFWIDTH KATAKANA LETTER SMALL O
+FF6C;H # HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D;H # HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E;H # HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F;H # HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;H # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71;H # HALFWIDTH KATAKANA LETTER A
+FF72;H # HALFWIDTH KATAKANA LETTER I
+FF73;H # HALFWIDTH KATAKANA LETTER U
+FF74;H # HALFWIDTH KATAKANA LETTER E
+FF75;H # HALFWIDTH KATAKANA LETTER O
+FF76;H # HALFWIDTH KATAKANA LETTER KA
+FF77;H # HALFWIDTH KATAKANA LETTER KI
+FF78;H # HALFWIDTH KATAKANA LETTER KU
+FF79;H # HALFWIDTH KATAKANA LETTER KE
+FF7A;H # HALFWIDTH KATAKANA LETTER KO
+FF7B;H # HALFWIDTH KATAKANA LETTER SA
+FF7C;H # HALFWIDTH KATAKANA LETTER SI
+FF7D;H # HALFWIDTH KATAKANA LETTER SU
+FF7E;H # HALFWIDTH KATAKANA LETTER SE
+FF7F;H # HALFWIDTH KATAKANA LETTER SO
+FF80;H # HALFWIDTH KATAKANA LETTER TA
+FF81;H # HALFWIDTH KATAKANA LETTER TI
+FF82;H # HALFWIDTH KATAKANA LETTER TU
+FF83;H # HALFWIDTH KATAKANA LETTER TE
+FF84;H # HALFWIDTH KATAKANA LETTER TO
+FF85;H # HALFWIDTH KATAKANA LETTER NA
+FF86;H # HALFWIDTH KATAKANA LETTER NI
+FF87;H # HALFWIDTH KATAKANA LETTER NU
+FF88;H # HALFWIDTH KATAKANA LETTER NE
+FF89;H # HALFWIDTH KATAKANA LETTER NO
+FF8A;H # HALFWIDTH KATAKANA LETTER HA
+FF8B;H # HALFWIDTH KATAKANA LETTER HI
+FF8C;H # HALFWIDTH KATAKANA LETTER HU
+FF8D;H # HALFWIDTH KATAKANA LETTER HE
+FF8E;H # HALFWIDTH KATAKANA LETTER HO
+FF8F;H # HALFWIDTH KATAKANA LETTER MA
+FF90;H # HALFWIDTH KATAKANA LETTER MI
+FF91;H # HALFWIDTH KATAKANA LETTER MU
+FF92;H # HALFWIDTH KATAKANA LETTER ME
+FF93;H # HALFWIDTH KATAKANA LETTER MO
+FF94;H # HALFWIDTH KATAKANA LETTER YA
+FF95;H # HALFWIDTH KATAKANA LETTER YU
+FF96;H # HALFWIDTH KATAKANA LETTER YO
+FF97;H # HALFWIDTH KATAKANA LETTER RA
+FF98;H # HALFWIDTH KATAKANA LETTER RI
+FF99;H # HALFWIDTH KATAKANA LETTER RU
+FF9A;H # HALFWIDTH KATAKANA LETTER RE
+FF9B;H # HALFWIDTH KATAKANA LETTER RO
+FF9C;H # HALFWIDTH KATAKANA LETTER WA
+FF9D;H # HALFWIDTH KATAKANA LETTER N
+FF9E;H # HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F;H # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0;H # HALFWIDTH HANGUL FILLER
+FFA1;H # HALFWIDTH HANGUL LETTER KIYEOK
+FFA2;H # HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3;H # HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4;H # HALFWIDTH HANGUL LETTER NIEUN
+FFA5;H # HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6;H # HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7;H # HALFWIDTH HANGUL LETTER TIKEUT
+FFA8;H # HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9;H # HALFWIDTH HANGUL LETTER RIEUL
+FFAA;H # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB;H # HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC;H # HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD;H # HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE;H # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF;H # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0;H # HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1;H # HALFWIDTH HANGUL LETTER MIEUM
+FFB2;H # HALFWIDTH HANGUL LETTER PIEUP
+FFB3;H # HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4;H # HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5;H # HALFWIDTH HANGUL LETTER SIOS
+FFB6;H # HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7;H # HALFWIDTH HANGUL LETTER IEUNG
+FFB8;H # HALFWIDTH HANGUL LETTER CIEUC
+FFB9;H # HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA;H # HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB;H # HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC;H # HALFWIDTH HANGUL LETTER THIEUTH
+FFBD;H # HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE;H # HALFWIDTH HANGUL LETTER HIEUH
+FFC2;H # HALFWIDTH HANGUL LETTER A
+FFC3;H # HALFWIDTH HANGUL LETTER AE
+FFC4;H # HALFWIDTH HANGUL LETTER YA
+FFC5;H # HALFWIDTH HANGUL LETTER YAE
+FFC6;H # HALFWIDTH HANGUL LETTER EO
+FFC7;H # HALFWIDTH HANGUL LETTER E
+FFCA;H # HALFWIDTH HANGUL LETTER YEO
+FFCB;H # HALFWIDTH HANGUL LETTER YE
+FFCC;H # HALFWIDTH HANGUL LETTER O
+FFCD;H # HALFWIDTH HANGUL LETTER WA
+FFCE;H # HALFWIDTH HANGUL LETTER WAE
+FFCF;H # HALFWIDTH HANGUL LETTER OE
+FFD2;H # HALFWIDTH HANGUL LETTER YO
+FFD3;H # HALFWIDTH HANGUL LETTER U
+FFD4;H # HALFWIDTH HANGUL LETTER WEO
+FFD5;H # HALFWIDTH HANGUL LETTER WE
+FFD6;H # HALFWIDTH HANGUL LETTER WI
+FFD7;H # HALFWIDTH HANGUL LETTER YU
+FFDA;H # HALFWIDTH HANGUL LETTER EU
+FFDB;H # HALFWIDTH HANGUL LETTER YI
+FFDC;H # HALFWIDTH HANGUL LETTER I
+FFE0;F # FULLWIDTH CENT SIGN
+FFE1;F # FULLWIDTH POUND SIGN
+FFE2;F # FULLWIDTH NOT SIGN
+FFE3;F # FULLWIDTH MACRON
+FFE4;F # FULLWIDTH BROKEN BAR
+FFE5;F # FULLWIDTH YEN SIGN
+FFE6;F # FULLWIDTH WON SIGN
+FFE8;H # HALFWIDTH FORMS LIGHT VERTICAL
+FFE9;H # HALFWIDTH LEFTWARDS ARROW
+FFEA;H # HALFWIDTH UPWARDS ARROW
+FFEB;H # HALFWIDTH RIGHTWARDS ARROW
+FFEC;H # HALFWIDTH DOWNWARDS ARROW
+FFED;H # HALFWIDTH BLACK SQUARE
+FFEE;H # HALFWIDTH WHITE CIRCLE
+FFF9;N # INTERLINEAR ANNOTATION ANCHOR
+FFFA;N # INTERLINEAR ANNOTATION SEPARATOR
+FFFB;N # INTERLINEAR ANNOTATION TERMINATOR
+FFFC;N # OBJECT REPLACEMENT CHARACTER
+FFFD;A # REPLACEMENT CHARACTER
+10000;N # LINEAR B SYLLABLE B008 A
+10001;N # LINEAR B SYLLABLE B038 E
+10002;N # LINEAR B SYLLABLE B028 I
+10003;N # LINEAR B SYLLABLE B061 O
+10004;N # LINEAR B SYLLABLE B010 U
+10005;N # LINEAR B SYLLABLE B001 DA
+10006;N # LINEAR B SYLLABLE B045 DE
+10007;N # LINEAR B SYLLABLE B007 DI
+10008;N # LINEAR B SYLLABLE B014 DO
+10009;N # LINEAR B SYLLABLE B051 DU
+1000A;N # LINEAR B SYLLABLE B057 JA
+1000B;N # LINEAR B SYLLABLE B046 JE
+1000D;N # LINEAR B SYLLABLE B036 JO
+1000E;N # LINEAR B SYLLABLE B065 JU
+1000F;N # LINEAR B SYLLABLE B077 KA
+10010;N # LINEAR B SYLLABLE B044 KE
+10011;N # LINEAR B SYLLABLE B067 KI
+10012;N # LINEAR B SYLLABLE B070 KO
+10013;N # LINEAR B SYLLABLE B081 KU
+10014;N # LINEAR B SYLLABLE B080 MA
+10015;N # LINEAR B SYLLABLE B013 ME
+10016;N # LINEAR B SYLLABLE B073 MI
+10017;N # LINEAR B SYLLABLE B015 MO
+10018;N # LINEAR B SYLLABLE B023 MU
+10019;N # LINEAR B SYLLABLE B006 NA
+1001A;N # LINEAR B SYLLABLE B024 NE
+1001B;N # LINEAR B SYLLABLE B030 NI
+1001C;N # LINEAR B SYLLABLE B052 NO
+1001D;N # LINEAR B SYLLABLE B055 NU
+1001E;N # LINEAR B SYLLABLE B003 PA
+1001F;N # LINEAR B SYLLABLE B072 PE
+10020;N # LINEAR B SYLLABLE B039 PI
+10021;N # LINEAR B SYLLABLE B011 PO
+10022;N # LINEAR B SYLLABLE B050 PU
+10023;N # LINEAR B SYLLABLE B016 QA
+10024;N # LINEAR B SYLLABLE B078 QE
+10025;N # LINEAR B SYLLABLE B021 QI
+10026;N # LINEAR B SYLLABLE B032 QO
+10028;N # LINEAR B SYLLABLE B060 RA
+10029;N # LINEAR B SYLLABLE B027 RE
+1002A;N # LINEAR B SYLLABLE B053 RI
+1002B;N # LINEAR B SYLLABLE B002 RO
+1002C;N # LINEAR B SYLLABLE B026 RU
+1002D;N # LINEAR B SYLLABLE B031 SA
+1002E;N # LINEAR B SYLLABLE B009 SE
+1002F;N # LINEAR B SYLLABLE B041 SI
+10030;N # LINEAR B SYLLABLE B012 SO
+10031;N # LINEAR B SYLLABLE B058 SU
+10032;N # LINEAR B SYLLABLE B059 TA
+10033;N # LINEAR B SYLLABLE B004 TE
+10034;N # LINEAR B SYLLABLE B037 TI
+10035;N # LINEAR B SYLLABLE B005 TO
+10036;N # LINEAR B SYLLABLE B069 TU
+10037;N # LINEAR B SYLLABLE B054 WA
+10038;N # LINEAR B SYLLABLE B075 WE
+10039;N # LINEAR B SYLLABLE B040 WI
+1003A;N # LINEAR B SYLLABLE B042 WO
+1003C;N # LINEAR B SYLLABLE B017 ZA
+1003D;N # LINEAR B SYLLABLE B074 ZE
+1003F;N # LINEAR B SYLLABLE B020 ZO
+10040;N # LINEAR B SYLLABLE B025 A2
+10041;N # LINEAR B SYLLABLE B043 A3
+10042;N # LINEAR B SYLLABLE B085 AU
+10043;N # LINEAR B SYLLABLE B071 DWE
+10044;N # LINEAR B SYLLABLE B090 DWO
+10045;N # LINEAR B SYLLABLE B048 NWA
+10046;N # LINEAR B SYLLABLE B029 PU2
+10047;N # LINEAR B SYLLABLE B062 PTE
+10048;N # LINEAR B SYLLABLE B076 RA2
+10049;N # LINEAR B SYLLABLE B033 RA3
+1004A;N # LINEAR B SYLLABLE B068 RO2
+1004B;N # LINEAR B SYLLABLE B066 TA2
+1004C;N # LINEAR B SYLLABLE B087 TWE
+1004D;N # LINEAR B SYLLABLE B091 TWO
+10050;N # LINEAR B SYMBOL B018
+10051;N # LINEAR B SYMBOL B019
+10052;N # LINEAR B SYMBOL B022
+10053;N # LINEAR B SYMBOL B034
+10054;N # LINEAR B SYMBOL B047
+10055;N # LINEAR B SYMBOL B049
+10056;N # LINEAR B SYMBOL B056
+10057;N # LINEAR B SYMBOL B063
+10058;N # LINEAR B SYMBOL B064
+10059;N # LINEAR B SYMBOL B079
+1005A;N # LINEAR B SYMBOL B082
+1005B;N # LINEAR B SYMBOL B083
+1005C;N # LINEAR B SYMBOL B086
+1005D;N # LINEAR B SYMBOL B089
+10080;N # LINEAR B IDEOGRAM B100 MAN
+10081;N # LINEAR B IDEOGRAM B102 WOMAN
+10082;N # LINEAR B IDEOGRAM B104 DEER
+10083;N # LINEAR B IDEOGRAM B105 EQUID
+10084;N # LINEAR B IDEOGRAM B105F MARE
+10085;N # LINEAR B IDEOGRAM B105M STALLION
+10086;N # LINEAR B IDEOGRAM B106F EWE
+10087;N # LINEAR B IDEOGRAM B106M RAM
+10088;N # LINEAR B IDEOGRAM B107F SHE-GOAT
+10089;N # LINEAR B IDEOGRAM B107M HE-GOAT
+1008A;N # LINEAR B IDEOGRAM B108F SOW
+1008B;N # LINEAR B IDEOGRAM B108M BOAR
+1008C;N # LINEAR B IDEOGRAM B109F COW
+1008D;N # LINEAR B IDEOGRAM B109M BULL
+1008E;N # LINEAR B IDEOGRAM B120 WHEAT
+1008F;N # LINEAR B IDEOGRAM B121 BARLEY
+10090;N # LINEAR B IDEOGRAM B122 OLIVE
+10091;N # LINEAR B IDEOGRAM B123 SPICE
+10092;N # LINEAR B IDEOGRAM B125 CYPERUS
+10093;N # LINEAR B MONOGRAM B127 KAPO
+10094;N # LINEAR B MONOGRAM B128 KANAKO
+10095;N # LINEAR B IDEOGRAM B130 OIL
+10096;N # LINEAR B IDEOGRAM B131 WINE
+10097;N # LINEAR B IDEOGRAM B132
+10098;N # LINEAR B MONOGRAM B133 AREPA
+10099;N # LINEAR B MONOGRAM B135 MERI
+1009A;N # LINEAR B IDEOGRAM B140 BRONZE
+1009B;N # LINEAR B IDEOGRAM B141 GOLD
+1009C;N # LINEAR B IDEOGRAM B142
+1009D;N # LINEAR B IDEOGRAM B145 WOOL
+1009E;N # LINEAR B IDEOGRAM B146
+1009F;N # LINEAR B IDEOGRAM B150
+100A0;N # LINEAR B IDEOGRAM B151 HORN
+100A1;N # LINEAR B IDEOGRAM B152
+100A2;N # LINEAR B IDEOGRAM B153
+100A3;N # LINEAR B IDEOGRAM B154
+100A4;N # LINEAR B MONOGRAM B156 TURO2
+100A5;N # LINEAR B IDEOGRAM B157
+100A6;N # LINEAR B IDEOGRAM B158
+100A7;N # LINEAR B IDEOGRAM B159 CLOTH
+100A8;N # LINEAR B IDEOGRAM B160
+100A9;N # LINEAR B IDEOGRAM B161
+100AA;N # LINEAR B IDEOGRAM B162 GARMENT
+100AB;N # LINEAR B IDEOGRAM B163 ARMOUR
+100AC;N # LINEAR B IDEOGRAM B164
+100AD;N # LINEAR B IDEOGRAM B165
+100AE;N # LINEAR B IDEOGRAM B166
+100AF;N # LINEAR B IDEOGRAM B167
+100B0;N # LINEAR B IDEOGRAM B168
+100B1;N # LINEAR B IDEOGRAM B169
+100B2;N # LINEAR B IDEOGRAM B170
+100B3;N # LINEAR B IDEOGRAM B171
+100B4;N # LINEAR B IDEOGRAM B172
+100B5;N # LINEAR B IDEOGRAM B173 MONTH
+100B6;N # LINEAR B IDEOGRAM B174
+100B7;N # LINEAR B IDEOGRAM B176 TREE
+100B8;N # LINEAR B IDEOGRAM B177
+100B9;N # LINEAR B IDEOGRAM B178
+100BA;N # LINEAR B IDEOGRAM B179
+100BB;N # LINEAR B IDEOGRAM B180
+100BC;N # LINEAR B IDEOGRAM B181
+100BD;N # LINEAR B IDEOGRAM B182
+100BE;N # LINEAR B IDEOGRAM B183
+100BF;N # LINEAR B IDEOGRAM B184
+100C0;N # LINEAR B IDEOGRAM B185
+100C1;N # LINEAR B IDEOGRAM B189
+100C2;N # LINEAR B IDEOGRAM B190
+100C3;N # LINEAR B IDEOGRAM B191 HELMET
+100C4;N # LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5;N # LINEAR B IDEOGRAM B225 BATHTUB
+100C6;N # LINEAR B IDEOGRAM B230 SPEAR
+100C7;N # LINEAR B IDEOGRAM B231 ARROW
+100C8;N # LINEAR B IDEOGRAM B232
+100C9;N # LINEAR B IDEOGRAM B233 SWORD
+100CA;N # LINEAR B IDEOGRAM B234
+100CB;N # LINEAR B IDEOGRAM B236
+100CC;N # LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD;N # LINEAR B IDEOGRAM B241 CHARIOT
+100CE;N # LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF;N # LINEAR B IDEOGRAM B243 WHEEL
+100D0;N # LINEAR B IDEOGRAM B245
+100D1;N # LINEAR B IDEOGRAM B246
+100D2;N # LINEAR B MONOGRAM B247 DIPTE
+100D3;N # LINEAR B IDEOGRAM B248
+100D4;N # LINEAR B IDEOGRAM B249
+100D5;N # LINEAR B IDEOGRAM B251
+100D6;N # LINEAR B IDEOGRAM B252
+100D7;N # LINEAR B IDEOGRAM B253
+100D8;N # LINEAR B IDEOGRAM B254 DART
+100D9;N # LINEAR B IDEOGRAM B255
+100DA;N # LINEAR B IDEOGRAM B256
+100DB;N # LINEAR B IDEOGRAM B257
+100DC;N # LINEAR B IDEOGRAM B258
+100DD;N # LINEAR B IDEOGRAM B259
+100DE;N # LINEAR B IDEOGRAM VESSEL B155
+100DF;N # LINEAR B IDEOGRAM VESSEL B200
+100E0;N # LINEAR B IDEOGRAM VESSEL B201
+100E1;N # LINEAR B IDEOGRAM VESSEL B202
+100E2;N # LINEAR B IDEOGRAM VESSEL B203
+100E3;N # LINEAR B IDEOGRAM VESSEL B204
+100E4;N # LINEAR B IDEOGRAM VESSEL B205
+100E5;N # LINEAR B IDEOGRAM VESSEL B206
+100E6;N # LINEAR B IDEOGRAM VESSEL B207
+100E7;N # LINEAR B IDEOGRAM VESSEL B208
+100E8;N # LINEAR B IDEOGRAM VESSEL B209
+100E9;N # LINEAR B IDEOGRAM VESSEL B210
+100EA;N # LINEAR B IDEOGRAM VESSEL B211
+100EB;N # LINEAR B IDEOGRAM VESSEL B212
+100EC;N # LINEAR B IDEOGRAM VESSEL B213
+100ED;N # LINEAR B IDEOGRAM VESSEL B214
+100EE;N # LINEAR B IDEOGRAM VESSEL B215
+100EF;N # LINEAR B IDEOGRAM VESSEL B216
+100F0;N # LINEAR B IDEOGRAM VESSEL B217
+100F1;N # LINEAR B IDEOGRAM VESSEL B218
+100F2;N # LINEAR B IDEOGRAM VESSEL B219
+100F3;N # LINEAR B IDEOGRAM VESSEL B221
+100F4;N # LINEAR B IDEOGRAM VESSEL B222
+100F5;N # LINEAR B IDEOGRAM VESSEL B226
+100F6;N # LINEAR B IDEOGRAM VESSEL B227
+100F7;N # LINEAR B IDEOGRAM VESSEL B228
+100F8;N # LINEAR B IDEOGRAM VESSEL B229
+100F9;N # LINEAR B IDEOGRAM VESSEL B250
+100FA;N # LINEAR B IDEOGRAM VESSEL B305
+10100;N # AEGEAN WORD SEPARATOR LINE
+10101;N # AEGEAN WORD SEPARATOR DOT
+10102;N # AEGEAN CHECK MARK
+10107;N # AEGEAN NUMBER ONE
+10108;N # AEGEAN NUMBER TWO
+10109;N # AEGEAN NUMBER THREE
+1010A;N # AEGEAN NUMBER FOUR
+1010B;N # AEGEAN NUMBER FIVE
+1010C;N # AEGEAN NUMBER SIX
+1010D;N # AEGEAN NUMBER SEVEN
+1010E;N # AEGEAN NUMBER EIGHT
+1010F;N # AEGEAN NUMBER NINE
+10110;N # AEGEAN NUMBER TEN
+10111;N # AEGEAN NUMBER TWENTY
+10112;N # AEGEAN NUMBER THIRTY
+10113;N # AEGEAN NUMBER FORTY
+10114;N # AEGEAN NUMBER FIFTY
+10115;N # AEGEAN NUMBER SIXTY
+10116;N # AEGEAN NUMBER SEVENTY
+10117;N # AEGEAN NUMBER EIGHTY
+10118;N # AEGEAN NUMBER NINETY
+10119;N # AEGEAN NUMBER ONE HUNDRED
+1011A;N # AEGEAN NUMBER TWO HUNDRED
+1011B;N # AEGEAN NUMBER THREE HUNDRED
+1011C;N # AEGEAN NUMBER FOUR HUNDRED
+1011D;N # AEGEAN NUMBER FIVE HUNDRED
+1011E;N # AEGEAN NUMBER SIX HUNDRED
+1011F;N # AEGEAN NUMBER SEVEN HUNDRED
+10120;N # AEGEAN NUMBER EIGHT HUNDRED
+10121;N # AEGEAN NUMBER NINE HUNDRED
+10122;N # AEGEAN NUMBER ONE THOUSAND
+10123;N # AEGEAN NUMBER TWO THOUSAND
+10124;N # AEGEAN NUMBER THREE THOUSAND
+10125;N # AEGEAN NUMBER FOUR THOUSAND
+10126;N # AEGEAN NUMBER FIVE THOUSAND
+10127;N # AEGEAN NUMBER SIX THOUSAND
+10128;N # AEGEAN NUMBER SEVEN THOUSAND
+10129;N # AEGEAN NUMBER EIGHT THOUSAND
+1012A;N # AEGEAN NUMBER NINE THOUSAND
+1012B;N # AEGEAN NUMBER TEN THOUSAND
+1012C;N # AEGEAN NUMBER TWENTY THOUSAND
+1012D;N # AEGEAN NUMBER THIRTY THOUSAND
+1012E;N # AEGEAN NUMBER FORTY THOUSAND
+1012F;N # AEGEAN NUMBER FIFTY THOUSAND
+10130;N # AEGEAN NUMBER SIXTY THOUSAND
+10131;N # AEGEAN NUMBER SEVENTY THOUSAND
+10132;N # AEGEAN NUMBER EIGHTY THOUSAND
+10133;N # AEGEAN NUMBER NINETY THOUSAND
+10137;N # AEGEAN WEIGHT BASE UNIT
+10138;N # AEGEAN WEIGHT FIRST SUBUNIT
+10139;N # AEGEAN WEIGHT SECOND SUBUNIT
+1013A;N # AEGEAN WEIGHT THIRD SUBUNIT
+1013B;N # AEGEAN WEIGHT FOURTH SUBUNIT
+1013C;N # AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D;N # AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E;N # AEGEAN MEASURE SECOND SUBUNIT
+1013F;N # AEGEAN MEASURE THIRD SUBUNIT
+10140;N # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141;N # GREEK ACROPHONIC ATTIC ONE HALF
+10142;N # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143;N # GREEK ACROPHONIC ATTIC FIVE
+10144;N # GREEK ACROPHONIC ATTIC FIFTY
+10145;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148;N # GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149;N # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A;N # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B;N # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D;N # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F;N # GREEK ACROPHONIC ATTIC FIVE STATERS
+10150;N # GREEK ACROPHONIC ATTIC TEN STATERS
+10151;N # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152;N # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154;N # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155;N # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157;N # GREEK ACROPHONIC ATTIC TEN MNAS
+10158;N # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159;N # GREEK ACROPHONIC THESPIAN ONE
+1015A;N # GREEK ACROPHONIC HERMIONIAN ONE
+1015B;N # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C;N # GREEK ACROPHONIC THESPIAN TWO
+1015D;N # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E;N # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F;N # GREEK ACROPHONIC TROEZENIAN FIVE
+10160;N # GREEK ACROPHONIC TROEZENIAN TEN
+10161;N # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162;N # GREEK ACROPHONIC HERMIONIAN TEN
+10163;N # GREEK ACROPHONIC MESSENIAN TEN
+10164;N # GREEK ACROPHONIC THESPIAN TEN
+10165;N # GREEK ACROPHONIC THESPIAN THIRTY
+10166;N # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167;N # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168;N # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169;N # GREEK ACROPHONIC THESPIAN FIFTY
+1016A;N # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B;N # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C;N # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D;N # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E;N # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F;N # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170;N # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171;N # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172;N # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173;N # GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174;N # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175;N # GREEK ONE HALF SIGN
+10176;N # GREEK ONE HALF SIGN ALTERNATE FORM
+10177;N # GREEK TWO THIRDS SIGN
+10178;N # GREEK THREE QUARTERS SIGN
+10179;N # GREEK YEAR SIGN
+1017A;N # GREEK TALENT SIGN
+1017B;N # GREEK DRACHMA SIGN
+1017C;N # GREEK OBOL SIGN
+1017D;N # GREEK TWO OBOLS SIGN
+1017E;N # GREEK THREE OBOLS SIGN
+1017F;N # GREEK FOUR OBOLS SIGN
+10180;N # GREEK FIVE OBOLS SIGN
+10181;N # GREEK METRETES SIGN
+10182;N # GREEK KYATHOS BASE SIGN
+10183;N # GREEK LITRA SIGN
+10184;N # GREEK OUNKIA SIGN
+10185;N # GREEK XESTES SIGN
+10186;N # GREEK ARTABE SIGN
+10187;N # GREEK AROURA SIGN
+10188;N # GREEK GRAMMA SIGN
+10189;N # GREEK TRYBLION BASE SIGN
+1018A;N # GREEK ZERO SIGN
+10190;N # ROMAN SEXTANS SIGN
+10191;N # ROMAN UNCIA SIGN
+10192;N # ROMAN SEMUNCIA SIGN
+10193;N # ROMAN SEXTULA SIGN
+10194;N # ROMAN DIMIDIA SEXTULA SIGN
+10195;N # ROMAN SILIQUA SIGN
+10196;N # ROMAN DENARIUS SIGN
+10197;N # ROMAN QUINARIUS SIGN
+10198;N # ROMAN SESTERTIUS SIGN
+10199;N # ROMAN DUPONDIUS SIGN
+1019A;N # ROMAN AS SIGN
+1019B;N # ROMAN CENTURIAL SIGN
+101D0;N # PHAISTOS DISC SIGN PEDESTRIAN
+101D1;N # PHAISTOS DISC SIGN PLUMED HEAD
+101D2;N # PHAISTOS DISC SIGN TATTOOED HEAD
+101D3;N # PHAISTOS DISC SIGN CAPTIVE
+101D4;N # PHAISTOS DISC SIGN CHILD
+101D5;N # PHAISTOS DISC SIGN WOMAN
+101D6;N # PHAISTOS DISC SIGN HELMET
+101D7;N # PHAISTOS DISC SIGN GAUNTLET
+101D8;N # PHAISTOS DISC SIGN TIARA
+101D9;N # PHAISTOS DISC SIGN ARROW
+101DA;N # PHAISTOS DISC SIGN BOW
+101DB;N # PHAISTOS DISC SIGN SHIELD
+101DC;N # PHAISTOS DISC SIGN CLUB
+101DD;N # PHAISTOS DISC SIGN MANACLES
+101DE;N # PHAISTOS DISC SIGN MATTOCK
+101DF;N # PHAISTOS DISC SIGN SAW
+101E0;N # PHAISTOS DISC SIGN LID
+101E1;N # PHAISTOS DISC SIGN BOOMERANG
+101E2;N # PHAISTOS DISC SIGN CARPENTRY PLANE
+101E3;N # PHAISTOS DISC SIGN DOLIUM
+101E4;N # PHAISTOS DISC SIGN COMB
+101E5;N # PHAISTOS DISC SIGN SLING
+101E6;N # PHAISTOS DISC SIGN COLUMN
+101E7;N # PHAISTOS DISC SIGN BEEHIVE
+101E8;N # PHAISTOS DISC SIGN SHIP
+101E9;N # PHAISTOS DISC SIGN HORN
+101EA;N # PHAISTOS DISC SIGN HIDE
+101EB;N # PHAISTOS DISC SIGN BULLS LEG
+101EC;N # PHAISTOS DISC SIGN CAT
+101ED;N # PHAISTOS DISC SIGN RAM
+101EE;N # PHAISTOS DISC SIGN EAGLE
+101EF;N # PHAISTOS DISC SIGN DOVE
+101F0;N # PHAISTOS DISC SIGN TUNNY
+101F1;N # PHAISTOS DISC SIGN BEE
+101F2;N # PHAISTOS DISC SIGN PLANE TREE
+101F3;N # PHAISTOS DISC SIGN VINE
+101F4;N # PHAISTOS DISC SIGN PAPYRUS
+101F5;N # PHAISTOS DISC SIGN ROSETTE
+101F6;N # PHAISTOS DISC SIGN LILY
+101F7;N # PHAISTOS DISC SIGN OX BACK
+101F8;N # PHAISTOS DISC SIGN FLUTE
+101F9;N # PHAISTOS DISC SIGN GRATER
+101FA;N # PHAISTOS DISC SIGN STRAINER
+101FB;N # PHAISTOS DISC SIGN SMALL AXE
+101FC;N # PHAISTOS DISC SIGN WAVY BAND
+101FD;N # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280;N # LYCIAN LETTER A
+10281;N # LYCIAN LETTER E
+10282;N # LYCIAN LETTER B
+10283;N # LYCIAN LETTER BH
+10284;N # LYCIAN LETTER G
+10285;N # LYCIAN LETTER D
+10286;N # LYCIAN LETTER I
+10287;N # LYCIAN LETTER W
+10288;N # LYCIAN LETTER Z
+10289;N # LYCIAN LETTER TH
+1028A;N # LYCIAN LETTER J
+1028B;N # LYCIAN LETTER K
+1028C;N # LYCIAN LETTER Q
+1028D;N # LYCIAN LETTER L
+1028E;N # LYCIAN LETTER M
+1028F;N # LYCIAN LETTER N
+10290;N # LYCIAN LETTER MM
+10291;N # LYCIAN LETTER NN
+10292;N # LYCIAN LETTER U
+10293;N # LYCIAN LETTER P
+10294;N # LYCIAN LETTER KK
+10295;N # LYCIAN LETTER R
+10296;N # LYCIAN LETTER S
+10297;N # LYCIAN LETTER T
+10298;N # LYCIAN LETTER TT
+10299;N # LYCIAN LETTER AN
+1029A;N # LYCIAN LETTER EN
+1029B;N # LYCIAN LETTER H
+1029C;N # LYCIAN LETTER X
+102A0;N # CARIAN LETTER A
+102A1;N # CARIAN LETTER P2
+102A2;N # CARIAN LETTER D
+102A3;N # CARIAN LETTER L
+102A4;N # CARIAN LETTER UUU
+102A5;N # CARIAN LETTER R
+102A6;N # CARIAN LETTER LD
+102A7;N # CARIAN LETTER A2
+102A8;N # CARIAN LETTER Q
+102A9;N # CARIAN LETTER B
+102AA;N # CARIAN LETTER M
+102AB;N # CARIAN LETTER O
+102AC;N # CARIAN LETTER D2
+102AD;N # CARIAN LETTER T
+102AE;N # CARIAN LETTER SH
+102AF;N # CARIAN LETTER SH2
+102B0;N # CARIAN LETTER S
+102B1;N # CARIAN LETTER C-18
+102B2;N # CARIAN LETTER U
+102B3;N # CARIAN LETTER NN
+102B4;N # CARIAN LETTER X
+102B5;N # CARIAN LETTER N
+102B6;N # CARIAN LETTER TT2
+102B7;N # CARIAN LETTER P
+102B8;N # CARIAN LETTER SS
+102B9;N # CARIAN LETTER I
+102BA;N # CARIAN LETTER E
+102BB;N # CARIAN LETTER UUUU
+102BC;N # CARIAN LETTER K
+102BD;N # CARIAN LETTER K2
+102BE;N # CARIAN LETTER ND
+102BF;N # CARIAN LETTER UU
+102C0;N # CARIAN LETTER G
+102C1;N # CARIAN LETTER G2
+102C2;N # CARIAN LETTER ST
+102C3;N # CARIAN LETTER ST2
+102C4;N # CARIAN LETTER NG
+102C5;N # CARIAN LETTER II
+102C6;N # CARIAN LETTER C-39
+102C7;N # CARIAN LETTER TT
+102C8;N # CARIAN LETTER UUU2
+102C9;N # CARIAN LETTER RR
+102CA;N # CARIAN LETTER MB
+102CB;N # CARIAN LETTER MB2
+102CC;N # CARIAN LETTER MB3
+102CD;N # CARIAN LETTER MB4
+102CE;N # CARIAN LETTER LD2
+102CF;N # CARIAN LETTER E2
+102D0;N # CARIAN LETTER UUU3
+10300;N # OLD ITALIC LETTER A
+10301;N # OLD ITALIC LETTER BE
+10302;N # OLD ITALIC LETTER KE
+10303;N # OLD ITALIC LETTER DE
+10304;N # OLD ITALIC LETTER E
+10305;N # OLD ITALIC LETTER VE
+10306;N # OLD ITALIC LETTER ZE
+10307;N # OLD ITALIC LETTER HE
+10308;N # OLD ITALIC LETTER THE
+10309;N # OLD ITALIC LETTER I
+1030A;N # OLD ITALIC LETTER KA
+1030B;N # OLD ITALIC LETTER EL
+1030C;N # OLD ITALIC LETTER EM
+1030D;N # OLD ITALIC LETTER EN
+1030E;N # OLD ITALIC LETTER ESH
+1030F;N # OLD ITALIC LETTER O
+10310;N # OLD ITALIC LETTER PE
+10311;N # OLD ITALIC LETTER SHE
+10312;N # OLD ITALIC LETTER KU
+10313;N # OLD ITALIC LETTER ER
+10314;N # OLD ITALIC LETTER ES
+10315;N # OLD ITALIC LETTER TE
+10316;N # OLD ITALIC LETTER U
+10317;N # OLD ITALIC LETTER EKS
+10318;N # OLD ITALIC LETTER PHE
+10319;N # OLD ITALIC LETTER KHE
+1031A;N # OLD ITALIC LETTER EF
+1031B;N # OLD ITALIC LETTER ERS
+1031C;N # OLD ITALIC LETTER CHE
+1031D;N # OLD ITALIC LETTER II
+1031E;N # OLD ITALIC LETTER UU
+10320;N # OLD ITALIC NUMERAL ONE
+10321;N # OLD ITALIC NUMERAL FIVE
+10322;N # OLD ITALIC NUMERAL TEN
+10323;N # OLD ITALIC NUMERAL FIFTY
+10330;N # GOTHIC LETTER AHSA
+10331;N # GOTHIC LETTER BAIRKAN
+10332;N # GOTHIC LETTER GIBA
+10333;N # GOTHIC LETTER DAGS
+10334;N # GOTHIC LETTER AIHVUS
+10335;N # GOTHIC LETTER QAIRTHRA
+10336;N # GOTHIC LETTER IUJA
+10337;N # GOTHIC LETTER HAGL
+10338;N # GOTHIC LETTER THIUTH
+10339;N # GOTHIC LETTER EIS
+1033A;N # GOTHIC LETTER KUSMA
+1033B;N # GOTHIC LETTER LAGUS
+1033C;N # GOTHIC LETTER MANNA
+1033D;N # GOTHIC LETTER NAUTHS
+1033E;N # GOTHIC LETTER JER
+1033F;N # GOTHIC LETTER URUS
+10340;N # GOTHIC LETTER PAIRTHRA
+10341;N # GOTHIC LETTER NINETY
+10342;N # GOTHIC LETTER RAIDA
+10343;N # GOTHIC LETTER SAUIL
+10344;N # GOTHIC LETTER TEIWS
+10345;N # GOTHIC LETTER WINJA
+10346;N # GOTHIC LETTER FAIHU
+10347;N # GOTHIC LETTER IGGWS
+10348;N # GOTHIC LETTER HWAIR
+10349;N # GOTHIC LETTER OTHAL
+1034A;N # GOTHIC LETTER NINE HUNDRED
+10380;N # UGARITIC LETTER ALPA
+10381;N # UGARITIC LETTER BETA
+10382;N # UGARITIC LETTER GAMLA
+10383;N # UGARITIC LETTER KHA
+10384;N # UGARITIC LETTER DELTA
+10385;N # UGARITIC LETTER HO
+10386;N # UGARITIC LETTER WO
+10387;N # UGARITIC LETTER ZETA
+10388;N # UGARITIC LETTER HOTA
+10389;N # UGARITIC LETTER TET
+1038A;N # UGARITIC LETTER YOD
+1038B;N # UGARITIC LETTER KAF
+1038C;N # UGARITIC LETTER SHIN
+1038D;N # UGARITIC LETTER LAMDA
+1038E;N # UGARITIC LETTER MEM
+1038F;N # UGARITIC LETTER DHAL
+10390;N # UGARITIC LETTER NUN
+10391;N # UGARITIC LETTER ZU
+10392;N # UGARITIC LETTER SAMKA
+10393;N # UGARITIC LETTER AIN
+10394;N # UGARITIC LETTER PU
+10395;N # UGARITIC LETTER SADE
+10396;N # UGARITIC LETTER QOPA
+10397;N # UGARITIC LETTER RASHA
+10398;N # UGARITIC LETTER THANNA
+10399;N # UGARITIC LETTER GHAIN
+1039A;N # UGARITIC LETTER TO
+1039B;N # UGARITIC LETTER I
+1039C;N # UGARITIC LETTER U
+1039D;N # UGARITIC LETTER SSU
+1039F;N # UGARITIC WORD DIVIDER
+103A0;N # OLD PERSIAN SIGN A
+103A1;N # OLD PERSIAN SIGN I
+103A2;N # OLD PERSIAN SIGN U
+103A3;N # OLD PERSIAN SIGN KA
+103A4;N # OLD PERSIAN SIGN KU
+103A5;N # OLD PERSIAN SIGN GA
+103A6;N # OLD PERSIAN SIGN GU
+103A7;N # OLD PERSIAN SIGN XA
+103A8;N # OLD PERSIAN SIGN CA
+103A9;N # OLD PERSIAN SIGN JA
+103AA;N # OLD PERSIAN SIGN JI
+103AB;N # OLD PERSIAN SIGN TA
+103AC;N # OLD PERSIAN SIGN TU
+103AD;N # OLD PERSIAN SIGN DA
+103AE;N # OLD PERSIAN SIGN DI
+103AF;N # OLD PERSIAN SIGN DU
+103B0;N # OLD PERSIAN SIGN THA
+103B1;N # OLD PERSIAN SIGN PA
+103B2;N # OLD PERSIAN SIGN BA
+103B3;N # OLD PERSIAN SIGN FA
+103B4;N # OLD PERSIAN SIGN NA
+103B5;N # OLD PERSIAN SIGN NU
+103B6;N # OLD PERSIAN SIGN MA
+103B7;N # OLD PERSIAN SIGN MI
+103B8;N # OLD PERSIAN SIGN MU
+103B9;N # OLD PERSIAN SIGN YA
+103BA;N # OLD PERSIAN SIGN VA
+103BB;N # OLD PERSIAN SIGN VI
+103BC;N # OLD PERSIAN SIGN RA
+103BD;N # OLD PERSIAN SIGN RU
+103BE;N # OLD PERSIAN SIGN LA
+103BF;N # OLD PERSIAN SIGN SA
+103C0;N # OLD PERSIAN SIGN ZA
+103C1;N # OLD PERSIAN SIGN SHA
+103C2;N # OLD PERSIAN SIGN SSA
+103C3;N # OLD PERSIAN SIGN HA
+103C8;N # OLD PERSIAN SIGN AURAMAZDAA
+103C9;N # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA;N # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB;N # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC;N # OLD PERSIAN SIGN DAHYAAUSH
+103CD;N # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE;N # OLD PERSIAN SIGN BAGA
+103CF;N # OLD PERSIAN SIGN BUUMISH
+103D0;N # OLD PERSIAN WORD DIVIDER
+103D1;N # OLD PERSIAN NUMBER ONE
+103D2;N # OLD PERSIAN NUMBER TWO
+103D3;N # OLD PERSIAN NUMBER TEN
+103D4;N # OLD PERSIAN NUMBER TWENTY
+103D5;N # OLD PERSIAN NUMBER HUNDRED
+10400;N # DESERET CAPITAL LETTER LONG I
+10401;N # DESERET CAPITAL LETTER LONG E
+10402;N # DESERET CAPITAL LETTER LONG A
+10403;N # DESERET CAPITAL LETTER LONG AH
+10404;N # DESERET CAPITAL LETTER LONG O
+10405;N # DESERET CAPITAL LETTER LONG OO
+10406;N # DESERET CAPITAL LETTER SHORT I
+10407;N # DESERET CAPITAL LETTER SHORT E
+10408;N # DESERET CAPITAL LETTER SHORT A
+10409;N # DESERET CAPITAL LETTER SHORT AH
+1040A;N # DESERET CAPITAL LETTER SHORT O
+1040B;N # DESERET CAPITAL LETTER SHORT OO
+1040C;N # DESERET CAPITAL LETTER AY
+1040D;N # DESERET CAPITAL LETTER OW
+1040E;N # DESERET CAPITAL LETTER WU
+1040F;N # DESERET CAPITAL LETTER YEE
+10410;N # DESERET CAPITAL LETTER H
+10411;N # DESERET CAPITAL LETTER PEE
+10412;N # DESERET CAPITAL LETTER BEE
+10413;N # DESERET CAPITAL LETTER TEE
+10414;N # DESERET CAPITAL LETTER DEE
+10415;N # DESERET CAPITAL LETTER CHEE
+10416;N # DESERET CAPITAL LETTER JEE
+10417;N # DESERET CAPITAL LETTER KAY
+10418;N # DESERET CAPITAL LETTER GAY
+10419;N # DESERET CAPITAL LETTER EF
+1041A;N # DESERET CAPITAL LETTER VEE
+1041B;N # DESERET CAPITAL LETTER ETH
+1041C;N # DESERET CAPITAL LETTER THEE
+1041D;N # DESERET CAPITAL LETTER ES
+1041E;N # DESERET CAPITAL LETTER ZEE
+1041F;N # DESERET CAPITAL LETTER ESH
+10420;N # DESERET CAPITAL LETTER ZHEE
+10421;N # DESERET CAPITAL LETTER ER
+10422;N # DESERET CAPITAL LETTER EL
+10423;N # DESERET CAPITAL LETTER EM
+10424;N # DESERET CAPITAL LETTER EN
+10425;N # DESERET CAPITAL LETTER ENG
+10426;N # DESERET CAPITAL LETTER OI
+10427;N # DESERET CAPITAL LETTER EW
+10428;N # DESERET SMALL LETTER LONG I
+10429;N # DESERET SMALL LETTER LONG E
+1042A;N # DESERET SMALL LETTER LONG A
+1042B;N # DESERET SMALL LETTER LONG AH
+1042C;N # DESERET SMALL LETTER LONG O
+1042D;N # DESERET SMALL LETTER LONG OO
+1042E;N # DESERET SMALL LETTER SHORT I
+1042F;N # DESERET SMALL LETTER SHORT E
+10430;N # DESERET SMALL LETTER SHORT A
+10431;N # DESERET SMALL LETTER SHORT AH
+10432;N # DESERET SMALL LETTER SHORT O
+10433;N # DESERET SMALL LETTER SHORT OO
+10434;N # DESERET SMALL LETTER AY
+10435;N # DESERET SMALL LETTER OW
+10436;N # DESERET SMALL LETTER WU
+10437;N # DESERET SMALL LETTER YEE
+10438;N # DESERET SMALL LETTER H
+10439;N # DESERET SMALL LETTER PEE
+1043A;N # DESERET SMALL LETTER BEE
+1043B;N # DESERET SMALL LETTER TEE
+1043C;N # DESERET SMALL LETTER DEE
+1043D;N # DESERET SMALL LETTER CHEE
+1043E;N # DESERET SMALL LETTER JEE
+1043F;N # DESERET SMALL LETTER KAY
+10440;N # DESERET SMALL LETTER GAY
+10441;N # DESERET SMALL LETTER EF
+10442;N # DESERET SMALL LETTER VEE
+10443;N # DESERET SMALL LETTER ETH
+10444;N # DESERET SMALL LETTER THEE
+10445;N # DESERET SMALL LETTER ES
+10446;N # DESERET SMALL LETTER ZEE
+10447;N # DESERET SMALL LETTER ESH
+10448;N # DESERET SMALL LETTER ZHEE
+10449;N # DESERET SMALL LETTER ER
+1044A;N # DESERET SMALL LETTER EL
+1044B;N # DESERET SMALL LETTER EM
+1044C;N # DESERET SMALL LETTER EN
+1044D;N # DESERET SMALL LETTER ENG
+1044E;N # DESERET SMALL LETTER OI
+1044F;N # DESERET SMALL LETTER EW
+10450;N # SHAVIAN LETTER PEEP
+10451;N # SHAVIAN LETTER TOT
+10452;N # SHAVIAN LETTER KICK
+10453;N # SHAVIAN LETTER FEE
+10454;N # SHAVIAN LETTER THIGH
+10455;N # SHAVIAN LETTER SO
+10456;N # SHAVIAN LETTER SURE
+10457;N # SHAVIAN LETTER CHURCH
+10458;N # SHAVIAN LETTER YEA
+10459;N # SHAVIAN LETTER HUNG
+1045A;N # SHAVIAN LETTER BIB
+1045B;N # SHAVIAN LETTER DEAD
+1045C;N # SHAVIAN LETTER GAG
+1045D;N # SHAVIAN LETTER VOW
+1045E;N # SHAVIAN LETTER THEY
+1045F;N # SHAVIAN LETTER ZOO
+10460;N # SHAVIAN LETTER MEASURE
+10461;N # SHAVIAN LETTER JUDGE
+10462;N # SHAVIAN LETTER WOE
+10463;N # SHAVIAN LETTER HA-HA
+10464;N # SHAVIAN LETTER LOLL
+10465;N # SHAVIAN LETTER MIME
+10466;N # SHAVIAN LETTER IF
+10467;N # SHAVIAN LETTER EGG
+10468;N # SHAVIAN LETTER ASH
+10469;N # SHAVIAN LETTER ADO
+1046A;N # SHAVIAN LETTER ON
+1046B;N # SHAVIAN LETTER WOOL
+1046C;N # SHAVIAN LETTER OUT
+1046D;N # SHAVIAN LETTER AH
+1046E;N # SHAVIAN LETTER ROAR
+1046F;N # SHAVIAN LETTER NUN
+10470;N # SHAVIAN LETTER EAT
+10471;N # SHAVIAN LETTER AGE
+10472;N # SHAVIAN LETTER ICE
+10473;N # SHAVIAN LETTER UP
+10474;N # SHAVIAN LETTER OAK
+10475;N # SHAVIAN LETTER OOZE
+10476;N # SHAVIAN LETTER OIL
+10477;N # SHAVIAN LETTER AWE
+10478;N # SHAVIAN LETTER ARE
+10479;N # SHAVIAN LETTER OR
+1047A;N # SHAVIAN LETTER AIR
+1047B;N # SHAVIAN LETTER ERR
+1047C;N # SHAVIAN LETTER ARRAY
+1047D;N # SHAVIAN LETTER EAR
+1047E;N # SHAVIAN LETTER IAN
+1047F;N # SHAVIAN LETTER YEW
+10480;N # OSMANYA LETTER ALEF
+10481;N # OSMANYA LETTER BA
+10482;N # OSMANYA LETTER TA
+10483;N # OSMANYA LETTER JA
+10484;N # OSMANYA LETTER XA
+10485;N # OSMANYA LETTER KHA
+10486;N # OSMANYA LETTER DEEL
+10487;N # OSMANYA LETTER RA
+10488;N # OSMANYA LETTER SA
+10489;N # OSMANYA LETTER SHIIN
+1048A;N # OSMANYA LETTER DHA
+1048B;N # OSMANYA LETTER CAYN
+1048C;N # OSMANYA LETTER GA
+1048D;N # OSMANYA LETTER FA
+1048E;N # OSMANYA LETTER QAAF
+1048F;N # OSMANYA LETTER KAAF
+10490;N # OSMANYA LETTER LAAN
+10491;N # OSMANYA LETTER MIIN
+10492;N # OSMANYA LETTER NUUN
+10493;N # OSMANYA LETTER WAW
+10494;N # OSMANYA LETTER HA
+10495;N # OSMANYA LETTER YA
+10496;N # OSMANYA LETTER A
+10497;N # OSMANYA LETTER E
+10498;N # OSMANYA LETTER I
+10499;N # OSMANYA LETTER O
+1049A;N # OSMANYA LETTER U
+1049B;N # OSMANYA LETTER AA
+1049C;N # OSMANYA LETTER EE
+1049D;N # OSMANYA LETTER OO
+104A0;N # OSMANYA DIGIT ZERO
+104A1;N # OSMANYA DIGIT ONE
+104A2;N # OSMANYA DIGIT TWO
+104A3;N # OSMANYA DIGIT THREE
+104A4;N # OSMANYA DIGIT FOUR
+104A5;N # OSMANYA DIGIT FIVE
+104A6;N # OSMANYA DIGIT SIX
+104A7;N # OSMANYA DIGIT SEVEN
+104A8;N # OSMANYA DIGIT EIGHT
+104A9;N # OSMANYA DIGIT NINE
+10800;N # CYPRIOT SYLLABLE A
+10801;N # CYPRIOT SYLLABLE E
+10802;N # CYPRIOT SYLLABLE I
+10803;N # CYPRIOT SYLLABLE O
+10804;N # CYPRIOT SYLLABLE U
+10805;N # CYPRIOT SYLLABLE JA
+10808;N # CYPRIOT SYLLABLE JO
+1080A;N # CYPRIOT SYLLABLE KA
+1080B;N # CYPRIOT SYLLABLE KE
+1080C;N # CYPRIOT SYLLABLE KI
+1080D;N # CYPRIOT SYLLABLE KO
+1080E;N # CYPRIOT SYLLABLE KU
+1080F;N # CYPRIOT SYLLABLE LA
+10810;N # CYPRIOT SYLLABLE LE
+10811;N # CYPRIOT SYLLABLE LI
+10812;N # CYPRIOT SYLLABLE LO
+10813;N # CYPRIOT SYLLABLE LU
+10814;N # CYPRIOT SYLLABLE MA
+10815;N # CYPRIOT SYLLABLE ME
+10816;N # CYPRIOT SYLLABLE MI
+10817;N # CYPRIOT SYLLABLE MO
+10818;N # CYPRIOT SYLLABLE MU
+10819;N # CYPRIOT SYLLABLE NA
+1081A;N # CYPRIOT SYLLABLE NE
+1081B;N # CYPRIOT SYLLABLE NI
+1081C;N # CYPRIOT SYLLABLE NO
+1081D;N # CYPRIOT SYLLABLE NU
+1081E;N # CYPRIOT SYLLABLE PA
+1081F;N # CYPRIOT SYLLABLE PE
+10820;N # CYPRIOT SYLLABLE PI
+10821;N # CYPRIOT SYLLABLE PO
+10822;N # CYPRIOT SYLLABLE PU
+10823;N # CYPRIOT SYLLABLE RA
+10824;N # CYPRIOT SYLLABLE RE
+10825;N # CYPRIOT SYLLABLE RI
+10826;N # CYPRIOT SYLLABLE RO
+10827;N # CYPRIOT SYLLABLE RU
+10828;N # CYPRIOT SYLLABLE SA
+10829;N # CYPRIOT SYLLABLE SE
+1082A;N # CYPRIOT SYLLABLE SI
+1082B;N # CYPRIOT SYLLABLE SO
+1082C;N # CYPRIOT SYLLABLE SU
+1082D;N # CYPRIOT SYLLABLE TA
+1082E;N # CYPRIOT SYLLABLE TE
+1082F;N # CYPRIOT SYLLABLE TI
+10830;N # CYPRIOT SYLLABLE TO
+10831;N # CYPRIOT SYLLABLE TU
+10832;N # CYPRIOT SYLLABLE WA
+10833;N # CYPRIOT SYLLABLE WE
+10834;N # CYPRIOT SYLLABLE WI
+10835;N # CYPRIOT SYLLABLE WO
+10837;N # CYPRIOT SYLLABLE XA
+10838;N # CYPRIOT SYLLABLE XE
+1083C;N # CYPRIOT SYLLABLE ZA
+1083F;N # CYPRIOT SYLLABLE ZO
+10840;N # IMPERIAL ARAMAIC LETTER ALEPH
+10841;N # IMPERIAL ARAMAIC LETTER BETH
+10842;N # IMPERIAL ARAMAIC LETTER GIMEL
+10843;N # IMPERIAL ARAMAIC LETTER DALETH
+10844;N # IMPERIAL ARAMAIC LETTER HE
+10845;N # IMPERIAL ARAMAIC LETTER WAW
+10846;N # IMPERIAL ARAMAIC LETTER ZAYIN
+10847;N # IMPERIAL ARAMAIC LETTER HETH
+10848;N # IMPERIAL ARAMAIC LETTER TETH
+10849;N # IMPERIAL ARAMAIC LETTER YODH
+1084A;N # IMPERIAL ARAMAIC LETTER KAPH
+1084B;N # IMPERIAL ARAMAIC LETTER LAMEDH
+1084C;N # IMPERIAL ARAMAIC LETTER MEM
+1084D;N # IMPERIAL ARAMAIC LETTER NUN
+1084E;N # IMPERIAL ARAMAIC LETTER SAMEKH
+1084F;N # IMPERIAL ARAMAIC LETTER AYIN
+10850;N # IMPERIAL ARAMAIC LETTER PE
+10851;N # IMPERIAL ARAMAIC LETTER SADHE
+10852;N # IMPERIAL ARAMAIC LETTER QOPH
+10853;N # IMPERIAL ARAMAIC LETTER RESH
+10854;N # IMPERIAL ARAMAIC LETTER SHIN
+10855;N # IMPERIAL ARAMAIC LETTER TAW
+10857;N # IMPERIAL ARAMAIC SECTION SIGN
+10858;N # IMPERIAL ARAMAIC NUMBER ONE
+10859;N # IMPERIAL ARAMAIC NUMBER TWO
+1085A;N # IMPERIAL ARAMAIC NUMBER THREE
+1085B;N # IMPERIAL ARAMAIC NUMBER TEN
+1085C;N # IMPERIAL ARAMAIC NUMBER TWENTY
+1085D;N # IMPERIAL ARAMAIC NUMBER ONE HUNDRED
+1085E;N # IMPERIAL ARAMAIC NUMBER ONE THOUSAND
+1085F;N # IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10900;N # PHOENICIAN LETTER ALF
+10901;N # PHOENICIAN LETTER BET
+10902;N # PHOENICIAN LETTER GAML
+10903;N # PHOENICIAN LETTER DELT
+10904;N # PHOENICIAN LETTER HE
+10905;N # PHOENICIAN LETTER WAU
+10906;N # PHOENICIAN LETTER ZAI
+10907;N # PHOENICIAN LETTER HET
+10908;N # PHOENICIAN LETTER TET
+10909;N # PHOENICIAN LETTER YOD
+1090A;N # PHOENICIAN LETTER KAF
+1090B;N # PHOENICIAN LETTER LAMD
+1090C;N # PHOENICIAN LETTER MEM
+1090D;N # PHOENICIAN LETTER NUN
+1090E;N # PHOENICIAN LETTER SEMK
+1090F;N # PHOENICIAN LETTER AIN
+10910;N # PHOENICIAN LETTER PE
+10911;N # PHOENICIAN LETTER SADE
+10912;N # PHOENICIAN LETTER QOF
+10913;N # PHOENICIAN LETTER ROSH
+10914;N # PHOENICIAN LETTER SHIN
+10915;N # PHOENICIAN LETTER TAU
+10916;N # PHOENICIAN NUMBER ONE
+10917;N # PHOENICIAN NUMBER TEN
+10918;N # PHOENICIAN NUMBER TWENTY
+10919;N # PHOENICIAN NUMBER ONE HUNDRED
+1091A;N # PHOENICIAN NUMBER TWO
+1091B;N # PHOENICIAN NUMBER THREE
+1091F;N # PHOENICIAN WORD SEPARATOR
+10920;N # LYDIAN LETTER A
+10921;N # LYDIAN LETTER B
+10922;N # LYDIAN LETTER G
+10923;N # LYDIAN LETTER D
+10924;N # LYDIAN LETTER E
+10925;N # LYDIAN LETTER V
+10926;N # LYDIAN LETTER I
+10927;N # LYDIAN LETTER Y
+10928;N # LYDIAN LETTER K
+10929;N # LYDIAN LETTER L
+1092A;N # LYDIAN LETTER M
+1092B;N # LYDIAN LETTER N
+1092C;N # LYDIAN LETTER O
+1092D;N # LYDIAN LETTER R
+1092E;N # LYDIAN LETTER SS
+1092F;N # LYDIAN LETTER T
+10930;N # LYDIAN LETTER U
+10931;N # LYDIAN LETTER F
+10932;N # LYDIAN LETTER Q
+10933;N # LYDIAN LETTER S
+10934;N # LYDIAN LETTER TT
+10935;N # LYDIAN LETTER AN
+10936;N # LYDIAN LETTER EN
+10937;N # LYDIAN LETTER LY
+10938;N # LYDIAN LETTER NN
+10939;N # LYDIAN LETTER C
+1093F;N # LYDIAN TRIANGULAR MARK
+10A00;N # KHAROSHTHI LETTER A
+10A01;N # KHAROSHTHI VOWEL SIGN I
+10A02;N # KHAROSHTHI VOWEL SIGN U
+10A03;N # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05;N # KHAROSHTHI VOWEL SIGN E
+10A06;N # KHAROSHTHI VOWEL SIGN O
+10A0C;N # KHAROSHTHI VOWEL LENGTH MARK
+10A0D;N # KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E;N # KHAROSHTHI SIGN ANUSVARA
+10A0F;N # KHAROSHTHI SIGN VISARGA
+10A10;N # KHAROSHTHI LETTER KA
+10A11;N # KHAROSHTHI LETTER KHA
+10A12;N # KHAROSHTHI LETTER GA
+10A13;N # KHAROSHTHI LETTER GHA
+10A15;N # KHAROSHTHI LETTER CA
+10A16;N # KHAROSHTHI LETTER CHA
+10A17;N # KHAROSHTHI LETTER JA
+10A19;N # KHAROSHTHI LETTER NYA
+10A1A;N # KHAROSHTHI LETTER TTA
+10A1B;N # KHAROSHTHI LETTER TTHA
+10A1C;N # KHAROSHTHI LETTER DDA
+10A1D;N # KHAROSHTHI LETTER DDHA
+10A1E;N # KHAROSHTHI LETTER NNA
+10A1F;N # KHAROSHTHI LETTER TA
+10A20;N # KHAROSHTHI LETTER THA
+10A21;N # KHAROSHTHI LETTER DA
+10A22;N # KHAROSHTHI LETTER DHA
+10A23;N # KHAROSHTHI LETTER NA
+10A24;N # KHAROSHTHI LETTER PA
+10A25;N # KHAROSHTHI LETTER PHA
+10A26;N # KHAROSHTHI LETTER BA
+10A27;N # KHAROSHTHI LETTER BHA
+10A28;N # KHAROSHTHI LETTER MA
+10A29;N # KHAROSHTHI LETTER YA
+10A2A;N # KHAROSHTHI LETTER RA
+10A2B;N # KHAROSHTHI LETTER LA
+10A2C;N # KHAROSHTHI LETTER VA
+10A2D;N # KHAROSHTHI LETTER SHA
+10A2E;N # KHAROSHTHI LETTER SSA
+10A2F;N # KHAROSHTHI LETTER SA
+10A30;N # KHAROSHTHI LETTER ZA
+10A31;N # KHAROSHTHI LETTER HA
+10A32;N # KHAROSHTHI LETTER KKA
+10A33;N # KHAROSHTHI LETTER TTTHA
+10A38;N # KHAROSHTHI SIGN BAR ABOVE
+10A39;N # KHAROSHTHI SIGN CAUDA
+10A3A;N # KHAROSHTHI SIGN DOT BELOW
+10A3F;N # KHAROSHTHI VIRAMA
+10A40;N # KHAROSHTHI DIGIT ONE
+10A41;N # KHAROSHTHI DIGIT TWO
+10A42;N # KHAROSHTHI DIGIT THREE
+10A43;N # KHAROSHTHI DIGIT FOUR
+10A44;N # KHAROSHTHI NUMBER TEN
+10A45;N # KHAROSHTHI NUMBER TWENTY
+10A46;N # KHAROSHTHI NUMBER ONE HUNDRED
+10A47;N # KHAROSHTHI NUMBER ONE THOUSAND
+10A50;N # KHAROSHTHI PUNCTUATION DOT
+10A51;N # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52;N # KHAROSHTHI PUNCTUATION CIRCLE
+10A53;N # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54;N # KHAROSHTHI PUNCTUATION MANGALAM
+10A55;N # KHAROSHTHI PUNCTUATION LOTUS
+10A56;N # KHAROSHTHI PUNCTUATION DANDA
+10A57;N # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;N # KHAROSHTHI PUNCTUATION LINES
+10A60;N # OLD SOUTH ARABIAN LETTER HE
+10A61;N # OLD SOUTH ARABIAN LETTER LAMEDH
+10A62;N # OLD SOUTH ARABIAN LETTER HETH
+10A63;N # OLD SOUTH ARABIAN LETTER MEM
+10A64;N # OLD SOUTH ARABIAN LETTER QOPH
+10A65;N # OLD SOUTH ARABIAN LETTER WAW
+10A66;N # OLD SOUTH ARABIAN LETTER SHIN
+10A67;N # OLD SOUTH ARABIAN LETTER RESH
+10A68;N # OLD SOUTH ARABIAN LETTER BETH
+10A69;N # OLD SOUTH ARABIAN LETTER TAW
+10A6A;N # OLD SOUTH ARABIAN LETTER SAT
+10A6B;N # OLD SOUTH ARABIAN LETTER KAPH
+10A6C;N # OLD SOUTH ARABIAN LETTER NUN
+10A6D;N # OLD SOUTH ARABIAN LETTER KHETH
+10A6E;N # OLD SOUTH ARABIAN LETTER SADHE
+10A6F;N # OLD SOUTH ARABIAN LETTER SAMEKH
+10A70;N # OLD SOUTH ARABIAN LETTER FE
+10A71;N # OLD SOUTH ARABIAN LETTER ALEF
+10A72;N # OLD SOUTH ARABIAN LETTER AYN
+10A73;N # OLD SOUTH ARABIAN LETTER DHADHE
+10A74;N # OLD SOUTH ARABIAN LETTER GIMEL
+10A75;N # OLD SOUTH ARABIAN LETTER DALETH
+10A76;N # OLD SOUTH ARABIAN LETTER GHAYN
+10A77;N # OLD SOUTH ARABIAN LETTER TETH
+10A78;N # OLD SOUTH ARABIAN LETTER ZAYN
+10A79;N # OLD SOUTH ARABIAN LETTER DHALETH
+10A7A;N # OLD SOUTH ARABIAN LETTER YODH
+10A7B;N # OLD SOUTH ARABIAN LETTER THAW
+10A7C;N # OLD SOUTH ARABIAN LETTER THETH
+10A7D;N # OLD SOUTH ARABIAN NUMBER ONE
+10A7E;N # OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F;N # OLD SOUTH ARABIAN NUMERIC INDICATOR
+10B00;N # AVESTAN LETTER A
+10B01;N # AVESTAN LETTER AA
+10B02;N # AVESTAN LETTER AO
+10B03;N # AVESTAN LETTER AAO
+10B04;N # AVESTAN LETTER AN
+10B05;N # AVESTAN LETTER AAN
+10B06;N # AVESTAN LETTER AE
+10B07;N # AVESTAN LETTER AEE
+10B08;N # AVESTAN LETTER E
+10B09;N # AVESTAN LETTER EE
+10B0A;N # AVESTAN LETTER O
+10B0B;N # AVESTAN LETTER OO
+10B0C;N # AVESTAN LETTER I
+10B0D;N # AVESTAN LETTER II
+10B0E;N # AVESTAN LETTER U
+10B0F;N # AVESTAN LETTER UU
+10B10;N # AVESTAN LETTER KE
+10B11;N # AVESTAN LETTER XE
+10B12;N # AVESTAN LETTER XYE
+10B13;N # AVESTAN LETTER XVE
+10B14;N # AVESTAN LETTER GE
+10B15;N # AVESTAN LETTER GGE
+10B16;N # AVESTAN LETTER GHE
+10B17;N # AVESTAN LETTER CE
+10B18;N # AVESTAN LETTER JE
+10B19;N # AVESTAN LETTER TE
+10B1A;N # AVESTAN LETTER THE
+10B1B;N # AVESTAN LETTER DE
+10B1C;N # AVESTAN LETTER DHE
+10B1D;N # AVESTAN LETTER TTE
+10B1E;N # AVESTAN LETTER PE
+10B1F;N # AVESTAN LETTER FE
+10B20;N # AVESTAN LETTER BE
+10B21;N # AVESTAN LETTER BHE
+10B22;N # AVESTAN LETTER NGE
+10B23;N # AVESTAN LETTER NGYE
+10B24;N # AVESTAN LETTER NGVE
+10B25;N # AVESTAN LETTER NE
+10B26;N # AVESTAN LETTER NYE
+10B27;N # AVESTAN LETTER NNE
+10B28;N # AVESTAN LETTER ME
+10B29;N # AVESTAN LETTER HME
+10B2A;N # AVESTAN LETTER YYE
+10B2B;N # AVESTAN LETTER YE
+10B2C;N # AVESTAN LETTER VE
+10B2D;N # AVESTAN LETTER RE
+10B2E;N # AVESTAN LETTER LE
+10B2F;N # AVESTAN LETTER SE
+10B30;N # AVESTAN LETTER ZE
+10B31;N # AVESTAN LETTER SHE
+10B32;N # AVESTAN LETTER ZHE
+10B33;N # AVESTAN LETTER SHYE
+10B34;N # AVESTAN LETTER SSHE
+10B35;N # AVESTAN LETTER HE
+10B39;N # AVESTAN ABBREVIATION MARK
+10B3A;N # TINY TWO DOTS OVER ONE DOT PUNCTUATION
+10B3B;N # SMALL TWO DOTS OVER ONE DOT PUNCTUATION
+10B3C;N # LARGE TWO DOTS OVER ONE DOT PUNCTUATION
+10B3D;N # LARGE ONE DOT OVER TWO DOTS PUNCTUATION
+10B3E;N # LARGE TWO RINGS OVER ONE RING PUNCTUATION
+10B3F;N # LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B40;N # INSCRIPTIONAL PARTHIAN LETTER ALEPH
+10B41;N # INSCRIPTIONAL PARTHIAN LETTER BETH
+10B42;N # INSCRIPTIONAL PARTHIAN LETTER GIMEL
+10B43;N # INSCRIPTIONAL PARTHIAN LETTER DALETH
+10B44;N # INSCRIPTIONAL PARTHIAN LETTER HE
+10B45;N # INSCRIPTIONAL PARTHIAN LETTER WAW
+10B46;N # INSCRIPTIONAL PARTHIAN LETTER ZAYIN
+10B47;N # INSCRIPTIONAL PARTHIAN LETTER HETH
+10B48;N # INSCRIPTIONAL PARTHIAN LETTER TETH
+10B49;N # INSCRIPTIONAL PARTHIAN LETTER YODH
+10B4A;N # INSCRIPTIONAL PARTHIAN LETTER KAPH
+10B4B;N # INSCRIPTIONAL PARTHIAN LETTER LAMEDH
+10B4C;N # INSCRIPTIONAL PARTHIAN LETTER MEM
+10B4D;N # INSCRIPTIONAL PARTHIAN LETTER NUN
+10B4E;N # INSCRIPTIONAL PARTHIAN LETTER SAMEKH
+10B4F;N # INSCRIPTIONAL PARTHIAN LETTER AYIN
+10B50;N # INSCRIPTIONAL PARTHIAN LETTER PE
+10B51;N # INSCRIPTIONAL PARTHIAN LETTER SADHE
+10B52;N # INSCRIPTIONAL PARTHIAN LETTER QOPH
+10B53;N # INSCRIPTIONAL PARTHIAN LETTER RESH
+10B54;N # INSCRIPTIONAL PARTHIAN LETTER SHIN
+10B55;N # INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58;N # INSCRIPTIONAL PARTHIAN NUMBER ONE
+10B59;N # INSCRIPTIONAL PARTHIAN NUMBER TWO
+10B5A;N # INSCRIPTIONAL PARTHIAN NUMBER THREE
+10B5B;N # INSCRIPTIONAL PARTHIAN NUMBER FOUR
+10B5C;N # INSCRIPTIONAL PARTHIAN NUMBER TEN
+10B5D;N # INSCRIPTIONAL PARTHIAN NUMBER TWENTY
+10B5E;N # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
+10B5F;N # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B60;N # INSCRIPTIONAL PAHLAVI LETTER ALEPH
+10B61;N # INSCRIPTIONAL PAHLAVI LETTER BETH
+10B62;N # INSCRIPTIONAL PAHLAVI LETTER GIMEL
+10B63;N # INSCRIPTIONAL PAHLAVI LETTER DALETH
+10B64;N # INSCRIPTIONAL PAHLAVI LETTER HE
+10B65;N # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH
+10B66;N # INSCRIPTIONAL PAHLAVI LETTER ZAYIN
+10B67;N # INSCRIPTIONAL PAHLAVI LETTER HETH
+10B68;N # INSCRIPTIONAL PAHLAVI LETTER TETH
+10B69;N # INSCRIPTIONAL PAHLAVI LETTER YODH
+10B6A;N # INSCRIPTIONAL PAHLAVI LETTER KAPH
+10B6B;N # INSCRIPTIONAL PAHLAVI LETTER LAMEDH
+10B6C;N # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH
+10B6D;N # INSCRIPTIONAL PAHLAVI LETTER NUN
+10B6E;N # INSCRIPTIONAL PAHLAVI LETTER SAMEKH
+10B6F;N # INSCRIPTIONAL PAHLAVI LETTER PE
+10B70;N # INSCRIPTIONAL PAHLAVI LETTER SADHE
+10B71;N # INSCRIPTIONAL PAHLAVI LETTER SHIN
+10B72;N # INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78;N # INSCRIPTIONAL PAHLAVI NUMBER ONE
+10B79;N # INSCRIPTIONAL PAHLAVI NUMBER TWO
+10B7A;N # INSCRIPTIONAL PAHLAVI NUMBER THREE
+10B7B;N # INSCRIPTIONAL PAHLAVI NUMBER FOUR
+10B7C;N # INSCRIPTIONAL PAHLAVI NUMBER TEN
+10B7D;N # INSCRIPTIONAL PAHLAVI NUMBER TWENTY
+10B7E;N # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
+10B7F;N # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10C00;N # OLD TURKIC LETTER ORKHON A
+10C01;N # OLD TURKIC LETTER YENISEI A
+10C02;N # OLD TURKIC LETTER YENISEI AE
+10C03;N # OLD TURKIC LETTER ORKHON I
+10C04;N # OLD TURKIC LETTER YENISEI I
+10C05;N # OLD TURKIC LETTER YENISEI E
+10C06;N # OLD TURKIC LETTER ORKHON O
+10C07;N # OLD TURKIC LETTER ORKHON OE
+10C08;N # OLD TURKIC LETTER YENISEI OE
+10C09;N # OLD TURKIC LETTER ORKHON AB
+10C0A;N # OLD TURKIC LETTER YENISEI AB
+10C0B;N # OLD TURKIC LETTER ORKHON AEB
+10C0C;N # OLD TURKIC LETTER YENISEI AEB
+10C0D;N # OLD TURKIC LETTER ORKHON AG
+10C0E;N # OLD TURKIC LETTER YENISEI AG
+10C0F;N # OLD TURKIC LETTER ORKHON AEG
+10C10;N # OLD TURKIC LETTER YENISEI AEG
+10C11;N # OLD TURKIC LETTER ORKHON AD
+10C12;N # OLD TURKIC LETTER YENISEI AD
+10C13;N # OLD TURKIC LETTER ORKHON AED
+10C14;N # OLD TURKIC LETTER ORKHON EZ
+10C15;N # OLD TURKIC LETTER YENISEI EZ
+10C16;N # OLD TURKIC LETTER ORKHON AY
+10C17;N # OLD TURKIC LETTER YENISEI AY
+10C18;N # OLD TURKIC LETTER ORKHON AEY
+10C19;N # OLD TURKIC LETTER YENISEI AEY
+10C1A;N # OLD TURKIC LETTER ORKHON AEK
+10C1B;N # OLD TURKIC LETTER YENISEI AEK
+10C1C;N # OLD TURKIC LETTER ORKHON OEK
+10C1D;N # OLD TURKIC LETTER YENISEI OEK
+10C1E;N # OLD TURKIC LETTER ORKHON AL
+10C1F;N # OLD TURKIC LETTER YENISEI AL
+10C20;N # OLD TURKIC LETTER ORKHON AEL
+10C21;N # OLD TURKIC LETTER ORKHON ELT
+10C22;N # OLD TURKIC LETTER ORKHON EM
+10C23;N # OLD TURKIC LETTER ORKHON AN
+10C24;N # OLD TURKIC LETTER ORKHON AEN
+10C25;N # OLD TURKIC LETTER YENISEI AEN
+10C26;N # OLD TURKIC LETTER ORKHON ENT
+10C27;N # OLD TURKIC LETTER YENISEI ENT
+10C28;N # OLD TURKIC LETTER ORKHON ENC
+10C29;N # OLD TURKIC LETTER YENISEI ENC
+10C2A;N # OLD TURKIC LETTER ORKHON ENY
+10C2B;N # OLD TURKIC LETTER YENISEI ENY
+10C2C;N # OLD TURKIC LETTER YENISEI ANG
+10C2D;N # OLD TURKIC LETTER ORKHON ENG
+10C2E;N # OLD TURKIC LETTER YENISEI AENG
+10C2F;N # OLD TURKIC LETTER ORKHON EP
+10C30;N # OLD TURKIC LETTER ORKHON OP
+10C31;N # OLD TURKIC LETTER ORKHON IC
+10C32;N # OLD TURKIC LETTER ORKHON EC
+10C33;N # OLD TURKIC LETTER YENISEI EC
+10C34;N # OLD TURKIC LETTER ORKHON AQ
+10C35;N # OLD TURKIC LETTER YENISEI AQ
+10C36;N # OLD TURKIC LETTER ORKHON IQ
+10C37;N # OLD TURKIC LETTER YENISEI IQ
+10C38;N # OLD TURKIC LETTER ORKHON OQ
+10C39;N # OLD TURKIC LETTER YENISEI OQ
+10C3A;N # OLD TURKIC LETTER ORKHON AR
+10C3B;N # OLD TURKIC LETTER YENISEI AR
+10C3C;N # OLD TURKIC LETTER ORKHON AER
+10C3D;N # OLD TURKIC LETTER ORKHON AS
+10C3E;N # OLD TURKIC LETTER ORKHON AES
+10C3F;N # OLD TURKIC LETTER ORKHON ASH
+10C40;N # OLD TURKIC LETTER YENISEI ASH
+10C41;N # OLD TURKIC LETTER ORKHON ESH
+10C42;N # OLD TURKIC LETTER YENISEI ESH
+10C43;N # OLD TURKIC LETTER ORKHON AT
+10C44;N # OLD TURKIC LETTER YENISEI AT
+10C45;N # OLD TURKIC LETTER ORKHON AET
+10C46;N # OLD TURKIC LETTER YENISEI AET
+10C47;N # OLD TURKIC LETTER ORKHON OT
+10C48;N # OLD TURKIC LETTER ORKHON BASH
+10E60;N # RUMI DIGIT ONE
+10E61;N # RUMI DIGIT TWO
+10E62;N # RUMI DIGIT THREE
+10E63;N # RUMI DIGIT FOUR
+10E64;N # RUMI DIGIT FIVE
+10E65;N # RUMI DIGIT SIX
+10E66;N # RUMI DIGIT SEVEN
+10E67;N # RUMI DIGIT EIGHT
+10E68;N # RUMI DIGIT NINE
+10E69;N # RUMI NUMBER TEN
+10E6A;N # RUMI NUMBER TWENTY
+10E6B;N # RUMI NUMBER THIRTY
+10E6C;N # RUMI NUMBER FORTY
+10E6D;N # RUMI NUMBER FIFTY
+10E6E;N # RUMI NUMBER SIXTY
+10E6F;N # RUMI NUMBER SEVENTY
+10E70;N # RUMI NUMBER EIGHTY
+10E71;N # RUMI NUMBER NINETY
+10E72;N # RUMI NUMBER ONE HUNDRED
+10E73;N # RUMI NUMBER TWO HUNDRED
+10E74;N # RUMI NUMBER THREE HUNDRED
+10E75;N # RUMI NUMBER FOUR HUNDRED
+10E76;N # RUMI NUMBER FIVE HUNDRED
+10E77;N # RUMI NUMBER SIX HUNDRED
+10E78;N # RUMI NUMBER SEVEN HUNDRED
+10E79;N # RUMI NUMBER EIGHT HUNDRED
+10E7A;N # RUMI NUMBER NINE HUNDRED
+10E7B;N # RUMI FRACTION ONE HALF
+10E7C;N # RUMI FRACTION ONE QUARTER
+10E7D;N # RUMI FRACTION ONE THIRD
+10E7E;N # RUMI FRACTION TWO THIRDS
+11080;N # KAITHI SIGN CANDRABINDU
+11081;N # KAITHI SIGN ANUSVARA
+11082;N # KAITHI SIGN VISARGA
+11083;N # KAITHI LETTER A
+11084;N # KAITHI LETTER AA
+11085;N # KAITHI LETTER I
+11086;N # KAITHI LETTER II
+11087;N # KAITHI LETTER U
+11088;N # KAITHI LETTER UU
+11089;N # KAITHI LETTER E
+1108A;N # KAITHI LETTER AI
+1108B;N # KAITHI LETTER O
+1108C;N # KAITHI LETTER AU
+1108D;N # KAITHI LETTER KA
+1108E;N # KAITHI LETTER KHA
+1108F;N # KAITHI LETTER GA
+11090;N # KAITHI LETTER GHA
+11091;N # KAITHI LETTER NGA
+11092;N # KAITHI LETTER CA
+11093;N # KAITHI LETTER CHA
+11094;N # KAITHI LETTER JA
+11095;N # KAITHI LETTER JHA
+11096;N # KAITHI LETTER NYA
+11097;N # KAITHI LETTER TTA
+11098;N # KAITHI LETTER TTHA
+11099;N # KAITHI LETTER DDA
+1109A;N # KAITHI LETTER DDDHA
+1109B;N # KAITHI LETTER DDHA
+1109C;N # KAITHI LETTER RHA
+1109D;N # KAITHI LETTER NNA
+1109E;N # KAITHI LETTER TA
+1109F;N # KAITHI LETTER THA
+110A0;N # KAITHI LETTER DA
+110A1;N # KAITHI LETTER DHA
+110A2;N # KAITHI LETTER NA
+110A3;N # KAITHI LETTER PA
+110A4;N # KAITHI LETTER PHA
+110A5;N # KAITHI LETTER BA
+110A6;N # KAITHI LETTER BHA
+110A7;N # KAITHI LETTER MA
+110A8;N # KAITHI LETTER YA
+110A9;N # KAITHI LETTER RA
+110AA;N # KAITHI LETTER LA
+110AB;N # KAITHI LETTER VA
+110AC;N # KAITHI LETTER SHA
+110AD;N # KAITHI LETTER SSA
+110AE;N # KAITHI LETTER SA
+110AF;N # KAITHI LETTER HA
+110B0;N # KAITHI VOWEL SIGN AA
+110B1;N # KAITHI VOWEL SIGN I
+110B2;N # KAITHI VOWEL SIGN II
+110B3;N # KAITHI VOWEL SIGN U
+110B4;N # KAITHI VOWEL SIGN UU
+110B5;N # KAITHI VOWEL SIGN E
+110B6;N # KAITHI VOWEL SIGN AI
+110B7;N # KAITHI VOWEL SIGN O
+110B8;N # KAITHI VOWEL SIGN AU
+110B9;N # KAITHI SIGN VIRAMA
+110BA;N # KAITHI SIGN NUKTA
+110BB;N # KAITHI ABBREVIATION SIGN
+110BC;N # KAITHI ENUMERATION SIGN
+110BD;N # KAITHI NUMBER SIGN
+110BE;N # KAITHI SECTION MARK
+110BF;N # KAITHI DOUBLE SECTION MARK
+110C0;N # KAITHI DANDA
+110C1;N # KAITHI DOUBLE DANDA
+12000;N # CUNEIFORM SIGN A
+12001;N # CUNEIFORM SIGN A TIMES A
+12002;N # CUNEIFORM SIGN A TIMES BAD
+12003;N # CUNEIFORM SIGN A TIMES GAN2 TENU
+12004;N # CUNEIFORM SIGN A TIMES HA
+12005;N # CUNEIFORM SIGN A TIMES IGI
+12006;N # CUNEIFORM SIGN A TIMES LAGAR GUNU
+12007;N # CUNEIFORM SIGN A TIMES MUSH
+12008;N # CUNEIFORM SIGN A TIMES SAG
+12009;N # CUNEIFORM SIGN A2
+1200A;N # CUNEIFORM SIGN AB
+1200B;N # CUNEIFORM SIGN AB TIMES ASH2
+1200C;N # CUNEIFORM SIGN AB TIMES DUN3 GUNU
+1200D;N # CUNEIFORM SIGN AB TIMES GAL
+1200E;N # CUNEIFORM SIGN AB TIMES GAN2 TENU
+1200F;N # CUNEIFORM SIGN AB TIMES HA
+12010;N # CUNEIFORM SIGN AB TIMES IGI GUNU
+12011;N # CUNEIFORM SIGN AB TIMES IMIN
+12012;N # CUNEIFORM SIGN AB TIMES LAGAB
+12013;N # CUNEIFORM SIGN AB TIMES SHESH
+12014;N # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U
+12015;N # CUNEIFORM SIGN AB GUNU
+12016;N # CUNEIFORM SIGN AB2
+12017;N # CUNEIFORM SIGN AB2 TIMES BALAG
+12018;N # CUNEIFORM SIGN AB2 TIMES GAN2 TENU
+12019;N # CUNEIFORM SIGN AB2 TIMES ME PLUS EN
+1201A;N # CUNEIFORM SIGN AB2 TIMES SHA3
+1201B;N # CUNEIFORM SIGN AB2 TIMES TAK4
+1201C;N # CUNEIFORM SIGN AD
+1201D;N # CUNEIFORM SIGN AK
+1201E;N # CUNEIFORM SIGN AK TIMES ERIN2
+1201F;N # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH
+12020;N # CUNEIFORM SIGN AL
+12021;N # CUNEIFORM SIGN AL TIMES AL
+12022;N # CUNEIFORM SIGN AL TIMES DIM2
+12023;N # CUNEIFORM SIGN AL TIMES GISH
+12024;N # CUNEIFORM SIGN AL TIMES HA
+12025;N # CUNEIFORM SIGN AL TIMES KAD3
+12026;N # CUNEIFORM SIGN AL TIMES KI
+12027;N # CUNEIFORM SIGN AL TIMES SHE
+12028;N # CUNEIFORM SIGN AL TIMES USH
+12029;N # CUNEIFORM SIGN ALAN
+1202A;N # CUNEIFORM SIGN ALEPH
+1202B;N # CUNEIFORM SIGN AMAR
+1202C;N # CUNEIFORM SIGN AMAR TIMES SHE
+1202D;N # CUNEIFORM SIGN AN
+1202E;N # CUNEIFORM SIGN AN OVER AN
+1202F;N # CUNEIFORM SIGN AN THREE TIMES
+12030;N # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA
+12031;N # CUNEIFORM SIGN AN PLUS NAGA SQUARED
+12032;N # CUNEIFORM SIGN ANSHE
+12033;N # CUNEIFORM SIGN APIN
+12034;N # CUNEIFORM SIGN ARAD
+12035;N # CUNEIFORM SIGN ARAD TIMES KUR
+12036;N # CUNEIFORM SIGN ARKAB
+12037;N # CUNEIFORM SIGN ASAL2
+12038;N # CUNEIFORM SIGN ASH
+12039;N # CUNEIFORM SIGN ASH ZIDA TENU
+1203A;N # CUNEIFORM SIGN ASH KABA TENU
+1203B;N # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP
+1203C;N # CUNEIFORM SIGN ASH OVER ASH OVER ASH
+1203D;N # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH
+1203E;N # CUNEIFORM SIGN ASH2
+1203F;N # CUNEIFORM SIGN ASHGAB
+12040;N # CUNEIFORM SIGN BA
+12041;N # CUNEIFORM SIGN BAD
+12042;N # CUNEIFORM SIGN BAG3
+12043;N # CUNEIFORM SIGN BAHAR2
+12044;N # CUNEIFORM SIGN BAL
+12045;N # CUNEIFORM SIGN BAL OVER BAL
+12046;N # CUNEIFORM SIGN BALAG
+12047;N # CUNEIFORM SIGN BAR
+12048;N # CUNEIFORM SIGN BARA2
+12049;N # CUNEIFORM SIGN BI
+1204A;N # CUNEIFORM SIGN BI TIMES A
+1204B;N # CUNEIFORM SIGN BI TIMES GAR
+1204C;N # CUNEIFORM SIGN BI TIMES IGI GUNU
+1204D;N # CUNEIFORM SIGN BU
+1204E;N # CUNEIFORM SIGN BU OVER BU AB
+1204F;N # CUNEIFORM SIGN BU OVER BU UN
+12050;N # CUNEIFORM SIGN BU CROSSING BU
+12051;N # CUNEIFORM SIGN BULUG
+12052;N # CUNEIFORM SIGN BULUG OVER BULUG
+12053;N # CUNEIFORM SIGN BUR
+12054;N # CUNEIFORM SIGN BUR2
+12055;N # CUNEIFORM SIGN DA
+12056;N # CUNEIFORM SIGN DAG
+12057;N # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH
+12058;N # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR
+12059;N # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG
+1205A;N # CUNEIFORM SIGN DAG KISIM5 TIMES BI
+1205B;N # CUNEIFORM SIGN DAG KISIM5 TIMES GA
+1205C;N # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH
+1205D;N # CUNEIFORM SIGN DAG KISIM5 TIMES GI
+1205E;N # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2
+1205F;N # CUNEIFORM SIGN DAG KISIM5 TIMES GUD
+12060;N # CUNEIFORM SIGN DAG KISIM5 TIMES HA
+12061;N # CUNEIFORM SIGN DAG KISIM5 TIMES IR
+12062;N # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU
+12063;N # CUNEIFORM SIGN DAG KISIM5 TIMES KAK
+12064;N # CUNEIFORM SIGN DAG KISIM5 TIMES LA
+12065;N # CUNEIFORM SIGN DAG KISIM5 TIMES LU
+12066;N # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2
+12067;N # CUNEIFORM SIGN DAG KISIM5 TIMES LUM
+12068;N # CUNEIFORM SIGN DAG KISIM5 TIMES NE
+12069;N # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP
+1206A;N # CUNEIFORM SIGN DAG KISIM5 TIMES SI
+1206B;N # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4
+1206C;N # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2
+1206D;N # CUNEIFORM SIGN DAG KISIM5 TIMES USH
+1206E;N # CUNEIFORM SIGN DAM
+1206F;N # CUNEIFORM SIGN DAR
+12070;N # CUNEIFORM SIGN DARA3
+12071;N # CUNEIFORM SIGN DARA4
+12072;N # CUNEIFORM SIGN DI
+12073;N # CUNEIFORM SIGN DIB
+12074;N # CUNEIFORM SIGN DIM
+12075;N # CUNEIFORM SIGN DIM TIMES SHE
+12076;N # CUNEIFORM SIGN DIM2
+12077;N # CUNEIFORM SIGN DIN
+12078;N # CUNEIFORM SIGN DIN KASKAL U GUNU DISH
+12079;N # CUNEIFORM SIGN DISH
+1207A;N # CUNEIFORM SIGN DU
+1207B;N # CUNEIFORM SIGN DU OVER DU
+1207C;N # CUNEIFORM SIGN DU GUNU
+1207D;N # CUNEIFORM SIGN DU SHESHIG
+1207E;N # CUNEIFORM SIGN DUB
+1207F;N # CUNEIFORM SIGN DUB TIMES ESH2
+12080;N # CUNEIFORM SIGN DUB2
+12081;N # CUNEIFORM SIGN DUG
+12082;N # CUNEIFORM SIGN DUGUD
+12083;N # CUNEIFORM SIGN DUH
+12084;N # CUNEIFORM SIGN DUN
+12085;N # CUNEIFORM SIGN DUN3
+12086;N # CUNEIFORM SIGN DUN3 GUNU
+12087;N # CUNEIFORM SIGN DUN3 GUNU GUNU
+12088;N # CUNEIFORM SIGN DUN4
+12089;N # CUNEIFORM SIGN DUR2
+1208A;N # CUNEIFORM SIGN E
+1208B;N # CUNEIFORM SIGN E TIMES PAP
+1208C;N # CUNEIFORM SIGN E OVER E NUN OVER NUN
+1208D;N # CUNEIFORM SIGN E2
+1208E;N # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA
+1208F;N # CUNEIFORM SIGN E2 TIMES GAR
+12090;N # CUNEIFORM SIGN E2 TIMES MI
+12091;N # CUNEIFORM SIGN E2 TIMES SAL
+12092;N # CUNEIFORM SIGN E2 TIMES SHE
+12093;N # CUNEIFORM SIGN E2 TIMES U
+12094;N # CUNEIFORM SIGN EDIN
+12095;N # CUNEIFORM SIGN EGIR
+12096;N # CUNEIFORM SIGN EL
+12097;N # CUNEIFORM SIGN EN
+12098;N # CUNEIFORM SIGN EN TIMES GAN2
+12099;N # CUNEIFORM SIGN EN TIMES GAN2 TENU
+1209A;N # CUNEIFORM SIGN EN TIMES ME
+1209B;N # CUNEIFORM SIGN EN CROSSING EN
+1209C;N # CUNEIFORM SIGN EN OPPOSING EN
+1209D;N # CUNEIFORM SIGN EN SQUARED
+1209E;N # CUNEIFORM SIGN EREN
+1209F;N # CUNEIFORM SIGN ERIN2
+120A0;N # CUNEIFORM SIGN ESH2
+120A1;N # CUNEIFORM SIGN EZEN
+120A2;N # CUNEIFORM SIGN EZEN TIMES A
+120A3;N # CUNEIFORM SIGN EZEN TIMES A PLUS LAL
+120A4;N # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL
+120A5;N # CUNEIFORM SIGN EZEN TIMES AN
+120A6;N # CUNEIFORM SIGN EZEN TIMES BAD
+120A7;N # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU
+120A8;N # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU
+120A9;N # CUNEIFORM SIGN EZEN TIMES HA
+120AA;N # CUNEIFORM SIGN EZEN TIMES HA GUNU
+120AB;N # CUNEIFORM SIGN EZEN TIMES IGI GUNU
+120AC;N # CUNEIFORM SIGN EZEN TIMES KASKAL
+120AD;N # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED
+120AE;N # CUNEIFORM SIGN EZEN TIMES KU3
+120AF;N # CUNEIFORM SIGN EZEN TIMES LA
+120B0;N # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL
+120B1;N # CUNEIFORM SIGN EZEN TIMES LI
+120B2;N # CUNEIFORM SIGN EZEN TIMES LU
+120B3;N # CUNEIFORM SIGN EZEN TIMES U2
+120B4;N # CUNEIFORM SIGN EZEN TIMES UD
+120B5;N # CUNEIFORM SIGN GA
+120B6;N # CUNEIFORM SIGN GA GUNU
+120B7;N # CUNEIFORM SIGN GA2
+120B8;N # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA
+120B9;N # CUNEIFORM SIGN GA2 TIMES A PLUS HA
+120BA;N # CUNEIFORM SIGN GA2 TIMES A PLUS IGI
+120BB;N # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB
+120BC;N # CUNEIFORM SIGN GA2 TIMES AN
+120BD;N # CUNEIFORM SIGN GA2 TIMES ASH
+120BE;N # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL
+120BF;N # CUNEIFORM SIGN GA2 TIMES BAD
+120C0;N # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA
+120C1;N # CUNEIFORM SIGN GA2 TIMES BUR
+120C2;N # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA
+120C3;N # CUNEIFORM SIGN GA2 TIMES DA
+120C4;N # CUNEIFORM SIGN GA2 TIMES DI
+120C5;N # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE
+120C6;N # CUNEIFORM SIGN GA2 TIMES DUB
+120C7;N # CUNEIFORM SIGN GA2 TIMES EL
+120C8;N # CUNEIFORM SIGN GA2 TIMES EL PLUS LA
+120C9;N # CUNEIFORM SIGN GA2 TIMES EN
+120CA;N # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU
+120CB;N # CUNEIFORM SIGN GA2 TIMES GAN2 TENU
+120CC;N # CUNEIFORM SIGN GA2 TIMES GAR
+120CD;N # CUNEIFORM SIGN GA2 TIMES GI
+120CE;N # CUNEIFORM SIGN GA2 TIMES GI4
+120CF;N # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A
+120D0;N # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU
+120D1;N # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2
+120D2;N # CUNEIFORM SIGN GA2 TIMES HAL
+120D3;N # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA
+120D4;N # CUNEIFORM SIGN GA2 TIMES HI PLUS LI
+120D5;N # CUNEIFORM SIGN GA2 TIMES HUB2
+120D6;N # CUNEIFORM SIGN GA2 TIMES IGI GUNU
+120D7;N # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH
+120D8;N # CUNEIFORM SIGN GA2 TIMES KAK
+120D9;N # CUNEIFORM SIGN GA2 TIMES KASKAL
+120DA;N # CUNEIFORM SIGN GA2 TIMES KID
+120DB;N # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL
+120DC;N # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN
+120DD;N # CUNEIFORM SIGN GA2 TIMES LA
+120DE;N # CUNEIFORM SIGN GA2 TIMES ME PLUS EN
+120DF;N # CUNEIFORM SIGN GA2 TIMES MI
+120E0;N # CUNEIFORM SIGN GA2 TIMES NUN
+120E1;N # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN
+120E2;N # CUNEIFORM SIGN GA2 TIMES PA
+120E3;N # CUNEIFORM SIGN GA2 TIMES SAL
+120E4;N # CUNEIFORM SIGN GA2 TIMES SAR
+120E5;N # CUNEIFORM SIGN GA2 TIMES SHE
+120E6;N # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR
+120E7;N # CUNEIFORM SIGN GA2 TIMES SHID
+120E8;N # CUNEIFORM SIGN GA2 TIMES SUM
+120E9;N # CUNEIFORM SIGN GA2 TIMES TAK4
+120EA;N # CUNEIFORM SIGN GA2 TIMES U
+120EB;N # CUNEIFORM SIGN GA2 TIMES UD
+120EC;N # CUNEIFORM SIGN GA2 TIMES UD PLUS DU
+120ED;N # CUNEIFORM SIGN GA2 OVER GA2
+120EE;N # CUNEIFORM SIGN GABA
+120EF;N # CUNEIFORM SIGN GABA CROSSING GABA
+120F0;N # CUNEIFORM SIGN GAD
+120F1;N # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR
+120F2;N # CUNEIFORM SIGN GAL
+120F3;N # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR
+120F4;N # CUNEIFORM SIGN GALAM
+120F5;N # CUNEIFORM SIGN GAM
+120F6;N # CUNEIFORM SIGN GAN
+120F7;N # CUNEIFORM SIGN GAN2
+120F8;N # CUNEIFORM SIGN GAN2 TENU
+120F9;N # CUNEIFORM SIGN GAN2 OVER GAN2
+120FA;N # CUNEIFORM SIGN GAN2 CROSSING GAN2
+120FB;N # CUNEIFORM SIGN GAR
+120FC;N # CUNEIFORM SIGN GAR3
+120FD;N # CUNEIFORM SIGN GASHAN
+120FE;N # CUNEIFORM SIGN GESHTIN
+120FF;N # CUNEIFORM SIGN GESHTIN TIMES KUR
+12100;N # CUNEIFORM SIGN GI
+12101;N # CUNEIFORM SIGN GI TIMES E
+12102;N # CUNEIFORM SIGN GI TIMES U
+12103;N # CUNEIFORM SIGN GI CROSSING GI
+12104;N # CUNEIFORM SIGN GI4
+12105;N # CUNEIFORM SIGN GI4 OVER GI4
+12106;N # CUNEIFORM SIGN GI4 CROSSING GI4
+12107;N # CUNEIFORM SIGN GIDIM
+12108;N # CUNEIFORM SIGN GIR2
+12109;N # CUNEIFORM SIGN GIR2 GUNU
+1210A;N # CUNEIFORM SIGN GIR3
+1210B;N # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI
+1210C;N # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU
+1210D;N # CUNEIFORM SIGN GIR3 TIMES IGI
+1210E;N # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI
+1210F;N # CUNEIFORM SIGN GIR3 TIMES PA
+12110;N # CUNEIFORM SIGN GISAL
+12111;N # CUNEIFORM SIGN GISH
+12112;N # CUNEIFORM SIGN GISH CROSSING GISH
+12113;N # CUNEIFORM SIGN GISH TIMES BAD
+12114;N # CUNEIFORM SIGN GISH TIMES TAK4
+12115;N # CUNEIFORM SIGN GISH TENU
+12116;N # CUNEIFORM SIGN GU
+12117;N # CUNEIFORM SIGN GU CROSSING GU
+12118;N # CUNEIFORM SIGN GU2
+12119;N # CUNEIFORM SIGN GU2 TIMES KAK
+1211A;N # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU
+1211B;N # CUNEIFORM SIGN GU2 TIMES NUN
+1211C;N # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2
+1211D;N # CUNEIFORM SIGN GU2 GUNU
+1211E;N # CUNEIFORM SIGN GUD
+1211F;N # CUNEIFORM SIGN GUD TIMES A PLUS KUR
+12120;N # CUNEIFORM SIGN GUD TIMES KUR
+12121;N # CUNEIFORM SIGN GUD OVER GUD LUGAL
+12122;N # CUNEIFORM SIGN GUL
+12123;N # CUNEIFORM SIGN GUM
+12124;N # CUNEIFORM SIGN GUM TIMES SHE
+12125;N # CUNEIFORM SIGN GUR
+12126;N # CUNEIFORM SIGN GUR7
+12127;N # CUNEIFORM SIGN GURUN
+12128;N # CUNEIFORM SIGN GURUSH
+12129;N # CUNEIFORM SIGN HA
+1212A;N # CUNEIFORM SIGN HA TENU
+1212B;N # CUNEIFORM SIGN HA GUNU
+1212C;N # CUNEIFORM SIGN HAL
+1212D;N # CUNEIFORM SIGN HI
+1212E;N # CUNEIFORM SIGN HI TIMES ASH
+1212F;N # CUNEIFORM SIGN HI TIMES ASH2
+12130;N # CUNEIFORM SIGN HI TIMES BAD
+12131;N # CUNEIFORM SIGN HI TIMES DISH
+12132;N # CUNEIFORM SIGN HI TIMES GAD
+12133;N # CUNEIFORM SIGN HI TIMES KIN
+12134;N # CUNEIFORM SIGN HI TIMES NUN
+12135;N # CUNEIFORM SIGN HI TIMES SHE
+12136;N # CUNEIFORM SIGN HI TIMES U
+12137;N # CUNEIFORM SIGN HU
+12138;N # CUNEIFORM SIGN HUB2
+12139;N # CUNEIFORM SIGN HUB2 TIMES AN
+1213A;N # CUNEIFORM SIGN HUB2 TIMES HAL
+1213B;N # CUNEIFORM SIGN HUB2 TIMES KASKAL
+1213C;N # CUNEIFORM SIGN HUB2 TIMES LISH
+1213D;N # CUNEIFORM SIGN HUB2 TIMES UD
+1213E;N # CUNEIFORM SIGN HUL2
+1213F;N # CUNEIFORM SIGN I
+12140;N # CUNEIFORM SIGN I A
+12141;N # CUNEIFORM SIGN IB
+12142;N # CUNEIFORM SIGN IDIM
+12143;N # CUNEIFORM SIGN IDIM OVER IDIM BUR
+12144;N # CUNEIFORM SIGN IDIM OVER IDIM SQUARED
+12145;N # CUNEIFORM SIGN IG
+12146;N # CUNEIFORM SIGN IGI
+12147;N # CUNEIFORM SIGN IGI DIB
+12148;N # CUNEIFORM SIGN IGI RI
+12149;N # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD
+1214A;N # CUNEIFORM SIGN IGI GUNU
+1214B;N # CUNEIFORM SIGN IL
+1214C;N # CUNEIFORM SIGN IL TIMES GAN2 TENU
+1214D;N # CUNEIFORM SIGN IL2
+1214E;N # CUNEIFORM SIGN IM
+1214F;N # CUNEIFORM SIGN IM TIMES TAK4
+12150;N # CUNEIFORM SIGN IM CROSSING IM
+12151;N # CUNEIFORM SIGN IM OPPOSING IM
+12152;N # CUNEIFORM SIGN IM SQUARED
+12153;N # CUNEIFORM SIGN IMIN
+12154;N # CUNEIFORM SIGN IN
+12155;N # CUNEIFORM SIGN IR
+12156;N # CUNEIFORM SIGN ISH
+12157;N # CUNEIFORM SIGN KA
+12158;N # CUNEIFORM SIGN KA TIMES A
+12159;N # CUNEIFORM SIGN KA TIMES AD
+1215A;N # CUNEIFORM SIGN KA TIMES AD PLUS KU3
+1215B;N # CUNEIFORM SIGN KA TIMES ASH2
+1215C;N # CUNEIFORM SIGN KA TIMES BAD
+1215D;N # CUNEIFORM SIGN KA TIMES BALAG
+1215E;N # CUNEIFORM SIGN KA TIMES BAR
+1215F;N # CUNEIFORM SIGN KA TIMES BI
+12160;N # CUNEIFORM SIGN KA TIMES ERIN2
+12161;N # CUNEIFORM SIGN KA TIMES ESH2
+12162;N # CUNEIFORM SIGN KA TIMES GA
+12163;N # CUNEIFORM SIGN KA TIMES GAL
+12164;N # CUNEIFORM SIGN KA TIMES GAN2 TENU
+12165;N # CUNEIFORM SIGN KA TIMES GAR
+12166;N # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A
+12167;N # CUNEIFORM SIGN KA TIMES GI
+12168;N # CUNEIFORM SIGN KA TIMES GIR2
+12169;N # CUNEIFORM SIGN KA TIMES GISH PLUS SAR
+1216A;N # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH
+1216B;N # CUNEIFORM SIGN KA TIMES GU
+1216C;N # CUNEIFORM SIGN KA TIMES GUR7
+1216D;N # CUNEIFORM SIGN KA TIMES IGI
+1216E;N # CUNEIFORM SIGN KA TIMES IM
+1216F;N # CUNEIFORM SIGN KA TIMES KAK
+12170;N # CUNEIFORM SIGN KA TIMES KI
+12171;N # CUNEIFORM SIGN KA TIMES KID
+12172;N # CUNEIFORM SIGN KA TIMES LI
+12173;N # CUNEIFORM SIGN KA TIMES LU
+12174;N # CUNEIFORM SIGN KA TIMES ME
+12175;N # CUNEIFORM SIGN KA TIMES ME PLUS DU
+12176;N # CUNEIFORM SIGN KA TIMES ME PLUS GI
+12177;N # CUNEIFORM SIGN KA TIMES ME PLUS TE
+12178;N # CUNEIFORM SIGN KA TIMES MI
+12179;N # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ
+1217A;N # CUNEIFORM SIGN KA TIMES NE
+1217B;N # CUNEIFORM SIGN KA TIMES NUN
+1217C;N # CUNEIFORM SIGN KA TIMES PI
+1217D;N # CUNEIFORM SIGN KA TIMES RU
+1217E;N # CUNEIFORM SIGN KA TIMES SA
+1217F;N # CUNEIFORM SIGN KA TIMES SAR
+12180;N # CUNEIFORM SIGN KA TIMES SHA
+12181;N # CUNEIFORM SIGN KA TIMES SHE
+12182;N # CUNEIFORM SIGN KA TIMES SHID
+12183;N # CUNEIFORM SIGN KA TIMES SHU
+12184;N # CUNEIFORM SIGN KA TIMES SIG
+12185;N # CUNEIFORM SIGN KA TIMES SUHUR
+12186;N # CUNEIFORM SIGN KA TIMES TAR
+12187;N # CUNEIFORM SIGN KA TIMES U
+12188;N # CUNEIFORM SIGN KA TIMES U2
+12189;N # CUNEIFORM SIGN KA TIMES UD
+1218A;N # CUNEIFORM SIGN KA TIMES UMUM TIMES PA
+1218B;N # CUNEIFORM SIGN KA TIMES USH
+1218C;N # CUNEIFORM SIGN KA TIMES ZI
+1218D;N # CUNEIFORM SIGN KA2
+1218E;N # CUNEIFORM SIGN KA2 CROSSING KA2
+1218F;N # CUNEIFORM SIGN KAB
+12190;N # CUNEIFORM SIGN KAD2
+12191;N # CUNEIFORM SIGN KAD3
+12192;N # CUNEIFORM SIGN KAD4
+12193;N # CUNEIFORM SIGN KAD5
+12194;N # CUNEIFORM SIGN KAD5 OVER KAD5
+12195;N # CUNEIFORM SIGN KAK
+12196;N # CUNEIFORM SIGN KAK TIMES IGI GUNU
+12197;N # CUNEIFORM SIGN KAL
+12198;N # CUNEIFORM SIGN KAL TIMES BAD
+12199;N # CUNEIFORM SIGN KAL CROSSING KAL
+1219A;N # CUNEIFORM SIGN KAM2
+1219B;N # CUNEIFORM SIGN KAM4
+1219C;N # CUNEIFORM SIGN KASKAL
+1219D;N # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U
+1219E;N # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U
+1219F;N # CUNEIFORM SIGN KESH2
+121A0;N # CUNEIFORM SIGN KI
+121A1;N # CUNEIFORM SIGN KI TIMES BAD
+121A2;N # CUNEIFORM SIGN KI TIMES U
+121A3;N # CUNEIFORM SIGN KI TIMES UD
+121A4;N # CUNEIFORM SIGN KID
+121A5;N # CUNEIFORM SIGN KIN
+121A6;N # CUNEIFORM SIGN KISAL
+121A7;N # CUNEIFORM SIGN KISH
+121A8;N # CUNEIFORM SIGN KISIM5
+121A9;N # CUNEIFORM SIGN KISIM5 OVER KISIM5
+121AA;N # CUNEIFORM SIGN KU
+121AB;N # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2
+121AC;N # CUNEIFORM SIGN KU3
+121AD;N # CUNEIFORM SIGN KU4
+121AE;N # CUNEIFORM SIGN KU4 VARIANT FORM
+121AF;N # CUNEIFORM SIGN KU7
+121B0;N # CUNEIFORM SIGN KUL
+121B1;N # CUNEIFORM SIGN KUL GUNU
+121B2;N # CUNEIFORM SIGN KUN
+121B3;N # CUNEIFORM SIGN KUR
+121B4;N # CUNEIFORM SIGN KUR OPPOSING KUR
+121B5;N # CUNEIFORM SIGN KUSHU2
+121B6;N # CUNEIFORM SIGN KWU318
+121B7;N # CUNEIFORM SIGN LA
+121B8;N # CUNEIFORM SIGN LAGAB
+121B9;N # CUNEIFORM SIGN LAGAB TIMES A
+121BA;N # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA
+121BB;N # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR
+121BC;N # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL
+121BD;N # CUNEIFORM SIGN LAGAB TIMES AL
+121BE;N # CUNEIFORM SIGN LAGAB TIMES AN
+121BF;N # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU
+121C0;N # CUNEIFORM SIGN LAGAB TIMES BAD
+121C1;N # CUNEIFORM SIGN LAGAB TIMES BI
+121C2;N # CUNEIFORM SIGN LAGAB TIMES DAR
+121C3;N # CUNEIFORM SIGN LAGAB TIMES EN
+121C4;N # CUNEIFORM SIGN LAGAB TIMES GA
+121C5;N # CUNEIFORM SIGN LAGAB TIMES GAR
+121C6;N # CUNEIFORM SIGN LAGAB TIMES GUD
+121C7;N # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD
+121C8;N # CUNEIFORM SIGN LAGAB TIMES HA
+121C9;N # CUNEIFORM SIGN LAGAB TIMES HAL
+121CA;N # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN
+121CB;N # CUNEIFORM SIGN LAGAB TIMES IGI GUNU
+121CC;N # CUNEIFORM SIGN LAGAB TIMES IM
+121CD;N # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA
+121CE;N # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU
+121CF;N # CUNEIFORM SIGN LAGAB TIMES KI
+121D0;N # CUNEIFORM SIGN LAGAB TIMES KIN
+121D1;N # CUNEIFORM SIGN LAGAB TIMES KU3
+121D2;N # CUNEIFORM SIGN LAGAB TIMES KUL
+121D3;N # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A
+121D4;N # CUNEIFORM SIGN LAGAB TIMES LAGAB
+121D5;N # CUNEIFORM SIGN LAGAB TIMES LISH
+121D6;N # CUNEIFORM SIGN LAGAB TIMES LU
+121D7;N # CUNEIFORM SIGN LAGAB TIMES LUL
+121D8;N # CUNEIFORM SIGN LAGAB TIMES ME
+121D9;N # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN
+121DA;N # CUNEIFORM SIGN LAGAB TIMES MUSH
+121DB;N # CUNEIFORM SIGN LAGAB TIMES NE
+121DC;N # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM
+121DD;N # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2
+121DE;N # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU
+121DF;N # CUNEIFORM SIGN LAGAB TIMES SHU2
+121E0;N # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2
+121E1;N # CUNEIFORM SIGN LAGAB TIMES SUM
+121E2;N # CUNEIFORM SIGN LAGAB TIMES TAG
+121E3;N # CUNEIFORM SIGN LAGAB TIMES TAK4
+121E4;N # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA
+121E5;N # CUNEIFORM SIGN LAGAB TIMES U
+121E6;N # CUNEIFORM SIGN LAGAB TIMES U PLUS A
+121E7;N # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U
+121E8;N # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH
+121E9;N # CUNEIFORM SIGN LAGAB TIMES UD
+121EA;N # CUNEIFORM SIGN LAGAB TIMES USH
+121EB;N # CUNEIFORM SIGN LAGAB SQUARED
+121EC;N # CUNEIFORM SIGN LAGAR
+121ED;N # CUNEIFORM SIGN LAGAR TIMES SHE
+121EE;N # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM
+121EF;N # CUNEIFORM SIGN LAGAR GUNU
+121F0;N # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE
+121F1;N # CUNEIFORM SIGN LAHSHU
+121F2;N # CUNEIFORM SIGN LAL
+121F3;N # CUNEIFORM SIGN LAL TIMES LAL
+121F4;N # CUNEIFORM SIGN LAM
+121F5;N # CUNEIFORM SIGN LAM TIMES KUR
+121F6;N # CUNEIFORM SIGN LAM TIMES KUR PLUS RU
+121F7;N # CUNEIFORM SIGN LI
+121F8;N # CUNEIFORM SIGN LIL
+121F9;N # CUNEIFORM SIGN LIMMU2
+121FA;N # CUNEIFORM SIGN LISH
+121FB;N # CUNEIFORM SIGN LU
+121FC;N # CUNEIFORM SIGN LU TIMES BAD
+121FD;N # CUNEIFORM SIGN LU2
+121FE;N # CUNEIFORM SIGN LU2 TIMES AL
+121FF;N # CUNEIFORM SIGN LU2 TIMES BAD
+12200;N # CUNEIFORM SIGN LU2 TIMES ESH2
+12201;N # CUNEIFORM SIGN LU2 TIMES ESH2 TENU
+12202;N # CUNEIFORM SIGN LU2 TIMES GAN2 TENU
+12203;N # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD
+12204;N # CUNEIFORM SIGN LU2 TIMES IM
+12205;N # CUNEIFORM SIGN LU2 TIMES KAD2
+12206;N # CUNEIFORM SIGN LU2 TIMES KAD3
+12207;N # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH
+12208;N # CUNEIFORM SIGN LU2 TIMES KI
+12209;N # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH
+1220A;N # CUNEIFORM SIGN LU2 TIMES LAGAB
+1220B;N # CUNEIFORM SIGN LU2 TIMES ME PLUS EN
+1220C;N # CUNEIFORM SIGN LU2 TIMES NE
+1220D;N # CUNEIFORM SIGN LU2 TIMES NU
+1220E;N # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH
+1220F;N # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU
+12210;N # CUNEIFORM SIGN LU2 TIMES TUG2
+12211;N # CUNEIFORM SIGN LU2 TENU
+12212;N # CUNEIFORM SIGN LU2 CROSSING LU2
+12213;N # CUNEIFORM SIGN LU2 OPPOSING LU2
+12214;N # CUNEIFORM SIGN LU2 SQUARED
+12215;N # CUNEIFORM SIGN LU2 SHESHIG
+12216;N # CUNEIFORM SIGN LU3
+12217;N # CUNEIFORM SIGN LUGAL
+12218;N # CUNEIFORM SIGN LUGAL OVER LUGAL
+12219;N # CUNEIFORM SIGN LUGAL OPPOSING LUGAL
+1221A;N # CUNEIFORM SIGN LUGAL SHESHIG
+1221B;N # CUNEIFORM SIGN LUH
+1221C;N # CUNEIFORM SIGN LUL
+1221D;N # CUNEIFORM SIGN LUM
+1221E;N # CUNEIFORM SIGN LUM OVER LUM
+1221F;N # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR
+12220;N # CUNEIFORM SIGN MA
+12221;N # CUNEIFORM SIGN MA TIMES TAK4
+12222;N # CUNEIFORM SIGN MA GUNU
+12223;N # CUNEIFORM SIGN MA2
+12224;N # CUNEIFORM SIGN MAH
+12225;N # CUNEIFORM SIGN MAR
+12226;N # CUNEIFORM SIGN MASH
+12227;N # CUNEIFORM SIGN MASH2
+12228;N # CUNEIFORM SIGN ME
+12229;N # CUNEIFORM SIGN MES
+1222A;N # CUNEIFORM SIGN MI
+1222B;N # CUNEIFORM SIGN MIN
+1222C;N # CUNEIFORM SIGN MU
+1222D;N # CUNEIFORM SIGN MU OVER MU
+1222E;N # CUNEIFORM SIGN MUG
+1222F;N # CUNEIFORM SIGN MUG GUNU
+12230;N # CUNEIFORM SIGN MUNSUB
+12231;N # CUNEIFORM SIGN MURGU2
+12232;N # CUNEIFORM SIGN MUSH
+12233;N # CUNEIFORM SIGN MUSH TIMES A
+12234;N # CUNEIFORM SIGN MUSH TIMES KUR
+12235;N # CUNEIFORM SIGN MUSH TIMES ZA
+12236;N # CUNEIFORM SIGN MUSH OVER MUSH
+12237;N # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA
+12238;N # CUNEIFORM SIGN MUSH CROSSING MUSH
+12239;N # CUNEIFORM SIGN MUSH3
+1223A;N # CUNEIFORM SIGN MUSH3 TIMES A
+1223B;N # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI
+1223C;N # CUNEIFORM SIGN MUSH3 TIMES DI
+1223D;N # CUNEIFORM SIGN MUSH3 GUNU
+1223E;N # CUNEIFORM SIGN NA
+1223F;N # CUNEIFORM SIGN NA2
+12240;N # CUNEIFORM SIGN NAGA
+12241;N # CUNEIFORM SIGN NAGA INVERTED
+12242;N # CUNEIFORM SIGN NAGA TIMES SHU TENU
+12243;N # CUNEIFORM SIGN NAGA OPPOSING NAGA
+12244;N # CUNEIFORM SIGN NAGAR
+12245;N # CUNEIFORM SIGN NAM NUTILLU
+12246;N # CUNEIFORM SIGN NAM
+12247;N # CUNEIFORM SIGN NAM2
+12248;N # CUNEIFORM SIGN NE
+12249;N # CUNEIFORM SIGN NE TIMES A
+1224A;N # CUNEIFORM SIGN NE TIMES UD
+1224B;N # CUNEIFORM SIGN NE SHESHIG
+1224C;N # CUNEIFORM SIGN NI
+1224D;N # CUNEIFORM SIGN NI TIMES E
+1224E;N # CUNEIFORM SIGN NI2
+1224F;N # CUNEIFORM SIGN NIM
+12250;N # CUNEIFORM SIGN NIM TIMES GAN2 TENU
+12251;N # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU
+12252;N # CUNEIFORM SIGN NINDA2
+12253;N # CUNEIFORM SIGN NINDA2 TIMES AN
+12254;N # CUNEIFORM SIGN NINDA2 TIMES ASH
+12255;N # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH
+12256;N # CUNEIFORM SIGN NINDA2 TIMES GUD
+12257;N # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU
+12258;N # CUNEIFORM SIGN NINDA2 TIMES NE
+12259;N # CUNEIFORM SIGN NINDA2 TIMES NUN
+1225A;N # CUNEIFORM SIGN NINDA2 TIMES SHE
+1225B;N # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN
+1225C;N # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH
+1225D;N # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH
+1225E;N # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH
+1225F;N # CUNEIFORM SIGN NINDA2 TIMES USH
+12260;N # CUNEIFORM SIGN NISAG
+12261;N # CUNEIFORM SIGN NU
+12262;N # CUNEIFORM SIGN NU11
+12263;N # CUNEIFORM SIGN NUN
+12264;N # CUNEIFORM SIGN NUN LAGAR TIMES GAR
+12265;N # CUNEIFORM SIGN NUN LAGAR TIMES MASH
+12266;N # CUNEIFORM SIGN NUN LAGAR TIMES SAL
+12267;N # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL
+12268;N # CUNEIFORM SIGN NUN LAGAR TIMES USH
+12269;N # CUNEIFORM SIGN NUN TENU
+1226A;N # CUNEIFORM SIGN NUN OVER NUN
+1226B;N # CUNEIFORM SIGN NUN CROSSING NUN
+1226C;N # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR
+1226D;N # CUNEIFORM SIGN NUNUZ
+1226E;N # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB
+1226F;N # CUNEIFORM SIGN NUNUZ AB2 TIMES BI
+12270;N # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG
+12271;N # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD
+12272;N # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU
+12273;N # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3
+12274;N # CUNEIFORM SIGN NUNUZ AB2 TIMES LA
+12275;N # CUNEIFORM SIGN NUNUZ AB2 TIMES NE
+12276;N # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3
+12277;N # CUNEIFORM SIGN NUNUZ AB2 TIMES U2
+12278;N # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI
+12279;N # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U
+1227A;N # CUNEIFORM SIGN PA
+1227B;N # CUNEIFORM SIGN PAD
+1227C;N # CUNEIFORM SIGN PAN
+1227D;N # CUNEIFORM SIGN PAP
+1227E;N # CUNEIFORM SIGN PESH2
+1227F;N # CUNEIFORM SIGN PI
+12280;N # CUNEIFORM SIGN PI TIMES A
+12281;N # CUNEIFORM SIGN PI TIMES AB
+12282;N # CUNEIFORM SIGN PI TIMES BI
+12283;N # CUNEIFORM SIGN PI TIMES BU
+12284;N # CUNEIFORM SIGN PI TIMES E
+12285;N # CUNEIFORM SIGN PI TIMES I
+12286;N # CUNEIFORM SIGN PI TIMES IB
+12287;N # CUNEIFORM SIGN PI TIMES U
+12288;N # CUNEIFORM SIGN PI TIMES U2
+12289;N # CUNEIFORM SIGN PI CROSSING PI
+1228A;N # CUNEIFORM SIGN PIRIG
+1228B;N # CUNEIFORM SIGN PIRIG TIMES KAL
+1228C;N # CUNEIFORM SIGN PIRIG TIMES UD
+1228D;N # CUNEIFORM SIGN PIRIG TIMES ZA
+1228E;N # CUNEIFORM SIGN PIRIG OPPOSING PIRIG
+1228F;N # CUNEIFORM SIGN RA
+12290;N # CUNEIFORM SIGN RAB
+12291;N # CUNEIFORM SIGN RI
+12292;N # CUNEIFORM SIGN RU
+12293;N # CUNEIFORM SIGN SA
+12294;N # CUNEIFORM SIGN SAG NUTILLU
+12295;N # CUNEIFORM SIGN SAG
+12296;N # CUNEIFORM SIGN SAG TIMES A
+12297;N # CUNEIFORM SIGN SAG TIMES DU
+12298;N # CUNEIFORM SIGN SAG TIMES DUB
+12299;N # CUNEIFORM SIGN SAG TIMES HA
+1229A;N # CUNEIFORM SIGN SAG TIMES KAK
+1229B;N # CUNEIFORM SIGN SAG TIMES KUR
+1229C;N # CUNEIFORM SIGN SAG TIMES LUM
+1229D;N # CUNEIFORM SIGN SAG TIMES MI
+1229E;N # CUNEIFORM SIGN SAG TIMES NUN
+1229F;N # CUNEIFORM SIGN SAG TIMES SAL
+122A0;N # CUNEIFORM SIGN SAG TIMES SHID
+122A1;N # CUNEIFORM SIGN SAG TIMES TAB
+122A2;N # CUNEIFORM SIGN SAG TIMES U2
+122A3;N # CUNEIFORM SIGN SAG TIMES UB
+122A4;N # CUNEIFORM SIGN SAG TIMES UM
+122A5;N # CUNEIFORM SIGN SAG TIMES UR
+122A6;N # CUNEIFORM SIGN SAG TIMES USH
+122A7;N # CUNEIFORM SIGN SAG OVER SAG
+122A8;N # CUNEIFORM SIGN SAG GUNU
+122A9;N # CUNEIFORM SIGN SAL
+122AA;N # CUNEIFORM SIGN SAL LAGAB TIMES ASH2
+122AB;N # CUNEIFORM SIGN SANGA2
+122AC;N # CUNEIFORM SIGN SAR
+122AD;N # CUNEIFORM SIGN SHA
+122AE;N # CUNEIFORM SIGN SHA3
+122AF;N # CUNEIFORM SIGN SHA3 TIMES A
+122B0;N # CUNEIFORM SIGN SHA3 TIMES BAD
+122B1;N # CUNEIFORM SIGN SHA3 TIMES GISH
+122B2;N # CUNEIFORM SIGN SHA3 TIMES NE
+122B3;N # CUNEIFORM SIGN SHA3 TIMES SHU2
+122B4;N # CUNEIFORM SIGN SHA3 TIMES TUR
+122B5;N # CUNEIFORM SIGN SHA3 TIMES U
+122B6;N # CUNEIFORM SIGN SHA3 TIMES U PLUS A
+122B7;N # CUNEIFORM SIGN SHA6
+122B8;N # CUNEIFORM SIGN SHAB6
+122B9;N # CUNEIFORM SIGN SHAR2
+122BA;N # CUNEIFORM SIGN SHE
+122BB;N # CUNEIFORM SIGN SHE HU
+122BC;N # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR
+122BD;N # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR
+122BE;N # CUNEIFORM SIGN SHEG9
+122BF;N # CUNEIFORM SIGN SHEN
+122C0;N # CUNEIFORM SIGN SHESH
+122C1;N # CUNEIFORM SIGN SHESH2
+122C2;N # CUNEIFORM SIGN SHESHLAM
+122C3;N # CUNEIFORM SIGN SHID
+122C4;N # CUNEIFORM SIGN SHID TIMES A
+122C5;N # CUNEIFORM SIGN SHID TIMES IM
+122C6;N # CUNEIFORM SIGN SHIM
+122C7;N # CUNEIFORM SIGN SHIM TIMES A
+122C8;N # CUNEIFORM SIGN SHIM TIMES BAL
+122C9;N # CUNEIFORM SIGN SHIM TIMES BULUG
+122CA;N # CUNEIFORM SIGN SHIM TIMES DIN
+122CB;N # CUNEIFORM SIGN SHIM TIMES GAR
+122CC;N # CUNEIFORM SIGN SHIM TIMES IGI
+122CD;N # CUNEIFORM SIGN SHIM TIMES IGI GUNU
+122CE;N # CUNEIFORM SIGN SHIM TIMES KUSHU2
+122CF;N # CUNEIFORM SIGN SHIM TIMES LUL
+122D0;N # CUNEIFORM SIGN SHIM TIMES MUG
+122D1;N # CUNEIFORM SIGN SHIM TIMES SAL
+122D2;N # CUNEIFORM SIGN SHINIG
+122D3;N # CUNEIFORM SIGN SHIR
+122D4;N # CUNEIFORM SIGN SHIR TENU
+122D5;N # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR
+122D6;N # CUNEIFORM SIGN SHITA
+122D7;N # CUNEIFORM SIGN SHU
+122D8;N # CUNEIFORM SIGN SHU OVER INVERTED SHU
+122D9;N # CUNEIFORM SIGN SHU2
+122DA;N # CUNEIFORM SIGN SHUBUR
+122DB;N # CUNEIFORM SIGN SI
+122DC;N # CUNEIFORM SIGN SI GUNU
+122DD;N # CUNEIFORM SIGN SIG
+122DE;N # CUNEIFORM SIGN SIG4
+122DF;N # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2
+122E0;N # CUNEIFORM SIGN SIK2
+122E1;N # CUNEIFORM SIGN SILA3
+122E2;N # CUNEIFORM SIGN SU
+122E3;N # CUNEIFORM SIGN SU OVER SU
+122E4;N # CUNEIFORM SIGN SUD
+122E5;N # CUNEIFORM SIGN SUD2
+122E6;N # CUNEIFORM SIGN SUHUR
+122E7;N # CUNEIFORM SIGN SUM
+122E8;N # CUNEIFORM SIGN SUMASH
+122E9;N # CUNEIFORM SIGN SUR
+122EA;N # CUNEIFORM SIGN SUR9
+122EB;N # CUNEIFORM SIGN TA
+122EC;N # CUNEIFORM SIGN TA ASTERISK
+122ED;N # CUNEIFORM SIGN TA TIMES HI
+122EE;N # CUNEIFORM SIGN TA TIMES MI
+122EF;N # CUNEIFORM SIGN TA GUNU
+122F0;N # CUNEIFORM SIGN TAB
+122F1;N # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH
+122F2;N # CUNEIFORM SIGN TAB SQUARED
+122F3;N # CUNEIFORM SIGN TAG
+122F4;N # CUNEIFORM SIGN TAG TIMES BI
+122F5;N # CUNEIFORM SIGN TAG TIMES GUD
+122F6;N # CUNEIFORM SIGN TAG TIMES SHE
+122F7;N # CUNEIFORM SIGN TAG TIMES SHU
+122F8;N # CUNEIFORM SIGN TAG TIMES TUG2
+122F9;N # CUNEIFORM SIGN TAG TIMES UD
+122FA;N # CUNEIFORM SIGN TAK4
+122FB;N # CUNEIFORM SIGN TAR
+122FC;N # CUNEIFORM SIGN TE
+122FD;N # CUNEIFORM SIGN TE GUNU
+122FE;N # CUNEIFORM SIGN TI
+122FF;N # CUNEIFORM SIGN TI TENU
+12300;N # CUNEIFORM SIGN TIL
+12301;N # CUNEIFORM SIGN TIR
+12302;N # CUNEIFORM SIGN TIR TIMES TAK4
+12303;N # CUNEIFORM SIGN TIR OVER TIR
+12304;N # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR
+12305;N # CUNEIFORM SIGN TU
+12306;N # CUNEIFORM SIGN TUG2
+12307;N # CUNEIFORM SIGN TUK
+12308;N # CUNEIFORM SIGN TUM
+12309;N # CUNEIFORM SIGN TUR
+1230A;N # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA
+1230B;N # CUNEIFORM SIGN U
+1230C;N # CUNEIFORM SIGN U GUD
+1230D;N # CUNEIFORM SIGN U U U
+1230E;N # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR
+1230F;N # CUNEIFORM SIGN U OVER U SUR OVER SUR
+12310;N # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED
+12311;N # CUNEIFORM SIGN U2
+12312;N # CUNEIFORM SIGN UB
+12313;N # CUNEIFORM SIGN UD
+12314;N # CUNEIFORM SIGN UD KUSHU2
+12315;N # CUNEIFORM SIGN UD TIMES BAD
+12316;N # CUNEIFORM SIGN UD TIMES MI
+12317;N # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U
+12318;N # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU
+12319;N # CUNEIFORM SIGN UD GUNU
+1231A;N # CUNEIFORM SIGN UD SHESHIG
+1231B;N # CUNEIFORM SIGN UD SHESHIG TIMES BAD
+1231C;N # CUNEIFORM SIGN UDUG
+1231D;N # CUNEIFORM SIGN UM
+1231E;N # CUNEIFORM SIGN UM TIMES LAGAB
+1231F;N # CUNEIFORM SIGN UM TIMES ME PLUS DA
+12320;N # CUNEIFORM SIGN UM TIMES SHA3
+12321;N # CUNEIFORM SIGN UM TIMES U
+12322;N # CUNEIFORM SIGN UMBIN
+12323;N # CUNEIFORM SIGN UMUM
+12324;N # CUNEIFORM SIGN UMUM TIMES KASKAL
+12325;N # CUNEIFORM SIGN UMUM TIMES PA
+12326;N # CUNEIFORM SIGN UN
+12327;N # CUNEIFORM SIGN UN GUNU
+12328;N # CUNEIFORM SIGN UR
+12329;N # CUNEIFORM SIGN UR CROSSING UR
+1232A;N # CUNEIFORM SIGN UR SHESHIG
+1232B;N # CUNEIFORM SIGN UR2
+1232C;N # CUNEIFORM SIGN UR2 TIMES A PLUS HA
+1232D;N # CUNEIFORM SIGN UR2 TIMES A PLUS NA
+1232E;N # CUNEIFORM SIGN UR2 TIMES AL
+1232F;N # CUNEIFORM SIGN UR2 TIMES HA
+12330;N # CUNEIFORM SIGN UR2 TIMES NUN
+12331;N # CUNEIFORM SIGN UR2 TIMES U2
+12332;N # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH
+12333;N # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI
+12334;N # CUNEIFORM SIGN UR4
+12335;N # CUNEIFORM SIGN URI
+12336;N # CUNEIFORM SIGN URI3
+12337;N # CUNEIFORM SIGN URU
+12338;N # CUNEIFORM SIGN URU TIMES A
+12339;N # CUNEIFORM SIGN URU TIMES ASHGAB
+1233A;N # CUNEIFORM SIGN URU TIMES BAR
+1233B;N # CUNEIFORM SIGN URU TIMES DUN
+1233C;N # CUNEIFORM SIGN URU TIMES GA
+1233D;N # CUNEIFORM SIGN URU TIMES GAL
+1233E;N # CUNEIFORM SIGN URU TIMES GAN2 TENU
+1233F;N # CUNEIFORM SIGN URU TIMES GAR
+12340;N # CUNEIFORM SIGN URU TIMES GU
+12341;N # CUNEIFORM SIGN URU TIMES HA
+12342;N # CUNEIFORM SIGN URU TIMES IGI
+12343;N # CUNEIFORM SIGN URU TIMES IM
+12344;N # CUNEIFORM SIGN URU TIMES ISH
+12345;N # CUNEIFORM SIGN URU TIMES KI
+12346;N # CUNEIFORM SIGN URU TIMES LUM
+12347;N # CUNEIFORM SIGN URU TIMES MIN
+12348;N # CUNEIFORM SIGN URU TIMES PA
+12349;N # CUNEIFORM SIGN URU TIMES SHE
+1234A;N # CUNEIFORM SIGN URU TIMES SIG4
+1234B;N # CUNEIFORM SIGN URU TIMES TU
+1234C;N # CUNEIFORM SIGN URU TIMES U PLUS GUD
+1234D;N # CUNEIFORM SIGN URU TIMES UD
+1234E;N # CUNEIFORM SIGN URU TIMES URUDA
+1234F;N # CUNEIFORM SIGN URUDA
+12350;N # CUNEIFORM SIGN URUDA TIMES U
+12351;N # CUNEIFORM SIGN USH
+12352;N # CUNEIFORM SIGN USH TIMES A
+12353;N # CUNEIFORM SIGN USH TIMES KU
+12354;N # CUNEIFORM SIGN USH TIMES KUR
+12355;N # CUNEIFORM SIGN USH TIMES TAK4
+12356;N # CUNEIFORM SIGN USHX
+12357;N # CUNEIFORM SIGN USH2
+12358;N # CUNEIFORM SIGN USHUMX
+12359;N # CUNEIFORM SIGN UTUKI
+1235A;N # CUNEIFORM SIGN UZ3
+1235B;N # CUNEIFORM SIGN UZ3 TIMES KASKAL
+1235C;N # CUNEIFORM SIGN UZU
+1235D;N # CUNEIFORM SIGN ZA
+1235E;N # CUNEIFORM SIGN ZA TENU
+1235F;N # CUNEIFORM SIGN ZA SQUARED TIMES KUR
+12360;N # CUNEIFORM SIGN ZAG
+12361;N # CUNEIFORM SIGN ZAMX
+12362;N # CUNEIFORM SIGN ZE2
+12363;N # CUNEIFORM SIGN ZI
+12364;N # CUNEIFORM SIGN ZI OVER ZI
+12365;N # CUNEIFORM SIGN ZI3
+12366;N # CUNEIFORM SIGN ZIB
+12367;N # CUNEIFORM SIGN ZIB KABA TENU
+12368;N # CUNEIFORM SIGN ZIG
+12369;N # CUNEIFORM SIGN ZIZ2
+1236A;N # CUNEIFORM SIGN ZU
+1236B;N # CUNEIFORM SIGN ZU5
+1236C;N # CUNEIFORM SIGN ZU5 TIMES A
+1236D;N # CUNEIFORM SIGN ZUBUR
+1236E;N # CUNEIFORM SIGN ZUM
+12400;N # CUNEIFORM NUMERIC SIGN TWO ASH
+12401;N # CUNEIFORM NUMERIC SIGN THREE ASH
+12402;N # CUNEIFORM NUMERIC SIGN FOUR ASH
+12403;N # CUNEIFORM NUMERIC SIGN FIVE ASH
+12404;N # CUNEIFORM NUMERIC SIGN SIX ASH
+12405;N # CUNEIFORM NUMERIC SIGN SEVEN ASH
+12406;N # CUNEIFORM NUMERIC SIGN EIGHT ASH
+12407;N # CUNEIFORM NUMERIC SIGN NINE ASH
+12408;N # CUNEIFORM NUMERIC SIGN THREE DISH
+12409;N # CUNEIFORM NUMERIC SIGN FOUR DISH
+1240A;N # CUNEIFORM NUMERIC SIGN FIVE DISH
+1240B;N # CUNEIFORM NUMERIC SIGN SIX DISH
+1240C;N # CUNEIFORM NUMERIC SIGN SEVEN DISH
+1240D;N # CUNEIFORM NUMERIC SIGN EIGHT DISH
+1240E;N # CUNEIFORM NUMERIC SIGN NINE DISH
+1240F;N # CUNEIFORM NUMERIC SIGN FOUR U
+12410;N # CUNEIFORM NUMERIC SIGN FIVE U
+12411;N # CUNEIFORM NUMERIC SIGN SIX U
+12412;N # CUNEIFORM NUMERIC SIGN SEVEN U
+12413;N # CUNEIFORM NUMERIC SIGN EIGHT U
+12414;N # CUNEIFORM NUMERIC SIGN NINE U
+12415;N # CUNEIFORM NUMERIC SIGN ONE GESH2
+12416;N # CUNEIFORM NUMERIC SIGN TWO GESH2
+12417;N # CUNEIFORM NUMERIC SIGN THREE GESH2
+12418;N # CUNEIFORM NUMERIC SIGN FOUR GESH2
+12419;N # CUNEIFORM NUMERIC SIGN FIVE GESH2
+1241A;N # CUNEIFORM NUMERIC SIGN SIX GESH2
+1241B;N # CUNEIFORM NUMERIC SIGN SEVEN GESH2
+1241C;N # CUNEIFORM NUMERIC SIGN EIGHT GESH2
+1241D;N # CUNEIFORM NUMERIC SIGN NINE GESH2
+1241E;N # CUNEIFORM NUMERIC SIGN ONE GESHU
+1241F;N # CUNEIFORM NUMERIC SIGN TWO GESHU
+12420;N # CUNEIFORM NUMERIC SIGN THREE GESHU
+12421;N # CUNEIFORM NUMERIC SIGN FOUR GESHU
+12422;N # CUNEIFORM NUMERIC SIGN FIVE GESHU
+12423;N # CUNEIFORM NUMERIC SIGN TWO SHAR2
+12424;N # CUNEIFORM NUMERIC SIGN THREE SHAR2
+12425;N # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM
+12426;N # CUNEIFORM NUMERIC SIGN FOUR SHAR2
+12427;N # CUNEIFORM NUMERIC SIGN FIVE SHAR2
+12428;N # CUNEIFORM NUMERIC SIGN SIX SHAR2
+12429;N # CUNEIFORM NUMERIC SIGN SEVEN SHAR2
+1242A;N # CUNEIFORM NUMERIC SIGN EIGHT SHAR2
+1242B;N # CUNEIFORM NUMERIC SIGN NINE SHAR2
+1242C;N # CUNEIFORM NUMERIC SIGN ONE SHARU
+1242D;N # CUNEIFORM NUMERIC SIGN TWO SHARU
+1242E;N # CUNEIFORM NUMERIC SIGN THREE SHARU
+1242F;N # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM
+12430;N # CUNEIFORM NUMERIC SIGN FOUR SHARU
+12431;N # CUNEIFORM NUMERIC SIGN FIVE SHARU
+12432;N # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH
+12433;N # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN
+12434;N # CUNEIFORM NUMERIC SIGN ONE BURU
+12435;N # CUNEIFORM NUMERIC SIGN TWO BURU
+12436;N # CUNEIFORM NUMERIC SIGN THREE BURU
+12437;N # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM
+12438;N # CUNEIFORM NUMERIC SIGN FOUR BURU
+12439;N # CUNEIFORM NUMERIC SIGN FIVE BURU
+1243A;N # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16
+1243B;N # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21
+1243C;N # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU
+1243D;N # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4
+1243E;N # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A
+1243F;N # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B
+12440;N # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9
+12441;N # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3
+12442;N # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A
+12443;N # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B
+12444;N # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU
+12445;N # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3
+12446;N # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU
+12447;N # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3
+12448;N # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4
+12449;N # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A
+1244A;N # CUNEIFORM NUMERIC SIGN TWO ASH TENU
+1244B;N # CUNEIFORM NUMERIC SIGN THREE ASH TENU
+1244C;N # CUNEIFORM NUMERIC SIGN FOUR ASH TENU
+1244D;N # CUNEIFORM NUMERIC SIGN FIVE ASH TENU
+1244E;N # CUNEIFORM NUMERIC SIGN SIX ASH TENU
+1244F;N # CUNEIFORM NUMERIC SIGN ONE BAN2
+12450;N # CUNEIFORM NUMERIC SIGN TWO BAN2
+12451;N # CUNEIFORM NUMERIC SIGN THREE BAN2
+12452;N # CUNEIFORM NUMERIC SIGN FOUR BAN2
+12453;N # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM
+12454;N # CUNEIFORM NUMERIC SIGN FIVE BAN2
+12455;N # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM
+12456;N # CUNEIFORM NUMERIC SIGN NIGIDAMIN
+12457;N # CUNEIFORM NUMERIC SIGN NIGIDAESH
+12458;N # CUNEIFORM NUMERIC SIGN ONE ESHE3
+12459;N # CUNEIFORM NUMERIC SIGN TWO ESHE3
+1245A;N # CUNEIFORM NUMERIC SIGN ONE THIRD DISH
+1245B;N # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH
+1245C;N # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH
+1245D;N # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A
+1245E;N # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A
+1245F;N # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH
+12460;N # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH
+12461;N # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH
+12462;N # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+12470;N # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER
+12471;N # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON
+12472;N # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON
+12473;N # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+13000;N # EGYPTIAN HIEROGLYPH A001
+13001;N # EGYPTIAN HIEROGLYPH A002
+13002;N # EGYPTIAN HIEROGLYPH A003
+13003;N # EGYPTIAN HIEROGLYPH A004
+13004;N # EGYPTIAN HIEROGLYPH A005
+13005;N # EGYPTIAN HIEROGLYPH A005A
+13006;N # EGYPTIAN HIEROGLYPH A006
+13007;N # EGYPTIAN HIEROGLYPH A006A
+13008;N # EGYPTIAN HIEROGLYPH A006B
+13009;N # EGYPTIAN HIEROGLYPH A007
+1300A;N # EGYPTIAN HIEROGLYPH A008
+1300B;N # EGYPTIAN HIEROGLYPH A009
+1300C;N # EGYPTIAN HIEROGLYPH A010
+1300D;N # EGYPTIAN HIEROGLYPH A011
+1300E;N # EGYPTIAN HIEROGLYPH A012
+1300F;N # EGYPTIAN HIEROGLYPH A013
+13010;N # EGYPTIAN HIEROGLYPH A014
+13011;N # EGYPTIAN HIEROGLYPH A014A
+13012;N # EGYPTIAN HIEROGLYPH A015
+13013;N # EGYPTIAN HIEROGLYPH A016
+13014;N # EGYPTIAN HIEROGLYPH A017
+13015;N # EGYPTIAN HIEROGLYPH A017A
+13016;N # EGYPTIAN HIEROGLYPH A018
+13017;N # EGYPTIAN HIEROGLYPH A019
+13018;N # EGYPTIAN HIEROGLYPH A020
+13019;N # EGYPTIAN HIEROGLYPH A021
+1301A;N # EGYPTIAN HIEROGLYPH A022
+1301B;N # EGYPTIAN HIEROGLYPH A023
+1301C;N # EGYPTIAN HIEROGLYPH A024
+1301D;N # EGYPTIAN HIEROGLYPH A025
+1301E;N # EGYPTIAN HIEROGLYPH A026
+1301F;N # EGYPTIAN HIEROGLYPH A027
+13020;N # EGYPTIAN HIEROGLYPH A028
+13021;N # EGYPTIAN HIEROGLYPH A029
+13022;N # EGYPTIAN HIEROGLYPH A030
+13023;N # EGYPTIAN HIEROGLYPH A031
+13024;N # EGYPTIAN HIEROGLYPH A032
+13025;N # EGYPTIAN HIEROGLYPH A032A
+13026;N # EGYPTIAN HIEROGLYPH A033
+13027;N # EGYPTIAN HIEROGLYPH A034
+13028;N # EGYPTIAN HIEROGLYPH A035
+13029;N # EGYPTIAN HIEROGLYPH A036
+1302A;N # EGYPTIAN HIEROGLYPH A037
+1302B;N # EGYPTIAN HIEROGLYPH A038
+1302C;N # EGYPTIAN HIEROGLYPH A039
+1302D;N # EGYPTIAN HIEROGLYPH A040
+1302E;N # EGYPTIAN HIEROGLYPH A040A
+1302F;N # EGYPTIAN HIEROGLYPH A041
+13030;N # EGYPTIAN HIEROGLYPH A042
+13031;N # EGYPTIAN HIEROGLYPH A042A
+13032;N # EGYPTIAN HIEROGLYPH A043
+13033;N # EGYPTIAN HIEROGLYPH A043A
+13034;N # EGYPTIAN HIEROGLYPH A044
+13035;N # EGYPTIAN HIEROGLYPH A045
+13036;N # EGYPTIAN HIEROGLYPH A045A
+13037;N # EGYPTIAN HIEROGLYPH A046
+13038;N # EGYPTIAN HIEROGLYPH A047
+13039;N # EGYPTIAN HIEROGLYPH A048
+1303A;N # EGYPTIAN HIEROGLYPH A049
+1303B;N # EGYPTIAN HIEROGLYPH A050
+1303C;N # EGYPTIAN HIEROGLYPH A051
+1303D;N # EGYPTIAN HIEROGLYPH A052
+1303E;N # EGYPTIAN HIEROGLYPH A053
+1303F;N # EGYPTIAN HIEROGLYPH A054
+13040;N # EGYPTIAN HIEROGLYPH A055
+13041;N # EGYPTIAN HIEROGLYPH A056
+13042;N # EGYPTIAN HIEROGLYPH A057
+13043;N # EGYPTIAN HIEROGLYPH A058
+13044;N # EGYPTIAN HIEROGLYPH A059
+13045;N # EGYPTIAN HIEROGLYPH A060
+13046;N # EGYPTIAN HIEROGLYPH A061
+13047;N # EGYPTIAN HIEROGLYPH A062
+13048;N # EGYPTIAN HIEROGLYPH A063
+13049;N # EGYPTIAN HIEROGLYPH A064
+1304A;N # EGYPTIAN HIEROGLYPH A065
+1304B;N # EGYPTIAN HIEROGLYPH A066
+1304C;N # EGYPTIAN HIEROGLYPH A067
+1304D;N # EGYPTIAN HIEROGLYPH A068
+1304E;N # EGYPTIAN HIEROGLYPH A069
+1304F;N # EGYPTIAN HIEROGLYPH A070
+13050;N # EGYPTIAN HIEROGLYPH B001
+13051;N # EGYPTIAN HIEROGLYPH B002
+13052;N # EGYPTIAN HIEROGLYPH B003
+13053;N # EGYPTIAN HIEROGLYPH B004
+13054;N # EGYPTIAN HIEROGLYPH B005
+13055;N # EGYPTIAN HIEROGLYPH B005A
+13056;N # EGYPTIAN HIEROGLYPH B006
+13057;N # EGYPTIAN HIEROGLYPH B007
+13058;N # EGYPTIAN HIEROGLYPH B008
+13059;N # EGYPTIAN HIEROGLYPH B009
+1305A;N # EGYPTIAN HIEROGLYPH C001
+1305B;N # EGYPTIAN HIEROGLYPH C002
+1305C;N # EGYPTIAN HIEROGLYPH C002A
+1305D;N # EGYPTIAN HIEROGLYPH C002B
+1305E;N # EGYPTIAN HIEROGLYPH C002C
+1305F;N # EGYPTIAN HIEROGLYPH C003
+13060;N # EGYPTIAN HIEROGLYPH C004
+13061;N # EGYPTIAN HIEROGLYPH C005
+13062;N # EGYPTIAN HIEROGLYPH C006
+13063;N # EGYPTIAN HIEROGLYPH C007
+13064;N # EGYPTIAN HIEROGLYPH C008
+13065;N # EGYPTIAN HIEROGLYPH C009
+13066;N # EGYPTIAN HIEROGLYPH C010
+13067;N # EGYPTIAN HIEROGLYPH C010A
+13068;N # EGYPTIAN HIEROGLYPH C011
+13069;N # EGYPTIAN HIEROGLYPH C012
+1306A;N # EGYPTIAN HIEROGLYPH C013
+1306B;N # EGYPTIAN HIEROGLYPH C014
+1306C;N # EGYPTIAN HIEROGLYPH C015
+1306D;N # EGYPTIAN HIEROGLYPH C016
+1306E;N # EGYPTIAN HIEROGLYPH C017
+1306F;N # EGYPTIAN HIEROGLYPH C018
+13070;N # EGYPTIAN HIEROGLYPH C019
+13071;N # EGYPTIAN HIEROGLYPH C020
+13072;N # EGYPTIAN HIEROGLYPH C021
+13073;N # EGYPTIAN HIEROGLYPH C022
+13074;N # EGYPTIAN HIEROGLYPH C023
+13075;N # EGYPTIAN HIEROGLYPH C024
+13076;N # EGYPTIAN HIEROGLYPH D001
+13077;N # EGYPTIAN HIEROGLYPH D002
+13078;N # EGYPTIAN HIEROGLYPH D003
+13079;N # EGYPTIAN HIEROGLYPH D004
+1307A;N # EGYPTIAN HIEROGLYPH D005
+1307B;N # EGYPTIAN HIEROGLYPH D006
+1307C;N # EGYPTIAN HIEROGLYPH D007
+1307D;N # EGYPTIAN HIEROGLYPH D008
+1307E;N # EGYPTIAN HIEROGLYPH D008A
+1307F;N # EGYPTIAN HIEROGLYPH D009
+13080;N # EGYPTIAN HIEROGLYPH D010
+13081;N # EGYPTIAN HIEROGLYPH D011
+13082;N # EGYPTIAN HIEROGLYPH D012
+13083;N # EGYPTIAN HIEROGLYPH D013
+13084;N # EGYPTIAN HIEROGLYPH D014
+13085;N # EGYPTIAN HIEROGLYPH D015
+13086;N # EGYPTIAN HIEROGLYPH D016
+13087;N # EGYPTIAN HIEROGLYPH D017
+13088;N # EGYPTIAN HIEROGLYPH D018
+13089;N # EGYPTIAN HIEROGLYPH D019
+1308A;N # EGYPTIAN HIEROGLYPH D020
+1308B;N # EGYPTIAN HIEROGLYPH D021
+1308C;N # EGYPTIAN HIEROGLYPH D022
+1308D;N # EGYPTIAN HIEROGLYPH D023
+1308E;N # EGYPTIAN HIEROGLYPH D024
+1308F;N # EGYPTIAN HIEROGLYPH D025
+13090;N # EGYPTIAN HIEROGLYPH D026
+13091;N # EGYPTIAN HIEROGLYPH D027
+13092;N # EGYPTIAN HIEROGLYPH D027A
+13093;N # EGYPTIAN HIEROGLYPH D028
+13094;N # EGYPTIAN HIEROGLYPH D029
+13095;N # EGYPTIAN HIEROGLYPH D030
+13096;N # EGYPTIAN HIEROGLYPH D031
+13097;N # EGYPTIAN HIEROGLYPH D031A
+13098;N # EGYPTIAN HIEROGLYPH D032
+13099;N # EGYPTIAN HIEROGLYPH D033
+1309A;N # EGYPTIAN HIEROGLYPH D034
+1309B;N # EGYPTIAN HIEROGLYPH D034A
+1309C;N # EGYPTIAN HIEROGLYPH D035
+1309D;N # EGYPTIAN HIEROGLYPH D036
+1309E;N # EGYPTIAN HIEROGLYPH D037
+1309F;N # EGYPTIAN HIEROGLYPH D038
+130A0;N # EGYPTIAN HIEROGLYPH D039
+130A1;N # EGYPTIAN HIEROGLYPH D040
+130A2;N # EGYPTIAN HIEROGLYPH D041
+130A3;N # EGYPTIAN HIEROGLYPH D042
+130A4;N # EGYPTIAN HIEROGLYPH D043
+130A5;N # EGYPTIAN HIEROGLYPH D044
+130A6;N # EGYPTIAN HIEROGLYPH D045
+130A7;N # EGYPTIAN HIEROGLYPH D046
+130A8;N # EGYPTIAN HIEROGLYPH D046A
+130A9;N # EGYPTIAN HIEROGLYPH D047
+130AA;N # EGYPTIAN HIEROGLYPH D048
+130AB;N # EGYPTIAN HIEROGLYPH D048A
+130AC;N # EGYPTIAN HIEROGLYPH D049
+130AD;N # EGYPTIAN HIEROGLYPH D050
+130AE;N # EGYPTIAN HIEROGLYPH D050A
+130AF;N # EGYPTIAN HIEROGLYPH D050B
+130B0;N # EGYPTIAN HIEROGLYPH D050C
+130B1;N # EGYPTIAN HIEROGLYPH D050D
+130B2;N # EGYPTIAN HIEROGLYPH D050E
+130B3;N # EGYPTIAN HIEROGLYPH D050F
+130B4;N # EGYPTIAN HIEROGLYPH D050G
+130B5;N # EGYPTIAN HIEROGLYPH D050H
+130B6;N # EGYPTIAN HIEROGLYPH D050I
+130B7;N # EGYPTIAN HIEROGLYPH D051
+130B8;N # EGYPTIAN HIEROGLYPH D052
+130B9;N # EGYPTIAN HIEROGLYPH D052A
+130BA;N # EGYPTIAN HIEROGLYPH D053
+130BB;N # EGYPTIAN HIEROGLYPH D054
+130BC;N # EGYPTIAN HIEROGLYPH D054A
+130BD;N # EGYPTIAN HIEROGLYPH D055
+130BE;N # EGYPTIAN HIEROGLYPH D056
+130BF;N # EGYPTIAN HIEROGLYPH D057
+130C0;N # EGYPTIAN HIEROGLYPH D058
+130C1;N # EGYPTIAN HIEROGLYPH D059
+130C2;N # EGYPTIAN HIEROGLYPH D060
+130C3;N # EGYPTIAN HIEROGLYPH D061
+130C4;N # EGYPTIAN HIEROGLYPH D062
+130C5;N # EGYPTIAN HIEROGLYPH D063
+130C6;N # EGYPTIAN HIEROGLYPH D064
+130C7;N # EGYPTIAN HIEROGLYPH D065
+130C8;N # EGYPTIAN HIEROGLYPH D066
+130C9;N # EGYPTIAN HIEROGLYPH D067
+130CA;N # EGYPTIAN HIEROGLYPH D067A
+130CB;N # EGYPTIAN HIEROGLYPH D067B
+130CC;N # EGYPTIAN HIEROGLYPH D067C
+130CD;N # EGYPTIAN HIEROGLYPH D067D
+130CE;N # EGYPTIAN HIEROGLYPH D067E
+130CF;N # EGYPTIAN HIEROGLYPH D067F
+130D0;N # EGYPTIAN HIEROGLYPH D067G
+130D1;N # EGYPTIAN HIEROGLYPH D067H
+130D2;N # EGYPTIAN HIEROGLYPH E001
+130D3;N # EGYPTIAN HIEROGLYPH E002
+130D4;N # EGYPTIAN HIEROGLYPH E003
+130D5;N # EGYPTIAN HIEROGLYPH E004
+130D6;N # EGYPTIAN HIEROGLYPH E005
+130D7;N # EGYPTIAN HIEROGLYPH E006
+130D8;N # EGYPTIAN HIEROGLYPH E007
+130D9;N # EGYPTIAN HIEROGLYPH E008
+130DA;N # EGYPTIAN HIEROGLYPH E008A
+130DB;N # EGYPTIAN HIEROGLYPH E009
+130DC;N # EGYPTIAN HIEROGLYPH E009A
+130DD;N # EGYPTIAN HIEROGLYPH E010
+130DE;N # EGYPTIAN HIEROGLYPH E011
+130DF;N # EGYPTIAN HIEROGLYPH E012
+130E0;N # EGYPTIAN HIEROGLYPH E013
+130E1;N # EGYPTIAN HIEROGLYPH E014
+130E2;N # EGYPTIAN HIEROGLYPH E015
+130E3;N # EGYPTIAN HIEROGLYPH E016
+130E4;N # EGYPTIAN HIEROGLYPH E016A
+130E5;N # EGYPTIAN HIEROGLYPH E017
+130E6;N # EGYPTIAN HIEROGLYPH E017A
+130E7;N # EGYPTIAN HIEROGLYPH E018
+130E8;N # EGYPTIAN HIEROGLYPH E019
+130E9;N # EGYPTIAN HIEROGLYPH E020
+130EA;N # EGYPTIAN HIEROGLYPH E020A
+130EB;N # EGYPTIAN HIEROGLYPH E021
+130EC;N # EGYPTIAN HIEROGLYPH E022
+130ED;N # EGYPTIAN HIEROGLYPH E023
+130EE;N # EGYPTIAN HIEROGLYPH E024
+130EF;N # EGYPTIAN HIEROGLYPH E025
+130F0;N # EGYPTIAN HIEROGLYPH E026
+130F1;N # EGYPTIAN HIEROGLYPH E027
+130F2;N # EGYPTIAN HIEROGLYPH E028
+130F3;N # EGYPTIAN HIEROGLYPH E028A
+130F4;N # EGYPTIAN HIEROGLYPH E029
+130F5;N # EGYPTIAN HIEROGLYPH E030
+130F6;N # EGYPTIAN HIEROGLYPH E031
+130F7;N # EGYPTIAN HIEROGLYPH E032
+130F8;N # EGYPTIAN HIEROGLYPH E033
+130F9;N # EGYPTIAN HIEROGLYPH E034
+130FA;N # EGYPTIAN HIEROGLYPH E034A
+130FB;N # EGYPTIAN HIEROGLYPH E036
+130FC;N # EGYPTIAN HIEROGLYPH E037
+130FD;N # EGYPTIAN HIEROGLYPH E038
+130FE;N # EGYPTIAN HIEROGLYPH F001
+130FF;N # EGYPTIAN HIEROGLYPH F001A
+13100;N # EGYPTIAN HIEROGLYPH F002
+13101;N # EGYPTIAN HIEROGLYPH F003
+13102;N # EGYPTIAN HIEROGLYPH F004
+13103;N # EGYPTIAN HIEROGLYPH F005
+13104;N # EGYPTIAN HIEROGLYPH F006
+13105;N # EGYPTIAN HIEROGLYPH F007
+13106;N # EGYPTIAN HIEROGLYPH F008
+13107;N # EGYPTIAN HIEROGLYPH F009
+13108;N # EGYPTIAN HIEROGLYPH F010
+13109;N # EGYPTIAN HIEROGLYPH F011
+1310A;N # EGYPTIAN HIEROGLYPH F012
+1310B;N # EGYPTIAN HIEROGLYPH F013
+1310C;N # EGYPTIAN HIEROGLYPH F013A
+1310D;N # EGYPTIAN HIEROGLYPH F014
+1310E;N # EGYPTIAN HIEROGLYPH F015
+1310F;N # EGYPTIAN HIEROGLYPH F016
+13110;N # EGYPTIAN HIEROGLYPH F017
+13111;N # EGYPTIAN HIEROGLYPH F018
+13112;N # EGYPTIAN HIEROGLYPH F019
+13113;N # EGYPTIAN HIEROGLYPH F020
+13114;N # EGYPTIAN HIEROGLYPH F021
+13115;N # EGYPTIAN HIEROGLYPH F021A
+13116;N # EGYPTIAN HIEROGLYPH F022
+13117;N # EGYPTIAN HIEROGLYPH F023
+13118;N # EGYPTIAN HIEROGLYPH F024
+13119;N # EGYPTIAN HIEROGLYPH F025
+1311A;N # EGYPTIAN HIEROGLYPH F026
+1311B;N # EGYPTIAN HIEROGLYPH F027
+1311C;N # EGYPTIAN HIEROGLYPH F028
+1311D;N # EGYPTIAN HIEROGLYPH F029
+1311E;N # EGYPTIAN HIEROGLYPH F030
+1311F;N # EGYPTIAN HIEROGLYPH F031
+13120;N # EGYPTIAN HIEROGLYPH F031A
+13121;N # EGYPTIAN HIEROGLYPH F032
+13122;N # EGYPTIAN HIEROGLYPH F033
+13123;N # EGYPTIAN HIEROGLYPH F034
+13124;N # EGYPTIAN HIEROGLYPH F035
+13125;N # EGYPTIAN HIEROGLYPH F036
+13126;N # EGYPTIAN HIEROGLYPH F037
+13127;N # EGYPTIAN HIEROGLYPH F037A
+13128;N # EGYPTIAN HIEROGLYPH F038
+13129;N # EGYPTIAN HIEROGLYPH F038A
+1312A;N # EGYPTIAN HIEROGLYPH F039
+1312B;N # EGYPTIAN HIEROGLYPH F040
+1312C;N # EGYPTIAN HIEROGLYPH F041
+1312D;N # EGYPTIAN HIEROGLYPH F042
+1312E;N # EGYPTIAN HIEROGLYPH F043
+1312F;N # EGYPTIAN HIEROGLYPH F044
+13130;N # EGYPTIAN HIEROGLYPH F045
+13131;N # EGYPTIAN HIEROGLYPH F045A
+13132;N # EGYPTIAN HIEROGLYPH F046
+13133;N # EGYPTIAN HIEROGLYPH F046A
+13134;N # EGYPTIAN HIEROGLYPH F047
+13135;N # EGYPTIAN HIEROGLYPH F047A
+13136;N # EGYPTIAN HIEROGLYPH F048
+13137;N # EGYPTIAN HIEROGLYPH F049
+13138;N # EGYPTIAN HIEROGLYPH F050
+13139;N # EGYPTIAN HIEROGLYPH F051
+1313A;N # EGYPTIAN HIEROGLYPH F051A
+1313B;N # EGYPTIAN HIEROGLYPH F051B
+1313C;N # EGYPTIAN HIEROGLYPH F051C
+1313D;N # EGYPTIAN HIEROGLYPH F052
+1313E;N # EGYPTIAN HIEROGLYPH F053
+1313F;N # EGYPTIAN HIEROGLYPH G001
+13140;N # EGYPTIAN HIEROGLYPH G002
+13141;N # EGYPTIAN HIEROGLYPH G003
+13142;N # EGYPTIAN HIEROGLYPH G004
+13143;N # EGYPTIAN HIEROGLYPH G005
+13144;N # EGYPTIAN HIEROGLYPH G006
+13145;N # EGYPTIAN HIEROGLYPH G006A
+13146;N # EGYPTIAN HIEROGLYPH G007
+13147;N # EGYPTIAN HIEROGLYPH G007A
+13148;N # EGYPTIAN HIEROGLYPH G007B
+13149;N # EGYPTIAN HIEROGLYPH G008
+1314A;N # EGYPTIAN HIEROGLYPH G009
+1314B;N # EGYPTIAN HIEROGLYPH G010
+1314C;N # EGYPTIAN HIEROGLYPH G011
+1314D;N # EGYPTIAN HIEROGLYPH G011A
+1314E;N # EGYPTIAN HIEROGLYPH G012
+1314F;N # EGYPTIAN HIEROGLYPH G013
+13150;N # EGYPTIAN HIEROGLYPH G014
+13151;N # EGYPTIAN HIEROGLYPH G015
+13152;N # EGYPTIAN HIEROGLYPH G016
+13153;N # EGYPTIAN HIEROGLYPH G017
+13154;N # EGYPTIAN HIEROGLYPH G018
+13155;N # EGYPTIAN HIEROGLYPH G019
+13156;N # EGYPTIAN HIEROGLYPH G020
+13157;N # EGYPTIAN HIEROGLYPH G020A
+13158;N # EGYPTIAN HIEROGLYPH G021
+13159;N # EGYPTIAN HIEROGLYPH G022
+1315A;N # EGYPTIAN HIEROGLYPH G023
+1315B;N # EGYPTIAN HIEROGLYPH G024
+1315C;N # EGYPTIAN HIEROGLYPH G025
+1315D;N # EGYPTIAN HIEROGLYPH G026
+1315E;N # EGYPTIAN HIEROGLYPH G026A
+1315F;N # EGYPTIAN HIEROGLYPH G027
+13160;N # EGYPTIAN HIEROGLYPH G028
+13161;N # EGYPTIAN HIEROGLYPH G029
+13162;N # EGYPTIAN HIEROGLYPH G030
+13163;N # EGYPTIAN HIEROGLYPH G031
+13164;N # EGYPTIAN HIEROGLYPH G032
+13165;N # EGYPTIAN HIEROGLYPH G033
+13166;N # EGYPTIAN HIEROGLYPH G034
+13167;N # EGYPTIAN HIEROGLYPH G035
+13168;N # EGYPTIAN HIEROGLYPH G036
+13169;N # EGYPTIAN HIEROGLYPH G036A
+1316A;N # EGYPTIAN HIEROGLYPH G037
+1316B;N # EGYPTIAN HIEROGLYPH G037A
+1316C;N # EGYPTIAN HIEROGLYPH G038
+1316D;N # EGYPTIAN HIEROGLYPH G039
+1316E;N # EGYPTIAN HIEROGLYPH G040
+1316F;N # EGYPTIAN HIEROGLYPH G041
+13170;N # EGYPTIAN HIEROGLYPH G042
+13171;N # EGYPTIAN HIEROGLYPH G043
+13172;N # EGYPTIAN HIEROGLYPH G043A
+13173;N # EGYPTIAN HIEROGLYPH G044
+13174;N # EGYPTIAN HIEROGLYPH G045
+13175;N # EGYPTIAN HIEROGLYPH G045A
+13176;N # EGYPTIAN HIEROGLYPH G046
+13177;N # EGYPTIAN HIEROGLYPH G047
+13178;N # EGYPTIAN HIEROGLYPH G048
+13179;N # EGYPTIAN HIEROGLYPH G049
+1317A;N # EGYPTIAN HIEROGLYPH G050
+1317B;N # EGYPTIAN HIEROGLYPH G051
+1317C;N # EGYPTIAN HIEROGLYPH G052
+1317D;N # EGYPTIAN HIEROGLYPH G053
+1317E;N # EGYPTIAN HIEROGLYPH G054
+1317F;N # EGYPTIAN HIEROGLYPH H001
+13180;N # EGYPTIAN HIEROGLYPH H002
+13181;N # EGYPTIAN HIEROGLYPH H003
+13182;N # EGYPTIAN HIEROGLYPH H004
+13183;N # EGYPTIAN HIEROGLYPH H005
+13184;N # EGYPTIAN HIEROGLYPH H006
+13185;N # EGYPTIAN HIEROGLYPH H006A
+13186;N # EGYPTIAN HIEROGLYPH H007
+13187;N # EGYPTIAN HIEROGLYPH H008
+13188;N # EGYPTIAN HIEROGLYPH I001
+13189;N # EGYPTIAN HIEROGLYPH I002
+1318A;N # EGYPTIAN HIEROGLYPH I003
+1318B;N # EGYPTIAN HIEROGLYPH I004
+1318C;N # EGYPTIAN HIEROGLYPH I005
+1318D;N # EGYPTIAN HIEROGLYPH I005A
+1318E;N # EGYPTIAN HIEROGLYPH I006
+1318F;N # EGYPTIAN HIEROGLYPH I007
+13190;N # EGYPTIAN HIEROGLYPH I008
+13191;N # EGYPTIAN HIEROGLYPH I009
+13192;N # EGYPTIAN HIEROGLYPH I009A
+13193;N # EGYPTIAN HIEROGLYPH I010
+13194;N # EGYPTIAN HIEROGLYPH I010A
+13195;N # EGYPTIAN HIEROGLYPH I011
+13196;N # EGYPTIAN HIEROGLYPH I011A
+13197;N # EGYPTIAN HIEROGLYPH I012
+13198;N # EGYPTIAN HIEROGLYPH I013
+13199;N # EGYPTIAN HIEROGLYPH I014
+1319A;N # EGYPTIAN HIEROGLYPH I015
+1319B;N # EGYPTIAN HIEROGLYPH K001
+1319C;N # EGYPTIAN HIEROGLYPH K002
+1319D;N # EGYPTIAN HIEROGLYPH K003
+1319E;N # EGYPTIAN HIEROGLYPH K004
+1319F;N # EGYPTIAN HIEROGLYPH K005
+131A0;N # EGYPTIAN HIEROGLYPH K006
+131A1;N # EGYPTIAN HIEROGLYPH K007
+131A2;N # EGYPTIAN HIEROGLYPH K008
+131A3;N # EGYPTIAN HIEROGLYPH L001
+131A4;N # EGYPTIAN HIEROGLYPH L002
+131A5;N # EGYPTIAN HIEROGLYPH L002A
+131A6;N # EGYPTIAN HIEROGLYPH L003
+131A7;N # EGYPTIAN HIEROGLYPH L004
+131A8;N # EGYPTIAN HIEROGLYPH L005
+131A9;N # EGYPTIAN HIEROGLYPH L006
+131AA;N # EGYPTIAN HIEROGLYPH L006A
+131AB;N # EGYPTIAN HIEROGLYPH L007
+131AC;N # EGYPTIAN HIEROGLYPH L008
+131AD;N # EGYPTIAN HIEROGLYPH M001
+131AE;N # EGYPTIAN HIEROGLYPH M001A
+131AF;N # EGYPTIAN HIEROGLYPH M001B
+131B0;N # EGYPTIAN HIEROGLYPH M002
+131B1;N # EGYPTIAN HIEROGLYPH M003
+131B2;N # EGYPTIAN HIEROGLYPH M003A
+131B3;N # EGYPTIAN HIEROGLYPH M004
+131B4;N # EGYPTIAN HIEROGLYPH M005
+131B5;N # EGYPTIAN HIEROGLYPH M006
+131B6;N # EGYPTIAN HIEROGLYPH M007
+131B7;N # EGYPTIAN HIEROGLYPH M008
+131B8;N # EGYPTIAN HIEROGLYPH M009
+131B9;N # EGYPTIAN HIEROGLYPH M010
+131BA;N # EGYPTIAN HIEROGLYPH M010A
+131BB;N # EGYPTIAN HIEROGLYPH M011
+131BC;N # EGYPTIAN HIEROGLYPH M012
+131BD;N # EGYPTIAN HIEROGLYPH M012A
+131BE;N # EGYPTIAN HIEROGLYPH M012B
+131BF;N # EGYPTIAN HIEROGLYPH M012C
+131C0;N # EGYPTIAN HIEROGLYPH M012D
+131C1;N # EGYPTIAN HIEROGLYPH M012E
+131C2;N # EGYPTIAN HIEROGLYPH M012F
+131C3;N # EGYPTIAN HIEROGLYPH M012G
+131C4;N # EGYPTIAN HIEROGLYPH M012H
+131C5;N # EGYPTIAN HIEROGLYPH M013
+131C6;N # EGYPTIAN HIEROGLYPH M014
+131C7;N # EGYPTIAN HIEROGLYPH M015
+131C8;N # EGYPTIAN HIEROGLYPH M015A
+131C9;N # EGYPTIAN HIEROGLYPH M016
+131CA;N # EGYPTIAN HIEROGLYPH M016A
+131CB;N # EGYPTIAN HIEROGLYPH M017
+131CC;N # EGYPTIAN HIEROGLYPH M017A
+131CD;N # EGYPTIAN HIEROGLYPH M018
+131CE;N # EGYPTIAN HIEROGLYPH M019
+131CF;N # EGYPTIAN HIEROGLYPH M020
+131D0;N # EGYPTIAN HIEROGLYPH M021
+131D1;N # EGYPTIAN HIEROGLYPH M022
+131D2;N # EGYPTIAN HIEROGLYPH M022A
+131D3;N # EGYPTIAN HIEROGLYPH M023
+131D4;N # EGYPTIAN HIEROGLYPH M024
+131D5;N # EGYPTIAN HIEROGLYPH M024A
+131D6;N # EGYPTIAN HIEROGLYPH M025
+131D7;N # EGYPTIAN HIEROGLYPH M026
+131D8;N # EGYPTIAN HIEROGLYPH M027
+131D9;N # EGYPTIAN HIEROGLYPH M028
+131DA;N # EGYPTIAN HIEROGLYPH M028A
+131DB;N # EGYPTIAN HIEROGLYPH M029
+131DC;N # EGYPTIAN HIEROGLYPH M030
+131DD;N # EGYPTIAN HIEROGLYPH M031
+131DE;N # EGYPTIAN HIEROGLYPH M031A
+131DF;N # EGYPTIAN HIEROGLYPH M032
+131E0;N # EGYPTIAN HIEROGLYPH M033
+131E1;N # EGYPTIAN HIEROGLYPH M033A
+131E2;N # EGYPTIAN HIEROGLYPH M033B
+131E3;N # EGYPTIAN HIEROGLYPH M034
+131E4;N # EGYPTIAN HIEROGLYPH M035
+131E5;N # EGYPTIAN HIEROGLYPH M036
+131E6;N # EGYPTIAN HIEROGLYPH M037
+131E7;N # EGYPTIAN HIEROGLYPH M038
+131E8;N # EGYPTIAN HIEROGLYPH M039
+131E9;N # EGYPTIAN HIEROGLYPH M040
+131EA;N # EGYPTIAN HIEROGLYPH M040A
+131EB;N # EGYPTIAN HIEROGLYPH M041
+131EC;N # EGYPTIAN HIEROGLYPH M042
+131ED;N # EGYPTIAN HIEROGLYPH M043
+131EE;N # EGYPTIAN HIEROGLYPH M044
+131EF;N # EGYPTIAN HIEROGLYPH N001
+131F0;N # EGYPTIAN HIEROGLYPH N002
+131F1;N # EGYPTIAN HIEROGLYPH N003
+131F2;N # EGYPTIAN HIEROGLYPH N004
+131F3;N # EGYPTIAN HIEROGLYPH N005
+131F4;N # EGYPTIAN HIEROGLYPH N006
+131F5;N # EGYPTIAN HIEROGLYPH N007
+131F6;N # EGYPTIAN HIEROGLYPH N008
+131F7;N # EGYPTIAN HIEROGLYPH N009
+131F8;N # EGYPTIAN HIEROGLYPH N010
+131F9;N # EGYPTIAN HIEROGLYPH N011
+131FA;N # EGYPTIAN HIEROGLYPH N012
+131FB;N # EGYPTIAN HIEROGLYPH N013
+131FC;N # EGYPTIAN HIEROGLYPH N014
+131FD;N # EGYPTIAN HIEROGLYPH N015
+131FE;N # EGYPTIAN HIEROGLYPH N016
+131FF;N # EGYPTIAN HIEROGLYPH N017
+13200;N # EGYPTIAN HIEROGLYPH N018
+13201;N # EGYPTIAN HIEROGLYPH N018A
+13202;N # EGYPTIAN HIEROGLYPH N018B
+13203;N # EGYPTIAN HIEROGLYPH N019
+13204;N # EGYPTIAN HIEROGLYPH N020
+13205;N # EGYPTIAN HIEROGLYPH N021
+13206;N # EGYPTIAN HIEROGLYPH N022
+13207;N # EGYPTIAN HIEROGLYPH N023
+13208;N # EGYPTIAN HIEROGLYPH N024
+13209;N # EGYPTIAN HIEROGLYPH N025
+1320A;N # EGYPTIAN HIEROGLYPH N025A
+1320B;N # EGYPTIAN HIEROGLYPH N026
+1320C;N # EGYPTIAN HIEROGLYPH N027
+1320D;N # EGYPTIAN HIEROGLYPH N028
+1320E;N # EGYPTIAN HIEROGLYPH N029
+1320F;N # EGYPTIAN HIEROGLYPH N030
+13210;N # EGYPTIAN HIEROGLYPH N031
+13211;N # EGYPTIAN HIEROGLYPH N032
+13212;N # EGYPTIAN HIEROGLYPH N033
+13213;N # EGYPTIAN HIEROGLYPH N033A
+13214;N # EGYPTIAN HIEROGLYPH N034
+13215;N # EGYPTIAN HIEROGLYPH N034A
+13216;N # EGYPTIAN HIEROGLYPH N035
+13217;N # EGYPTIAN HIEROGLYPH N035A
+13218;N # EGYPTIAN HIEROGLYPH N036
+13219;N # EGYPTIAN HIEROGLYPH N037
+1321A;N # EGYPTIAN HIEROGLYPH N037A
+1321B;N # EGYPTIAN HIEROGLYPH N038
+1321C;N # EGYPTIAN HIEROGLYPH N039
+1321D;N # EGYPTIAN HIEROGLYPH N040
+1321E;N # EGYPTIAN HIEROGLYPH N041
+1321F;N # EGYPTIAN HIEROGLYPH N042
+13220;N # EGYPTIAN HIEROGLYPH NL001
+13221;N # EGYPTIAN HIEROGLYPH NL002
+13222;N # EGYPTIAN HIEROGLYPH NL003
+13223;N # EGYPTIAN HIEROGLYPH NL004
+13224;N # EGYPTIAN HIEROGLYPH NL005
+13225;N # EGYPTIAN HIEROGLYPH NL005A
+13226;N # EGYPTIAN HIEROGLYPH NL006
+13227;N # EGYPTIAN HIEROGLYPH NL007
+13228;N # EGYPTIAN HIEROGLYPH NL008
+13229;N # EGYPTIAN HIEROGLYPH NL009
+1322A;N # EGYPTIAN HIEROGLYPH NL010
+1322B;N # EGYPTIAN HIEROGLYPH NL011
+1322C;N # EGYPTIAN HIEROGLYPH NL012
+1322D;N # EGYPTIAN HIEROGLYPH NL013
+1322E;N # EGYPTIAN HIEROGLYPH NL014
+1322F;N # EGYPTIAN HIEROGLYPH NL015
+13230;N # EGYPTIAN HIEROGLYPH NL016
+13231;N # EGYPTIAN HIEROGLYPH NL017
+13232;N # EGYPTIAN HIEROGLYPH NL017A
+13233;N # EGYPTIAN HIEROGLYPH NL018
+13234;N # EGYPTIAN HIEROGLYPH NL019
+13235;N # EGYPTIAN HIEROGLYPH NL020
+13236;N # EGYPTIAN HIEROGLYPH NU001
+13237;N # EGYPTIAN HIEROGLYPH NU002
+13238;N # EGYPTIAN HIEROGLYPH NU003
+13239;N # EGYPTIAN HIEROGLYPH NU004
+1323A;N # EGYPTIAN HIEROGLYPH NU005
+1323B;N # EGYPTIAN HIEROGLYPH NU006
+1323C;N # EGYPTIAN HIEROGLYPH NU007
+1323D;N # EGYPTIAN HIEROGLYPH NU008
+1323E;N # EGYPTIAN HIEROGLYPH NU009
+1323F;N # EGYPTIAN HIEROGLYPH NU010
+13240;N # EGYPTIAN HIEROGLYPH NU010A
+13241;N # EGYPTIAN HIEROGLYPH NU011
+13242;N # EGYPTIAN HIEROGLYPH NU011A
+13243;N # EGYPTIAN HIEROGLYPH NU012
+13244;N # EGYPTIAN HIEROGLYPH NU013
+13245;N # EGYPTIAN HIEROGLYPH NU014
+13246;N # EGYPTIAN HIEROGLYPH NU015
+13247;N # EGYPTIAN HIEROGLYPH NU016
+13248;N # EGYPTIAN HIEROGLYPH NU017
+13249;N # EGYPTIAN HIEROGLYPH NU018
+1324A;N # EGYPTIAN HIEROGLYPH NU018A
+1324B;N # EGYPTIAN HIEROGLYPH NU019
+1324C;N # EGYPTIAN HIEROGLYPH NU020
+1324D;N # EGYPTIAN HIEROGLYPH NU021
+1324E;N # EGYPTIAN HIEROGLYPH NU022
+1324F;N # EGYPTIAN HIEROGLYPH NU022A
+13250;N # EGYPTIAN HIEROGLYPH O001
+13251;N # EGYPTIAN HIEROGLYPH O001A
+13252;N # EGYPTIAN HIEROGLYPH O002
+13253;N # EGYPTIAN HIEROGLYPH O003
+13254;N # EGYPTIAN HIEROGLYPH O004
+13255;N # EGYPTIAN HIEROGLYPH O005
+13256;N # EGYPTIAN HIEROGLYPH O005A
+13257;N # EGYPTIAN HIEROGLYPH O006
+13258;N # EGYPTIAN HIEROGLYPH O006A
+13259;N # EGYPTIAN HIEROGLYPH O006B
+1325A;N # EGYPTIAN HIEROGLYPH O006C
+1325B;N # EGYPTIAN HIEROGLYPH O006D
+1325C;N # EGYPTIAN HIEROGLYPH O006E
+1325D;N # EGYPTIAN HIEROGLYPH O006F
+1325E;N # EGYPTIAN HIEROGLYPH O007
+1325F;N # EGYPTIAN HIEROGLYPH O008
+13260;N # EGYPTIAN HIEROGLYPH O009
+13261;N # EGYPTIAN HIEROGLYPH O010
+13262;N # EGYPTIAN HIEROGLYPH O010A
+13263;N # EGYPTIAN HIEROGLYPH O010B
+13264;N # EGYPTIAN HIEROGLYPH O010C
+13265;N # EGYPTIAN HIEROGLYPH O011
+13266;N # EGYPTIAN HIEROGLYPH O012
+13267;N # EGYPTIAN HIEROGLYPH O013
+13268;N # EGYPTIAN HIEROGLYPH O014
+13269;N # EGYPTIAN HIEROGLYPH O015
+1326A;N # EGYPTIAN HIEROGLYPH O016
+1326B;N # EGYPTIAN HIEROGLYPH O017
+1326C;N # EGYPTIAN HIEROGLYPH O018
+1326D;N # EGYPTIAN HIEROGLYPH O019
+1326E;N # EGYPTIAN HIEROGLYPH O019A
+1326F;N # EGYPTIAN HIEROGLYPH O020
+13270;N # EGYPTIAN HIEROGLYPH O020A
+13271;N # EGYPTIAN HIEROGLYPH O021
+13272;N # EGYPTIAN HIEROGLYPH O022
+13273;N # EGYPTIAN HIEROGLYPH O023
+13274;N # EGYPTIAN HIEROGLYPH O024
+13275;N # EGYPTIAN HIEROGLYPH O024A
+13276;N # EGYPTIAN HIEROGLYPH O025
+13277;N # EGYPTIAN HIEROGLYPH O025A
+13278;N # EGYPTIAN HIEROGLYPH O026
+13279;N # EGYPTIAN HIEROGLYPH O027
+1327A;N # EGYPTIAN HIEROGLYPH O028
+1327B;N # EGYPTIAN HIEROGLYPH O029
+1327C;N # EGYPTIAN HIEROGLYPH O029A
+1327D;N # EGYPTIAN HIEROGLYPH O030
+1327E;N # EGYPTIAN HIEROGLYPH O030A
+1327F;N # EGYPTIAN HIEROGLYPH O031
+13280;N # EGYPTIAN HIEROGLYPH O032
+13281;N # EGYPTIAN HIEROGLYPH O033
+13282;N # EGYPTIAN HIEROGLYPH O033A
+13283;N # EGYPTIAN HIEROGLYPH O034
+13284;N # EGYPTIAN HIEROGLYPH O035
+13285;N # EGYPTIAN HIEROGLYPH O036
+13286;N # EGYPTIAN HIEROGLYPH O036A
+13287;N # EGYPTIAN HIEROGLYPH O036B
+13288;N # EGYPTIAN HIEROGLYPH O036C
+13289;N # EGYPTIAN HIEROGLYPH O036D
+1328A;N # EGYPTIAN HIEROGLYPH O037
+1328B;N # EGYPTIAN HIEROGLYPH O038
+1328C;N # EGYPTIAN HIEROGLYPH O039
+1328D;N # EGYPTIAN HIEROGLYPH O040
+1328E;N # EGYPTIAN HIEROGLYPH O041
+1328F;N # EGYPTIAN HIEROGLYPH O042
+13290;N # EGYPTIAN HIEROGLYPH O043
+13291;N # EGYPTIAN HIEROGLYPH O044
+13292;N # EGYPTIAN HIEROGLYPH O045
+13293;N # EGYPTIAN HIEROGLYPH O046
+13294;N # EGYPTIAN HIEROGLYPH O047
+13295;N # EGYPTIAN HIEROGLYPH O048
+13296;N # EGYPTIAN HIEROGLYPH O049
+13297;N # EGYPTIAN HIEROGLYPH O050
+13298;N # EGYPTIAN HIEROGLYPH O050A
+13299;N # EGYPTIAN HIEROGLYPH O050B
+1329A;N # EGYPTIAN HIEROGLYPH O051
+1329B;N # EGYPTIAN HIEROGLYPH P001
+1329C;N # EGYPTIAN HIEROGLYPH P001A
+1329D;N # EGYPTIAN HIEROGLYPH P002
+1329E;N # EGYPTIAN HIEROGLYPH P003
+1329F;N # EGYPTIAN HIEROGLYPH P003A
+132A0;N # EGYPTIAN HIEROGLYPH P004
+132A1;N # EGYPTIAN HIEROGLYPH P005
+132A2;N # EGYPTIAN HIEROGLYPH P006
+132A3;N # EGYPTIAN HIEROGLYPH P007
+132A4;N # EGYPTIAN HIEROGLYPH P008
+132A5;N # EGYPTIAN HIEROGLYPH P009
+132A6;N # EGYPTIAN HIEROGLYPH P010
+132A7;N # EGYPTIAN HIEROGLYPH P011
+132A8;N # EGYPTIAN HIEROGLYPH Q001
+132A9;N # EGYPTIAN HIEROGLYPH Q002
+132AA;N # EGYPTIAN HIEROGLYPH Q003
+132AB;N # EGYPTIAN HIEROGLYPH Q004
+132AC;N # EGYPTIAN HIEROGLYPH Q005
+132AD;N # EGYPTIAN HIEROGLYPH Q006
+132AE;N # EGYPTIAN HIEROGLYPH Q007
+132AF;N # EGYPTIAN HIEROGLYPH R001
+132B0;N # EGYPTIAN HIEROGLYPH R002
+132B1;N # EGYPTIAN HIEROGLYPH R002A
+132B2;N # EGYPTIAN HIEROGLYPH R003
+132B3;N # EGYPTIAN HIEROGLYPH R003A
+132B4;N # EGYPTIAN HIEROGLYPH R003B
+132B5;N # EGYPTIAN HIEROGLYPH R004
+132B6;N # EGYPTIAN HIEROGLYPH R005
+132B7;N # EGYPTIAN HIEROGLYPH R006
+132B8;N # EGYPTIAN HIEROGLYPH R007
+132B9;N # EGYPTIAN HIEROGLYPH R008
+132BA;N # EGYPTIAN HIEROGLYPH R009
+132BB;N # EGYPTIAN HIEROGLYPH R010
+132BC;N # EGYPTIAN HIEROGLYPH R010A
+132BD;N # EGYPTIAN HIEROGLYPH R011
+132BE;N # EGYPTIAN HIEROGLYPH R012
+132BF;N # EGYPTIAN HIEROGLYPH R013
+132C0;N # EGYPTIAN HIEROGLYPH R014
+132C1;N # EGYPTIAN HIEROGLYPH R015
+132C2;N # EGYPTIAN HIEROGLYPH R016
+132C3;N # EGYPTIAN HIEROGLYPH R016A
+132C4;N # EGYPTIAN HIEROGLYPH R017
+132C5;N # EGYPTIAN HIEROGLYPH R018
+132C6;N # EGYPTIAN HIEROGLYPH R019
+132C7;N # EGYPTIAN HIEROGLYPH R020
+132C8;N # EGYPTIAN HIEROGLYPH R021
+132C9;N # EGYPTIAN HIEROGLYPH R022
+132CA;N # EGYPTIAN HIEROGLYPH R023
+132CB;N # EGYPTIAN HIEROGLYPH R024
+132CC;N # EGYPTIAN HIEROGLYPH R025
+132CD;N # EGYPTIAN HIEROGLYPH R026
+132CE;N # EGYPTIAN HIEROGLYPH R027
+132CF;N # EGYPTIAN HIEROGLYPH R028
+132D0;N # EGYPTIAN HIEROGLYPH R029
+132D1;N # EGYPTIAN HIEROGLYPH S001
+132D2;N # EGYPTIAN HIEROGLYPH S002
+132D3;N # EGYPTIAN HIEROGLYPH S002A
+132D4;N # EGYPTIAN HIEROGLYPH S003
+132D5;N # EGYPTIAN HIEROGLYPH S004
+132D6;N # EGYPTIAN HIEROGLYPH S005
+132D7;N # EGYPTIAN HIEROGLYPH S006
+132D8;N # EGYPTIAN HIEROGLYPH S006A
+132D9;N # EGYPTIAN HIEROGLYPH S007
+132DA;N # EGYPTIAN HIEROGLYPH S008
+132DB;N # EGYPTIAN HIEROGLYPH S009
+132DC;N # EGYPTIAN HIEROGLYPH S010
+132DD;N # EGYPTIAN HIEROGLYPH S011
+132DE;N # EGYPTIAN HIEROGLYPH S012
+132DF;N # EGYPTIAN HIEROGLYPH S013
+132E0;N # EGYPTIAN HIEROGLYPH S014
+132E1;N # EGYPTIAN HIEROGLYPH S014A
+132E2;N # EGYPTIAN HIEROGLYPH S014B
+132E3;N # EGYPTIAN HIEROGLYPH S015
+132E4;N # EGYPTIAN HIEROGLYPH S016
+132E5;N # EGYPTIAN HIEROGLYPH S017
+132E6;N # EGYPTIAN HIEROGLYPH S017A
+132E7;N # EGYPTIAN HIEROGLYPH S018
+132E8;N # EGYPTIAN HIEROGLYPH S019
+132E9;N # EGYPTIAN HIEROGLYPH S020
+132EA;N # EGYPTIAN HIEROGLYPH S021
+132EB;N # EGYPTIAN HIEROGLYPH S022
+132EC;N # EGYPTIAN HIEROGLYPH S023
+132ED;N # EGYPTIAN HIEROGLYPH S024
+132EE;N # EGYPTIAN HIEROGLYPH S025
+132EF;N # EGYPTIAN HIEROGLYPH S026
+132F0;N # EGYPTIAN HIEROGLYPH S026A
+132F1;N # EGYPTIAN HIEROGLYPH S026B
+132F2;N # EGYPTIAN HIEROGLYPH S027
+132F3;N # EGYPTIAN HIEROGLYPH S028
+132F4;N # EGYPTIAN HIEROGLYPH S029
+132F5;N # EGYPTIAN HIEROGLYPH S030
+132F6;N # EGYPTIAN HIEROGLYPH S031
+132F7;N # EGYPTIAN HIEROGLYPH S032
+132F8;N # EGYPTIAN HIEROGLYPH S033
+132F9;N # EGYPTIAN HIEROGLYPH S034
+132FA;N # EGYPTIAN HIEROGLYPH S035
+132FB;N # EGYPTIAN HIEROGLYPH S035A
+132FC;N # EGYPTIAN HIEROGLYPH S036
+132FD;N # EGYPTIAN HIEROGLYPH S037
+132FE;N # EGYPTIAN HIEROGLYPH S038
+132FF;N # EGYPTIAN HIEROGLYPH S039
+13300;N # EGYPTIAN HIEROGLYPH S040
+13301;N # EGYPTIAN HIEROGLYPH S041
+13302;N # EGYPTIAN HIEROGLYPH S042
+13303;N # EGYPTIAN HIEROGLYPH S043
+13304;N # EGYPTIAN HIEROGLYPH S044
+13305;N # EGYPTIAN HIEROGLYPH S045
+13306;N # EGYPTIAN HIEROGLYPH S046
+13307;N # EGYPTIAN HIEROGLYPH T001
+13308;N # EGYPTIAN HIEROGLYPH T002
+13309;N # EGYPTIAN HIEROGLYPH T003
+1330A;N # EGYPTIAN HIEROGLYPH T003A
+1330B;N # EGYPTIAN HIEROGLYPH T004
+1330C;N # EGYPTIAN HIEROGLYPH T005
+1330D;N # EGYPTIAN HIEROGLYPH T006
+1330E;N # EGYPTIAN HIEROGLYPH T007
+1330F;N # EGYPTIAN HIEROGLYPH T007A
+13310;N # EGYPTIAN HIEROGLYPH T008
+13311;N # EGYPTIAN HIEROGLYPH T008A
+13312;N # EGYPTIAN HIEROGLYPH T009
+13313;N # EGYPTIAN HIEROGLYPH T009A
+13314;N # EGYPTIAN HIEROGLYPH T010
+13315;N # EGYPTIAN HIEROGLYPH T011
+13316;N # EGYPTIAN HIEROGLYPH T011A
+13317;N # EGYPTIAN HIEROGLYPH T012
+13318;N # EGYPTIAN HIEROGLYPH T013
+13319;N # EGYPTIAN HIEROGLYPH T014
+1331A;N # EGYPTIAN HIEROGLYPH T015
+1331B;N # EGYPTIAN HIEROGLYPH T016
+1331C;N # EGYPTIAN HIEROGLYPH T016A
+1331D;N # EGYPTIAN HIEROGLYPH T017
+1331E;N # EGYPTIAN HIEROGLYPH T018
+1331F;N # EGYPTIAN HIEROGLYPH T019
+13320;N # EGYPTIAN HIEROGLYPH T020
+13321;N # EGYPTIAN HIEROGLYPH T021
+13322;N # EGYPTIAN HIEROGLYPH T022
+13323;N # EGYPTIAN HIEROGLYPH T023
+13324;N # EGYPTIAN HIEROGLYPH T024
+13325;N # EGYPTIAN HIEROGLYPH T025
+13326;N # EGYPTIAN HIEROGLYPH T026
+13327;N # EGYPTIAN HIEROGLYPH T027
+13328;N # EGYPTIAN HIEROGLYPH T028
+13329;N # EGYPTIAN HIEROGLYPH T029
+1332A;N # EGYPTIAN HIEROGLYPH T030
+1332B;N # EGYPTIAN HIEROGLYPH T031
+1332C;N # EGYPTIAN HIEROGLYPH T032
+1332D;N # EGYPTIAN HIEROGLYPH T032A
+1332E;N # EGYPTIAN HIEROGLYPH T033
+1332F;N # EGYPTIAN HIEROGLYPH T033A
+13330;N # EGYPTIAN HIEROGLYPH T034
+13331;N # EGYPTIAN HIEROGLYPH T035
+13332;N # EGYPTIAN HIEROGLYPH T036
+13333;N # EGYPTIAN HIEROGLYPH U001
+13334;N # EGYPTIAN HIEROGLYPH U002
+13335;N # EGYPTIAN HIEROGLYPH U003
+13336;N # EGYPTIAN HIEROGLYPH U004
+13337;N # EGYPTIAN HIEROGLYPH U005
+13338;N # EGYPTIAN HIEROGLYPH U006
+13339;N # EGYPTIAN HIEROGLYPH U006A
+1333A;N # EGYPTIAN HIEROGLYPH U006B
+1333B;N # EGYPTIAN HIEROGLYPH U007
+1333C;N # EGYPTIAN HIEROGLYPH U008
+1333D;N # EGYPTIAN HIEROGLYPH U009
+1333E;N # EGYPTIAN HIEROGLYPH U010
+1333F;N # EGYPTIAN HIEROGLYPH U011
+13340;N # EGYPTIAN HIEROGLYPH U012
+13341;N # EGYPTIAN HIEROGLYPH U013
+13342;N # EGYPTIAN HIEROGLYPH U014
+13343;N # EGYPTIAN HIEROGLYPH U015
+13344;N # EGYPTIAN HIEROGLYPH U016
+13345;N # EGYPTIAN HIEROGLYPH U017
+13346;N # EGYPTIAN HIEROGLYPH U018
+13347;N # EGYPTIAN HIEROGLYPH U019
+13348;N # EGYPTIAN HIEROGLYPH U020
+13349;N # EGYPTIAN HIEROGLYPH U021
+1334A;N # EGYPTIAN HIEROGLYPH U022
+1334B;N # EGYPTIAN HIEROGLYPH U023
+1334C;N # EGYPTIAN HIEROGLYPH U023A
+1334D;N # EGYPTIAN HIEROGLYPH U024
+1334E;N # EGYPTIAN HIEROGLYPH U025
+1334F;N # EGYPTIAN HIEROGLYPH U026
+13350;N # EGYPTIAN HIEROGLYPH U027
+13351;N # EGYPTIAN HIEROGLYPH U028
+13352;N # EGYPTIAN HIEROGLYPH U029
+13353;N # EGYPTIAN HIEROGLYPH U029A
+13354;N # EGYPTIAN HIEROGLYPH U030
+13355;N # EGYPTIAN HIEROGLYPH U031
+13356;N # EGYPTIAN HIEROGLYPH U032
+13357;N # EGYPTIAN HIEROGLYPH U032A
+13358;N # EGYPTIAN HIEROGLYPH U033
+13359;N # EGYPTIAN HIEROGLYPH U034
+1335A;N # EGYPTIAN HIEROGLYPH U035
+1335B;N # EGYPTIAN HIEROGLYPH U036
+1335C;N # EGYPTIAN HIEROGLYPH U037
+1335D;N # EGYPTIAN HIEROGLYPH U038
+1335E;N # EGYPTIAN HIEROGLYPH U039
+1335F;N # EGYPTIAN HIEROGLYPH U040
+13360;N # EGYPTIAN HIEROGLYPH U041
+13361;N # EGYPTIAN HIEROGLYPH U042
+13362;N # EGYPTIAN HIEROGLYPH V001
+13363;N # EGYPTIAN HIEROGLYPH V001A
+13364;N # EGYPTIAN HIEROGLYPH V001B
+13365;N # EGYPTIAN HIEROGLYPH V001C
+13366;N # EGYPTIAN HIEROGLYPH V001D
+13367;N # EGYPTIAN HIEROGLYPH V001E
+13368;N # EGYPTIAN HIEROGLYPH V001F
+13369;N # EGYPTIAN HIEROGLYPH V001G
+1336A;N # EGYPTIAN HIEROGLYPH V001H
+1336B;N # EGYPTIAN HIEROGLYPH V001I
+1336C;N # EGYPTIAN HIEROGLYPH V002
+1336D;N # EGYPTIAN HIEROGLYPH V002A
+1336E;N # EGYPTIAN HIEROGLYPH V003
+1336F;N # EGYPTIAN HIEROGLYPH V004
+13370;N # EGYPTIAN HIEROGLYPH V005
+13371;N # EGYPTIAN HIEROGLYPH V006
+13372;N # EGYPTIAN HIEROGLYPH V007
+13373;N # EGYPTIAN HIEROGLYPH V007A
+13374;N # EGYPTIAN HIEROGLYPH V007B
+13375;N # EGYPTIAN HIEROGLYPH V008
+13376;N # EGYPTIAN HIEROGLYPH V009
+13377;N # EGYPTIAN HIEROGLYPH V010
+13378;N # EGYPTIAN HIEROGLYPH V011
+13379;N # EGYPTIAN HIEROGLYPH V011A
+1337A;N # EGYPTIAN HIEROGLYPH V011B
+1337B;N # EGYPTIAN HIEROGLYPH V011C
+1337C;N # EGYPTIAN HIEROGLYPH V012
+1337D;N # EGYPTIAN HIEROGLYPH V012A
+1337E;N # EGYPTIAN HIEROGLYPH V012B
+1337F;N # EGYPTIAN HIEROGLYPH V013
+13380;N # EGYPTIAN HIEROGLYPH V014
+13381;N # EGYPTIAN HIEROGLYPH V015
+13382;N # EGYPTIAN HIEROGLYPH V016
+13383;N # EGYPTIAN HIEROGLYPH V017
+13384;N # EGYPTIAN HIEROGLYPH V018
+13385;N # EGYPTIAN HIEROGLYPH V019
+13386;N # EGYPTIAN HIEROGLYPH V020
+13387;N # EGYPTIAN HIEROGLYPH V020A
+13388;N # EGYPTIAN HIEROGLYPH V020B
+13389;N # EGYPTIAN HIEROGLYPH V020C
+1338A;N # EGYPTIAN HIEROGLYPH V020D
+1338B;N # EGYPTIAN HIEROGLYPH V020E
+1338C;N # EGYPTIAN HIEROGLYPH V020F
+1338D;N # EGYPTIAN HIEROGLYPH V020G
+1338E;N # EGYPTIAN HIEROGLYPH V020H
+1338F;N # EGYPTIAN HIEROGLYPH V020I
+13390;N # EGYPTIAN HIEROGLYPH V020J
+13391;N # EGYPTIAN HIEROGLYPH V020K
+13392;N # EGYPTIAN HIEROGLYPH V020L
+13393;N # EGYPTIAN HIEROGLYPH V021
+13394;N # EGYPTIAN HIEROGLYPH V022
+13395;N # EGYPTIAN HIEROGLYPH V023
+13396;N # EGYPTIAN HIEROGLYPH V023A
+13397;N # EGYPTIAN HIEROGLYPH V024
+13398;N # EGYPTIAN HIEROGLYPH V025
+13399;N # EGYPTIAN HIEROGLYPH V026
+1339A;N # EGYPTIAN HIEROGLYPH V027
+1339B;N # EGYPTIAN HIEROGLYPH V028
+1339C;N # EGYPTIAN HIEROGLYPH V028A
+1339D;N # EGYPTIAN HIEROGLYPH V029
+1339E;N # EGYPTIAN HIEROGLYPH V029A
+1339F;N # EGYPTIAN HIEROGLYPH V030
+133A0;N # EGYPTIAN HIEROGLYPH V030A
+133A1;N # EGYPTIAN HIEROGLYPH V031
+133A2;N # EGYPTIAN HIEROGLYPH V031A
+133A3;N # EGYPTIAN HIEROGLYPH V032
+133A4;N # EGYPTIAN HIEROGLYPH V033
+133A5;N # EGYPTIAN HIEROGLYPH V033A
+133A6;N # EGYPTIAN HIEROGLYPH V034
+133A7;N # EGYPTIAN HIEROGLYPH V035
+133A8;N # EGYPTIAN HIEROGLYPH V036
+133A9;N # EGYPTIAN HIEROGLYPH V037
+133AA;N # EGYPTIAN HIEROGLYPH V037A
+133AB;N # EGYPTIAN HIEROGLYPH V038
+133AC;N # EGYPTIAN HIEROGLYPH V039
+133AD;N # EGYPTIAN HIEROGLYPH V040
+133AE;N # EGYPTIAN HIEROGLYPH V040A
+133AF;N # EGYPTIAN HIEROGLYPH W001
+133B0;N # EGYPTIAN HIEROGLYPH W002
+133B1;N # EGYPTIAN HIEROGLYPH W003
+133B2;N # EGYPTIAN HIEROGLYPH W003A
+133B3;N # EGYPTIAN HIEROGLYPH W004
+133B4;N # EGYPTIAN HIEROGLYPH W005
+133B5;N # EGYPTIAN HIEROGLYPH W006
+133B6;N # EGYPTIAN HIEROGLYPH W007
+133B7;N # EGYPTIAN HIEROGLYPH W008
+133B8;N # EGYPTIAN HIEROGLYPH W009
+133B9;N # EGYPTIAN HIEROGLYPH W009A
+133BA;N # EGYPTIAN HIEROGLYPH W010
+133BB;N # EGYPTIAN HIEROGLYPH W010A
+133BC;N # EGYPTIAN HIEROGLYPH W011
+133BD;N # EGYPTIAN HIEROGLYPH W012
+133BE;N # EGYPTIAN HIEROGLYPH W013
+133BF;N # EGYPTIAN HIEROGLYPH W014
+133C0;N # EGYPTIAN HIEROGLYPH W014A
+133C1;N # EGYPTIAN HIEROGLYPH W015
+133C2;N # EGYPTIAN HIEROGLYPH W016
+133C3;N # EGYPTIAN HIEROGLYPH W017
+133C4;N # EGYPTIAN HIEROGLYPH W017A
+133C5;N # EGYPTIAN HIEROGLYPH W018
+133C6;N # EGYPTIAN HIEROGLYPH W018A
+133C7;N # EGYPTIAN HIEROGLYPH W019
+133C8;N # EGYPTIAN HIEROGLYPH W020
+133C9;N # EGYPTIAN HIEROGLYPH W021
+133CA;N # EGYPTIAN HIEROGLYPH W022
+133CB;N # EGYPTIAN HIEROGLYPH W023
+133CC;N # EGYPTIAN HIEROGLYPH W024
+133CD;N # EGYPTIAN HIEROGLYPH W024A
+133CE;N # EGYPTIAN HIEROGLYPH W025
+133CF;N # EGYPTIAN HIEROGLYPH X001
+133D0;N # EGYPTIAN HIEROGLYPH X002
+133D1;N # EGYPTIAN HIEROGLYPH X003
+133D2;N # EGYPTIAN HIEROGLYPH X004
+133D3;N # EGYPTIAN HIEROGLYPH X004A
+133D4;N # EGYPTIAN HIEROGLYPH X004B
+133D5;N # EGYPTIAN HIEROGLYPH X005
+133D6;N # EGYPTIAN HIEROGLYPH X006
+133D7;N # EGYPTIAN HIEROGLYPH X006A
+133D8;N # EGYPTIAN HIEROGLYPH X007
+133D9;N # EGYPTIAN HIEROGLYPH X008
+133DA;N # EGYPTIAN HIEROGLYPH X008A
+133DB;N # EGYPTIAN HIEROGLYPH Y001
+133DC;N # EGYPTIAN HIEROGLYPH Y001A
+133DD;N # EGYPTIAN HIEROGLYPH Y002
+133DE;N # EGYPTIAN HIEROGLYPH Y003
+133DF;N # EGYPTIAN HIEROGLYPH Y004
+133E0;N # EGYPTIAN HIEROGLYPH Y005
+133E1;N # EGYPTIAN HIEROGLYPH Y006
+133E2;N # EGYPTIAN HIEROGLYPH Y007
+133E3;N # EGYPTIAN HIEROGLYPH Y008
+133E4;N # EGYPTIAN HIEROGLYPH Z001
+133E5;N # EGYPTIAN HIEROGLYPH Z002
+133E6;N # EGYPTIAN HIEROGLYPH Z002A
+133E7;N # EGYPTIAN HIEROGLYPH Z002B
+133E8;N # EGYPTIAN HIEROGLYPH Z002C
+133E9;N # EGYPTIAN HIEROGLYPH Z002D
+133EA;N # EGYPTIAN HIEROGLYPH Z003
+133EB;N # EGYPTIAN HIEROGLYPH Z003A
+133EC;N # EGYPTIAN HIEROGLYPH Z003B
+133ED;N # EGYPTIAN HIEROGLYPH Z004
+133EE;N # EGYPTIAN HIEROGLYPH Z004A
+133EF;N # EGYPTIAN HIEROGLYPH Z005
+133F0;N # EGYPTIAN HIEROGLYPH Z005A
+133F1;N # EGYPTIAN HIEROGLYPH Z006
+133F2;N # EGYPTIAN HIEROGLYPH Z007
+133F3;N # EGYPTIAN HIEROGLYPH Z008
+133F4;N # EGYPTIAN HIEROGLYPH Z009
+133F5;N # EGYPTIAN HIEROGLYPH Z010
+133F6;N # EGYPTIAN HIEROGLYPH Z011
+133F7;N # EGYPTIAN HIEROGLYPH Z012
+133F8;N # EGYPTIAN HIEROGLYPH Z013
+133F9;N # EGYPTIAN HIEROGLYPH Z014
+133FA;N # EGYPTIAN HIEROGLYPH Z015
+133FB;N # EGYPTIAN HIEROGLYPH Z015A
+133FC;N # EGYPTIAN HIEROGLYPH Z015B
+133FD;N # EGYPTIAN HIEROGLYPH Z015C
+133FE;N # EGYPTIAN HIEROGLYPH Z015D
+133FF;N # EGYPTIAN HIEROGLYPH Z015E
+13400;N # EGYPTIAN HIEROGLYPH Z015F
+13401;N # EGYPTIAN HIEROGLYPH Z015G
+13402;N # EGYPTIAN HIEROGLYPH Z015H
+13403;N # EGYPTIAN HIEROGLYPH Z015I
+13404;N # EGYPTIAN HIEROGLYPH Z016
+13405;N # EGYPTIAN HIEROGLYPH Z016A
+13406;N # EGYPTIAN HIEROGLYPH Z016B
+13407;N # EGYPTIAN HIEROGLYPH Z016C
+13408;N # EGYPTIAN HIEROGLYPH Z016D
+13409;N # EGYPTIAN HIEROGLYPH Z016E
+1340A;N # EGYPTIAN HIEROGLYPH Z016F
+1340B;N # EGYPTIAN HIEROGLYPH Z016G
+1340C;N # EGYPTIAN HIEROGLYPH Z016H
+1340D;N # EGYPTIAN HIEROGLYPH AA001
+1340E;N # EGYPTIAN HIEROGLYPH AA002
+1340F;N # EGYPTIAN HIEROGLYPH AA003
+13410;N # EGYPTIAN HIEROGLYPH AA004
+13411;N # EGYPTIAN HIEROGLYPH AA005
+13412;N # EGYPTIAN HIEROGLYPH AA006
+13413;N # EGYPTIAN HIEROGLYPH AA007
+13414;N # EGYPTIAN HIEROGLYPH AA007A
+13415;N # EGYPTIAN HIEROGLYPH AA007B
+13416;N # EGYPTIAN HIEROGLYPH AA008
+13417;N # EGYPTIAN HIEROGLYPH AA009
+13418;N # EGYPTIAN HIEROGLYPH AA010
+13419;N # EGYPTIAN HIEROGLYPH AA011
+1341A;N # EGYPTIAN HIEROGLYPH AA012
+1341B;N # EGYPTIAN HIEROGLYPH AA013
+1341C;N # EGYPTIAN HIEROGLYPH AA014
+1341D;N # EGYPTIAN HIEROGLYPH AA015
+1341E;N # EGYPTIAN HIEROGLYPH AA016
+1341F;N # EGYPTIAN HIEROGLYPH AA017
+13420;N # EGYPTIAN HIEROGLYPH AA018
+13421;N # EGYPTIAN HIEROGLYPH AA019
+13422;N # EGYPTIAN HIEROGLYPH AA020
+13423;N # EGYPTIAN HIEROGLYPH AA021
+13424;N # EGYPTIAN HIEROGLYPH AA022
+13425;N # EGYPTIAN HIEROGLYPH AA023
+13426;N # EGYPTIAN HIEROGLYPH AA024
+13427;N # EGYPTIAN HIEROGLYPH AA025
+13428;N # EGYPTIAN HIEROGLYPH AA026
+13429;N # EGYPTIAN HIEROGLYPH AA027
+1342A;N # EGYPTIAN HIEROGLYPH AA028
+1342B;N # EGYPTIAN HIEROGLYPH AA029
+1342C;N # EGYPTIAN HIEROGLYPH AA030
+1342D;N # EGYPTIAN HIEROGLYPH AA031
+1342E;N # EGYPTIAN HIEROGLYPH AA032
+1D000;N # BYZANTINE MUSICAL SYMBOL PSILI
+1D001;N # BYZANTINE MUSICAL SYMBOL DASEIA
+1D002;N # BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003;N # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004;N # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005;N # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006;N # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007;N # BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008;N # BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A;N # BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B;N # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C;N # BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D;N # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E;N # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F;N # BYZANTINE MUSICAL SYMBOL TELEIA
+1D010;N # BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013;N # BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014;N # BYZANTINE MUSICAL SYMBOL THITA
+1D015;N # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016;N # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017;N # BYZANTINE MUSICAL SYMBOL PSILON
+1D018;N # BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019;N # BYZANTINE MUSICAL SYMBOL VATHY
+1D01A;N # BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B;N # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C;N # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D;N # BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E;N # BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F;N # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020;N # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021;N # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022;N # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023;N # BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024;N # BYZANTINE MUSICAL SYMBOL KLASMA
+1D025;N # BYZANTINE MUSICAL SYMBOL REVMA
+1D026;N # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027;N # BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028;N # BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029;N # BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A;N # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B;N # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C;N # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D;N # BYZANTINE MUSICAL SYMBOL THEMA
+1D02E;N # BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F;N # BYZANTINE MUSICAL SYMBOL DYO
+1D030;N # BYZANTINE MUSICAL SYMBOL TRIA
+1D031;N # BYZANTINE MUSICAL SYMBOL TESSERA
+1D032;N # BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033;N # BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034;N # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035;N # BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036;N # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037;N # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038;N # BYZANTINE MUSICAL SYMBOL PELASTON
+1D039;N # BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A;N # BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B;N # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C;N # BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D;N # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F;N # BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040;N # BYZANTINE MUSICAL SYMBOL NANA
+1D041;N # BYZANTINE MUSICAL SYMBOL PETASMA
+1D042;N # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043;N # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044;N # BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045;N # BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046;N # BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047;N # BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048;N # BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049;N # BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A;N # BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B;N # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C;N # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D;N # BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050;N # BYZANTINE MUSICAL SYMBOL YPSILI
+1D051;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052;N # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053;N # BYZANTINE MUSICAL SYMBOL YPORROI
+1D054;N # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055;N # BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056;N # BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057;N # BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058;N # BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059;N # BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A;N # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B;N # BYZANTINE MUSICAL SYMBOL OMALON
+1D05C;N # BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D;N # BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F;N # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060;N # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061;N # BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062;N # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063;N # BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064;N # BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065;N # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066;N # BYZANTINE MUSICAL SYMBOL SYRMA
+1D067;N # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068;N # BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069;N # BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A;N # BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B;N # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C;N # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D;N # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E;N # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F;N # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070;N # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071;N # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072;N # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073;N # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074;N # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075;N # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076;N # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077;N # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078;N # BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079;N # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A;N # BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B;N # BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C;N # BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D;N # BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E;N # BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F;N # BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080;N # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081;N # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082;N # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083;N # BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084;N # BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085;N # BYZANTINE MUSICAL SYMBOL APLI
+1D086;N # BYZANTINE MUSICAL SYMBOL DIPLI
+1D087;N # BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088;N # BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089;N # BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A;N # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B;N # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C;N # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D;N # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E;N # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F;N # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090;N # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091;N # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092;N # BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096;N # BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097;N # BYZANTINE MUSICAL SYMBOL ARGON
+1D098;N # BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099;N # BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A;N # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B;N # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C;N # BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D;N # BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E;N # BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F;N # BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0;N # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1;N # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3;N # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4;N # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5;N # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA;N # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC;N # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD;N # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE;N # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF;N # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0;N # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1;N # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4;N # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5;N # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6;N # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7;N # BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8;N # BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9;N # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC;N # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE;N # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3;N # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4;N # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5;N # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6;N # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7;N # BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8;N # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9;N # BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA;N # BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB;N # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC;N # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD;N # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE;N # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF;N # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0;N # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1;N # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2;N # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3;N # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4;N # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5;N # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6;N # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7;N # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8;N # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9;N # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA;N # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB;N # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC;N # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD;N # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6;N # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7;N # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8;N # BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9;N # BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA;N # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB;N # BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC;N # BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED;N # BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE;N # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF;N # BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4;N # BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5;N # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100;N # MUSICAL SYMBOL SINGLE BARLINE
+1D101;N # MUSICAL SYMBOL DOUBLE BARLINE
+1D102;N # MUSICAL SYMBOL FINAL BARLINE
+1D103;N # MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104;N # MUSICAL SYMBOL DASHED BARLINE
+1D105;N # MUSICAL SYMBOL SHORT BARLINE
+1D106;N # MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107;N # MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108;N # MUSICAL SYMBOL REPEAT DOTS
+1D109;N # MUSICAL SYMBOL DAL SEGNO
+1D10A;N # MUSICAL SYMBOL DA CAPO
+1D10B;N # MUSICAL SYMBOL SEGNO
+1D10C;N # MUSICAL SYMBOL CODA
+1D10D;N # MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E;N # MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F;N # MUSICAL SYMBOL REPEATED FIGURE-3
+1D110;N # MUSICAL SYMBOL FERMATA
+1D111;N # MUSICAL SYMBOL FERMATA BELOW
+1D112;N # MUSICAL SYMBOL BREATH MARK
+1D113;N # MUSICAL SYMBOL CAESURA
+1D114;N # MUSICAL SYMBOL BRACE
+1D115;N # MUSICAL SYMBOL BRACKET
+1D116;N # MUSICAL SYMBOL ONE-LINE STAFF
+1D117;N # MUSICAL SYMBOL TWO-LINE STAFF
+1D118;N # MUSICAL SYMBOL THREE-LINE STAFF
+1D119;N # MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A;N # MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B;N # MUSICAL SYMBOL SIX-LINE STAFF
+1D11C;N # MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D;N # MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E;N # MUSICAL SYMBOL G CLEF
+1D11F;N # MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120;N # MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121;N # MUSICAL SYMBOL C CLEF
+1D122;N # MUSICAL SYMBOL F CLEF
+1D123;N # MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124;N # MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125;N # MUSICAL SYMBOL DRUM CLEF-1
+1D126;N # MUSICAL SYMBOL DRUM CLEF-2
+1D129;N # MUSICAL SYMBOL MULTIPLE MEASURE REST
+1D12A;N # MUSICAL SYMBOL DOUBLE SHARP
+1D12B;N # MUSICAL SYMBOL DOUBLE FLAT
+1D12C;N # MUSICAL SYMBOL FLAT UP
+1D12D;N # MUSICAL SYMBOL FLAT DOWN
+1D12E;N # MUSICAL SYMBOL NATURAL UP
+1D12F;N # MUSICAL SYMBOL NATURAL DOWN
+1D130;N # MUSICAL SYMBOL SHARP UP
+1D131;N # MUSICAL SYMBOL SHARP DOWN
+1D132;N # MUSICAL SYMBOL QUARTER TONE SHARP
+1D133;N # MUSICAL SYMBOL QUARTER TONE FLAT
+1D134;N # MUSICAL SYMBOL COMMON TIME
+1D135;N # MUSICAL SYMBOL CUT TIME
+1D136;N # MUSICAL SYMBOL OTTAVA ALTA
+1D137;N # MUSICAL SYMBOL OTTAVA BASSA
+1D138;N # MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139;N # MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A;N # MUSICAL SYMBOL MULTI REST
+1D13B;N # MUSICAL SYMBOL WHOLE REST
+1D13C;N # MUSICAL SYMBOL HALF REST
+1D13D;N # MUSICAL SYMBOL QUARTER REST
+1D13E;N # MUSICAL SYMBOL EIGHTH REST
+1D13F;N # MUSICAL SYMBOL SIXTEENTH REST
+1D140;N # MUSICAL SYMBOL THIRTY-SECOND REST
+1D141;N # MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142;N # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143;N # MUSICAL SYMBOL X NOTEHEAD
+1D144;N # MUSICAL SYMBOL PLUS NOTEHEAD
+1D145;N # MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146;N # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147;N # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152;N # MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153;N # MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154;N # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155;N # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156;N # MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157;N # MUSICAL SYMBOL VOID NOTEHEAD
+1D158;N # MUSICAL SYMBOL NOTEHEAD BLACK
+1D159;N # MUSICAL SYMBOL NULL NOTEHEAD
+1D15A;N # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B;N # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C;N # MUSICAL SYMBOL BREVE
+1D15D;N # MUSICAL SYMBOL WHOLE NOTE
+1D15E;N # MUSICAL SYMBOL HALF NOTE
+1D15F;N # MUSICAL SYMBOL QUARTER NOTE
+1D160;N # MUSICAL SYMBOL EIGHTH NOTE
+1D161;N # MUSICAL SYMBOL SIXTEENTH NOTE
+1D162;N # MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163;N # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164;N # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165;N # MUSICAL SYMBOL COMBINING STEM
+1D166;N # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167;N # MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168;N # MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169;N # MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A;N # MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B;N # MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C;N # MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D;N # MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E;N # MUSICAL SYMBOL COMBINING FLAG-1
+1D16F;N # MUSICAL SYMBOL COMBINING FLAG-2
+1D170;N # MUSICAL SYMBOL COMBINING FLAG-3
+1D171;N # MUSICAL SYMBOL COMBINING FLAG-4
+1D172;N # MUSICAL SYMBOL COMBINING FLAG-5
+1D173;N # MUSICAL SYMBOL BEGIN BEAM
+1D174;N # MUSICAL SYMBOL END BEAM
+1D175;N # MUSICAL SYMBOL BEGIN TIE
+1D176;N # MUSICAL SYMBOL END TIE
+1D177;N # MUSICAL SYMBOL BEGIN SLUR
+1D178;N # MUSICAL SYMBOL END SLUR
+1D179;N # MUSICAL SYMBOL BEGIN PHRASE
+1D17A;N # MUSICAL SYMBOL END PHRASE
+1D17B;N # MUSICAL SYMBOL COMBINING ACCENT
+1D17C;N # MUSICAL SYMBOL COMBINING STACCATO
+1D17D;N # MUSICAL SYMBOL COMBINING TENUTO
+1D17E;N # MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F;N # MUSICAL SYMBOL COMBINING MARCATO
+1D180;N # MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181;N # MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182;N # MUSICAL SYMBOL COMBINING LOURE
+1D183;N # MUSICAL SYMBOL ARPEGGIATO UP
+1D184;N # MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185;N # MUSICAL SYMBOL COMBINING DOIT
+1D186;N # MUSICAL SYMBOL COMBINING RIP
+1D187;N # MUSICAL SYMBOL COMBINING FLIP
+1D188;N # MUSICAL SYMBOL COMBINING SMEAR
+1D189;N # MUSICAL SYMBOL COMBINING BEND
+1D18A;N # MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B;N # MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C;N # MUSICAL SYMBOL RINFORZANDO
+1D18D;N # MUSICAL SYMBOL SUBITO
+1D18E;N # MUSICAL SYMBOL Z
+1D18F;N # MUSICAL SYMBOL PIANO
+1D190;N # MUSICAL SYMBOL MEZZO
+1D191;N # MUSICAL SYMBOL FORTE
+1D192;N # MUSICAL SYMBOL CRESCENDO
+1D193;N # MUSICAL SYMBOL DECRESCENDO
+1D194;N # MUSICAL SYMBOL GRACE NOTE SLASH
+1D195;N # MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196;N # MUSICAL SYMBOL TR
+1D197;N # MUSICAL SYMBOL TURN
+1D198;N # MUSICAL SYMBOL INVERTED TURN
+1D199;N # MUSICAL SYMBOL TURN SLASH
+1D19A;N # MUSICAL SYMBOL TURN UP
+1D19B;N # MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C;N # MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D;N # MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E;N # MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F;N # MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0;N # MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1;N # MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2;N # MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3;N # MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4;N # MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5;N # MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6;N # MUSICAL SYMBOL HAUPTSTIMME
+1D1A7;N # MUSICAL SYMBOL NEBENSTIMME
+1D1A8;N # MUSICAL SYMBOL END OF STIMME
+1D1A9;N # MUSICAL SYMBOL DEGREE SLASH
+1D1AA;N # MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB;N # MUSICAL SYMBOL COMBINING UP BOW
+1D1AC;N # MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD;N # MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE;N # MUSICAL SYMBOL PEDAL MARK
+1D1AF;N # MUSICAL SYMBOL PEDAL UP MARK
+1D1B0;N # MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1;N # MUSICAL SYMBOL GLISSANDO UP
+1D1B2;N # MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3;N # MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4;N # MUSICAL SYMBOL DAMP
+1D1B5;N # MUSICAL SYMBOL DAMP ALL
+1D1B6;N # MUSICAL SYMBOL MAXIMA
+1D1B7;N # MUSICAL SYMBOL LONGA
+1D1B8;N # MUSICAL SYMBOL BREVIS
+1D1B9;N # MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA;N # MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB;N # MUSICAL SYMBOL MINIMA
+1D1BC;N # MUSICAL SYMBOL MINIMA BLACK
+1D1BD;N # MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE;N # MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF;N # MUSICAL SYMBOL FUSA WHITE
+1D1C0;N # MUSICAL SYMBOL FUSA BLACK
+1D1C1;N # MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2;N # MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3;N # MUSICAL SYMBOL BREVIS REST
+1D1C4;N # MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5;N # MUSICAL SYMBOL MINIMA REST
+1D1C6;N # MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF;N # MUSICAL SYMBOL CROIX
+1D1D0;N # MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1;N # MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2;N # MUSICAL SYMBOL SQUARE B
+1D1D3;N # MUSICAL SYMBOL VIRGA
+1D1D4;N # MUSICAL SYMBOL PODATUS
+1D1D5;N # MUSICAL SYMBOL CLIVIS
+1D1D6;N # MUSICAL SYMBOL SCANDICUS
+1D1D7;N # MUSICAL SYMBOL CLIMACUS
+1D1D8;N # MUSICAL SYMBOL TORCULUS
+1D1D9;N # MUSICAL SYMBOL PORRECTUS
+1D1DA;N # MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB;N # MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC;N # MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD;N # MUSICAL SYMBOL PES SUBPUNCTIS
+1D200;N # GREEK VOCAL NOTATION SYMBOL-1
+1D201;N # GREEK VOCAL NOTATION SYMBOL-2
+1D202;N # GREEK VOCAL NOTATION SYMBOL-3
+1D203;N # GREEK VOCAL NOTATION SYMBOL-4
+1D204;N # GREEK VOCAL NOTATION SYMBOL-5
+1D205;N # GREEK VOCAL NOTATION SYMBOL-6
+1D206;N # GREEK VOCAL NOTATION SYMBOL-7
+1D207;N # GREEK VOCAL NOTATION SYMBOL-8
+1D208;N # GREEK VOCAL NOTATION SYMBOL-9
+1D209;N # GREEK VOCAL NOTATION SYMBOL-10
+1D20A;N # GREEK VOCAL NOTATION SYMBOL-11
+1D20B;N # GREEK VOCAL NOTATION SYMBOL-12
+1D20C;N # GREEK VOCAL NOTATION SYMBOL-13
+1D20D;N # GREEK VOCAL NOTATION SYMBOL-14
+1D20E;N # GREEK VOCAL NOTATION SYMBOL-15
+1D20F;N # GREEK VOCAL NOTATION SYMBOL-16
+1D210;N # GREEK VOCAL NOTATION SYMBOL-17
+1D211;N # GREEK VOCAL NOTATION SYMBOL-18
+1D212;N # GREEK VOCAL NOTATION SYMBOL-19
+1D213;N # GREEK VOCAL NOTATION SYMBOL-20
+1D214;N # GREEK VOCAL NOTATION SYMBOL-21
+1D215;N # GREEK VOCAL NOTATION SYMBOL-22
+1D216;N # GREEK VOCAL NOTATION SYMBOL-23
+1D217;N # GREEK VOCAL NOTATION SYMBOL-24
+1D218;N # GREEK VOCAL NOTATION SYMBOL-50
+1D219;N # GREEK VOCAL NOTATION SYMBOL-51
+1D21A;N # GREEK VOCAL NOTATION SYMBOL-52
+1D21B;N # GREEK VOCAL NOTATION SYMBOL-53
+1D21C;N # GREEK VOCAL NOTATION SYMBOL-54
+1D21D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220;N # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221;N # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222;N # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223;N # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224;N # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225;N # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226;N # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227;N # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228;N # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229;N # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230;N # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231;N # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232;N # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233;N # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234;N # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235;N # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236;N # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237;N # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238;N # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239;N # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240;N # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241;N # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242;N # COMBINING GREEK MUSICAL TRISEME
+1D243;N # COMBINING GREEK MUSICAL TETRASEME
+1D244;N # COMBINING GREEK MUSICAL PENTASEME
+1D245;N # GREEK MUSICAL LEIMMA
+1D300;N # MONOGRAM FOR EARTH
+1D301;N # DIGRAM FOR HEAVENLY EARTH
+1D302;N # DIGRAM FOR HUMAN EARTH
+1D303;N # DIGRAM FOR EARTHLY HEAVEN
+1D304;N # DIGRAM FOR EARTHLY HUMAN
+1D305;N # DIGRAM FOR EARTH
+1D306;N # TETRAGRAM FOR CENTRE
+1D307;N # TETRAGRAM FOR FULL CIRCLE
+1D308;N # TETRAGRAM FOR MIRED
+1D309;N # TETRAGRAM FOR BARRIER
+1D30A;N # TETRAGRAM FOR KEEPING SMALL
+1D30B;N # TETRAGRAM FOR CONTRARIETY
+1D30C;N # TETRAGRAM FOR ASCENT
+1D30D;N # TETRAGRAM FOR OPPOSITION
+1D30E;N # TETRAGRAM FOR BRANCHING OUT
+1D30F;N # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310;N # TETRAGRAM FOR DIVERGENCE
+1D311;N # TETRAGRAM FOR YOUTHFULNESS
+1D312;N # TETRAGRAM FOR INCREASE
+1D313;N # TETRAGRAM FOR PENETRATION
+1D314;N # TETRAGRAM FOR REACH
+1D315;N # TETRAGRAM FOR CONTACT
+1D316;N # TETRAGRAM FOR HOLDING BACK
+1D317;N # TETRAGRAM FOR WAITING
+1D318;N # TETRAGRAM FOR FOLLOWING
+1D319;N # TETRAGRAM FOR ADVANCE
+1D31A;N # TETRAGRAM FOR RELEASE
+1D31B;N # TETRAGRAM FOR RESISTANCE
+1D31C;N # TETRAGRAM FOR EASE
+1D31D;N # TETRAGRAM FOR JOY
+1D31E;N # TETRAGRAM FOR CONTENTION
+1D31F;N # TETRAGRAM FOR ENDEAVOUR
+1D320;N # TETRAGRAM FOR DUTIES
+1D321;N # TETRAGRAM FOR CHANGE
+1D322;N # TETRAGRAM FOR DECISIVENESS
+1D323;N # TETRAGRAM FOR BOLD RESOLUTION
+1D324;N # TETRAGRAM FOR PACKING
+1D325;N # TETRAGRAM FOR LEGION
+1D326;N # TETRAGRAM FOR CLOSENESS
+1D327;N # TETRAGRAM FOR KINSHIP
+1D328;N # TETRAGRAM FOR GATHERING
+1D329;N # TETRAGRAM FOR STRENGTH
+1D32A;N # TETRAGRAM FOR PURITY
+1D32B;N # TETRAGRAM FOR FULLNESS
+1D32C;N # TETRAGRAM FOR RESIDENCE
+1D32D;N # TETRAGRAM FOR LAW OR MODEL
+1D32E;N # TETRAGRAM FOR RESPONSE
+1D32F;N # TETRAGRAM FOR GOING TO MEET
+1D330;N # TETRAGRAM FOR ENCOUNTERS
+1D331;N # TETRAGRAM FOR STOVE
+1D332;N # TETRAGRAM FOR GREATNESS
+1D333;N # TETRAGRAM FOR ENLARGEMENT
+1D334;N # TETRAGRAM FOR PATTERN
+1D335;N # TETRAGRAM FOR RITUAL
+1D336;N # TETRAGRAM FOR FLIGHT
+1D337;N # TETRAGRAM FOR VASTNESS OR WASTING
+1D338;N # TETRAGRAM FOR CONSTANCY
+1D339;N # TETRAGRAM FOR MEASURE
+1D33A;N # TETRAGRAM FOR ETERNITY
+1D33B;N # TETRAGRAM FOR UNITY
+1D33C;N # TETRAGRAM FOR DIMINISHMENT
+1D33D;N # TETRAGRAM FOR CLOSED MOUTH
+1D33E;N # TETRAGRAM FOR GUARDEDNESS
+1D33F;N # TETRAGRAM FOR GATHERING IN
+1D340;N # TETRAGRAM FOR MASSING
+1D341;N # TETRAGRAM FOR ACCUMULATION
+1D342;N # TETRAGRAM FOR EMBELLISHMENT
+1D343;N # TETRAGRAM FOR DOUBT
+1D344;N # TETRAGRAM FOR WATCH
+1D345;N # TETRAGRAM FOR SINKING
+1D346;N # TETRAGRAM FOR INNER
+1D347;N # TETRAGRAM FOR DEPARTURE
+1D348;N # TETRAGRAM FOR DARKENING
+1D349;N # TETRAGRAM FOR DIMMING
+1D34A;N # TETRAGRAM FOR EXHAUSTION
+1D34B;N # TETRAGRAM FOR SEVERANCE
+1D34C;N # TETRAGRAM FOR STOPPAGE
+1D34D;N # TETRAGRAM FOR HARDNESS
+1D34E;N # TETRAGRAM FOR COMPLETION
+1D34F;N # TETRAGRAM FOR CLOSURE
+1D350;N # TETRAGRAM FOR FAILURE
+1D351;N # TETRAGRAM FOR AGGRAVATION
+1D352;N # TETRAGRAM FOR COMPLIANCE
+1D353;N # TETRAGRAM FOR ON THE VERGE
+1D354;N # TETRAGRAM FOR DIFFICULTIES
+1D355;N # TETRAGRAM FOR LABOURING
+1D356;N # TETRAGRAM FOR FOSTERING
+1D360;N # COUNTING ROD UNIT DIGIT ONE
+1D361;N # COUNTING ROD UNIT DIGIT TWO
+1D362;N # COUNTING ROD UNIT DIGIT THREE
+1D363;N # COUNTING ROD UNIT DIGIT FOUR
+1D364;N # COUNTING ROD UNIT DIGIT FIVE
+1D365;N # COUNTING ROD UNIT DIGIT SIX
+1D366;N # COUNTING ROD UNIT DIGIT SEVEN
+1D367;N # COUNTING ROD UNIT DIGIT EIGHT
+1D368;N # COUNTING ROD UNIT DIGIT NINE
+1D369;N # COUNTING ROD TENS DIGIT ONE
+1D36A;N # COUNTING ROD TENS DIGIT TWO
+1D36B;N # COUNTING ROD TENS DIGIT THREE
+1D36C;N # COUNTING ROD TENS DIGIT FOUR
+1D36D;N # COUNTING ROD TENS DIGIT FIVE
+1D36E;N # COUNTING ROD TENS DIGIT SIX
+1D36F;N # COUNTING ROD TENS DIGIT SEVEN
+1D370;N # COUNTING ROD TENS DIGIT EIGHT
+1D371;N # COUNTING ROD TENS DIGIT NINE
+1D400;N # MATHEMATICAL BOLD CAPITAL A
+1D401;N # MATHEMATICAL BOLD CAPITAL B
+1D402;N # MATHEMATICAL BOLD CAPITAL C
+1D403;N # MATHEMATICAL BOLD CAPITAL D
+1D404;N # MATHEMATICAL BOLD CAPITAL E
+1D405;N # MATHEMATICAL BOLD CAPITAL F
+1D406;N # MATHEMATICAL BOLD CAPITAL G
+1D407;N # MATHEMATICAL BOLD CAPITAL H
+1D408;N # MATHEMATICAL BOLD CAPITAL I
+1D409;N # MATHEMATICAL BOLD CAPITAL J
+1D40A;N # MATHEMATICAL BOLD CAPITAL K
+1D40B;N # MATHEMATICAL BOLD CAPITAL L
+1D40C;N # MATHEMATICAL BOLD CAPITAL M
+1D40D;N # MATHEMATICAL BOLD CAPITAL N
+1D40E;N # MATHEMATICAL BOLD CAPITAL O
+1D40F;N # MATHEMATICAL BOLD CAPITAL P
+1D410;N # MATHEMATICAL BOLD CAPITAL Q
+1D411;N # MATHEMATICAL BOLD CAPITAL R
+1D412;N # MATHEMATICAL BOLD CAPITAL S
+1D413;N # MATHEMATICAL BOLD CAPITAL T
+1D414;N # MATHEMATICAL BOLD CAPITAL U
+1D415;N # MATHEMATICAL BOLD CAPITAL V
+1D416;N # MATHEMATICAL BOLD CAPITAL W
+1D417;N # MATHEMATICAL BOLD CAPITAL X
+1D418;N # MATHEMATICAL BOLD CAPITAL Y
+1D419;N # MATHEMATICAL BOLD CAPITAL Z
+1D41A;N # MATHEMATICAL BOLD SMALL A
+1D41B;N # MATHEMATICAL BOLD SMALL B
+1D41C;N # MATHEMATICAL BOLD SMALL C
+1D41D;N # MATHEMATICAL BOLD SMALL D
+1D41E;N # MATHEMATICAL BOLD SMALL E
+1D41F;N # MATHEMATICAL BOLD SMALL F
+1D420;N # MATHEMATICAL BOLD SMALL G
+1D421;N # MATHEMATICAL BOLD SMALL H
+1D422;N # MATHEMATICAL BOLD SMALL I
+1D423;N # MATHEMATICAL BOLD SMALL J
+1D424;N # MATHEMATICAL BOLD SMALL K
+1D425;N # MATHEMATICAL BOLD SMALL L
+1D426;N # MATHEMATICAL BOLD SMALL M
+1D427;N # MATHEMATICAL BOLD SMALL N
+1D428;N # MATHEMATICAL BOLD SMALL O
+1D429;N # MATHEMATICAL BOLD SMALL P
+1D42A;N # MATHEMATICAL BOLD SMALL Q
+1D42B;N # MATHEMATICAL BOLD SMALL R
+1D42C;N # MATHEMATICAL BOLD SMALL S
+1D42D;N # MATHEMATICAL BOLD SMALL T
+1D42E;N # MATHEMATICAL BOLD SMALL U
+1D42F;N # MATHEMATICAL BOLD SMALL V
+1D430;N # MATHEMATICAL BOLD SMALL W
+1D431;N # MATHEMATICAL BOLD SMALL X
+1D432;N # MATHEMATICAL BOLD SMALL Y
+1D433;N # MATHEMATICAL BOLD SMALL Z
+1D434;N # MATHEMATICAL ITALIC CAPITAL A
+1D435;N # MATHEMATICAL ITALIC CAPITAL B
+1D436;N # MATHEMATICAL ITALIC CAPITAL C
+1D437;N # MATHEMATICAL ITALIC CAPITAL D
+1D438;N # MATHEMATICAL ITALIC CAPITAL E
+1D439;N # MATHEMATICAL ITALIC CAPITAL F
+1D43A;N # MATHEMATICAL ITALIC CAPITAL G
+1D43B;N # MATHEMATICAL ITALIC CAPITAL H
+1D43C;N # MATHEMATICAL ITALIC CAPITAL I
+1D43D;N # MATHEMATICAL ITALIC CAPITAL J
+1D43E;N # MATHEMATICAL ITALIC CAPITAL K
+1D43F;N # MATHEMATICAL ITALIC CAPITAL L
+1D440;N # MATHEMATICAL ITALIC CAPITAL M
+1D441;N # MATHEMATICAL ITALIC CAPITAL N
+1D442;N # MATHEMATICAL ITALIC CAPITAL O
+1D443;N # MATHEMATICAL ITALIC CAPITAL P
+1D444;N # MATHEMATICAL ITALIC CAPITAL Q
+1D445;N # MATHEMATICAL ITALIC CAPITAL R
+1D446;N # MATHEMATICAL ITALIC CAPITAL S
+1D447;N # MATHEMATICAL ITALIC CAPITAL T
+1D448;N # MATHEMATICAL ITALIC CAPITAL U
+1D449;N # MATHEMATICAL ITALIC CAPITAL V
+1D44A;N # MATHEMATICAL ITALIC CAPITAL W
+1D44B;N # MATHEMATICAL ITALIC CAPITAL X
+1D44C;N # MATHEMATICAL ITALIC CAPITAL Y
+1D44D;N # MATHEMATICAL ITALIC CAPITAL Z
+1D44E;N # MATHEMATICAL ITALIC SMALL A
+1D44F;N # MATHEMATICAL ITALIC SMALL B
+1D450;N # MATHEMATICAL ITALIC SMALL C
+1D451;N # MATHEMATICAL ITALIC SMALL D
+1D452;N # MATHEMATICAL ITALIC SMALL E
+1D453;N # MATHEMATICAL ITALIC SMALL F
+1D454;N # MATHEMATICAL ITALIC SMALL G
+1D456;N # MATHEMATICAL ITALIC SMALL I
+1D457;N # MATHEMATICAL ITALIC SMALL J
+1D458;N # MATHEMATICAL ITALIC SMALL K
+1D459;N # MATHEMATICAL ITALIC SMALL L
+1D45A;N # MATHEMATICAL ITALIC SMALL M
+1D45B;N # MATHEMATICAL ITALIC SMALL N
+1D45C;N # MATHEMATICAL ITALIC SMALL O
+1D45D;N # MATHEMATICAL ITALIC SMALL P
+1D45E;N # MATHEMATICAL ITALIC SMALL Q
+1D45F;N # MATHEMATICAL ITALIC SMALL R
+1D460;N # MATHEMATICAL ITALIC SMALL S
+1D461;N # MATHEMATICAL ITALIC SMALL T
+1D462;N # MATHEMATICAL ITALIC SMALL U
+1D463;N # MATHEMATICAL ITALIC SMALL V
+1D464;N # MATHEMATICAL ITALIC SMALL W
+1D465;N # MATHEMATICAL ITALIC SMALL X
+1D466;N # MATHEMATICAL ITALIC SMALL Y
+1D467;N # MATHEMATICAL ITALIC SMALL Z
+1D468;N # MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469;N # MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A;N # MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B;N # MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C;N # MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D;N # MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E;N # MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F;N # MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470;N # MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471;N # MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472;N # MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473;N # MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474;N # MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475;N # MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476;N # MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477;N # MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478;N # MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479;N # MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A;N # MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B;N # MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C;N # MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D;N # MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E;N # MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F;N # MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480;N # MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481;N # MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482;N # MATHEMATICAL BOLD ITALIC SMALL A
+1D483;N # MATHEMATICAL BOLD ITALIC SMALL B
+1D484;N # MATHEMATICAL BOLD ITALIC SMALL C
+1D485;N # MATHEMATICAL BOLD ITALIC SMALL D
+1D486;N # MATHEMATICAL BOLD ITALIC SMALL E
+1D487;N # MATHEMATICAL BOLD ITALIC SMALL F
+1D488;N # MATHEMATICAL BOLD ITALIC SMALL G
+1D489;N # MATHEMATICAL BOLD ITALIC SMALL H
+1D48A;N # MATHEMATICAL BOLD ITALIC SMALL I
+1D48B;N # MATHEMATICAL BOLD ITALIC SMALL J
+1D48C;N # MATHEMATICAL BOLD ITALIC SMALL K
+1D48D;N # MATHEMATICAL BOLD ITALIC SMALL L
+1D48E;N # MATHEMATICAL BOLD ITALIC SMALL M
+1D48F;N # MATHEMATICAL BOLD ITALIC SMALL N
+1D490;N # MATHEMATICAL BOLD ITALIC SMALL O
+1D491;N # MATHEMATICAL BOLD ITALIC SMALL P
+1D492;N # MATHEMATICAL BOLD ITALIC SMALL Q
+1D493;N # MATHEMATICAL BOLD ITALIC SMALL R
+1D494;N # MATHEMATICAL BOLD ITALIC SMALL S
+1D495;N # MATHEMATICAL BOLD ITALIC SMALL T
+1D496;N # MATHEMATICAL BOLD ITALIC SMALL U
+1D497;N # MATHEMATICAL BOLD ITALIC SMALL V
+1D498;N # MATHEMATICAL BOLD ITALIC SMALL W
+1D499;N # MATHEMATICAL BOLD ITALIC SMALL X
+1D49A;N # MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B;N # MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C;N # MATHEMATICAL SCRIPT CAPITAL A
+1D49E;N # MATHEMATICAL SCRIPT CAPITAL C
+1D49F;N # MATHEMATICAL SCRIPT CAPITAL D
+1D4A2;N # MATHEMATICAL SCRIPT CAPITAL G
+1D4A5;N # MATHEMATICAL SCRIPT CAPITAL J
+1D4A6;N # MATHEMATICAL SCRIPT CAPITAL K
+1D4A9;N # MATHEMATICAL SCRIPT CAPITAL N
+1D4AA;N # MATHEMATICAL SCRIPT CAPITAL O
+1D4AB;N # MATHEMATICAL SCRIPT CAPITAL P
+1D4AC;N # MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE;N # MATHEMATICAL SCRIPT CAPITAL S
+1D4AF;N # MATHEMATICAL SCRIPT CAPITAL T
+1D4B0;N # MATHEMATICAL SCRIPT CAPITAL U
+1D4B1;N # MATHEMATICAL SCRIPT CAPITAL V
+1D4B2;N # MATHEMATICAL SCRIPT CAPITAL W
+1D4B3;N # MATHEMATICAL SCRIPT CAPITAL X
+1D4B4;N # MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5;N # MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6;N # MATHEMATICAL SCRIPT SMALL A
+1D4B7;N # MATHEMATICAL SCRIPT SMALL B
+1D4B8;N # MATHEMATICAL SCRIPT SMALL C
+1D4B9;N # MATHEMATICAL SCRIPT SMALL D
+1D4BB;N # MATHEMATICAL SCRIPT SMALL F
+1D4BD;N # MATHEMATICAL SCRIPT SMALL H
+1D4BE;N # MATHEMATICAL SCRIPT SMALL I
+1D4BF;N # MATHEMATICAL SCRIPT SMALL J
+1D4C0;N # MATHEMATICAL SCRIPT SMALL K
+1D4C1;N # MATHEMATICAL SCRIPT SMALL L
+1D4C2;N # MATHEMATICAL SCRIPT SMALL M
+1D4C3;N # MATHEMATICAL SCRIPT SMALL N
+1D4C5;N # MATHEMATICAL SCRIPT SMALL P
+1D4C6;N # MATHEMATICAL SCRIPT SMALL Q
+1D4C7;N # MATHEMATICAL SCRIPT SMALL R
+1D4C8;N # MATHEMATICAL SCRIPT SMALL S
+1D4C9;N # MATHEMATICAL SCRIPT SMALL T
+1D4CA;N # MATHEMATICAL SCRIPT SMALL U
+1D4CB;N # MATHEMATICAL SCRIPT SMALL V
+1D4CC;N # MATHEMATICAL SCRIPT SMALL W
+1D4CD;N # MATHEMATICAL SCRIPT SMALL X
+1D4CE;N # MATHEMATICAL SCRIPT SMALL Y
+1D4CF;N # MATHEMATICAL SCRIPT SMALL Z
+1D4D0;N # MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1;N # MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2;N # MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3;N # MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4;N # MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5;N # MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6;N # MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7;N # MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8;N # MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9;N # MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA;N # MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB;N # MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC;N # MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD;N # MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE;N # MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF;N # MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0;N # MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1;N # MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2;N # MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3;N # MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4;N # MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5;N # MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6;N # MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7;N # MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8;N # MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9;N # MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA;N # MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB;N # MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC;N # MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED;N # MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE;N # MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF;N # MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0;N # MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1;N # MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2;N # MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3;N # MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4;N # MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5;N # MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6;N # MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7;N # MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8;N # MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9;N # MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA;N # MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB;N # MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC;N # MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD;N # MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE;N # MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF;N # MATHEMATICAL BOLD SCRIPT SMALL V
+1D500;N # MATHEMATICAL BOLD SCRIPT SMALL W
+1D501;N # MATHEMATICAL BOLD SCRIPT SMALL X
+1D502;N # MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503;N # MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504;N # MATHEMATICAL FRAKTUR CAPITAL A
+1D505;N # MATHEMATICAL FRAKTUR CAPITAL B
+1D507;N # MATHEMATICAL FRAKTUR CAPITAL D
+1D508;N # MATHEMATICAL FRAKTUR CAPITAL E
+1D509;N # MATHEMATICAL FRAKTUR CAPITAL F
+1D50A;N # MATHEMATICAL FRAKTUR CAPITAL G
+1D50D;N # MATHEMATICAL FRAKTUR CAPITAL J
+1D50E;N # MATHEMATICAL FRAKTUR CAPITAL K
+1D50F;N # MATHEMATICAL FRAKTUR CAPITAL L
+1D510;N # MATHEMATICAL FRAKTUR CAPITAL M
+1D511;N # MATHEMATICAL FRAKTUR CAPITAL N
+1D512;N # MATHEMATICAL FRAKTUR CAPITAL O
+1D513;N # MATHEMATICAL FRAKTUR CAPITAL P
+1D514;N # MATHEMATICAL FRAKTUR CAPITAL Q
+1D516;N # MATHEMATICAL FRAKTUR CAPITAL S
+1D517;N # MATHEMATICAL FRAKTUR CAPITAL T
+1D518;N # MATHEMATICAL FRAKTUR CAPITAL U
+1D519;N # MATHEMATICAL FRAKTUR CAPITAL V
+1D51A;N # MATHEMATICAL FRAKTUR CAPITAL W
+1D51B;N # MATHEMATICAL FRAKTUR CAPITAL X
+1D51C;N # MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E;N # MATHEMATICAL FRAKTUR SMALL A
+1D51F;N # MATHEMATICAL FRAKTUR SMALL B
+1D520;N # MATHEMATICAL FRAKTUR SMALL C
+1D521;N # MATHEMATICAL FRAKTUR SMALL D
+1D522;N # MATHEMATICAL FRAKTUR SMALL E
+1D523;N # MATHEMATICAL FRAKTUR SMALL F
+1D524;N # MATHEMATICAL FRAKTUR SMALL G
+1D525;N # MATHEMATICAL FRAKTUR SMALL H
+1D526;N # MATHEMATICAL FRAKTUR SMALL I
+1D527;N # MATHEMATICAL FRAKTUR SMALL J
+1D528;N # MATHEMATICAL FRAKTUR SMALL K
+1D529;N # MATHEMATICAL FRAKTUR SMALL L
+1D52A;N # MATHEMATICAL FRAKTUR SMALL M
+1D52B;N # MATHEMATICAL FRAKTUR SMALL N
+1D52C;N # MATHEMATICAL FRAKTUR SMALL O
+1D52D;N # MATHEMATICAL FRAKTUR SMALL P
+1D52E;N # MATHEMATICAL FRAKTUR SMALL Q
+1D52F;N # MATHEMATICAL FRAKTUR SMALL R
+1D530;N # MATHEMATICAL FRAKTUR SMALL S
+1D531;N # MATHEMATICAL FRAKTUR SMALL T
+1D532;N # MATHEMATICAL FRAKTUR SMALL U
+1D533;N # MATHEMATICAL FRAKTUR SMALL V
+1D534;N # MATHEMATICAL FRAKTUR SMALL W
+1D535;N # MATHEMATICAL FRAKTUR SMALL X
+1D536;N # MATHEMATICAL FRAKTUR SMALL Y
+1D537;N # MATHEMATICAL FRAKTUR SMALL Z
+1D538;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552;N # MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553;N # MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554;N # MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555;N # MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556;N # MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557;N # MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558;N # MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559;N # MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A;N # MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B;N # MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C;N # MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D;N # MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E;N # MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F;N # MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560;N # MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561;N # MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562;N # MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563;N # MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564;N # MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565;N # MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566;N # MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567;N # MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568;N # MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569;N # MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A;N # MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B;N # MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C;N # MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D;N # MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E;N # MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F;N # MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570;N # MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571;N # MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572;N # MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573;N # MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574;N # MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575;N # MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576;N # MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577;N # MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578;N # MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579;N # MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A;N # MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B;N # MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D;N # MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E;N # MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F;N # MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580;N # MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581;N # MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582;N # MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583;N # MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586;N # MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587;N # MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588;N # MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589;N # MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A;N # MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B;N # MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C;N # MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D;N # MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E;N # MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F;N # MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590;N # MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591;N # MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592;N # MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593;N # MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594;N # MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595;N # MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596;N # MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597;N # MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598;N # MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599;N # MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A;N # MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B;N # MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C;N # MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D;N # MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E;N # MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F;N # MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0;N # MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1;N # MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2;N # MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3;N # MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4;N # MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5;N # MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6;N # MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7;N # MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8;N # MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9;N # MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA;N # MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB;N # MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC;N # MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD;N # MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE;N # MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF;N # MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0;N # MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1;N # MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2;N # MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3;N # MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4;N # MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5;N # MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6;N # MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7;N # MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8;N # MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9;N # MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA;N # MATHEMATICAL SANS-SERIF SMALL A
+1D5BB;N # MATHEMATICAL SANS-SERIF SMALL B
+1D5BC;N # MATHEMATICAL SANS-SERIF SMALL C
+1D5BD;N # MATHEMATICAL SANS-SERIF SMALL D
+1D5BE;N # MATHEMATICAL SANS-SERIF SMALL E
+1D5BF;N # MATHEMATICAL SANS-SERIF SMALL F
+1D5C0;N # MATHEMATICAL SANS-SERIF SMALL G
+1D5C1;N # MATHEMATICAL SANS-SERIF SMALL H
+1D5C2;N # MATHEMATICAL SANS-SERIF SMALL I
+1D5C3;N # MATHEMATICAL SANS-SERIF SMALL J
+1D5C4;N # MATHEMATICAL SANS-SERIF SMALL K
+1D5C5;N # MATHEMATICAL SANS-SERIF SMALL L
+1D5C6;N # MATHEMATICAL SANS-SERIF SMALL M
+1D5C7;N # MATHEMATICAL SANS-SERIF SMALL N
+1D5C8;N # MATHEMATICAL SANS-SERIF SMALL O
+1D5C9;N # MATHEMATICAL SANS-SERIF SMALL P
+1D5CA;N # MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB;N # MATHEMATICAL SANS-SERIF SMALL R
+1D5CC;N # MATHEMATICAL SANS-SERIF SMALL S
+1D5CD;N # MATHEMATICAL SANS-SERIF SMALL T
+1D5CE;N # MATHEMATICAL SANS-SERIF SMALL U
+1D5CF;N # MATHEMATICAL SANS-SERIF SMALL V
+1D5D0;N # MATHEMATICAL SANS-SERIF SMALL W
+1D5D1;N # MATHEMATICAL SANS-SERIF SMALL X
+1D5D2;N # MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3;N # MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE;N # MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF;N # MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0;N # MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1;N # MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2;N # MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3;N # MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4;N # MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5;N # MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6;N # MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7;N # MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8;N # MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9;N # MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA;N # MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB;N # MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC;N # MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD;N # MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE;N # MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF;N # MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600;N # MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601;N # MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602;N # MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603;N # MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604;N # MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605;N # MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606;N # MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607;N # MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622;N # MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623;N # MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624;N # MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625;N # MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626;N # MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627;N # MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628;N # MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629;N # MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A;N # MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B;N # MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C;N # MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D;N # MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E;N # MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F;N # MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630;N # MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631;N # MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633;N # MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634;N # MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635;N # MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636;N # MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637;N # MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638;N # MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639;N # MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670;N # MATHEMATICAL MONOSPACE CAPITAL A
+1D671;N # MATHEMATICAL MONOSPACE CAPITAL B
+1D672;N # MATHEMATICAL MONOSPACE CAPITAL C
+1D673;N # MATHEMATICAL MONOSPACE CAPITAL D
+1D674;N # MATHEMATICAL MONOSPACE CAPITAL E
+1D675;N # MATHEMATICAL MONOSPACE CAPITAL F
+1D676;N # MATHEMATICAL MONOSPACE CAPITAL G
+1D677;N # MATHEMATICAL MONOSPACE CAPITAL H
+1D678;N # MATHEMATICAL MONOSPACE CAPITAL I
+1D679;N # MATHEMATICAL MONOSPACE CAPITAL J
+1D67A;N # MATHEMATICAL MONOSPACE CAPITAL K
+1D67B;N # MATHEMATICAL MONOSPACE CAPITAL L
+1D67C;N # MATHEMATICAL MONOSPACE CAPITAL M
+1D67D;N # MATHEMATICAL MONOSPACE CAPITAL N
+1D67E;N # MATHEMATICAL MONOSPACE CAPITAL O
+1D67F;N # MATHEMATICAL MONOSPACE CAPITAL P
+1D680;N # MATHEMATICAL MONOSPACE CAPITAL Q
+1D681;N # MATHEMATICAL MONOSPACE CAPITAL R
+1D682;N # MATHEMATICAL MONOSPACE CAPITAL S
+1D683;N # MATHEMATICAL MONOSPACE CAPITAL T
+1D684;N # MATHEMATICAL MONOSPACE CAPITAL U
+1D685;N # MATHEMATICAL MONOSPACE CAPITAL V
+1D686;N # MATHEMATICAL MONOSPACE CAPITAL W
+1D687;N # MATHEMATICAL MONOSPACE CAPITAL X
+1D688;N # MATHEMATICAL MONOSPACE CAPITAL Y
+1D689;N # MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A;N # MATHEMATICAL MONOSPACE SMALL A
+1D68B;N # MATHEMATICAL MONOSPACE SMALL B
+1D68C;N # MATHEMATICAL MONOSPACE SMALL C
+1D68D;N # MATHEMATICAL MONOSPACE SMALL D
+1D68E;N # MATHEMATICAL MONOSPACE SMALL E
+1D68F;N # MATHEMATICAL MONOSPACE SMALL F
+1D690;N # MATHEMATICAL MONOSPACE SMALL G
+1D691;N # MATHEMATICAL MONOSPACE SMALL H
+1D692;N # MATHEMATICAL MONOSPACE SMALL I
+1D693;N # MATHEMATICAL MONOSPACE SMALL J
+1D694;N # MATHEMATICAL MONOSPACE SMALL K
+1D695;N # MATHEMATICAL MONOSPACE SMALL L
+1D696;N # MATHEMATICAL MONOSPACE SMALL M
+1D697;N # MATHEMATICAL MONOSPACE SMALL N
+1D698;N # MATHEMATICAL MONOSPACE SMALL O
+1D699;N # MATHEMATICAL MONOSPACE SMALL P
+1D69A;N # MATHEMATICAL MONOSPACE SMALL Q
+1D69B;N # MATHEMATICAL MONOSPACE SMALL R
+1D69C;N # MATHEMATICAL MONOSPACE SMALL S
+1D69D;N # MATHEMATICAL MONOSPACE SMALL T
+1D69E;N # MATHEMATICAL MONOSPACE SMALL U
+1D69F;N # MATHEMATICAL MONOSPACE SMALL V
+1D6A0;N # MATHEMATICAL MONOSPACE SMALL W
+1D6A1;N # MATHEMATICAL MONOSPACE SMALL X
+1D6A2;N # MATHEMATICAL MONOSPACE SMALL Y
+1D6A3;N # MATHEMATICAL MONOSPACE SMALL Z
+1D6A4;N # MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5;N # MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8;N # MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9;N # MATHEMATICAL BOLD CAPITAL BETA
+1D6AA;N # MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB;N # MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC;N # MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD;N # MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE;N # MATHEMATICAL BOLD CAPITAL ETA
+1D6AF;N # MATHEMATICAL BOLD CAPITAL THETA
+1D6B0;N # MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1;N # MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2;N # MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3;N # MATHEMATICAL BOLD CAPITAL MU
+1D6B4;N # MATHEMATICAL BOLD CAPITAL NU
+1D6B5;N # MATHEMATICAL BOLD CAPITAL XI
+1D6B6;N # MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7;N # MATHEMATICAL BOLD CAPITAL PI
+1D6B8;N # MATHEMATICAL BOLD CAPITAL RHO
+1D6B9;N # MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA;N # MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB;N # MATHEMATICAL BOLD CAPITAL TAU
+1D6BC;N # MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD;N # MATHEMATICAL BOLD CAPITAL PHI
+1D6BE;N # MATHEMATICAL BOLD CAPITAL CHI
+1D6BF;N # MATHEMATICAL BOLD CAPITAL PSI
+1D6C0;N # MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1;N # MATHEMATICAL BOLD NABLA
+1D6C2;N # MATHEMATICAL BOLD SMALL ALPHA
+1D6C3;N # MATHEMATICAL BOLD SMALL BETA
+1D6C4;N # MATHEMATICAL BOLD SMALL GAMMA
+1D6C5;N # MATHEMATICAL BOLD SMALL DELTA
+1D6C6;N # MATHEMATICAL BOLD SMALL EPSILON
+1D6C7;N # MATHEMATICAL BOLD SMALL ZETA
+1D6C8;N # MATHEMATICAL BOLD SMALL ETA
+1D6C9;N # MATHEMATICAL BOLD SMALL THETA
+1D6CA;N # MATHEMATICAL BOLD SMALL IOTA
+1D6CB;N # MATHEMATICAL BOLD SMALL KAPPA
+1D6CC;N # MATHEMATICAL BOLD SMALL LAMDA
+1D6CD;N # MATHEMATICAL BOLD SMALL MU
+1D6CE;N # MATHEMATICAL BOLD SMALL NU
+1D6CF;N # MATHEMATICAL BOLD SMALL XI
+1D6D0;N # MATHEMATICAL BOLD SMALL OMICRON
+1D6D1;N # MATHEMATICAL BOLD SMALL PI
+1D6D2;N # MATHEMATICAL BOLD SMALL RHO
+1D6D3;N # MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4;N # MATHEMATICAL BOLD SMALL SIGMA
+1D6D5;N # MATHEMATICAL BOLD SMALL TAU
+1D6D6;N # MATHEMATICAL BOLD SMALL UPSILON
+1D6D7;N # MATHEMATICAL BOLD SMALL PHI
+1D6D8;N # MATHEMATICAL BOLD SMALL CHI
+1D6D9;N # MATHEMATICAL BOLD SMALL PSI
+1D6DA;N # MATHEMATICAL BOLD SMALL OMEGA
+1D6DB;N # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC;N # MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD;N # MATHEMATICAL BOLD THETA SYMBOL
+1D6DE;N # MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF;N # MATHEMATICAL BOLD PHI SYMBOL
+1D6E0;N # MATHEMATICAL BOLD RHO SYMBOL
+1D6E1;N # MATHEMATICAL BOLD PI SYMBOL
+1D6E2;N # MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3;N # MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4;N # MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5;N # MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6;N # MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7;N # MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8;N # MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9;N # MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA;N # MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB;N # MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC;N # MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED;N # MATHEMATICAL ITALIC CAPITAL MU
+1D6EE;N # MATHEMATICAL ITALIC CAPITAL NU
+1D6EF;N # MATHEMATICAL ITALIC CAPITAL XI
+1D6F0;N # MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1;N # MATHEMATICAL ITALIC CAPITAL PI
+1D6F2;N # MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3;N # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4;N # MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5;N # MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6;N # MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7;N # MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8;N # MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9;N # MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA;N # MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB;N # MATHEMATICAL ITALIC NABLA
+1D6FC;N # MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD;N # MATHEMATICAL ITALIC SMALL BETA
+1D6FE;N # MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF;N # MATHEMATICAL ITALIC SMALL DELTA
+1D700;N # MATHEMATICAL ITALIC SMALL EPSILON
+1D701;N # MATHEMATICAL ITALIC SMALL ZETA
+1D702;N # MATHEMATICAL ITALIC SMALL ETA
+1D703;N # MATHEMATICAL ITALIC SMALL THETA
+1D704;N # MATHEMATICAL ITALIC SMALL IOTA
+1D705;N # MATHEMATICAL ITALIC SMALL KAPPA
+1D706;N # MATHEMATICAL ITALIC SMALL LAMDA
+1D707;N # MATHEMATICAL ITALIC SMALL MU
+1D708;N # MATHEMATICAL ITALIC SMALL NU
+1D709;N # MATHEMATICAL ITALIC SMALL XI
+1D70A;N # MATHEMATICAL ITALIC SMALL OMICRON
+1D70B;N # MATHEMATICAL ITALIC SMALL PI
+1D70C;N # MATHEMATICAL ITALIC SMALL RHO
+1D70D;N # MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E;N # MATHEMATICAL ITALIC SMALL SIGMA
+1D70F;N # MATHEMATICAL ITALIC SMALL TAU
+1D710;N # MATHEMATICAL ITALIC SMALL UPSILON
+1D711;N # MATHEMATICAL ITALIC SMALL PHI
+1D712;N # MATHEMATICAL ITALIC SMALL CHI
+1D713;N # MATHEMATICAL ITALIC SMALL PSI
+1D714;N # MATHEMATICAL ITALIC SMALL OMEGA
+1D715;N # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716;N # MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717;N # MATHEMATICAL ITALIC THETA SYMBOL
+1D718;N # MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719;N # MATHEMATICAL ITALIC PHI SYMBOL
+1D71A;N # MATHEMATICAL ITALIC RHO SYMBOL
+1D71B;N # MATHEMATICAL ITALIC PI SYMBOL
+1D71C;N # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D;N # MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E;N # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F;N # MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720;N # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721;N # MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722;N # MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723;N # MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724;N # MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725;N # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726;N # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727;N # MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728;N # MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729;N # MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A;N # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B;N # MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C;N # MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D;N # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E;N # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F;N # MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730;N # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731;N # MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732;N # MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733;N # MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734;N # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735;N # MATHEMATICAL BOLD ITALIC NABLA
+1D736;N # MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737;N # MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738;N # MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739;N # MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A;N # MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B;N # MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C;N # MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D;N # MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E;N # MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F;N # MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740;N # MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741;N # MATHEMATICAL BOLD ITALIC SMALL MU
+1D742;N # MATHEMATICAL BOLD ITALIC SMALL NU
+1D743;N # MATHEMATICAL BOLD ITALIC SMALL XI
+1D744;N # MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745;N # MATHEMATICAL BOLD ITALIC SMALL PI
+1D746;N # MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747;N # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748;N # MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749;N # MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A;N # MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B;N # MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C;N # MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D;N # MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E;N # MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F;N # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750;N # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751;N # MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752;N # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753;N # MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754;N # MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755;N # MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F;N # MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770;N # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771;N # MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772;N # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773;N # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774;N # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775;N # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776;N # MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777;N # MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778;N # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779;N # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A;N # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B;N # MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C;N # MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D;N # MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E;N # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F;N # MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780;N # MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781;N # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782;N # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783;N # MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784;N # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785;N # MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786;N # MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787;N # MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788;N # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789;N # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A;N # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B;N # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C;N # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D;N # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E;N # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F;N # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CA;N # MATHEMATICAL BOLD CAPITAL DIGAMMA
+1D7CB;N # MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE;N # MATHEMATICAL BOLD DIGIT ZERO
+1D7CF;N # MATHEMATICAL BOLD DIGIT ONE
+1D7D0;N # MATHEMATICAL BOLD DIGIT TWO
+1D7D1;N # MATHEMATICAL BOLD DIGIT THREE
+1D7D2;N # MATHEMATICAL BOLD DIGIT FOUR
+1D7D3;N # MATHEMATICAL BOLD DIGIT FIVE
+1D7D4;N # MATHEMATICAL BOLD DIGIT SIX
+1D7D5;N # MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6;N # MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7;N # MATHEMATICAL BOLD DIGIT NINE
+1D7D8;N # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9;N # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA;N # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB;N # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC;N # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD;N # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE;N # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF;N # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0;N # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1;N # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2;N # MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3;N # MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4;N # MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5;N # MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6;N # MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7;N # MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8;N # MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9;N # MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA;N # MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB;N # MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC;N # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED;N # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE;N # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF;N # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0;N # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1;N # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2;N # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3;N # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4;N # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5;N # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6;N # MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7;N # MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8;N # MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9;N # MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA;N # MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB;N # MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC;N # MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD;N # MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE;N # MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF;N # MATHEMATICAL MONOSPACE DIGIT NINE
+1F000;N # MAHJONG TILE EAST WIND
+1F001;N # MAHJONG TILE SOUTH WIND
+1F002;N # MAHJONG TILE WEST WIND
+1F003;N # MAHJONG TILE NORTH WIND
+1F004;N # MAHJONG TILE RED DRAGON
+1F005;N # MAHJONG TILE GREEN DRAGON
+1F006;N # MAHJONG TILE WHITE DRAGON
+1F007;N # MAHJONG TILE ONE OF CHARACTERS
+1F008;N # MAHJONG TILE TWO OF CHARACTERS
+1F009;N # MAHJONG TILE THREE OF CHARACTERS
+1F00A;N # MAHJONG TILE FOUR OF CHARACTERS
+1F00B;N # MAHJONG TILE FIVE OF CHARACTERS
+1F00C;N # MAHJONG TILE SIX OF CHARACTERS
+1F00D;N # MAHJONG TILE SEVEN OF CHARACTERS
+1F00E;N # MAHJONG TILE EIGHT OF CHARACTERS
+1F00F;N # MAHJONG TILE NINE OF CHARACTERS
+1F010;N # MAHJONG TILE ONE OF BAMBOOS
+1F011;N # MAHJONG TILE TWO OF BAMBOOS
+1F012;N # MAHJONG TILE THREE OF BAMBOOS
+1F013;N # MAHJONG TILE FOUR OF BAMBOOS
+1F014;N # MAHJONG TILE FIVE OF BAMBOOS
+1F015;N # MAHJONG TILE SIX OF BAMBOOS
+1F016;N # MAHJONG TILE SEVEN OF BAMBOOS
+1F017;N # MAHJONG TILE EIGHT OF BAMBOOS
+1F018;N # MAHJONG TILE NINE OF BAMBOOS
+1F019;N # MAHJONG TILE ONE OF CIRCLES
+1F01A;N # MAHJONG TILE TWO OF CIRCLES
+1F01B;N # MAHJONG TILE THREE OF CIRCLES
+1F01C;N # MAHJONG TILE FOUR OF CIRCLES
+1F01D;N # MAHJONG TILE FIVE OF CIRCLES
+1F01E;N # MAHJONG TILE SIX OF CIRCLES
+1F01F;N # MAHJONG TILE SEVEN OF CIRCLES
+1F020;N # MAHJONG TILE EIGHT OF CIRCLES
+1F021;N # MAHJONG TILE NINE OF CIRCLES
+1F022;N # MAHJONG TILE PLUM
+1F023;N # MAHJONG TILE ORCHID
+1F024;N # MAHJONG TILE BAMBOO
+1F025;N # MAHJONG TILE CHRYSANTHEMUM
+1F026;N # MAHJONG TILE SPRING
+1F027;N # MAHJONG TILE SUMMER
+1F028;N # MAHJONG TILE AUTUMN
+1F029;N # MAHJONG TILE WINTER
+1F02A;N # MAHJONG TILE JOKER
+1F02B;N # MAHJONG TILE BACK
+1F030;N # DOMINO TILE HORIZONTAL BACK
+1F031;N # DOMINO TILE HORIZONTAL-00-00
+1F032;N # DOMINO TILE HORIZONTAL-00-01
+1F033;N # DOMINO TILE HORIZONTAL-00-02
+1F034;N # DOMINO TILE HORIZONTAL-00-03
+1F035;N # DOMINO TILE HORIZONTAL-00-04
+1F036;N # DOMINO TILE HORIZONTAL-00-05
+1F037;N # DOMINO TILE HORIZONTAL-00-06
+1F038;N # DOMINO TILE HORIZONTAL-01-00
+1F039;N # DOMINO TILE HORIZONTAL-01-01
+1F03A;N # DOMINO TILE HORIZONTAL-01-02
+1F03B;N # DOMINO TILE HORIZONTAL-01-03
+1F03C;N # DOMINO TILE HORIZONTAL-01-04
+1F03D;N # DOMINO TILE HORIZONTAL-01-05
+1F03E;N # DOMINO TILE HORIZONTAL-01-06
+1F03F;N # DOMINO TILE HORIZONTAL-02-00
+1F040;N # DOMINO TILE HORIZONTAL-02-01
+1F041;N # DOMINO TILE HORIZONTAL-02-02
+1F042;N # DOMINO TILE HORIZONTAL-02-03
+1F043;N # DOMINO TILE HORIZONTAL-02-04
+1F044;N # DOMINO TILE HORIZONTAL-02-05
+1F045;N # DOMINO TILE HORIZONTAL-02-06
+1F046;N # DOMINO TILE HORIZONTAL-03-00
+1F047;N # DOMINO TILE HORIZONTAL-03-01
+1F048;N # DOMINO TILE HORIZONTAL-03-02
+1F049;N # DOMINO TILE HORIZONTAL-03-03
+1F04A;N # DOMINO TILE HORIZONTAL-03-04
+1F04B;N # DOMINO TILE HORIZONTAL-03-05
+1F04C;N # DOMINO TILE HORIZONTAL-03-06
+1F04D;N # DOMINO TILE HORIZONTAL-04-00
+1F04E;N # DOMINO TILE HORIZONTAL-04-01
+1F04F;N # DOMINO TILE HORIZONTAL-04-02
+1F050;N # DOMINO TILE HORIZONTAL-04-03
+1F051;N # DOMINO TILE HORIZONTAL-04-04
+1F052;N # DOMINO TILE HORIZONTAL-04-05
+1F053;N # DOMINO TILE HORIZONTAL-04-06
+1F054;N # DOMINO TILE HORIZONTAL-05-00
+1F055;N # DOMINO TILE HORIZONTAL-05-01
+1F056;N # DOMINO TILE HORIZONTAL-05-02
+1F057;N # DOMINO TILE HORIZONTAL-05-03
+1F058;N # DOMINO TILE HORIZONTAL-05-04
+1F059;N # DOMINO TILE HORIZONTAL-05-05
+1F05A;N # DOMINO TILE HORIZONTAL-05-06
+1F05B;N # DOMINO TILE HORIZONTAL-06-00
+1F05C;N # DOMINO TILE HORIZONTAL-06-01
+1F05D;N # DOMINO TILE HORIZONTAL-06-02
+1F05E;N # DOMINO TILE HORIZONTAL-06-03
+1F05F;N # DOMINO TILE HORIZONTAL-06-04
+1F060;N # DOMINO TILE HORIZONTAL-06-05
+1F061;N # DOMINO TILE HORIZONTAL-06-06
+1F062;N # DOMINO TILE VERTICAL BACK
+1F063;N # DOMINO TILE VERTICAL-00-00
+1F064;N # DOMINO TILE VERTICAL-00-01
+1F065;N # DOMINO TILE VERTICAL-00-02
+1F066;N # DOMINO TILE VERTICAL-00-03
+1F067;N # DOMINO TILE VERTICAL-00-04
+1F068;N # DOMINO TILE VERTICAL-00-05
+1F069;N # DOMINO TILE VERTICAL-00-06
+1F06A;N # DOMINO TILE VERTICAL-01-00
+1F06B;N # DOMINO TILE VERTICAL-01-01
+1F06C;N # DOMINO TILE VERTICAL-01-02
+1F06D;N # DOMINO TILE VERTICAL-01-03
+1F06E;N # DOMINO TILE VERTICAL-01-04
+1F06F;N # DOMINO TILE VERTICAL-01-05
+1F070;N # DOMINO TILE VERTICAL-01-06
+1F071;N # DOMINO TILE VERTICAL-02-00
+1F072;N # DOMINO TILE VERTICAL-02-01
+1F073;N # DOMINO TILE VERTICAL-02-02
+1F074;N # DOMINO TILE VERTICAL-02-03
+1F075;N # DOMINO TILE VERTICAL-02-04
+1F076;N # DOMINO TILE VERTICAL-02-05
+1F077;N # DOMINO TILE VERTICAL-02-06
+1F078;N # DOMINO TILE VERTICAL-03-00
+1F079;N # DOMINO TILE VERTICAL-03-01
+1F07A;N # DOMINO TILE VERTICAL-03-02
+1F07B;N # DOMINO TILE VERTICAL-03-03
+1F07C;N # DOMINO TILE VERTICAL-03-04
+1F07D;N # DOMINO TILE VERTICAL-03-05
+1F07E;N # DOMINO TILE VERTICAL-03-06
+1F07F;N # DOMINO TILE VERTICAL-04-00
+1F080;N # DOMINO TILE VERTICAL-04-01
+1F081;N # DOMINO TILE VERTICAL-04-02
+1F082;N # DOMINO TILE VERTICAL-04-03
+1F083;N # DOMINO TILE VERTICAL-04-04
+1F084;N # DOMINO TILE VERTICAL-04-05
+1F085;N # DOMINO TILE VERTICAL-04-06
+1F086;N # DOMINO TILE VERTICAL-05-00
+1F087;N # DOMINO TILE VERTICAL-05-01
+1F088;N # DOMINO TILE VERTICAL-05-02
+1F089;N # DOMINO TILE VERTICAL-05-03
+1F08A;N # DOMINO TILE VERTICAL-05-04
+1F08B;N # DOMINO TILE VERTICAL-05-05
+1F08C;N # DOMINO TILE VERTICAL-05-06
+1F08D;N # DOMINO TILE VERTICAL-06-00
+1F08E;N # DOMINO TILE VERTICAL-06-01
+1F08F;N # DOMINO TILE VERTICAL-06-02
+1F090;N # DOMINO TILE VERTICAL-06-03
+1F091;N # DOMINO TILE VERTICAL-06-04
+1F092;N # DOMINO TILE VERTICAL-06-05
+1F093;N # DOMINO TILE VERTICAL-06-06
+1F100;A # DIGIT ZERO FULL STOP
+1F101;A # DIGIT ZERO COMMA
+1F102;A # DIGIT ONE COMMA
+1F103;A # DIGIT TWO COMMA
+1F104;A # DIGIT THREE COMMA
+1F105;A # DIGIT FOUR COMMA
+1F106;A # DIGIT FIVE COMMA
+1F107;A # DIGIT SIX COMMA
+1F108;A # DIGIT SEVEN COMMA
+1F109;A # DIGIT EIGHT COMMA
+1F10A;A # DIGIT NINE COMMA
+1F110;A # PARENTHESIZED LATIN CAPITAL LETTER A
+1F111;A # PARENTHESIZED LATIN CAPITAL LETTER B
+1F112;A # PARENTHESIZED LATIN CAPITAL LETTER C
+1F113;A # PARENTHESIZED LATIN CAPITAL LETTER D
+1F114;A # PARENTHESIZED LATIN CAPITAL LETTER E
+1F115;A # PARENTHESIZED LATIN CAPITAL LETTER F
+1F116;A # PARENTHESIZED LATIN CAPITAL LETTER G
+1F117;A # PARENTHESIZED LATIN CAPITAL LETTER H
+1F118;A # PARENTHESIZED LATIN CAPITAL LETTER I
+1F119;A # PARENTHESIZED LATIN CAPITAL LETTER J
+1F11A;A # PARENTHESIZED LATIN CAPITAL LETTER K
+1F11B;A # PARENTHESIZED LATIN CAPITAL LETTER L
+1F11C;A # PARENTHESIZED LATIN CAPITAL LETTER M
+1F11D;A # PARENTHESIZED LATIN CAPITAL LETTER N
+1F11E;A # PARENTHESIZED LATIN CAPITAL LETTER O
+1F11F;A # PARENTHESIZED LATIN CAPITAL LETTER P
+1F120;A # PARENTHESIZED LATIN CAPITAL LETTER Q
+1F121;A # PARENTHESIZED LATIN CAPITAL LETTER R
+1F122;A # PARENTHESIZED LATIN CAPITAL LETTER S
+1F123;A # PARENTHESIZED LATIN CAPITAL LETTER T
+1F124;A # PARENTHESIZED LATIN CAPITAL LETTER U
+1F125;A # PARENTHESIZED LATIN CAPITAL LETTER V
+1F126;A # PARENTHESIZED LATIN CAPITAL LETTER W
+1F127;A # PARENTHESIZED LATIN CAPITAL LETTER X
+1F128;A # PARENTHESIZED LATIN CAPITAL LETTER Y
+1F129;A # PARENTHESIZED LATIN CAPITAL LETTER Z
+1F12A;A # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1F12B;A # CIRCLED ITALIC LATIN CAPITAL LETTER C
+1F12C;A # CIRCLED ITALIC LATIN CAPITAL LETTER R
+1F12D;A # CIRCLED CD
+1F12E;N # CIRCLED WZ
+1F131;A # SQUARED LATIN CAPITAL LETTER B
+1F13D;A # SQUARED LATIN CAPITAL LETTER N
+1F13F;A # SQUARED LATIN CAPITAL LETTER P
+1F142;A # SQUARED LATIN CAPITAL LETTER S
+1F146;A # SQUARED LATIN CAPITAL LETTER W
+1F14A;A # SQUARED HV
+1F14B;A # SQUARED MV
+1F14C;A # SQUARED SD
+1F14D;A # SQUARED SS
+1F14E;A # SQUARED PPV
+1F157;A # NEGATIVE CIRCLED LATIN CAPITAL LETTER H
+1F15F;A # NEGATIVE CIRCLED LATIN CAPITAL LETTER P
+1F179;A # NEGATIVE SQUARED LATIN CAPITAL LETTER J
+1F17B;A # NEGATIVE SQUARED LATIN CAPITAL LETTER L
+1F17C;A # NEGATIVE SQUARED LATIN CAPITAL LETTER M
+1F17F;A # NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F18A;A # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F18B;A # NEGATIVE SQUARED IC
+1F18C;A # NEGATIVE SQUARED PA
+1F18D;A # NEGATIVE SQUARED SA
+1F190;A # SQUARE DJ
+1F200;W # SQUARE HIRAGANA HOKA
+1F210;W # SQUARED CJK UNIFIED IDEOGRAPH-624B
+1F211;W # SQUARED CJK UNIFIED IDEOGRAPH-5B57
+1F212;W # SQUARED CJK UNIFIED IDEOGRAPH-53CC
+1F213;W # SQUARED KATAKANA DE
+1F214;W # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
+1F215;W # SQUARED CJK UNIFIED IDEOGRAPH-591A
+1F216;W # SQUARED CJK UNIFIED IDEOGRAPH-89E3
+1F217;W # SQUARED CJK UNIFIED IDEOGRAPH-5929
+1F218;W # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
+1F219;W # SQUARED CJK UNIFIED IDEOGRAPH-6620
+1F21A;W # SQUARED CJK UNIFIED IDEOGRAPH-7121
+1F21B;W # SQUARED CJK UNIFIED IDEOGRAPH-6599
+1F21C;W # SQUARED CJK UNIFIED IDEOGRAPH-524D
+1F21D;W # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
+1F21E;W # SQUARED CJK UNIFIED IDEOGRAPH-518D
+1F21F;W # SQUARED CJK UNIFIED IDEOGRAPH-65B0
+1F220;W # SQUARED CJK UNIFIED IDEOGRAPH-521D
+1F221;W # SQUARED CJK UNIFIED IDEOGRAPH-7D42
+1F222;W # SQUARED CJK UNIFIED IDEOGRAPH-751F
+1F223;W # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
+1F224;W # SQUARED CJK UNIFIED IDEOGRAPH-58F0
+1F225;W # SQUARED CJK UNIFIED IDEOGRAPH-5439
+1F226;W # SQUARED CJK UNIFIED IDEOGRAPH-6F14
+1F227;W # SQUARED CJK UNIFIED IDEOGRAPH-6295
+1F228;W # SQUARED CJK UNIFIED IDEOGRAPH-6355
+1F229;W # SQUARED CJK UNIFIED IDEOGRAPH-4E00
+1F22A;W # SQUARED CJK UNIFIED IDEOGRAPH-4E09
+1F22B;W # SQUARED CJK UNIFIED IDEOGRAPH-904A
+1F22C;W # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
+1F22D;W # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
+1F22E;W # SQUARED CJK UNIFIED IDEOGRAPH-53F3
+1F22F;W # SQUARED CJK UNIFIED IDEOGRAPH-6307
+1F230;W # SQUARED CJK UNIFIED IDEOGRAPH-8D70
+1F231;W # SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F240;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
+1F241;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
+1F242;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
+1F243;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
+1F244;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
+1F245;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
+1F246;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
+1F247;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
+1F248;W # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+20000..2A6D6;W # <CJK Ideograph Extension B, First>..<CJK Ideograph Extension B, Last>
+2A6D7..2A6FF;W # <reserved-2A6D7>..<reserved-2A6FF>
+2A700..2B734;W # <CJK Ideograph Extension C, First>..<CJK Ideograph Extension C, Last>
+2B735..2F7FF;W # <reserved-2B735>..<reserved-2F7FF>
+2F800;W # CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801;W # CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802;W # CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803;W # CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804;W # CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805;W # CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806;W # CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807;W # CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808;W # CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809;W # CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A;W # CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B;W # CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C;W # CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D;W # CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E;W # CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F;W # CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810;W # CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811;W # CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812;W # CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813;W # CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814;W # CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815;W # CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816;W # CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817;W # CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818;W # CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819;W # CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A;W # CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B;W # CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C;W # CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D;W # CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E;W # CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F;W # CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820;W # CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821;W # CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822;W # CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823;W # CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824;W # CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825;W # CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826;W # CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827;W # CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828;W # CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829;W # CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A;W # CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B;W # CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C;W # CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D;W # CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E;W # CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F;W # CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830;W # CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831;W # CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832;W # CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833;W # CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834;W # CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835;W # CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836;W # CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837;W # CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838;W # CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839;W # CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A;W # CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B;W # CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C;W # CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D;W # CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E;W # CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F;W # CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840;W # CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841;W # CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842;W # CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843;W # CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844;W # CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845;W # CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846;W # CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847;W # CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848;W # CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849;W # CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A;W # CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B;W # CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C;W # CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D;W # CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E;W # CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F;W # CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850;W # CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851;W # CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852;W # CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853;W # CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854;W # CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855;W # CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856;W # CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857;W # CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858;W # CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859;W # CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A;W # CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B;W # CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C;W # CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D;W # CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E;W # CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F;W # CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860;W # CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861;W # CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862;W # CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863;W # CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864;W # CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865;W # CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866;W # CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867;W # CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868;W # CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869;W # CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A;W # CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B;W # CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C;W # CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D;W # CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E;W # CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F;W # CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870;W # CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871;W # CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872;W # CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873;W # CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874;W # CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875;W # CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876;W # CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877;W # CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878;W # CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879;W # CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A;W # CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B;W # CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C;W # CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D;W # CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E;W # CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F;W # CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880;W # CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881;W # CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882;W # CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883;W # CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884;W # CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885;W # CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886;W # CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887;W # CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888;W # CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889;W # CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A;W # CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B;W # CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C;W # CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D;W # CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E;W # CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F;W # CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890;W # CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891;W # CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892;W # CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893;W # CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894;W # CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895;W # CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896;W # CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897;W # CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898;W # CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899;W # CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A;W # CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B;W # CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C;W # CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D;W # CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E;W # CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F;W # CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0;W # CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1;W # CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2;W # CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3;W # CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4;W # CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5;W # CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6;W # CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7;W # CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8;W # CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9;W # CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA;W # CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB;W # CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC;W # CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD;W # CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE;W # CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF;W # CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0;W # CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1;W # CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2;W # CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3;W # CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4;W # CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5;W # CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6;W # CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7;W # CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8;W # CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9;W # CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA;W # CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB;W # CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC;W # CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD;W # CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE;W # CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF;W # CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0;W # CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1;W # CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2;W # CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3;W # CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4;W # CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5;W # CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6;W # CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7;W # CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8;W # CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9;W # CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA;W # CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB;W # CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC;W # CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD;W # CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE;W # CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF;W # CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0;W # CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1;W # CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2;W # CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3;W # CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4;W # CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5;W # CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6;W # CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7;W # CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8;W # CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9;W # CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA;W # CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB;W # CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC;W # CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD;W # CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE;W # CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF;W # CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0;W # CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1;W # CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2;W # CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3;W # CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4;W # CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5;W # CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6;W # CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7;W # CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8;W # CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9;W # CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA;W # CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB;W # CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC;W # CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED;W # CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE;W # CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF;W # CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0;W # CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1;W # CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2;W # CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3;W # CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4;W # CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5;W # CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6;W # CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7;W # CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8;W # CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9;W # CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA;W # CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB;W # CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC;W # CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD;W # CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE;W # CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF;W # CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900;W # CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901;W # CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902;W # CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903;W # CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904;W # CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905;W # CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906;W # CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907;W # CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908;W # CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909;W # CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A;W # CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B;W # CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C;W # CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D;W # CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E;W # CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F;W # CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910;W # CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911;W # CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912;W # CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913;W # CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914;W # CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915;W # CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916;W # CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917;W # CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918;W # CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919;W # CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A;W # CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B;W # CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C;W # CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D;W # CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E;W # CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F;W # CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920;W # CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921;W # CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922;W # CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923;W # CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924;W # CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925;W # CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926;W # CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927;W # CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928;W # CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929;W # CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A;W # CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B;W # CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C;W # CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D;W # CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E;W # CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F;W # CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930;W # CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931;W # CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932;W # CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933;W # CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934;W # CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935;W # CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936;W # CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937;W # CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938;W # CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939;W # CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A;W # CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B;W # CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C;W # CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D;W # CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E;W # CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F;W # CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940;W # CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941;W # CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942;W # CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943;W # CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944;W # CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945;W # CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946;W # CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947;W # CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948;W # CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949;W # CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A;W # CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B;W # CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C;W # CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D;W # CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E;W # CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F;W # CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950;W # CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951;W # CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952;W # CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953;W # CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954;W # CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955;W # CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956;W # CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957;W # CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958;W # CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959;W # CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A;W # CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B;W # CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C;W # CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D;W # CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E;W # CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F;W # CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960;W # CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961;W # CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962;W # CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963;W # CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964;W # CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965;W # CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966;W # CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967;W # CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968;W # CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969;W # CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A;W # CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B;W # CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C;W # CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D;W # CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E;W # CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F;W # CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970;W # CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971;W # CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972;W # CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973;W # CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974;W # CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975;W # CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976;W # CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977;W # CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978;W # CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979;W # CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A;W # CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B;W # CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C;W # CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D;W # CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E;W # CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F;W # CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980;W # CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981;W # CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982;W # CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983;W # CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984;W # CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985;W # CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986;W # CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987;W # CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988;W # CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989;W # CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A;W # CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B;W # CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C;W # CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D;W # CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E;W # CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F;W # CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990;W # CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991;W # CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992;W # CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993;W # CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994;W # CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995;W # CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996;W # CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997;W # CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998;W # CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999;W # CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A;W # CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B;W # CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C;W # CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D;W # CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E;W # CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F;W # CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0;W # CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1;W # CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2;W # CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3;W # CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4;W # CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5;W # CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6;W # CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7;W # CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8;W # CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9;W # CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA;W # CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB;W # CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC;W # CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD;W # CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE;W # CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF;W # CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0;W # CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1;W # CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2;W # CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3;W # CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4;W # CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5;W # CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6;W # CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7;W # CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8;W # CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9;W # CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA;W # CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB;W # CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC;W # CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD;W # CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE;W # CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF;W # CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0;W # CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1;W # CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2;W # CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3;W # CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4;W # CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5;W # CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6;W # CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7;W # CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8;W # CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9;W # CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA;W # CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB;W # CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC;W # CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD;W # CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE;W # CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF;W # CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0;W # CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1;W # CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2;W # CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3;W # CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4;W # CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5;W # CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6;W # CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7;W # CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8;W # CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9;W # CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA;W # CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB;W # CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC;W # CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD;W # CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE;W # CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF;W # CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0;W # CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1;W # CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2;W # CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3;W # CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4;W # CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5;W # CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6;W # CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7;W # CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8;W # CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9;W # CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA;W # CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB;W # CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC;W # CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED;W # CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE;W # CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF;W # CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0;W # CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1;W # CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2;W # CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3;W # CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4;W # CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5;W # CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6;W # CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7;W # CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8;W # CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9;W # CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA;W # CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB;W # CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC;W # CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD;W # CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE;W # CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF;W # CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00;W # CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01;W # CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02;W # CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03;W # CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04;W # CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05;W # CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06;W # CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07;W # CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08;W # CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09;W # CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A;W # CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B;W # CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C;W # CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D;W # CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E;W # CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F;W # CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10;W # CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11;W # CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12;W # CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13;W # CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14;W # CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15;W # CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16;W # CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17;W # CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18;W # CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19;W # CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A;W # CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B;W # CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C;W # CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D;W # CJK COMPATIBILITY IDEOGRAPH-2FA1D
+2FA1E..2FFFD;W # <reserved-2FA1E>..<reserved-2FFFD>
+30000..3FFFD;W # <reserved-30000>..<reserved-3FFFD>
+E0001;N # LANGUAGE TAG
+E0020;N # TAG SPACE
+E0021;N # TAG EXCLAMATION MARK
+E0022;N # TAG QUOTATION MARK
+E0023;N # TAG NUMBER SIGN
+E0024;N # TAG DOLLAR SIGN
+E0025;N # TAG PERCENT SIGN
+E0026;N # TAG AMPERSAND
+E0027;N # TAG APOSTROPHE
+E0028;N # TAG LEFT PARENTHESIS
+E0029;N # TAG RIGHT PARENTHESIS
+E002A;N # TAG ASTERISK
+E002B;N # TAG PLUS SIGN
+E002C;N # TAG COMMA
+E002D;N # TAG HYPHEN-MINUS
+E002E;N # TAG FULL STOP
+E002F;N # TAG SOLIDUS
+E0030;N # TAG DIGIT ZERO
+E0031;N # TAG DIGIT ONE
+E0032;N # TAG DIGIT TWO
+E0033;N # TAG DIGIT THREE
+E0034;N # TAG DIGIT FOUR
+E0035;N # TAG DIGIT FIVE
+E0036;N # TAG DIGIT SIX
+E0037;N # TAG DIGIT SEVEN
+E0038;N # TAG DIGIT EIGHT
+E0039;N # TAG DIGIT NINE
+E003A;N # TAG COLON
+E003B;N # TAG SEMICOLON
+E003C;N # TAG LESS-THAN SIGN
+E003D;N # TAG EQUALS SIGN
+E003E;N # TAG GREATER-THAN SIGN
+E003F;N # TAG QUESTION MARK
+E0040;N # TAG COMMERCIAL AT
+E0041;N # TAG LATIN CAPITAL LETTER A
+E0042;N # TAG LATIN CAPITAL LETTER B
+E0043;N # TAG LATIN CAPITAL LETTER C
+E0044;N # TAG LATIN CAPITAL LETTER D
+E0045;N # TAG LATIN CAPITAL LETTER E
+E0046;N # TAG LATIN CAPITAL LETTER F
+E0047;N # TAG LATIN CAPITAL LETTER G
+E0048;N # TAG LATIN CAPITAL LETTER H
+E0049;N # TAG LATIN CAPITAL LETTER I
+E004A;N # TAG LATIN CAPITAL LETTER J
+E004B;N # TAG LATIN CAPITAL LETTER K
+E004C;N # TAG LATIN CAPITAL LETTER L
+E004D;N # TAG LATIN CAPITAL LETTER M
+E004E;N # TAG LATIN CAPITAL LETTER N
+E004F;N # TAG LATIN CAPITAL LETTER O
+E0050;N # TAG LATIN CAPITAL LETTER P
+E0051;N # TAG LATIN CAPITAL LETTER Q
+E0052;N # TAG LATIN CAPITAL LETTER R
+E0053;N # TAG LATIN CAPITAL LETTER S
+E0054;N # TAG LATIN CAPITAL LETTER T
+E0055;N # TAG LATIN CAPITAL LETTER U
+E0056;N # TAG LATIN CAPITAL LETTER V
+E0057;N # TAG LATIN CAPITAL LETTER W
+E0058;N # TAG LATIN CAPITAL LETTER X
+E0059;N # TAG LATIN CAPITAL LETTER Y
+E005A;N # TAG LATIN CAPITAL LETTER Z
+E005B;N # TAG LEFT SQUARE BRACKET
+E005C;N # TAG REVERSE SOLIDUS
+E005D;N # TAG RIGHT SQUARE BRACKET
+E005E;N # TAG CIRCUMFLEX ACCENT
+E005F;N # TAG LOW LINE
+E0060;N # TAG GRAVE ACCENT
+E0061;N # TAG LATIN SMALL LETTER A
+E0062;N # TAG LATIN SMALL LETTER B
+E0063;N # TAG LATIN SMALL LETTER C
+E0064;N # TAG LATIN SMALL LETTER D
+E0065;N # TAG LATIN SMALL LETTER E
+E0066;N # TAG LATIN SMALL LETTER F
+E0067;N # TAG LATIN SMALL LETTER G
+E0068;N # TAG LATIN SMALL LETTER H
+E0069;N # TAG LATIN SMALL LETTER I
+E006A;N # TAG LATIN SMALL LETTER J
+E006B;N # TAG LATIN SMALL LETTER K
+E006C;N # TAG LATIN SMALL LETTER L
+E006D;N # TAG LATIN SMALL LETTER M
+E006E;N # TAG LATIN SMALL LETTER N
+E006F;N # TAG LATIN SMALL LETTER O
+E0070;N # TAG LATIN SMALL LETTER P
+E0071;N # TAG LATIN SMALL LETTER Q
+E0072;N # TAG LATIN SMALL LETTER R
+E0073;N # TAG LATIN SMALL LETTER S
+E0074;N # TAG LATIN SMALL LETTER T
+E0075;N # TAG LATIN SMALL LETTER U
+E0076;N # TAG LATIN SMALL LETTER V
+E0077;N # TAG LATIN SMALL LETTER W
+E0078;N # TAG LATIN SMALL LETTER X
+E0079;N # TAG LATIN SMALL LETTER Y
+E007A;N # TAG LATIN SMALL LETTER Z
+E007B;N # TAG LEFT CURLY BRACKET
+E007C;N # TAG VERTICAL LINE
+E007D;N # TAG RIGHT CURLY BRACKET
+E007E;N # TAG TILDE
+E007F;N # CANCEL TAG
+E0100;A # VARIATION SELECTOR-17
+E0101;A # VARIATION SELECTOR-18
+E0102;A # VARIATION SELECTOR-19
+E0103;A # VARIATION SELECTOR-20
+E0104;A # VARIATION SELECTOR-21
+E0105;A # VARIATION SELECTOR-22
+E0106;A # VARIATION SELECTOR-23
+E0107;A # VARIATION SELECTOR-24
+E0108;A # VARIATION SELECTOR-25
+E0109;A # VARIATION SELECTOR-26
+E010A;A # VARIATION SELECTOR-27
+E010B;A # VARIATION SELECTOR-28
+E010C;A # VARIATION SELECTOR-29
+E010D;A # VARIATION SELECTOR-30
+E010E;A # VARIATION SELECTOR-31
+E010F;A # VARIATION SELECTOR-32
+E0110;A # VARIATION SELECTOR-33
+E0111;A # VARIATION SELECTOR-34
+E0112;A # VARIATION SELECTOR-35
+E0113;A # VARIATION SELECTOR-36
+E0114;A # VARIATION SELECTOR-37
+E0115;A # VARIATION SELECTOR-38
+E0116;A # VARIATION SELECTOR-39
+E0117;A # VARIATION SELECTOR-40
+E0118;A # VARIATION SELECTOR-41
+E0119;A # VARIATION SELECTOR-42
+E011A;A # VARIATION SELECTOR-43
+E011B;A # VARIATION SELECTOR-44
+E011C;A # VARIATION SELECTOR-45
+E011D;A # VARIATION SELECTOR-46
+E011E;A # VARIATION SELECTOR-47
+E011F;A # VARIATION SELECTOR-48
+E0120;A # VARIATION SELECTOR-49
+E0121;A # VARIATION SELECTOR-50
+E0122;A # VARIATION SELECTOR-51
+E0123;A # VARIATION SELECTOR-52
+E0124;A # VARIATION SELECTOR-53
+E0125;A # VARIATION SELECTOR-54
+E0126;A # VARIATION SELECTOR-55
+E0127;A # VARIATION SELECTOR-56
+E0128;A # VARIATION SELECTOR-57
+E0129;A # VARIATION SELECTOR-58
+E012A;A # VARIATION SELECTOR-59
+E012B;A # VARIATION SELECTOR-60
+E012C;A # VARIATION SELECTOR-61
+E012D;A # VARIATION SELECTOR-62
+E012E;A # VARIATION SELECTOR-63
+E012F;A # VARIATION SELECTOR-64
+E0130;A # VARIATION SELECTOR-65
+E0131;A # VARIATION SELECTOR-66
+E0132;A # VARIATION SELECTOR-67
+E0133;A # VARIATION SELECTOR-68
+E0134;A # VARIATION SELECTOR-69
+E0135;A # VARIATION SELECTOR-70
+E0136;A # VARIATION SELECTOR-71
+E0137;A # VARIATION SELECTOR-72
+E0138;A # VARIATION SELECTOR-73
+E0139;A # VARIATION SELECTOR-74
+E013A;A # VARIATION SELECTOR-75
+E013B;A # VARIATION SELECTOR-76
+E013C;A # VARIATION SELECTOR-77
+E013D;A # VARIATION SELECTOR-78
+E013E;A # VARIATION SELECTOR-79
+E013F;A # VARIATION SELECTOR-80
+E0140;A # VARIATION SELECTOR-81
+E0141;A # VARIATION SELECTOR-82
+E0142;A # VARIATION SELECTOR-83
+E0143;A # VARIATION SELECTOR-84
+E0144;A # VARIATION SELECTOR-85
+E0145;A # VARIATION SELECTOR-86
+E0146;A # VARIATION SELECTOR-87
+E0147;A # VARIATION SELECTOR-88
+E0148;A # VARIATION SELECTOR-89
+E0149;A # VARIATION SELECTOR-90
+E014A;A # VARIATION SELECTOR-91
+E014B;A # VARIATION SELECTOR-92
+E014C;A # VARIATION SELECTOR-93
+E014D;A # VARIATION SELECTOR-94
+E014E;A # VARIATION SELECTOR-95
+E014F;A # VARIATION SELECTOR-96
+E0150;A # VARIATION SELECTOR-97
+E0151;A # VARIATION SELECTOR-98
+E0152;A # VARIATION SELECTOR-99
+E0153;A # VARIATION SELECTOR-100
+E0154;A # VARIATION SELECTOR-101
+E0155;A # VARIATION SELECTOR-102
+E0156;A # VARIATION SELECTOR-103
+E0157;A # VARIATION SELECTOR-104
+E0158;A # VARIATION SELECTOR-105
+E0159;A # VARIATION SELECTOR-106
+E015A;A # VARIATION SELECTOR-107
+E015B;A # VARIATION SELECTOR-108
+E015C;A # VARIATION SELECTOR-109
+E015D;A # VARIATION SELECTOR-110
+E015E;A # VARIATION SELECTOR-111
+E015F;A # VARIATION SELECTOR-112
+E0160;A # VARIATION SELECTOR-113
+E0161;A # VARIATION SELECTOR-114
+E0162;A # VARIATION SELECTOR-115
+E0163;A # VARIATION SELECTOR-116
+E0164;A # VARIATION SELECTOR-117
+E0165;A # VARIATION SELECTOR-118
+E0166;A # VARIATION SELECTOR-119
+E0167;A # VARIATION SELECTOR-120
+E0168;A # VARIATION SELECTOR-121
+E0169;A # VARIATION SELECTOR-122
+E016A;A # VARIATION SELECTOR-123
+E016B;A # VARIATION SELECTOR-124
+E016C;A # VARIATION SELECTOR-125
+E016D;A # VARIATION SELECTOR-126
+E016E;A # VARIATION SELECTOR-127
+E016F;A # VARIATION SELECTOR-128
+E0170;A # VARIATION SELECTOR-129
+E0171;A # VARIATION SELECTOR-130
+E0172;A # VARIATION SELECTOR-131
+E0173;A # VARIATION SELECTOR-132
+E0174;A # VARIATION SELECTOR-133
+E0175;A # VARIATION SELECTOR-134
+E0176;A # VARIATION SELECTOR-135
+E0177;A # VARIATION SELECTOR-136
+E0178;A # VARIATION SELECTOR-137
+E0179;A # VARIATION SELECTOR-138
+E017A;A # VARIATION SELECTOR-139
+E017B;A # VARIATION SELECTOR-140
+E017C;A # VARIATION SELECTOR-141
+E017D;A # VARIATION SELECTOR-142
+E017E;A # VARIATION SELECTOR-143
+E017F;A # VARIATION SELECTOR-144
+E0180;A # VARIATION SELECTOR-145
+E0181;A # VARIATION SELECTOR-146
+E0182;A # VARIATION SELECTOR-147
+E0183;A # VARIATION SELECTOR-148
+E0184;A # VARIATION SELECTOR-149
+E0185;A # VARIATION SELECTOR-150
+E0186;A # VARIATION SELECTOR-151
+E0187;A # VARIATION SELECTOR-152
+E0188;A # VARIATION SELECTOR-153
+E0189;A # VARIATION SELECTOR-154
+E018A;A # VARIATION SELECTOR-155
+E018B;A # VARIATION SELECTOR-156
+E018C;A # VARIATION SELECTOR-157
+E018D;A # VARIATION SELECTOR-158
+E018E;A # VARIATION SELECTOR-159
+E018F;A # VARIATION SELECTOR-160
+E0190;A # VARIATION SELECTOR-161
+E0191;A # VARIATION SELECTOR-162
+E0192;A # VARIATION SELECTOR-163
+E0193;A # VARIATION SELECTOR-164
+E0194;A # VARIATION SELECTOR-165
+E0195;A # VARIATION SELECTOR-166
+E0196;A # VARIATION SELECTOR-167
+E0197;A # VARIATION SELECTOR-168
+E0198;A # VARIATION SELECTOR-169
+E0199;A # VARIATION SELECTOR-170
+E019A;A # VARIATION SELECTOR-171
+E019B;A # VARIATION SELECTOR-172
+E019C;A # VARIATION SELECTOR-173
+E019D;A # VARIATION SELECTOR-174
+E019E;A # VARIATION SELECTOR-175
+E019F;A # VARIATION SELECTOR-176
+E01A0;A # VARIATION SELECTOR-177
+E01A1;A # VARIATION SELECTOR-178
+E01A2;A # VARIATION SELECTOR-179
+E01A3;A # VARIATION SELECTOR-180
+E01A4;A # VARIATION SELECTOR-181
+E01A5;A # VARIATION SELECTOR-182
+E01A6;A # VARIATION SELECTOR-183
+E01A7;A # VARIATION SELECTOR-184
+E01A8;A # VARIATION SELECTOR-185
+E01A9;A # VARIATION SELECTOR-186
+E01AA;A # VARIATION SELECTOR-187
+E01AB;A # VARIATION SELECTOR-188
+E01AC;A # VARIATION SELECTOR-189
+E01AD;A # VARIATION SELECTOR-190
+E01AE;A # VARIATION SELECTOR-191
+E01AF;A # VARIATION SELECTOR-192
+E01B0;A # VARIATION SELECTOR-193
+E01B1;A # VARIATION SELECTOR-194
+E01B2;A # VARIATION SELECTOR-195
+E01B3;A # VARIATION SELECTOR-196
+E01B4;A # VARIATION SELECTOR-197
+E01B5;A # VARIATION SELECTOR-198
+E01B6;A # VARIATION SELECTOR-199
+E01B7;A # VARIATION SELECTOR-200
+E01B8;A # VARIATION SELECTOR-201
+E01B9;A # VARIATION SELECTOR-202
+E01BA;A # VARIATION SELECTOR-203
+E01BB;A # VARIATION SELECTOR-204
+E01BC;A # VARIATION SELECTOR-205
+E01BD;A # VARIATION SELECTOR-206
+E01BE;A # VARIATION SELECTOR-207
+E01BF;A # VARIATION SELECTOR-208
+E01C0;A # VARIATION SELECTOR-209
+E01C1;A # VARIATION SELECTOR-210
+E01C2;A # VARIATION SELECTOR-211
+E01C3;A # VARIATION SELECTOR-212
+E01C4;A # VARIATION SELECTOR-213
+E01C5;A # VARIATION SELECTOR-214
+E01C6;A # VARIATION SELECTOR-215
+E01C7;A # VARIATION SELECTOR-216
+E01C8;A # VARIATION SELECTOR-217
+E01C9;A # VARIATION SELECTOR-218
+E01CA;A # VARIATION SELECTOR-219
+E01CB;A # VARIATION SELECTOR-220
+E01CC;A # VARIATION SELECTOR-221
+E01CD;A # VARIATION SELECTOR-222
+E01CE;A # VARIATION SELECTOR-223
+E01CF;A # VARIATION SELECTOR-224
+E01D0;A # VARIATION SELECTOR-225
+E01D1;A # VARIATION SELECTOR-226
+E01D2;A # VARIATION SELECTOR-227
+E01D3;A # VARIATION SELECTOR-228
+E01D4;A # VARIATION SELECTOR-229
+E01D5;A # VARIATION SELECTOR-230
+E01D6;A # VARIATION SELECTOR-231
+E01D7;A # VARIATION SELECTOR-232
+E01D8;A # VARIATION SELECTOR-233
+E01D9;A # VARIATION SELECTOR-234
+E01DA;A # VARIATION SELECTOR-235
+E01DB;A # VARIATION SELECTOR-236
+E01DC;A # VARIATION SELECTOR-237
+E01DD;A # VARIATION SELECTOR-238
+E01DE;A # VARIATION SELECTOR-239
+E01DF;A # VARIATION SELECTOR-240
+E01E0;A # VARIATION SELECTOR-241
+E01E1;A # VARIATION SELECTOR-242
+E01E2;A # VARIATION SELECTOR-243
+E01E3;A # VARIATION SELECTOR-244
+E01E4;A # VARIATION SELECTOR-245
+E01E5;A # VARIATION SELECTOR-246
+E01E6;A # VARIATION SELECTOR-247
+E01E7;A # VARIATION SELECTOR-248
+E01E8;A # VARIATION SELECTOR-249
+E01E9;A # VARIATION SELECTOR-250
+E01EA;A # VARIATION SELECTOR-251
+E01EB;A # VARIATION SELECTOR-252
+E01EC;A # VARIATION SELECTOR-253
+E01ED;A # VARIATION SELECTOR-254
+E01EE;A # VARIATION SELECTOR-255
+E01EF;A # VARIATION SELECTOR-256
+F0000..FFFFD;A # <Plane 15 Private Use, First>..<Plane 15 Private Use, Last>
+100000..10FFFD;A # <Plane 16 Private Use, First>..<Plane 16 Private Use, Last>
+
+# EOF
diff --git a/libwc/Makefile.in b/libwc/Makefile.in
index bd99432..930747c 100644
--- a/libwc/Makefile.in
+++ b/libwc/Makefile.in
@@ -95,6 +95,8 @@ $(LIBRARY): $(OBJS)
test: $(LIBRARY) test.o ../Str.o ../myctype.o
$(CC) -o wctest test.o ../Str.o ../myctype.o $(LIBRARY) ../gc/gc.a
+map/ucs_ambwidth.map: EastAsianWidth.txt
+ awk -f ambwidth_map.awk EastAsianWidth.txt > map/ucs_ambwidth.map
###
big5.o: wc.h wc_types.h ces.h ccs.h iso2022.h priv.h big5.h search.h wtf.h \
ucs.h
@@ -154,7 +156,7 @@ ucs.o: wc.h wc_types.h ces.h ccs.h iso2022.h priv.h ucs.h search.h big5.h \
map/hkscs_ucs_p2.map map/gb12345_ucs.map map/johab_ucs.map \
map/sjis_ext_ucs.map map/gbk_ucs.map map/uhc_ucs.map map/ucs_wide.map \
map/ucs_combining.map map/ucs_precompose.map map/ucs_hangul.map \
- map/ucs_fullwidth.map
+ map/ucs_fullwidth.map map/ucs_ambwidth.map
uhc.o: wc.h wc_types.h ces.h ccs.h iso2022.h priv.h uhc.h wtf.h ucs.h
utf7.o: wc.h wc_types.h ces.h ccs.h iso2022.h priv.h ucs.h utf7.h wtf.h
utf8.o: wc.h wc_types.h ces.h ccs.h iso2022.h priv.h ucs.h utf8.h wtf.h
diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk
new file mode 100644
index 0000000..8544f58
--- /dev/null
+++ b/libwc/ambwidth_map.awk
@@ -0,0 +1,47 @@
+BEGIN {
+ FS = "[; ]";
+ i = 0;
+}
+$2 == "A" {
+ code = sprintf("0x%s", $1);
+ if (strtonum(code) < 0x10000) {
+ map[i] = code
+ i++;
+ }
+}
+END {
+ n = 0;
+ start = map[0]
+ prev = strtonum(map[0]);
+ for (j = 1; j < i; j++) {
+ cur = strtonum(map[j]);
+ if (match(map[j], "[.]+")) {
+ map2[n] = sprintf("%s, %s", start, map[j - 1]);
+ n++;
+ gsub("[.]+", ", 0x", map[j])
+ map2[n] = map[j];
+ n++;
+ start = map[j + 1];
+ cur = strtonum(start);
+ } else {
+ if (cur - prev > 2) {
+ map2[n] = sprintf("%s, %s", start, map[j - 1]);
+ start = map[j];
+ n++;
+ }
+
+ if (j == i - 1) {
+ map2[n] = sprintf("%s, %s", start, map[j]);
+ n++;
+ }
+ }
+ prev = cur;
+ }
+
+ printf("static wc_map ucs_ambwidth_map[] = {\n");
+ for (j = 0; j < n; j++) {
+ printf(" { %s },\n", map2[j]);
+ }
+ printf("};\n");
+ printf("#define N_ucs_ambwidth_map (sizeof(ucs_ambwidth_map) / sizeof(*ucs_ambwidth_map))\n");
+}
diff --git a/libwc/ces.h b/libwc/ces.h
index 6b6720a..55e2806 100644
--- a/libwc/ces.h
+++ b/libwc/ces.h
@@ -176,6 +176,7 @@ enum {
#define WC_CES_SHIFT_JIS (WC_CES_E_PRIV2|WC_CES_N_SHIFT_JIS)
#define WC_CES_CP932 WC_CES_SHIFT_JIS
+#define WC_CES_CP943 WC_CES_SHIFT_JIS
#define WC_CES_SHIFT_JISX0213 (WC_CES_E_PRIV2|WC_CES_N_SHIFT_JISX0213)
#define WC_CES_GBK (WC_CES_E_PRIV2|WC_CES_N_GBK)
#define WC_CES_CP936 WC_CES_GBK
diff --git a/libwc/charset.c b/libwc/charset.c
index d86a129..3f0b74d 100644
--- a/libwc/charset.c
+++ b/libwc/charset.c
@@ -32,6 +32,46 @@ static struct {
{ NULL, 0 }
};
+static wc_ces
+wc_codepage(int n)
+{
+ switch (n) {
+ case 437: return WC_CES_CP437;
+ case 737: return WC_CES_CP737;
+ case 775: return WC_CES_CP775;
+ case 850: return WC_CES_CP850;
+ case 852: return WC_CES_CP852;
+ case 855: return WC_CES_CP855;
+ case 856: return WC_CES_CP856;
+ case 857: return WC_CES_CP857;
+ case 860: return WC_CES_CP860;
+ case 861: return WC_CES_CP861;
+ case 862: return WC_CES_CP862;
+ case 863: return WC_CES_CP863;
+ case 864: return WC_CES_CP864;
+ case 865: return WC_CES_CP865;
+ case 866: return WC_CES_CP866;
+ case 869: return WC_CES_CP869;
+ case 874: return WC_CES_CP874;
+ case 932: return WC_CES_CP932; /* CP932 = Shift_JIS */
+ case 936: return WC_CES_CP936; /* CP936 = GBK > EUC_CN */
+ case 943: return WC_CES_CP943; /* CP943 = Shift_JIS */
+ case 949: return WC_CES_CP949; /* CP949 = UHC > EUC_KR */
+ case 950: return WC_CES_CP950; /* CP950 = Big5 */
+ case 1006: return WC_CES_CP1006;
+ case 1250: return WC_CES_CP1250;
+ case 1251: return WC_CES_CP1251;
+ case 1252: return WC_CES_CP1252;
+ case 1253: return WC_CES_CP1253;
+ case 1254: return WC_CES_CP1254;
+ case 1255: return WC_CES_CP1255;
+ case 1256: return WC_CES_CP1256;
+ case 1257: return WC_CES_CP1257;
+ case 1258: return WC_CES_CP1258;
+ }
+ return 0;
+}
+
wc_ces
wc_guess_charset(char *charset, wc_ces orig)
{
@@ -119,6 +159,11 @@ wc_charset_to_ces(char *charset)
if (n >= 1 && n <= 16 && n != 12)
return (WC_CES_E_ISO_8859 | n);
return WC_CES_ISO_8859_1;
+ } else if (! strncmp(p, "ibm", 3)) {
+ p += 3;
+ if (*p >= '1' && *p <= '9')
+ return wc_codepage(atoi(p));
+ return wc_charset_to_ces(p);
}
break;
case 'j':
@@ -135,6 +180,10 @@ wc_charset_to_ces(char *charset)
! strncmp(p, "sjis", 4))
return WC_CES_SHIFT_JIS;
break;
+ case 'p':
+ if (! strncmp(p, "pck", 3))
+ return WC_CES_SHIFT_JIS;
+ break;
case 'g':
if (! strncmp(p, "gb18030", 7) ||
! strncmp(p, "gbk2k", 5))
@@ -210,58 +259,18 @@ wc_charset_to_ces(char *charset)
return WC_CES_EUC_CN;
if (*(p+1) != 'p')
break;
- n = atoi(p + 2);
- switch (n) {
- case 437: return WC_CES_CP437;
- case 737: return WC_CES_CP737;
- case 775: return WC_CES_CP775;
- case 850: return WC_CES_CP850;
- case 852: return WC_CES_CP852;
- case 855: return WC_CES_CP855;
- case 856: return WC_CES_CP856;
- case 857: return WC_CES_CP857;
- case 860: return WC_CES_CP860;
- case 861: return WC_CES_CP861;
- case 862: return WC_CES_CP862;
- case 863: return WC_CES_CP863;
- case 864: return WC_CES_CP864;
- case 865: return WC_CES_CP865;
- case 866: return WC_CES_CP866;
- case 869: return WC_CES_CP869;
- case 874: return WC_CES_CP874;
- case 932: return WC_CES_CP932; /* CP932 = Shift_JIS */
- case 936: return WC_CES_CP936; /* CP936 = GBK > EUC_CN */
- case 949: return WC_CES_CP949; /* CP949 = UHC > EUC_KR */
- case 950: return WC_CES_CP950; /* CP950 = Big5 */
- case 1006: return WC_CES_CP1006;
- case 1250: return WC_CES_CP1250;
- case 1251: return WC_CES_CP1251;
- case 1252: return WC_CES_CP1252;
- case 1253: return WC_CES_CP1253;
- case 1254: return WC_CES_CP1254;
- case 1255: return WC_CES_CP1255;
- case 1256: return WC_CES_CP1256;
- case 1257: return WC_CES_CP1257;
- case 1258: return WC_CES_CP1258;
- }
+ p += 2;
+ if (*p >= '1' && *p <= '9')
+ return wc_codepage(atoi(p));
break;
case 'w':
if (strncmp(p, "windows", 7))
break;
+ p += 7;
if (! strncmp(p, "31j", 3))
return WC_CES_CP932;
- n = atoi(p + 7);
- switch (n) {
- case 1250: return WC_CES_CP1250;
- case 1251: return WC_CES_CP1251;
- case 1252: return WC_CES_CP1252;
- case 1253: return WC_CES_CP1253;
- case 1254: return WC_CES_CP1254;
- case 1255: return WC_CES_CP1255;
- case 1256: return WC_CES_CP1256;
- case 1257: return WC_CES_CP1257;
- case 1258: return WC_CES_CP1258;
- }
+ if (*p >= '1' && *p <= '9')
+ return wc_codepage(atoi(p));
break;
}
return 0;
@@ -345,18 +354,9 @@ wc_charset_short_to_ces(char *charset)
case 'c':
return WC_CES_ISO_2022_CN;
case 'w':
- n = atoi(p + 1);
- switch (n) {
- case 1250: return WC_CES_CP1250;
- case 1251: return WC_CES_CP1251;
- case 1252: return WC_CES_CP1252;
- case 1253: return WC_CES_CP1253;
- case 1254: return WC_CES_CP1254;
- case 1255: return WC_CES_CP1255;
- case 1256: return WC_CES_CP1256;
- case 1257: return WC_CES_CP1257;
- case 1258: return WC_CES_CP1258;
- }
+ p++;
+ if (*p >= '1' && *p <= '9')
+ return wc_codepage(atoi(p));
break;
case 'r':
return WC_CES_RAW;
@@ -368,7 +368,7 @@ wc_ces
wc_locale_to_ces(char *locale)
{
char *p = locale;
- char buf[6];
+ char buf[8];
int n;
if (*p == 'C' && *(p+1) == '\0')
@@ -380,7 +380,7 @@ wc_locale_to_ces(char *locale)
return wc_charset_to_ces(cs);
}
#endif
- for (n = 0; *p && *p != '.' && n < 5; p++) {
+ for (n = 0; *p && *p != '.' && n < 7; p++) {
if ((unsigned char)*p > 0x20)
buf[n++] = tolower(*p);
}
diff --git a/libwc/map/CVS/Entries b/libwc/map/CVS/Entries
new file mode 100644
index 0000000..7e3a839
--- /dev/null
+++ b/libwc/map/CVS/Entries
@@ -0,0 +1,112 @@
+/big5_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cns11643_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1006_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1250_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1251_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1252_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1253_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1254_ucs.map/1.1/Mon Sep 22 21:02:24 2003//
+/cp1255_combining.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1255_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1256_combining.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1256_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1257_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1258_combining.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp1258_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp437_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp737_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp775_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp850_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp852_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp855_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp856_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp857_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp860_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp861_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp862_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp863_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp864_combining.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp864_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp865_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp866_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp869_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp874_combining.map/1.1/Mon Sep 22 21:02:25 2003//
+/cp874_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/gb12345_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/gb18030_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/gb2312_gbk.map/1.1/Mon Sep 22 21:02:25 2003//
+/gb2312_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/gbk_ucs.map/1.1/Mon Sep 22 21:02:25 2003//
+/hkscs_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/hkscs_ucs_p2.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885910_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885911_combining.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885911_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885913_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885914_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885915_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso885916_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88591_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88592_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88593_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88594_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88595_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88596_combining.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88596_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88597_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88598_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/iso88599_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/jisx0201k_jisx0208.map/1.1/Mon Sep 22 21:02:26 2003//
+/jisx0201k_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/jisx0208_jisx02131.map/1.1/Mon Sep 22 21:02:26 2003//
+/jisx0208x0212x0213_ucs.map/1.1/Mon Sep 22 21:02:26 2003//
+/jisx02132_sjis.map/1.1/Mon Sep 22 21:02:28 2003//
+/jisx0213_ucs_p2.map/1.1/Mon Sep 22 21:02:28 2003//
+/johab_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/koi8r_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/koi8u_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/ksx1001_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/mk_big5_txt.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_big5_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_cns_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_combining_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_cp1258_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_cp950_txt.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_gb18030_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_gb_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_gbk_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_hkscs_p2_txt.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_hkscs_txt.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_hkscs_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_hkscs_ucs_p2_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_jis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_jisx0213_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_johab_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_ks_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_sjis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_tis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_uhc_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/mk_viet_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003//
+/nextstep_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/sjis_ext_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/tcvn57123_tcvn5712.map/1.1/Mon Sep 22 21:02:28 2003//
+/tcvn5712_combining.map/1.1/Mon Sep 22 21:02:28 2003//
+/tcvn5712_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/ucs_combining.map/1.1/Mon Sep 22 21:02:28 2003//
+/ucs_fullwidth.map/1.1/Mon Sep 22 21:02:28 2003//
+/ucs_hangul.map/1.1/Mon Sep 22 21:02:28 2003//
+/ucs_precompose.map/1.1/Mon Sep 22 21:02:28 2003//
+/uhc_ucs.map/1.1/Mon Sep 22 21:02:28 2003//
+/viscii11_ucs.map/1.1/Mon Sep 22 21:02:29 2003//
+/vps_ucs.map/1.1/Mon Sep 22 21:02:29 2003//
+/mk_ucs_case_map.pl/1.1/Tue Aug 24 10:11:51 2010//
+/mk_ucs_isdigit_map.pl/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_ambwidth.map/1.1/Sun Jul 25 09:55:05 2010//
+/ucs_case.map/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_isalpha.map/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_isdigit.map/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_islower.map/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_isupper.map/1.1/Tue Aug 24 10:11:51 2010//
+/ucs_wide.map/1.2/Tue Jan 4 09:22:28 2011//
+D
diff --git a/libwc/map/CVS/Repository b/libwc/map/CVS/Repository
new file mode 100644
index 0000000..487f8e5
--- /dev/null
+++ b/libwc/map/CVS/Repository
@@ -0,0 +1 @@
+w3m/libwc/map
diff --git a/libwc/map/CVS/Root b/libwc/map/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/libwc/map/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/libwc/map/mk_ucs_case_map.pl b/libwc/map/mk_ucs_case_map.pl
new file mode 100644
index 0000000..ee48826
--- /dev/null
+++ b/libwc/map/mk_ucs_case_map.pl
@@ -0,0 +1,48 @@
+
+open(MAP, "> ucs_case.map");
+print MAP <<EOF;
+/*
+ File generated from UnicodeData-4.1.0.txt.
+*/
+
+EOF
+
+for (<DATA>) {
+ chop;
+ ($name, $col) = split;
+
+ @cp = ();
+
+ open(UCD, "< private/UnicodeData-4.1.0.txt");
+ while(<UCD>) {
+ chop;
+ @entry = split(';');
+ last if $entry[0] =~ m/.{5,}/;
+ if ($entry[$col] ne '') {
+ push (@cp, $entry[0]);
+ $map{$entry[0]} = $entry[$col];
+ }
+ }
+ close UCD;
+
+ $nocp = @cp;
+
+ print MAP <<EOF;
+
+#define N_ucs_${name}_map ${nocp}
+
+static wc_map ucs_${name}_map[ N_ucs_${name}_map ] = {
+EOF
+
+ for (@cp) {
+ print MAP " { 0x$_, 0x$map{$_} },\n";
+ }
+ print MAP <<EOF
+};
+EOF
+}
+
+__END__
+toupper 12
+tolower 13
+totitle 14
diff --git a/libwc/map/mk_ucs_isdigit_map.pl b/libwc/map/mk_ucs_isdigit_map.pl
new file mode 100644
index 0000000..c67f645
--- /dev/null
+++ b/libwc/map/mk_ucs_isdigit_map.pl
@@ -0,0 +1,56 @@
+
+open(MAP, "> ucs_isdigit.map");
+print MAP <<EOF;
+/*
+ File generated from UnicodeData-4.1.0.txt.
+*/
+
+EOF
+
+for (<DATA>) {
+ chop;
+ ($name, $class) = split;
+
+ @cp = ();
+
+ open(UCD, "< private/UnicodeData-4.1.0.txt");
+ while(<UCD>) {
+ chop;
+ @entry = split(';');
+ last if $entry[0] =~ m/.{5,}/;
+ if ($entry[2] eq $class) {
+ push (@cp, $entry[0]);
+ }
+ }
+ close UCD;
+
+ @bs = ();
+ $last = -1;
+ $seq = -1;
+ for my $e (@cp) {
+ if (++$last != hex $e) {
+ $seq = $e;
+ $last = hex $e;
+ push (@bs, $seq);
+ }
+ $end{$seq} = $e;
+ }
+ $nobs = @bs;
+
+ print MAP <<EOF;
+
+#define N_ucs_${name}_map ${nobs}
+
+static wc_map ucs_${name}_map[ N_ucs_${name}_map ] = {
+EOF
+
+ for (@bs) {
+ print MAP " { 0x$_, 0x$end{$_} },\n";
+ }
+ print MAP <<EOF
+};
+EOF
+}
+
+__END__
+isdigit Nd
diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map
new file mode 100644
index 0000000..6f03ba8
--- /dev/null
+++ b/libwc/map/ucs_ambwidth.map
@@ -0,0 +1,120 @@
+static wc_map ucs_ambwidth_map[] = {
+ { 0x00A1, 0x00A1 },
+ { 0x00A4, 0x00A4 },
+ { 0x00A7, 0x00AA },
+ { 0x00AD, 0x00BF },
+ { 0x00C6, 0x00C6 },
+ { 0x00D0, 0x00D0 },
+ { 0x00D7, 0x00D8 },
+ { 0x00DE, 0x00E1 },
+ { 0x00E6, 0x00ED },
+ { 0x00F0, 0x00F3 },
+ { 0x00F7, 0x00FE },
+ { 0x0101, 0x0101 },
+ { 0x0111, 0x0113 },
+ { 0x011B, 0x011B },
+ { 0x0126, 0x0127 },
+ { 0x012B, 0x012B },
+ { 0x0131, 0x0133 },
+ { 0x0138, 0x0138 },
+ { 0x013F, 0x0144 },
+ { 0x0148, 0x014D },
+ { 0x0152, 0x0153 },
+ { 0x0166, 0x0167 },
+ { 0x016B, 0x016B },
+ { 0x01CE, 0x01DC },
+ { 0x0251, 0x0251 },
+ { 0x0261, 0x0261 },
+ { 0x02C4, 0x02C4 },
+ { 0x02C7, 0x02CD },
+ { 0x02D0, 0x02D0 },
+ { 0x02D8, 0x02DF },
+ { 0x0300, 0x036F },
+ { 0x0391, 0x03A9 },
+ { 0x03B1, 0x03C9 },
+ { 0x0401, 0x0401 },
+ { 0x0410, 0x0451 },
+ { 0x2010, 0x2010 },
+ { 0x2013, 0x2019 },
+ { 0x201C, 0x201D },
+ { 0x2020, 0x2027 },
+ { 0x2030, 0x2035 },
+ { 0x203B, 0x203B },
+ { 0x203E, 0x203E },
+ { 0x2074, 0x2074 },
+ { 0x207F, 0x2084 },
+ { 0x20AC, 0x20AC },
+ { 0x2103, 0x2105 },
+ { 0x2109, 0x2109 },
+ { 0x2113, 0x2113 },
+ { 0x2116, 0x2116 },
+ { 0x2121, 0x2122 },
+ { 0x2126, 0x2126 },
+ { 0x212B, 0x212B },
+ { 0x2153, 0x2154 },
+ { 0x215B, 0x216B },
+ { 0x2170, 0x2179 },
+ { 0x2189, 0x2189 },
+ { 0x2190, 0x2199 },
+ { 0x21B8, 0x21B9 },
+ { 0x21D2, 0x21D4 },
+ { 0x21E7, 0x21E7 },
+ { 0x2200, 0x2203 },
+ { 0x2207, 0x2208 },
+ { 0x220B, 0x220B },
+ { 0x220F, 0x2211 },
+ { 0x2215, 0x2215 },
+ { 0x221A, 0x221A },
+ { 0x221D, 0x2220 },
+ { 0x2223, 0x222E },
+ { 0x2234, 0x2237 },
+ { 0x223C, 0x223D },
+ { 0x2248, 0x2248 },
+ { 0x224C, 0x224C },
+ { 0x2252, 0x2252 },
+ { 0x2260, 0x2261 },
+ { 0x2264, 0x2267 },
+ { 0x226A, 0x226B },
+ { 0x226E, 0x226F },
+ { 0x2282, 0x2283 },
+ { 0x2286, 0x2287 },
+ { 0x2295, 0x2295 },
+ { 0x2299, 0x2299 },
+ { 0x22A5, 0x22A5 },
+ { 0x22BF, 0x22BF },
+ { 0x2312, 0x2312 },
+ { 0x2460, 0x254B },
+ { 0x2550, 0x2573 },
+ { 0x2580, 0x258F },
+ { 0x2592, 0x2595 },
+ { 0x25A0, 0x25A9 },
+ { 0x25B2, 0x25B3 },
+ { 0x25B6, 0x25B7 },
+ { 0x25BC, 0x25BD },
+ { 0x25C0, 0x25C1 },
+ { 0x25C6, 0x25C8 },
+ { 0x25CB, 0x25CB },
+ { 0x25CE, 0x25D1 },
+ { 0x25E2, 0x25E5 },
+ { 0x25EF, 0x25EF },
+ { 0x2605, 0x2606 },
+ { 0x2609, 0x2609 },
+ { 0x260E, 0x260F },
+ { 0x2614, 0x2615 },
+ { 0x261C, 0x261E },
+ { 0x2640, 0x2642 },
+ { 0x2660, 0x266F },
+ { 0x269E, 0x269F },
+ { 0x26BE, 0x26BF },
+ { 0x26C4, 0x26E3 },
+ { 0x26E8, 0x26FF },
+ { 0x273D, 0x273D },
+ { 0x2757, 0x2757 },
+ { 0x2776, 0x277F },
+ { 0x2B55, 0x2B59 },
+ { 0x3248, 0x324F },
+ { 0xE000, 0xF8FF },
+ { 0xFE00, 0xFE0F },
+ { 0xFFFD, 0xFFFD },
+};
+#define N_ucs_ambwidth_map (sizeof(ucs_ambwidth_map) / sizeof(*ucs_ambwidth_map))
diff --git a/libwc/map/ucs_case.map b/libwc/map/ucs_case.map
new file mode 100644
index 0000000..82018ba
--- /dev/null
+++ b/libwc/map/ucs_case.map
@@ -0,0 +1,2600 @@
+/*
+ File generated from UnicodeData-4.1.0.txt.
+*/
+
+
+#define N_ucs_toupper_map 862
+
+static wc_map ucs_toupper_map[ N_ucs_toupper_map ] = {
+ { 0x0061, 0x0041 },
+ { 0x0062, 0x0042 },
+ { 0x0063, 0x0043 },
+ { 0x0064, 0x0044 },
+ { 0x0065, 0x0045 },
+ { 0x0066, 0x0046 },
+ { 0x0067, 0x0047 },
+ { 0x0068, 0x0048 },
+ { 0x0069, 0x0049 },
+ { 0x006A, 0x004A },
+ { 0x006B, 0x004B },
+ { 0x006C, 0x004C },
+ { 0x006D, 0x004D },
+ { 0x006E, 0x004E },
+ { 0x006F, 0x004F },
+ { 0x0070, 0x0050 },
+ { 0x0071, 0x0051 },
+ { 0x0072, 0x0052 },
+ { 0x0073, 0x0053 },
+ { 0x0074, 0x0054 },
+ { 0x0075, 0x0055 },
+ { 0x0076, 0x0056 },
+ { 0x0077, 0x0057 },
+ { 0x0078, 0x0058 },
+ { 0x0079, 0x0059 },
+ { 0x007A, 0x005A },
+ { 0x00B5, 0x039C },
+ { 0x00E0, 0x00C0 },
+ { 0x00E1, 0x00C1 },
+ { 0x00E2, 0x00C2 },
+ { 0x00E3, 0x00C3 },
+ { 0x00E4, 0x00C4 },
+ { 0x00E5, 0x00C5 },
+ { 0x00E6, 0x00C6 },
+ { 0x00E7, 0x00C7 },
+ { 0x00E8, 0x00C8 },
+ { 0x00E9, 0x00C9 },
+ { 0x00EA, 0x00CA },
+ { 0x00EB, 0x00CB },
+ { 0x00EC, 0x00CC },
+ { 0x00ED, 0x00CD },
+ { 0x00EE, 0x00CE },
+ { 0x00EF, 0x00CF },
+ { 0x00F0, 0x00D0 },
+ { 0x00F1, 0x00D1 },
+ { 0x00F2, 0x00D2 },
+ { 0x00F3, 0x00D3 },
+ { 0x00F4, 0x00D4 },
+ { 0x00F5, 0x00D5 },
+ { 0x00F6, 0x00D6 },
+ { 0x00F8, 0x00D8 },
+ { 0x00F9, 0x00D9 },
+ { 0x00FA, 0x00DA },
+ { 0x00FB, 0x00DB },
+ { 0x00FC, 0x00DC },
+ { 0x00FD, 0x00DD },
+ { 0x00FE, 0x00DE },
+ { 0x00FF, 0x0178 },
+ { 0x0101, 0x0100 },
+ { 0x0103, 0x0102 },
+ { 0x0105, 0x0104 },
+ { 0x0107, 0x0106 },
+ { 0x0109, 0x0108 },
+ { 0x010B, 0x010A },
+ { 0x010D, 0x010C },
+ { 0x010F, 0x010E },
+ { 0x0111, 0x0110 },
+ { 0x0113, 0x0112 },
+ { 0x0115, 0x0114 },
+ { 0x0117, 0x0116 },
+ { 0x0119, 0x0118 },
+ { 0x011B, 0x011A },
+ { 0x011D, 0x011C },
+ { 0x011F, 0x011E },
+ { 0x0121, 0x0120 },
+ { 0x0123, 0x0122 },
+ { 0x0125, 0x0124 },
+ { 0x0127, 0x0126 },
+ { 0x0129, 0x0128 },
+ { 0x012B, 0x012A },
+ { 0x012D, 0x012C },
+ { 0x012F, 0x012E },
+ { 0x0131, 0x0049 },
+ { 0x0133, 0x0132 },
+ { 0x0135, 0x0134 },
+ { 0x0137, 0x0136 },
+ { 0x013A, 0x0139 },
+ { 0x013C, 0x013B },
+ { 0x013E, 0x013D },
+ { 0x0140, 0x013F },
+ { 0x0142, 0x0141 },
+ { 0x0144, 0x0143 },
+ { 0x0146, 0x0145 },
+ { 0x0148, 0x0147 },
+ { 0x014B, 0x014A },
+ { 0x014D, 0x014C },
+ { 0x014F, 0x014E },
+ { 0x0151, 0x0150 },
+ { 0x0153, 0x0152 },
+ { 0x0155, 0x0154 },
+ { 0x0157, 0x0156 },
+ { 0x0159, 0x0158 },
+ { 0x015B, 0x015A },
+ { 0x015D, 0x015C },
+ { 0x015F, 0x015E },
+ { 0x0161, 0x0160 },
+ { 0x0163, 0x0162 },
+ { 0x0165, 0x0164 },
+ { 0x0167, 0x0166 },
+ { 0x0169, 0x0168 },
+ { 0x016B, 0x016A },
+ { 0x016D, 0x016C },
+ { 0x016F, 0x016E },
+ { 0x0171, 0x0170 },
+ { 0x0173, 0x0172 },
+ { 0x0175, 0x0174 },
+ { 0x0177, 0x0176 },
+ { 0x017A, 0x0179 },
+ { 0x017C, 0x017B },
+ { 0x017E, 0x017D },
+ { 0x017F, 0x0053 },
+ { 0x0183, 0x0182 },
+ { 0x0185, 0x0184 },
+ { 0x0188, 0x0187 },
+ { 0x018C, 0x018B },
+ { 0x0192, 0x0191 },
+ { 0x0195, 0x01F6 },
+ { 0x0199, 0x0198 },
+ { 0x019A, 0x023D },
+ { 0x019E, 0x0220 },
+ { 0x01A1, 0x01A0 },
+ { 0x01A3, 0x01A2 },
+ { 0x01A5, 0x01A4 },
+ { 0x01A8, 0x01A7 },
+ { 0x01AD, 0x01AC },
+ { 0x01B0, 0x01AF },
+ { 0x01B4, 0x01B3 },
+ { 0x01B6, 0x01B5 },
+ { 0x01B9, 0x01B8 },
+ { 0x01BD, 0x01BC },
+ { 0x01BF, 0x01F7 },
+ { 0x01C5, 0x01C4 },
+ { 0x01C6, 0x01C4 },
+ { 0x01C8, 0x01C7 },
+ { 0x01C9, 0x01C7 },
+ { 0x01CB, 0x01CA },
+ { 0x01CC, 0x01CA },
+ { 0x01CE, 0x01CD },
+ { 0x01D0, 0x01CF },
+ { 0x01D2, 0x01D1 },
+ { 0x01D4, 0x01D3 },
+ { 0x01D6, 0x01D5 },
+ { 0x01D8, 0x01D7 },
+ { 0x01DA, 0x01D9 },
+ { 0x01DC, 0x01DB },
+ { 0x01DD, 0x018E },
+ { 0x01DF, 0x01DE },
+ { 0x01E1, 0x01E0 },
+ { 0x01E3, 0x01E2 },
+ { 0x01E5, 0x01E4 },
+ { 0x01E7, 0x01E6 },
+ { 0x01E9, 0x01E8 },
+ { 0x01EB, 0x01EA },
+ { 0x01ED, 0x01EC },
+ { 0x01EF, 0x01EE },
+ { 0x01F2, 0x01F1 },
+ { 0x01F3, 0x01F1 },
+ { 0x01F5, 0x01F4 },
+ { 0x01F9, 0x01F8 },
+ { 0x01FB, 0x01FA },
+ { 0x01FD, 0x01FC },
+ { 0x01FF, 0x01FE },
+ { 0x0201, 0x0200 },
+ { 0x0203, 0x0202 },
+ { 0x0205, 0x0204 },
+ { 0x0207, 0x0206 },
+ { 0x0209, 0x0208 },
+ { 0x020B, 0x020A },
+ { 0x020D, 0x020C },
+ { 0x020F, 0x020E },
+ { 0x0211, 0x0210 },
+ { 0x0213, 0x0212 },
+ { 0x0215, 0x0214 },
+ { 0x0217, 0x0216 },
+ { 0x0219, 0x0218 },
+ { 0x021B, 0x021A },
+ { 0x021D, 0x021C },
+ { 0x021F, 0x021E },
+ { 0x0223, 0x0222 },
+ { 0x0225, 0x0224 },
+ { 0x0227, 0x0226 },
+ { 0x0229, 0x0228 },
+ { 0x022B, 0x022A },
+ { 0x022D, 0x022C },
+ { 0x022F, 0x022E },
+ { 0x0231, 0x0230 },
+ { 0x0233, 0x0232 },
+ { 0x023C, 0x023B },
+ { 0x0253, 0x0181 },
+ { 0x0254, 0x0186 },
+ { 0x0256, 0x0189 },
+ { 0x0257, 0x018A },
+ { 0x0259, 0x018F },
+ { 0x025B, 0x0190 },
+ { 0x0260, 0x0193 },
+ { 0x0263, 0x0194 },
+ { 0x0268, 0x0197 },
+ { 0x0269, 0x0196 },
+ { 0x026F, 0x019C },
+ { 0x0272, 0x019D },
+ { 0x0275, 0x019F },
+ { 0x0280, 0x01A6 },
+ { 0x0283, 0x01A9 },
+ { 0x0288, 0x01AE },
+ { 0x028A, 0x01B1 },
+ { 0x028B, 0x01B2 },
+ { 0x0292, 0x01B7 },
+ { 0x0294, 0x0241 },
+ { 0x0345, 0x0399 },
+ { 0x03AC, 0x0386 },
+ { 0x03AD, 0x0388 },
+ { 0x03AE, 0x0389 },
+ { 0x03AF, 0x038A },
+ { 0x03B1, 0x0391 },
+ { 0x03B2, 0x0392 },
+ { 0x03B3, 0x0393 },
+ { 0x03B4, 0x0394 },
+ { 0x03B5, 0x0395 },
+ { 0x03B6, 0x0396 },
+ { 0x03B7, 0x0397 },
+ { 0x03B8, 0x0398 },
+ { 0x03B9, 0x0399 },
+ { 0x03BA, 0x039A },
+ { 0x03BB, 0x039B },
+ { 0x03BC, 0x039C },
+ { 0x03BD, 0x039D },
+ { 0x03BE, 0x039E },
+ { 0x03BF, 0x039F },
+ { 0x03C0, 0x03A0 },
+ { 0x03C1, 0x03A1 },
+ { 0x03C2, 0x03A3 },
+ { 0x03C3, 0x03A3 },
+ { 0x03C4, 0x03A4 },
+ { 0x03C5, 0x03A5 },
+ { 0x03C6, 0x03A6 },
+ { 0x03C7, 0x03A7 },
+ { 0x03C8, 0x03A8 },
+ { 0x03C9, 0x03A9 },
+ { 0x03CA, 0x03AA },
+ { 0x03CB, 0x03AB },
+ { 0x03CC, 0x038C },
+ { 0x03CD, 0x038E },
+ { 0x03CE, 0x038F },
+ { 0x03D0, 0x0392 },
+ { 0x03D1, 0x0398 },
+ { 0x03D5, 0x03A6 },
+ { 0x03D6, 0x03A0 },
+ { 0x03D9, 0x03D8 },
+ { 0x03DB, 0x03DA },
+ { 0x03DD, 0x03DC },
+ { 0x03DF, 0x03DE },
+ { 0x03E1, 0x03E0 },
+ { 0x03E3, 0x03E2 },
+ { 0x03E5, 0x03E4 },
+ { 0x03E7, 0x03E6 },
+ { 0x03E9, 0x03E8 },
+ { 0x03EB, 0x03EA },
+ { 0x03ED, 0x03EC },
+ { 0x03EF, 0x03EE },
+ { 0x03F0, 0x039A },
+ { 0x03F1, 0x03A1 },
+ { 0x03F2, 0x03F9 },
+ { 0x03F5, 0x0395 },
+ { 0x03F8, 0x03F7 },
+ { 0x03FB, 0x03FA },
+ { 0x0430, 0x0410 },
+ { 0x0431, 0x0411 },
+ { 0x0432, 0x0412 },
+ { 0x0433, 0x0413 },
+ { 0x0434, 0x0414 },
+ { 0x0435, 0x0415 },
+ { 0x0436, 0x0416 },
+ { 0x0437, 0x0417 },
+ { 0x0438, 0x0418 },
+ { 0x0439, 0x0419 },
+ { 0x043A, 0x041A },
+ { 0x043B, 0x041B },
+ { 0x043C, 0x041C },
+ { 0x043D, 0x041D },
+ { 0x043E, 0x041E },
+ { 0x043F, 0x041F },
+ { 0x0440, 0x0420 },
+ { 0x0441, 0x0421 },
+ { 0x0442, 0x0422 },
+ { 0x0443, 0x0423 },
+ { 0x0444, 0x0424 },
+ { 0x0445, 0x0425 },
+ { 0x0446, 0x0426 },
+ { 0x0447, 0x0427 },
+ { 0x0448, 0x0428 },
+ { 0x0449, 0x0429 },
+ { 0x044A, 0x042A },
+ { 0x044B, 0x042B },
+ { 0x044C, 0x042C },
+ { 0x044D, 0x042D },
+ { 0x044E, 0x042E },
+ { 0x044F, 0x042F },
+ { 0x0450, 0x0400 },
+ { 0x0451, 0x0401 },
+ { 0x0452, 0x0402 },
+ { 0x0453, 0x0403 },
+ { 0x0454, 0x0404 },
+ { 0x0455, 0x0405 },
+ { 0x0456, 0x0406 },
+ { 0x0457, 0x0407 },
+ { 0x0458, 0x0408 },
+ { 0x0459, 0x0409 },
+ { 0x045A, 0x040A },
+ { 0x045B, 0x040B },
+ { 0x045C, 0x040C },
+ { 0x045D, 0x040D },
+ { 0x045E, 0x040E },
+ { 0x045F, 0x040F },
+ { 0x0461, 0x0460 },
+ { 0x0463, 0x0462 },
+ { 0x0465, 0x0464 },
+ { 0x0467, 0x0466 },
+ { 0x0469, 0x0468 },
+ { 0x046B, 0x046A },
+ { 0x046D, 0x046C },
+ { 0x046F, 0x046E },
+ { 0x0471, 0x0470 },
+ { 0x0473, 0x0472 },
+ { 0x0475, 0x0474 },
+ { 0x0477, 0x0476 },
+ { 0x0479, 0x0478 },
+ { 0x047B, 0x047A },
+ { 0x047D, 0x047C },
+ { 0x047F, 0x047E },
+ { 0x0481, 0x0480 },
+ { 0x048B, 0x048A },
+ { 0x048D, 0x048C },
+ { 0x048F, 0x048E },
+ { 0x0491, 0x0490 },
+ { 0x0493, 0x0492 },
+ { 0x0495, 0x0494 },
+ { 0x0497, 0x0496 },
+ { 0x0499, 0x0498 },
+ { 0x049B, 0x049A },
+ { 0x049D, 0x049C },
+ { 0x049F, 0x049E },
+ { 0x04A1, 0x04A0 },
+ { 0x04A3, 0x04A2 },
+ { 0x04A5, 0x04A4 },
+ { 0x04A7, 0x04A6 },
+ { 0x04A9, 0x04A8 },
+ { 0x04AB, 0x04AA },
+ { 0x04AD, 0x04AC },
+ { 0x04AF, 0x04AE },
+ { 0x04B1, 0x04B0 },
+ { 0x04B3, 0x04B2 },
+ { 0x04B5, 0x04B4 },
+ { 0x04B7, 0x04B6 },
+ { 0x04B9, 0x04B8 },
+ { 0x04BB, 0x04BA },
+ { 0x04BD, 0x04BC },
+ { 0x04BF, 0x04BE },
+ { 0x04C2, 0x04C1 },
+ { 0x04C4, 0x04C3 },
+ { 0x04C6, 0x04C5 },
+ { 0x04C8, 0x04C7 },
+ { 0x04CA, 0x04C9 },
+ { 0x04CC, 0x04CB },
+ { 0x04CE, 0x04CD },
+ { 0x04D1, 0x04D0 },
+ { 0x04D3, 0x04D2 },
+ { 0x04D5, 0x04D4 },
+ { 0x04D7, 0x04D6 },
+ { 0x04D9, 0x04D8 },
+ { 0x04DB, 0x04DA },
+ { 0x04DD, 0x04DC },
+ { 0x04DF, 0x04DE },
+ { 0x04E1, 0x04E0 },
+ { 0x04E3, 0x04E2 },
+ { 0x04E5, 0x04E4 },
+ { 0x04E7, 0x04E6 },
+ { 0x04E9, 0x04E8 },
+ { 0x04EB, 0x04EA },
+ { 0x04ED, 0x04EC },
+ { 0x04EF, 0x04EE },
+ { 0x04F1, 0x04F0 },
+ { 0x04F3, 0x04F2 },
+ { 0x04F5, 0x04F4 },
+ { 0x04F7, 0x04F6 },
+ { 0x04F9, 0x04F8 },
+ { 0x0501, 0x0500 },
+ { 0x0503, 0x0502 },
+ { 0x0505, 0x0504 },
+ { 0x0507, 0x0506 },
+ { 0x0509, 0x0508 },
+ { 0x050B, 0x050A },
+ { 0x050D, 0x050C },
+ { 0x050F, 0x050E },
+ { 0x0561, 0x0531 },
+ { 0x0562, 0x0532 },
+ { 0x0563, 0x0533 },
+ { 0x0564, 0x0534 },
+ { 0x0565, 0x0535 },
+ { 0x0566, 0x0536 },
+ { 0x0567, 0x0537 },
+ { 0x0568, 0x0538 },
+ { 0x0569, 0x0539 },
+ { 0x056A, 0x053A },
+ { 0x056B, 0x053B },
+ { 0x056C, 0x053C },
+ { 0x056D, 0x053D },
+ { 0x056E, 0x053E },
+ { 0x056F, 0x053F },
+ { 0x0570, 0x0540 },
+ { 0x0571, 0x0541 },
+ { 0x0572, 0x0542 },
+ { 0x0573, 0x0543 },
+ { 0x0574, 0x0544 },
+ { 0x0575, 0x0545 },
+ { 0x0576, 0x0546 },
+ { 0x0577, 0x0547 },
+ { 0x0578, 0x0548 },
+ { 0x0579, 0x0549 },
+ { 0x057A, 0x054A },
+ { 0x057B, 0x054B },
+ { 0x057C, 0x054C },
+ { 0x057D, 0x054D },
+ { 0x057E, 0x054E },
+ { 0x057F, 0x054F },
+ { 0x0580, 0x0550 },
+ { 0x0581, 0x0551 },
+ { 0x0582, 0x0552 },
+ { 0x0583, 0x0553 },
+ { 0x0584, 0x0554 },
+ { 0x0585, 0x0555 },
+ { 0x0586, 0x0556 },
+ { 0x1E01, 0x1E00 },
+ { 0x1E03, 0x1E02 },
+ { 0x1E05, 0x1E04 },
+ { 0x1E07, 0x1E06 },
+ { 0x1E09, 0x1E08 },
+ { 0x1E0B, 0x1E0A },
+ { 0x1E0D, 0x1E0C },
+ { 0x1E0F, 0x1E0E },
+ { 0x1E11, 0x1E10 },
+ { 0x1E13, 0x1E12 },
+ { 0x1E15, 0x1E14 },
+ { 0x1E17, 0x1E16 },
+ { 0x1E19, 0x1E18 },
+ { 0x1E1B, 0x1E1A },
+ { 0x1E1D, 0x1E1C },
+ { 0x1E1F, 0x1E1E },
+ { 0x1E21, 0x1E20 },
+ { 0x1E23, 0x1E22 },
+ { 0x1E25, 0x1E24 },
+ { 0x1E27, 0x1E26 },
+ { 0x1E29, 0x1E28 },
+ { 0x1E2B, 0x1E2A },
+ { 0x1E2D, 0x1E2C },
+ { 0x1E2F, 0x1E2E },
+ { 0x1E31, 0x1E30 },
+ { 0x1E33, 0x1E32 },
+ { 0x1E35, 0x1E34 },
+ { 0x1E37, 0x1E36 },
+ { 0x1E39, 0x1E38 },
+ { 0x1E3B, 0x1E3A },
+ { 0x1E3D, 0x1E3C },
+ { 0x1E3F, 0x1E3E },
+ { 0x1E41, 0x1E40 },
+ { 0x1E43, 0x1E42 },
+ { 0x1E45, 0x1E44 },
+ { 0x1E47, 0x1E46 },
+ { 0x1E49, 0x1E48 },
+ { 0x1E4B, 0x1E4A },
+ { 0x1E4D, 0x1E4C },
+ { 0x1E4F, 0x1E4E },
+ { 0x1E51, 0x1E50 },
+ { 0x1E53, 0x1E52 },
+ { 0x1E55, 0x1E54 },
+ { 0x1E57, 0x1E56 },
+ { 0x1E59, 0x1E58 },
+ { 0x1E5B, 0x1E5A },
+ { 0x1E5D, 0x1E5C },
+ { 0x1E5F, 0x1E5E },
+ { 0x1E61, 0x1E60 },
+ { 0x1E63, 0x1E62 },
+ { 0x1E65, 0x1E64 },
+ { 0x1E67, 0x1E66 },
+ { 0x1E69, 0x1E68 },
+ { 0x1E6B, 0x1E6A },
+ { 0x1E6D, 0x1E6C },
+ { 0x1E6F, 0x1E6E },
+ { 0x1E71, 0x1E70 },
+ { 0x1E73, 0x1E72 },
+ { 0x1E75, 0x1E74 },
+ { 0x1E77, 0x1E76 },
+ { 0x1E79, 0x1E78 },
+ { 0x1E7B, 0x1E7A },
+ { 0x1E7D, 0x1E7C },
+ { 0x1E7F, 0x1E7E },
+ { 0x1E81, 0x1E80 },
+ { 0x1E83, 0x1E82 },
+ { 0x1E85, 0x1E84 },
+ { 0x1E87, 0x1E86 },
+ { 0x1E89, 0x1E88 },
+ { 0x1E8B, 0x1E8A },
+ { 0x1E8D, 0x1E8C },
+ { 0x1E8F, 0x1E8E },
+ { 0x1E91, 0x1E90 },
+ { 0x1E93, 0x1E92 },
+ { 0x1E95, 0x1E94 },
+ { 0x1E9B, 0x1E60 },
+ { 0x1EA1, 0x1EA0 },
+ { 0x1EA3, 0x1EA2 },
+ { 0x1EA5, 0x1EA4 },
+ { 0x1EA7, 0x1EA6 },
+ { 0x1EA9, 0x1EA8 },
+ { 0x1EAB, 0x1EAA },
+ { 0x1EAD, 0x1EAC },
+ { 0x1EAF, 0x1EAE },
+ { 0x1EB1, 0x1EB0 },
+ { 0x1EB3, 0x1EB2 },
+ { 0x1EB5, 0x1EB4 },
+ { 0x1EB7, 0x1EB6 },
+ { 0x1EB9, 0x1EB8 },
+ { 0x1EBB, 0x1EBA },
+ { 0x1EBD, 0x1EBC },
+ { 0x1EBF, 0x1EBE },
+ { 0x1EC1, 0x1EC0 },
+ { 0x1EC3, 0x1EC2 },
+ { 0x1EC5, 0x1EC4 },
+ { 0x1EC7, 0x1EC6 },
+ { 0x1EC9, 0x1EC8 },
+ { 0x1ECB, 0x1ECA },
+ { 0x1ECD, 0x1ECC },
+ { 0x1ECF, 0x1ECE },
+ { 0x1ED1, 0x1ED0 },
+ { 0x1ED3, 0x1ED2 },
+ { 0x1ED5, 0x1ED4 },
+ { 0x1ED7, 0x1ED6 },
+ { 0x1ED9, 0x1ED8 },
+ { 0x1EDB, 0x1EDA },
+ { 0x1EDD, 0x1EDC },
+ { 0x1EDF, 0x1EDE },
+ { 0x1EE1, 0x1EE0 },
+ { 0x1EE3, 0x1EE2 },
+ { 0x1EE5, 0x1EE4 },
+ { 0x1EE7, 0x1EE6 },
+ { 0x1EE9, 0x1EE8 },
+ { 0x1EEB, 0x1EEA },
+ { 0x1EED, 0x1EEC },
+ { 0x1EEF, 0x1EEE },
+ { 0x1EF1, 0x1EF0 },
+ { 0x1EF3, 0x1EF2 },
+ { 0x1EF5, 0x1EF4 },
+ { 0x1EF7, 0x1EF6 },
+ { 0x1EF9, 0x1EF8 },
+ { 0x1F00, 0x1F08 },
+ { 0x1F01, 0x1F09 },
+ { 0x1F02, 0x1F0A },
+ { 0x1F03, 0x1F0B },
+ { 0x1F04, 0x1F0C },
+ { 0x1F05, 0x1F0D },
+ { 0x1F06, 0x1F0E },
+ { 0x1F07, 0x1F0F },
+ { 0x1F10, 0x1F18 },
+ { 0x1F11, 0x1F19 },
+ { 0x1F12, 0x1F1A },
+ { 0x1F13, 0x1F1B },
+ { 0x1F14, 0x1F1C },
+ { 0x1F15, 0x1F1D },
+ { 0x1F20, 0x1F28 },
+ { 0x1F21, 0x1F29 },
+ { 0x1F22, 0x1F2A },
+ { 0x1F23, 0x1F2B },
+ { 0x1F24, 0x1F2C },
+ { 0x1F25, 0x1F2D },
+ { 0x1F26, 0x1F2E },
+ { 0x1F27, 0x1F2F },
+ { 0x1F30, 0x1F38 },
+ { 0x1F31, 0x1F39 },
+ { 0x1F32, 0x1F3A },
+ { 0x1F33, 0x1F3B },
+ { 0x1F34, 0x1F3C },
+ { 0x1F35, 0x1F3D },
+ { 0x1F36, 0x1F3E },
+ { 0x1F37, 0x1F3F },
+ { 0x1F40, 0x1F48 },
+ { 0x1F41, 0x1F49 },
+ { 0x1F42, 0x1F4A },
+ { 0x1F43, 0x1F4B },
+ { 0x1F44, 0x1F4C },
+ { 0x1F45, 0x1F4D },
+ { 0x1F51, 0x1F59 },
+ { 0x1F53, 0x1F5B },
+ { 0x1F55, 0x1F5D },
+ { 0x1F57, 0x1F5F },
+ { 0x1F60, 0x1F68 },
+ { 0x1F61, 0x1F69 },
+ { 0x1F62, 0x1F6A },
+ { 0x1F63, 0x1F6B },
+ { 0x1F64, 0x1F6C },
+ { 0x1F65, 0x1F6D },
+ { 0x1F66, 0x1F6E },
+ { 0x1F67, 0x1F6F },
+ { 0x1F70, 0x1FBA },
+ { 0x1F71, 0x1FBB },
+ { 0x1F72, 0x1FC8 },
+ { 0x1F73, 0x1FC9 },
+ { 0x1F74, 0x1FCA },
+ { 0x1F75, 0x1FCB },
+ { 0x1F76, 0x1FDA },
+ { 0x1F77, 0x1FDB },
+ { 0x1F78, 0x1FF8 },
+ { 0x1F79, 0x1FF9 },
+ { 0x1F7A, 0x1FEA },
+ { 0x1F7B, 0x1FEB },
+ { 0x1F7C, 0x1FFA },
+ { 0x1F7D, 0x1FFB },
+ { 0x1F80, 0x1F88 },
+ { 0x1F81, 0x1F89 },
+ { 0x1F82, 0x1F8A },
+ { 0x1F83, 0x1F8B },
+ { 0x1F84, 0x1F8C },
+ { 0x1F85, 0x1F8D },
+ { 0x1F86, 0x1F8E },
+ { 0x1F87, 0x1F8F },
+ { 0x1F90, 0x1F98 },
+ { 0x1F91, 0x1F99 },
+ { 0x1F92, 0x1F9A },
+ { 0x1F93, 0x1F9B },
+ { 0x1F94, 0x1F9C },
+ { 0x1F95, 0x1F9D },
+ { 0x1F96, 0x1F9E },
+ { 0x1F97, 0x1F9F },
+ { 0x1FA0, 0x1FA8 },
+ { 0x1FA1, 0x1FA9 },
+ { 0x1FA2, 0x1FAA },
+ { 0x1FA3, 0x1FAB },
+ { 0x1FA4, 0x1FAC },
+ { 0x1FA5, 0x1FAD },
+ { 0x1FA6, 0x1FAE },
+ { 0x1FA7, 0x1FAF },
+ { 0x1FB0, 0x1FB8 },
+ { 0x1FB1, 0x1FB9 },
+ { 0x1FB3, 0x1FBC },
+ { 0x1FBE, 0x0399 },
+ { 0x1FC3, 0x1FCC },
+ { 0x1FD0, 0x1FD8 },
+ { 0x1FD1, 0x1FD9 },
+ { 0x1FE0, 0x1FE8 },
+ { 0x1FE1, 0x1FE9 },
+ { 0x1FE5, 0x1FEC },
+ { 0x1FF3, 0x1FFC },
+ { 0x2170, 0x2160 },
+ { 0x2171, 0x2161 },
+ { 0x2172, 0x2162 },
+ { 0x2173, 0x2163 },
+ { 0x2174, 0x2164 },
+ { 0x2175, 0x2165 },
+ { 0x2176, 0x2166 },
+ { 0x2177, 0x2167 },
+ { 0x2178, 0x2168 },
+ { 0x2179, 0x2169 },
+ { 0x217A, 0x216A },
+ { 0x217B, 0x216B },
+ { 0x217C, 0x216C },
+ { 0x217D, 0x216D },
+ { 0x217E, 0x216E },
+ { 0x217F, 0x216F },
+ { 0x24D0, 0x24B6 },
+ { 0x24D1, 0x24B7 },
+ { 0x24D2, 0x24B8 },
+ { 0x24D3, 0x24B9 },
+ { 0x24D4, 0x24BA },
+ { 0x24D5, 0x24BB },
+ { 0x24D6, 0x24BC },
+ { 0x24D7, 0x24BD },
+ { 0x24D8, 0x24BE },
+ { 0x24D9, 0x24BF },
+ { 0x24DA, 0x24C0 },
+ { 0x24DB, 0x24C1 },
+ { 0x24DC, 0x24C2 },
+ { 0x24DD, 0x24C3 },
+ { 0x24DE, 0x24C4 },
+ { 0x24DF, 0x24C5 },
+ { 0x24E0, 0x24C6 },
+ { 0x24E1, 0x24C7 },
+ { 0x24E2, 0x24C8 },
+ { 0x24E3, 0x24C9 },
+ { 0x24E4, 0x24CA },
+ { 0x24E5, 0x24CB },
+ { 0x24E6, 0x24CC },
+ { 0x24E7, 0x24CD },
+ { 0x24E8, 0x24CE },
+ { 0x24E9, 0x24CF },
+ { 0x2C30, 0x2C00 },
+ { 0x2C31, 0x2C01 },
+ { 0x2C32, 0x2C02 },
+ { 0x2C33, 0x2C03 },
+ { 0x2C34, 0x2C04 },
+ { 0x2C35, 0x2C05 },
+ { 0x2C36, 0x2C06 },
+ { 0x2C37, 0x2C07 },
+ { 0x2C38, 0x2C08 },
+ { 0x2C39, 0x2C09 },
+ { 0x2C3A, 0x2C0A },
+ { 0x2C3B, 0x2C0B },
+ { 0x2C3C, 0x2C0C },
+ { 0x2C3D, 0x2C0D },
+ { 0x2C3E, 0x2C0E },
+ { 0x2C3F, 0x2C0F },
+ { 0x2C40, 0x2C10 },
+ { 0x2C41, 0x2C11 },
+ { 0x2C42, 0x2C12 },
+ { 0x2C43, 0x2C13 },
+ { 0x2C44, 0x2C14 },
+ { 0x2C45, 0x2C15 },
+ { 0x2C46, 0x2C16 },
+ { 0x2C47, 0x2C17 },
+ { 0x2C48, 0x2C18 },
+ { 0x2C49, 0x2C19 },
+ { 0x2C4A, 0x2C1A },
+ { 0x2C4B, 0x2C1B },
+ { 0x2C4C, 0x2C1C },
+ { 0x2C4D, 0x2C1D },
+ { 0x2C4E, 0x2C1E },
+ { 0x2C4F, 0x2C1F },
+ { 0x2C50, 0x2C20 },
+ { 0x2C51, 0x2C21 },
+ { 0x2C52, 0x2C22 },
+ { 0x2C53, 0x2C23 },
+ { 0x2C54, 0x2C24 },
+ { 0x2C55, 0x2C25 },
+ { 0x2C56, 0x2C26 },
+ { 0x2C57, 0x2C27 },
+ { 0x2C58, 0x2C28 },
+ { 0x2C59, 0x2C29 },
+ { 0x2C5A, 0x2C2A },
+ { 0x2C5B, 0x2C2B },
+ { 0x2C5C, 0x2C2C },
+ { 0x2C5D, 0x2C2D },
+ { 0x2C5E, 0x2C2E },
+ { 0x2C81, 0x2C80 },
+ { 0x2C83, 0x2C82 },
+ { 0x2C85, 0x2C84 },
+ { 0x2C87, 0x2C86 },
+ { 0x2C89, 0x2C88 },
+ { 0x2C8B, 0x2C8A },
+ { 0x2C8D, 0x2C8C },
+ { 0x2C8F, 0x2C8E },
+ { 0x2C91, 0x2C90 },
+ { 0x2C93, 0x2C92 },
+ { 0x2C95, 0x2C94 },
+ { 0x2C97, 0x2C96 },
+ { 0x2C99, 0x2C98 },
+ { 0x2C9B, 0x2C9A },
+ { 0x2C9D, 0x2C9C },
+ { 0x2C9F, 0x2C9E },
+ { 0x2CA1, 0x2CA0 },
+ { 0x2CA3, 0x2CA2 },
+ { 0x2CA5, 0x2CA4 },
+ { 0x2CA7, 0x2CA6 },
+ { 0x2CA9, 0x2CA8 },
+ { 0x2CAB, 0x2CAA },
+ { 0x2CAD, 0x2CAC },
+ { 0x2CAF, 0x2CAE },
+ { 0x2CB1, 0x2CB0 },
+ { 0x2CB3, 0x2CB2 },
+ { 0x2CB5, 0x2CB4 },
+ { 0x2CB7, 0x2CB6 },
+ { 0x2CB9, 0x2CB8 },
+ { 0x2CBB, 0x2CBA },
+ { 0x2CBD, 0x2CBC },
+ { 0x2CBF, 0x2CBE },
+ { 0x2CC1, 0x2CC0 },
+ { 0x2CC3, 0x2CC2 },
+ { 0x2CC5, 0x2CC4 },
+ { 0x2CC7, 0x2CC6 },
+ { 0x2CC9, 0x2CC8 },
+ { 0x2CCB, 0x2CCA },
+ { 0x2CCD, 0x2CCC },
+ { 0x2CCF, 0x2CCE },
+ { 0x2CD1, 0x2CD0 },
+ { 0x2CD3, 0x2CD2 },
+ { 0x2CD5, 0x2CD4 },
+ { 0x2CD7, 0x2CD6 },
+ { 0x2CD9, 0x2CD8 },
+ { 0x2CDB, 0x2CDA },
+ { 0x2CDD, 0x2CDC },
+ { 0x2CDF, 0x2CDE },
+ { 0x2CE1, 0x2CE0 },
+ { 0x2CE3, 0x2CE2 },
+ { 0x2D00, 0x10A0 },
+ { 0x2D01, 0x10A1 },
+ { 0x2D02, 0x10A2 },
+ { 0x2D03, 0x10A3 },
+ { 0x2D04, 0x10A4 },
+ { 0x2D05, 0x10A5 },
+ { 0x2D06, 0x10A6 },
+ { 0x2D07, 0x10A7 },
+ { 0x2D08, 0x10A8 },
+ { 0x2D09, 0x10A9 },
+ { 0x2D0A, 0x10AA },
+ { 0x2D0B, 0x10AB },
+ { 0x2D0C, 0x10AC },
+ { 0x2D0D, 0x10AD },
+ { 0x2D0E, 0x10AE },
+ { 0x2D0F, 0x10AF },
+ { 0x2D10, 0x10B0 },
+ { 0x2D11, 0x10B1 },
+ { 0x2D12, 0x10B2 },
+ { 0x2D13, 0x10B3 },
+ { 0x2D14, 0x10B4 },
+ { 0x2D15, 0x10B5 },
+ { 0x2D16, 0x10B6 },
+ { 0x2D17, 0x10B7 },
+ { 0x2D18, 0x10B8 },
+ { 0x2D19, 0x10B9 },
+ { 0x2D1A, 0x10BA },
+ { 0x2D1B, 0x10BB },
+ { 0x2D1C, 0x10BC },
+ { 0x2D1D, 0x10BD },
+ { 0x2D1E, 0x10BE },
+ { 0x2D1F, 0x10BF },
+ { 0x2D20, 0x10C0 },
+ { 0x2D21, 0x10C1 },
+ { 0x2D22, 0x10C2 },
+ { 0x2D23, 0x10C3 },
+ { 0x2D24, 0x10C4 },
+ { 0x2D25, 0x10C5 },
+ { 0xFF41, 0xFF21 },
+ { 0xFF42, 0xFF22 },
+ { 0xFF43, 0xFF23 },
+ { 0xFF44, 0xFF24 },
+ { 0xFF45, 0xFF25 },
+ { 0xFF46, 0xFF26 },
+ { 0xFF47, 0xFF27 },
+ { 0xFF48, 0xFF28 },
+ { 0xFF49, 0xFF29 },
+ { 0xFF4A, 0xFF2A },
+ { 0xFF4B, 0xFF2B },
+ { 0xFF4C, 0xFF2C },
+ { 0xFF4D, 0xFF2D },
+ { 0xFF4E, 0xFF2E },
+ { 0xFF4F, 0xFF2F },
+ { 0xFF50, 0xFF30 },
+ { 0xFF51, 0xFF31 },
+ { 0xFF52, 0xFF32 },
+ { 0xFF53, 0xFF33 },
+ { 0xFF54, 0xFF34 },
+ { 0xFF55, 0xFF35 },
+ { 0xFF56, 0xFF36 },
+ { 0xFF57, 0xFF37 },
+ { 0xFF58, 0xFF38 },
+ { 0xFF59, 0xFF39 },
+ { 0xFF5A, 0xFF3A },
+};
+
+#define N_ucs_tolower_map 853
+
+static wc_map ucs_tolower_map[ N_ucs_tolower_map ] = {
+ { 0x0041, 0x0061 },
+ { 0x0042, 0x0062 },
+ { 0x0043, 0x0063 },
+ { 0x0044, 0x0064 },
+ { 0x0045, 0x0065 },
+ { 0x0046, 0x0066 },
+ { 0x0047, 0x0067 },
+ { 0x0048, 0x0068 },
+ { 0x0049, 0x0069 },
+ { 0x004A, 0x006A },
+ { 0x004B, 0x006B },
+ { 0x004C, 0x006C },
+ { 0x004D, 0x006D },
+ { 0x004E, 0x006E },
+ { 0x004F, 0x006F },
+ { 0x0050, 0x0070 },
+ { 0x0051, 0x0071 },
+ { 0x0052, 0x0072 },
+ { 0x0053, 0x0073 },
+ { 0x0054, 0x0074 },
+ { 0x0055, 0x0075 },
+ { 0x0056, 0x0076 },
+ { 0x0057, 0x0077 },
+ { 0x0058, 0x0078 },
+ { 0x0059, 0x0079 },
+ { 0x005A, 0x007A },
+ { 0x00C0, 0x00E0 },
+ { 0x00C1, 0x00E1 },
+ { 0x00C2, 0x00E2 },
+ { 0x00C3, 0x00E3 },
+ { 0x00C4, 0x00E4 },
+ { 0x00C5, 0x00E5 },
+ { 0x00C6, 0x00E6 },
+ { 0x00C7, 0x00E7 },
+ { 0x00C8, 0x00E8 },
+ { 0x00C9, 0x00E9 },
+ { 0x00CA, 0x00EA },
+ { 0x00CB, 0x00EB },
+ { 0x00CC, 0x00EC },
+ { 0x00CD, 0x00ED },
+ { 0x00CE, 0x00EE },
+ { 0x00CF, 0x00EF },
+ { 0x00D0, 0x00F0 },
+ { 0x00D1, 0x00F1 },
+ { 0x00D2, 0x00F2 },
+ { 0x00D3, 0x00F3 },
+ { 0x00D4, 0x00F4 },
+ { 0x00D5, 0x00F5 },
+ { 0x00D6, 0x00F6 },
+ { 0x00D8, 0x00F8 },
+ { 0x00D9, 0x00F9 },
+ { 0x00DA, 0x00FA },
+ { 0x00DB, 0x00FB },
+ { 0x00DC, 0x00FC },
+ { 0x00DD, 0x00FD },
+ { 0x00DE, 0x00FE },
+ { 0x0100, 0x0101 },
+ { 0x0102, 0x0103 },
+ { 0x0104, 0x0105 },
+ { 0x0106, 0x0107 },
+ { 0x0108, 0x0109 },
+ { 0x010A, 0x010B },
+ { 0x010C, 0x010D },
+ { 0x010E, 0x010F },
+ { 0x0110, 0x0111 },
+ { 0x0112, 0x0113 },
+ { 0x0114, 0x0115 },
+ { 0x0116, 0x0117 },
+ { 0x0118, 0x0119 },
+ { 0x011A, 0x011B },
+ { 0x011C, 0x011D },
+ { 0x011E, 0x011F },
+ { 0x0120, 0x0121 },
+ { 0x0122, 0x0123 },
+ { 0x0124, 0x0125 },
+ { 0x0126, 0x0127 },
+ { 0x0128, 0x0129 },
+ { 0x012A, 0x012B },
+ { 0x012C, 0x012D },
+ { 0x012E, 0x012F },
+ { 0x0130, 0x0069 },
+ { 0x0132, 0x0133 },
+ { 0x0134, 0x0135 },
+ { 0x0136, 0x0137 },
+ { 0x0139, 0x013A },
+ { 0x013B, 0x013C },
+ { 0x013D, 0x013E },
+ { 0x013F, 0x0140 },
+ { 0x0141, 0x0142 },
+ { 0x0143, 0x0144 },
+ { 0x0145, 0x0146 },
+ { 0x0147, 0x0148 },
+ { 0x014A, 0x014B },
+ { 0x014C, 0x014D },
+ { 0x014E, 0x014F },
+ { 0x0150, 0x0151 },
+ { 0x0152, 0x0153 },
+ { 0x0154, 0x0155 },
+ { 0x0156, 0x0157 },
+ { 0x0158, 0x0159 },
+ { 0x015A, 0x015B },
+ { 0x015C, 0x015D },
+ { 0x015E, 0x015F },
+ { 0x0160, 0x0161 },
+ { 0x0162, 0x0163 },
+ { 0x0164, 0x0165 },
+ { 0x0166, 0x0167 },
+ { 0x0168, 0x0169 },
+ { 0x016A, 0x016B },
+ { 0x016C, 0x016D },
+ { 0x016E, 0x016F },
+ { 0x0170, 0x0171 },
+ { 0x0172, 0x0173 },
+ { 0x0174, 0x0175 },
+ { 0x0176, 0x0177 },
+ { 0x0178, 0x00FF },
+ { 0x0179, 0x017A },
+ { 0x017B, 0x017C },
+ { 0x017D, 0x017E },
+ { 0x0181, 0x0253 },
+ { 0x0182, 0x0183 },
+ { 0x0184, 0x0185 },
+ { 0x0186, 0x0254 },
+ { 0x0187, 0x0188 },
+ { 0x0189, 0x0256 },
+ { 0x018A, 0x0257 },
+ { 0x018B, 0x018C },
+ { 0x018E, 0x01DD },
+ { 0x018F, 0x0259 },
+ { 0x0190, 0x025B },
+ { 0x0191, 0x0192 },
+ { 0x0193, 0x0260 },
+ { 0x0194, 0x0263 },
+ { 0x0196, 0x0269 },
+ { 0x0197, 0x0268 },
+ { 0x0198, 0x0199 },
+ { 0x019C, 0x026F },
+ { 0x019D, 0x0272 },
+ { 0x019F, 0x0275 },
+ { 0x01A0, 0x01A1 },
+ { 0x01A2, 0x01A3 },
+ { 0x01A4, 0x01A5 },
+ { 0x01A6, 0x0280 },
+ { 0x01A7, 0x01A8 },
+ { 0x01A9, 0x0283 },
+ { 0x01AC, 0x01AD },
+ { 0x01AE, 0x0288 },
+ { 0x01AF, 0x01B0 },
+ { 0x01B1, 0x028A },
+ { 0x01B2, 0x028B },
+ { 0x01B3, 0x01B4 },
+ { 0x01B5, 0x01B6 },
+ { 0x01B7, 0x0292 },
+ { 0x01B8, 0x01B9 },
+ { 0x01BC, 0x01BD },
+ { 0x01C4, 0x01C6 },
+ { 0x01C5, 0x01C6 },
+ { 0x01C7, 0x01C9 },
+ { 0x01C8, 0x01C9 },
+ { 0x01CA, 0x01CC },
+ { 0x01CB, 0x01CC },
+ { 0x01CD, 0x01CE },
+ { 0x01CF, 0x01D0 },
+ { 0x01D1, 0x01D2 },
+ { 0x01D3, 0x01D4 },
+ { 0x01D5, 0x01D6 },
+ { 0x01D7, 0x01D8 },
+ { 0x01D9, 0x01DA },
+ { 0x01DB, 0x01DC },
+ { 0x01DE, 0x01DF },
+ { 0x01E0, 0x01E1 },
+ { 0x01E2, 0x01E3 },
+ { 0x01E4, 0x01E5 },
+ { 0x01E6, 0x01E7 },
+ { 0x01E8, 0x01E9 },
+ { 0x01EA, 0x01EB },
+ { 0x01EC, 0x01ED },
+ { 0x01EE, 0x01EF },
+ { 0x01F1, 0x01F3 },
+ { 0x01F2, 0x01F3 },
+ { 0x01F4, 0x01F5 },
+ { 0x01F6, 0x0195 },
+ { 0x01F7, 0x01BF },
+ { 0x01F8, 0x01F9 },
+ { 0x01FA, 0x01FB },
+ { 0x01FC, 0x01FD },
+ { 0x01FE, 0x01FF },
+ { 0x0200, 0x0201 },
+ { 0x0202, 0x0203 },
+ { 0x0204, 0x0205 },
+ { 0x0206, 0x0207 },
+ { 0x0208, 0x0209 },
+ { 0x020A, 0x020B },
+ { 0x020C, 0x020D },
+ { 0x020E, 0x020F },
+ { 0x0210, 0x0211 },
+ { 0x0212, 0x0213 },
+ { 0x0214, 0x0215 },
+ { 0x0216, 0x0217 },
+ { 0x0218, 0x0219 },
+ { 0x021A, 0x021B },
+ { 0x021C, 0x021D },
+ { 0x021E, 0x021F },
+ { 0x0220, 0x019E },
+ { 0x0222, 0x0223 },
+ { 0x0224, 0x0225 },
+ { 0x0226, 0x0227 },
+ { 0x0228, 0x0229 },
+ { 0x022A, 0x022B },
+ { 0x022C, 0x022D },
+ { 0x022E, 0x022F },
+ { 0x0230, 0x0231 },
+ { 0x0232, 0x0233 },
+ { 0x023B, 0x023C },
+ { 0x023D, 0x019A },
+ { 0x0241, 0x0294 },
+ { 0x0386, 0x03AC },
+ { 0x0388, 0x03AD },
+ { 0x0389, 0x03AE },
+ { 0x038A, 0x03AF },
+ { 0x038C, 0x03CC },
+ { 0x038E, 0x03CD },
+ { 0x038F, 0x03CE },
+ { 0x0391, 0x03B1 },
+ { 0x0392, 0x03B2 },
+ { 0x0393, 0x03B3 },
+ { 0x0394, 0x03B4 },
+ { 0x0395, 0x03B5 },
+ { 0x0396, 0x03B6 },
+ { 0x0397, 0x03B7 },
+ { 0x0398, 0x03B8 },
+ { 0x0399, 0x03B9 },
+ { 0x039A, 0x03BA },
+ { 0x039B, 0x03BB },
+ { 0x039C, 0x03BC },
+ { 0x039D, 0x03BD },
+ { 0x039E, 0x03BE },
+ { 0x039F, 0x03BF },
+ { 0x03A0, 0x03C0 },
+ { 0x03A1, 0x03C1 },
+ { 0x03A3, 0x03C3 },
+ { 0x03A4, 0x03C4 },
+ { 0x03A5, 0x03C5 },
+ { 0x03A6, 0x03C6 },
+ { 0x03A7, 0x03C7 },
+ { 0x03A8, 0x03C8 },
+ { 0x03A9, 0x03C9 },
+ { 0x03AA, 0x03CA },
+ { 0x03AB, 0x03CB },
+ { 0x03D8, 0x03D9 },
+ { 0x03DA, 0x03DB },
+ { 0x03DC, 0x03DD },
+ { 0x03DE, 0x03DF },
+ { 0x03E0, 0x03E1 },
+ { 0x03E2, 0x03E3 },
+ { 0x03E4, 0x03E5 },
+ { 0x03E6, 0x03E7 },
+ { 0x03E8, 0x03E9 },
+ { 0x03EA, 0x03EB },
+ { 0x03EC, 0x03ED },
+ { 0x03EE, 0x03EF },
+ { 0x03F4, 0x03B8 },
+ { 0x03F7, 0x03F8 },
+ { 0x03F9, 0x03F2 },
+ { 0x03FA, 0x03FB },
+ { 0x0400, 0x0450 },
+ { 0x0401, 0x0451 },
+ { 0x0402, 0x0452 },
+ { 0x0403, 0x0453 },
+ { 0x0404, 0x0454 },
+ { 0x0405, 0x0455 },
+ { 0x0406, 0x0456 },
+ { 0x0407, 0x0457 },
+ { 0x0408, 0x0458 },
+ { 0x0409, 0x0459 },
+ { 0x040A, 0x045A },
+ { 0x040B, 0x045B },
+ { 0x040C, 0x045C },
+ { 0x040D, 0x045D },
+ { 0x040E, 0x045E },
+ { 0x040F, 0x045F },
+ { 0x0410, 0x0430 },
+ { 0x0411, 0x0431 },
+ { 0x0412, 0x0432 },
+ { 0x0413, 0x0433 },
+ { 0x0414, 0x0434 },
+ { 0x0415, 0x0435 },
+ { 0x0416, 0x0436 },
+ { 0x0417, 0x0437 },
+ { 0x0418, 0x0438 },
+ { 0x0419, 0x0439 },
+ { 0x041A, 0x043A },
+ { 0x041B, 0x043B },
+ { 0x041C, 0x043C },
+ { 0x041D, 0x043D },
+ { 0x041E, 0x043E },
+ { 0x041F, 0x043F },
+ { 0x0420, 0x0440 },
+ { 0x0421, 0x0441 },
+ { 0x0422, 0x0442 },
+ { 0x0423, 0x0443 },
+ { 0x0424, 0x0444 },
+ { 0x0425, 0x0445 },
+ { 0x0426, 0x0446 },
+ { 0x0427, 0x0447 },
+ { 0x0428, 0x0448 },
+ { 0x0429, 0x0449 },
+ { 0x042A, 0x044A },
+ { 0x042B, 0x044B },
+ { 0x042C, 0x044C },
+ { 0x042D, 0x044D },
+ { 0x042E, 0x044E },
+ { 0x042F, 0x044F },
+ { 0x0460, 0x0461 },
+ { 0x0462, 0x0463 },
+ { 0x0464, 0x0465 },
+ { 0x0466, 0x0467 },
+ { 0x0468, 0x0469 },
+ { 0x046A, 0x046B },
+ { 0x046C, 0x046D },
+ { 0x046E, 0x046F },
+ { 0x0470, 0x0471 },
+ { 0x0472, 0x0473 },
+ { 0x0474, 0x0475 },
+ { 0x0476, 0x0477 },
+ { 0x0478, 0x0479 },
+ { 0x047A, 0x047B },
+ { 0x047C, 0x047D },
+ { 0x047E, 0x047F },
+ { 0x0480, 0x0481 },
+ { 0x048A, 0x048B },
+ { 0x048C, 0x048D },
+ { 0x048E, 0x048F },
+ { 0x0490, 0x0491 },
+ { 0x0492, 0x0493 },
+ { 0x0494, 0x0495 },
+ { 0x0496, 0x0497 },
+ { 0x0498, 0x0499 },
+ { 0x049A, 0x049B },
+ { 0x049C, 0x049D },
+ { 0x049E, 0x049F },
+ { 0x04A0, 0x04A1 },
+ { 0x04A2, 0x04A3 },
+ { 0x04A4, 0x04A5 },
+ { 0x04A6, 0x04A7 },
+ { 0x04A8, 0x04A9 },
+ { 0x04AA, 0x04AB },
+ { 0x04AC, 0x04AD },
+ { 0x04AE, 0x04AF },
+ { 0x04B0, 0x04B1 },
+ { 0x04B2, 0x04B3 },
+ { 0x04B4, 0x04B5 },
+ { 0x04B6, 0x04B7 },
+ { 0x04B8, 0x04B9 },
+ { 0x04BA, 0x04BB },
+ { 0x04BC, 0x04BD },
+ { 0x04BE, 0x04BF },
+ { 0x04C1, 0x04C2 },
+ { 0x04C3, 0x04C4 },
+ { 0x04C5, 0x04C6 },
+ { 0x04C7, 0x04C8 },
+ { 0x04C9, 0x04CA },
+ { 0x04CB, 0x04CC },
+ { 0x04CD, 0x04CE },
+ { 0x04D0, 0x04D1 },
+ { 0x04D2, 0x04D3 },
+ { 0x04D4, 0x04D5 },
+ { 0x04D6, 0x04D7 },
+ { 0x04D8, 0x04D9 },
+ { 0x04DA, 0x04DB },
+ { 0x04DC, 0x04DD },
+ { 0x04DE, 0x04DF },
+ { 0x04E0, 0x04E1 },
+ { 0x04E2, 0x04E3 },
+ { 0x04E4, 0x04E5 },
+ { 0x04E6, 0x04E7 },
+ { 0x04E8, 0x04E9 },
+ { 0x04EA, 0x04EB },
+ { 0x04EC, 0x04ED },
+ { 0x04EE, 0x04EF },
+ { 0x04F0, 0x04F1 },
+ { 0x04F2, 0x04F3 },
+ { 0x04F4, 0x04F5 },
+ { 0x04F6, 0x04F7 },
+ { 0x04F8, 0x04F9 },
+ { 0x0500, 0x0501 },
+ { 0x0502, 0x0503 },
+ { 0x0504, 0x0505 },
+ { 0x0506, 0x0507 },
+ { 0x0508, 0x0509 },
+ { 0x050A, 0x050B },
+ { 0x050C, 0x050D },
+ { 0x050E, 0x050F },
+ { 0x0531, 0x0561 },
+ { 0x0532, 0x0562 },
+ { 0x0533, 0x0563 },
+ { 0x0534, 0x0564 },
+ { 0x0535, 0x0565 },
+ { 0x0536, 0x0566 },
+ { 0x0537, 0x0567 },
+ { 0x0538, 0x0568 },
+ { 0x0539, 0x0569 },
+ { 0x053A, 0x056A },
+ { 0x053B, 0x056B },
+ { 0x053C, 0x056C },
+ { 0x053D, 0x056D },
+ { 0x053E, 0x056E },
+ { 0x053F, 0x056F },
+ { 0x0540, 0x0570 },
+ { 0x0541, 0x0571 },
+ { 0x0542, 0x0572 },
+ { 0x0543, 0x0573 },
+ { 0x0544, 0x0574 },
+ { 0x0545, 0x0575 },
+ { 0x0546, 0x0576 },
+ { 0x0547, 0x0577 },
+ { 0x0548, 0x0578 },
+ { 0x0549, 0x0579 },
+ { 0x054A, 0x057A },
+ { 0x054B, 0x057B },
+ { 0x054C, 0x057C },
+ { 0x054D, 0x057D },
+ { 0x054E, 0x057E },
+ { 0x054F, 0x057F },
+ { 0x0550, 0x0580 },
+ { 0x0551, 0x0581 },
+ { 0x0552, 0x0582 },
+ { 0x0553, 0x0583 },
+ { 0x0554, 0x0584 },
+ { 0x0555, 0x0585 },
+ { 0x0556, 0x0586 },
+ { 0x10A0, 0x2D00 },
+ { 0x10A1, 0x2D01 },
+ { 0x10A2, 0x2D02 },
+ { 0x10A3, 0x2D03 },
+ { 0x10A4, 0x2D04 },
+ { 0x10A5, 0x2D05 },
+ { 0x10A6, 0x2D06 },
+ { 0x10A7, 0x2D07 },
+ { 0x10A8, 0x2D08 },
+ { 0x10A9, 0x2D09 },
+ { 0x10AA, 0x2D0A },
+ { 0x10AB, 0x2D0B },
+ { 0x10AC, 0x2D0C },
+ { 0x10AD, 0x2D0D },
+ { 0x10AE, 0x2D0E },
+ { 0x10AF, 0x2D0F },
+ { 0x10B0, 0x2D10 },
+ { 0x10B1, 0x2D11 },
+ { 0x10B2, 0x2D12 },
+ { 0x10B3, 0x2D13 },
+ { 0x10B4, 0x2D14 },
+ { 0x10B5, 0x2D15 },
+ { 0x10B6, 0x2D16 },
+ { 0x10B7, 0x2D17 },
+ { 0x10B8, 0x2D18 },
+ { 0x10B9, 0x2D19 },
+ { 0x10BA, 0x2D1A },
+ { 0x10BB, 0x2D1B },
+ { 0x10BC, 0x2D1C },
+ { 0x10BD, 0x2D1D },
+ { 0x10BE, 0x2D1E },
+ { 0x10BF, 0x2D1F },
+ { 0x10C0, 0x2D20 },
+ { 0x10C1, 0x2D21 },
+ { 0x10C2, 0x2D22 },
+ { 0x10C3, 0x2D23 },
+ { 0x10C4, 0x2D24 },
+ { 0x10C5, 0x2D25 },
+ { 0x1E00, 0x1E01 },
+ { 0x1E02, 0x1E03 },
+ { 0x1E04, 0x1E05 },
+ { 0x1E06, 0x1E07 },
+ { 0x1E08, 0x1E09 },
+ { 0x1E0A, 0x1E0B },
+ { 0x1E0C, 0x1E0D },
+ { 0x1E0E, 0x1E0F },
+ { 0x1E10, 0x1E11 },
+ { 0x1E12, 0x1E13 },
+ { 0x1E14, 0x1E15 },
+ { 0x1E16, 0x1E17 },
+ { 0x1E18, 0x1E19 },
+ { 0x1E1A, 0x1E1B },
+ { 0x1E1C, 0x1E1D },
+ { 0x1E1E, 0x1E1F },
+ { 0x1E20, 0x1E21 },
+ { 0x1E22, 0x1E23 },
+ { 0x1E24, 0x1E25 },
+ { 0x1E26, 0x1E27 },
+ { 0x1E28, 0x1E29 },
+ { 0x1E2A, 0x1E2B },
+ { 0x1E2C, 0x1E2D },
+ { 0x1E2E, 0x1E2F },
+ { 0x1E30, 0x1E31 },
+ { 0x1E32, 0x1E33 },
+ { 0x1E34, 0x1E35 },
+ { 0x1E36, 0x1E37 },
+ { 0x1E38, 0x1E39 },
+ { 0x1E3A, 0x1E3B },
+ { 0x1E3C, 0x1E3D },
+ { 0x1E3E, 0x1E3F },
+ { 0x1E40, 0x1E41 },
+ { 0x1E42, 0x1E43 },
+ { 0x1E44, 0x1E45 },
+ { 0x1E46, 0x1E47 },
+ { 0x1E48, 0x1E49 },
+ { 0x1E4A, 0x1E4B },
+ { 0x1E4C, 0x1E4D },
+ { 0x1E4E, 0x1E4F },
+ { 0x1E50, 0x1E51 },
+ { 0x1E52, 0x1E53 },
+ { 0x1E54, 0x1E55 },
+ { 0x1E56, 0x1E57 },
+ { 0x1E58, 0x1E59 },
+ { 0x1E5A, 0x1E5B },
+ { 0x1E5C, 0x1E5D },
+ { 0x1E5E, 0x1E5F },
+ { 0x1E60, 0x1E61 },
+ { 0x1E62, 0x1E63 },
+ { 0x1E64, 0x1E65 },
+ { 0x1E66, 0x1E67 },
+ { 0x1E68, 0x1E69 },
+ { 0x1E6A, 0x1E6B },
+ { 0x1E6C, 0x1E6D },
+ { 0x1E6E, 0x1E6F },
+ { 0x1E70, 0x1E71 },
+ { 0x1E72, 0x1E73 },
+ { 0x1E74, 0x1E75 },
+ { 0x1E76, 0x1E77 },
+ { 0x1E78, 0x1E79 },
+ { 0x1E7A, 0x1E7B },
+ { 0x1E7C, 0x1E7D },
+ { 0x1E7E, 0x1E7F },
+ { 0x1E80, 0x1E81 },
+ { 0x1E82, 0x1E83 },
+ { 0x1E84, 0x1E85 },
+ { 0x1E86, 0x1E87 },
+ { 0x1E88, 0x1E89 },
+ { 0x1E8A, 0x1E8B },
+ { 0x1E8C, 0x1E8D },
+ { 0x1E8E, 0x1E8F },
+ { 0x1E90, 0x1E91 },
+ { 0x1E92, 0x1E93 },
+ { 0x1E94, 0x1E95 },
+ { 0x1EA0, 0x1EA1 },
+ { 0x1EA2, 0x1EA3 },
+ { 0x1EA4, 0x1EA5 },
+ { 0x1EA6, 0x1EA7 },
+ { 0x1EA8, 0x1EA9 },
+ { 0x1EAA, 0x1EAB },
+ { 0x1EAC, 0x1EAD },
+ { 0x1EAE, 0x1EAF },
+ { 0x1EB0, 0x1EB1 },
+ { 0x1EB2, 0x1EB3 },
+ { 0x1EB4, 0x1EB5 },
+ { 0x1EB6, 0x1EB7 },
+ { 0x1EB8, 0x1EB9 },
+ { 0x1EBA, 0x1EBB },
+ { 0x1EBC, 0x1EBD },
+ { 0x1EBE, 0x1EBF },
+ { 0x1EC0, 0x1EC1 },
+ { 0x1EC2, 0x1EC3 },
+ { 0x1EC4, 0x1EC5 },
+ { 0x1EC6, 0x1EC7 },
+ { 0x1EC8, 0x1EC9 },
+ { 0x1ECA, 0x1ECB },
+ { 0x1ECC, 0x1ECD },
+ { 0x1ECE, 0x1ECF },
+ { 0x1ED0, 0x1ED1 },
+ { 0x1ED2, 0x1ED3 },
+ { 0x1ED4, 0x1ED5 },
+ { 0x1ED6, 0x1ED7 },
+ { 0x1ED8, 0x1ED9 },
+ { 0x1EDA, 0x1EDB },
+ { 0x1EDC, 0x1EDD },
+ { 0x1EDE, 0x1EDF },
+ { 0x1EE0, 0x1EE1 },
+ { 0x1EE2, 0x1EE3 },
+ { 0x1EE4, 0x1EE5 },
+ { 0x1EE6, 0x1EE7 },
+ { 0x1EE8, 0x1EE9 },
+ { 0x1EEA, 0x1EEB },
+ { 0x1EEC, 0x1EED },
+ { 0x1EEE, 0x1EEF },
+ { 0x1EF0, 0x1EF1 },
+ { 0x1EF2, 0x1EF3 },
+ { 0x1EF4, 0x1EF5 },
+ { 0x1EF6, 0x1EF7 },
+ { 0x1EF8, 0x1EF9 },
+ { 0x1F08, 0x1F00 },
+ { 0x1F09, 0x1F01 },
+ { 0x1F0A, 0x1F02 },
+ { 0x1F0B, 0x1F03 },
+ { 0x1F0C, 0x1F04 },
+ { 0x1F0D, 0x1F05 },
+ { 0x1F0E, 0x1F06 },
+ { 0x1F0F, 0x1F07 },
+ { 0x1F18, 0x1F10 },
+ { 0x1F19, 0x1F11 },
+ { 0x1F1A, 0x1F12 },
+ { 0x1F1B, 0x1F13 },
+ { 0x1F1C, 0x1F14 },
+ { 0x1F1D, 0x1F15 },
+ { 0x1F28, 0x1F20 },
+ { 0x1F29, 0x1F21 },
+ { 0x1F2A, 0x1F22 },
+ { 0x1F2B, 0x1F23 },
+ { 0x1F2C, 0x1F24 },
+ { 0x1F2D, 0x1F25 },
+ { 0x1F2E, 0x1F26 },
+ { 0x1F2F, 0x1F27 },
+ { 0x1F38, 0x1F30 },
+ { 0x1F39, 0x1F31 },
+ { 0x1F3A, 0x1F32 },
+ { 0x1F3B, 0x1F33 },
+ { 0x1F3C, 0x1F34 },
+ { 0x1F3D, 0x1F35 },
+ { 0x1F3E, 0x1F36 },
+ { 0x1F3F, 0x1F37 },
+ { 0x1F48, 0x1F40 },
+ { 0x1F49, 0x1F41 },
+ { 0x1F4A, 0x1F42 },
+ { 0x1F4B, 0x1F43 },
+ { 0x1F4C, 0x1F44 },
+ { 0x1F4D, 0x1F45 },
+ { 0x1F59, 0x1F51 },
+ { 0x1F5B, 0x1F53 },
+ { 0x1F5D, 0x1F55 },
+ { 0x1F5F, 0x1F57 },
+ { 0x1F68, 0x1F60 },
+ { 0x1F69, 0x1F61 },
+ { 0x1F6A, 0x1F62 },
+ { 0x1F6B, 0x1F63 },
+ { 0x1F6C, 0x1F64 },
+ { 0x1F6D, 0x1F65 },
+ { 0x1F6E, 0x1F66 },
+ { 0x1F6F, 0x1F67 },
+ { 0x1F88, 0x1F80 },
+ { 0x1F89, 0x1F81 },
+ { 0x1F8A, 0x1F82 },
+ { 0x1F8B, 0x1F83 },
+ { 0x1F8C, 0x1F84 },
+ { 0x1F8D, 0x1F85 },
+ { 0x1F8E, 0x1F86 },
+ { 0x1F8F, 0x1F87 },
+ { 0x1F98, 0x1F90 },
+ { 0x1F99, 0x1F91 },
+ { 0x1F9A, 0x1F92 },
+ { 0x1F9B, 0x1F93 },
+ { 0x1F9C, 0x1F94 },
+ { 0x1F9D, 0x1F95 },
+ { 0x1F9E, 0x1F96 },
+ { 0x1F9F, 0x1F97 },
+ { 0x1FA8, 0x1FA0 },
+ { 0x1FA9, 0x1FA1 },
+ { 0x1FAA, 0x1FA2 },
+ { 0x1FAB, 0x1FA3 },
+ { 0x1FAC, 0x1FA4 },
+ { 0x1FAD, 0x1FA5 },
+ { 0x1FAE, 0x1FA6 },
+ { 0x1FAF, 0x1FA7 },
+ { 0x1FB8, 0x1FB0 },
+ { 0x1FB9, 0x1FB1 },
+ { 0x1FBA, 0x1F70 },
+ { 0x1FBB, 0x1F71 },
+ { 0x1FBC, 0x1FB3 },
+ { 0x1FC8, 0x1F72 },
+ { 0x1FC9, 0x1F73 },
+ { 0x1FCA, 0x1F74 },
+ { 0x1FCB, 0x1F75 },
+ { 0x1FCC, 0x1FC3 },
+ { 0x1FD8, 0x1FD0 },
+ { 0x1FD9, 0x1FD1 },
+ { 0x1FDA, 0x1F76 },
+ { 0x1FDB, 0x1F77 },
+ { 0x1FE8, 0x1FE0 },
+ { 0x1FE9, 0x1FE1 },
+ { 0x1FEA, 0x1F7A },
+ { 0x1FEB, 0x1F7B },
+ { 0x1FEC, 0x1FE5 },
+ { 0x1FF8, 0x1F78 },
+ { 0x1FF9, 0x1F79 },
+ { 0x1FFA, 0x1F7C },
+ { 0x1FFB, 0x1F7D },
+ { 0x1FFC, 0x1FF3 },
+ { 0x2126, 0x03C9 },
+ { 0x212A, 0x006B },
+ { 0x212B, 0x00E5 },
+ { 0x2160, 0x2170 },
+ { 0x2161, 0x2171 },
+ { 0x2162, 0x2172 },
+ { 0x2163, 0x2173 },
+ { 0x2164, 0x2174 },
+ { 0x2165, 0x2175 },
+ { 0x2166, 0x2176 },
+ { 0x2167, 0x2177 },
+ { 0x2168, 0x2178 },
+ { 0x2169, 0x2179 },
+ { 0x216A, 0x217A },
+ { 0x216B, 0x217B },
+ { 0x216C, 0x217C },
+ { 0x216D, 0x217D },
+ { 0x216E, 0x217E },
+ { 0x216F, 0x217F },
+ { 0x24B6, 0x24D0 },
+ { 0x24B7, 0x24D1 },
+ { 0x24B8, 0x24D2 },
+ { 0x24B9, 0x24D3 },
+ { 0x24BA, 0x24D4 },
+ { 0x24BB, 0x24D5 },
+ { 0x24BC, 0x24D6 },
+ { 0x24BD, 0x24D7 },
+ { 0x24BE, 0x24D8 },
+ { 0x24BF, 0x24D9 },
+ { 0x24C0, 0x24DA },
+ { 0x24C1, 0x24DB },
+ { 0x24C2, 0x24DC },
+ { 0x24C3, 0x24DD },
+ { 0x24C4, 0x24DE },
+ { 0x24C5, 0x24DF },
+ { 0x24C6, 0x24E0 },
+ { 0x24C7, 0x24E1 },
+ { 0x24C8, 0x24E2 },
+ { 0x24C9, 0x24E3 },
+ { 0x24CA, 0x24E4 },
+ { 0x24CB, 0x24E5 },
+ { 0x24CC, 0x24E6 },
+ { 0x24CD, 0x24E7 },
+ { 0x24CE, 0x24E8 },
+ { 0x24CF, 0x24E9 },
+ { 0x2C00, 0x2C30 },
+ { 0x2C01, 0x2C31 },
+ { 0x2C02, 0x2C32 },
+ { 0x2C03, 0x2C33 },
+ { 0x2C04, 0x2C34 },
+ { 0x2C05, 0x2C35 },
+ { 0x2C06, 0x2C36 },
+ { 0x2C07, 0x2C37 },
+ { 0x2C08, 0x2C38 },
+ { 0x2C09, 0x2C39 },
+ { 0x2C0A, 0x2C3A },
+ { 0x2C0B, 0x2C3B },
+ { 0x2C0C, 0x2C3C },
+ { 0x2C0D, 0x2C3D },
+ { 0x2C0E, 0x2C3E },
+ { 0x2C0F, 0x2C3F },
+ { 0x2C10, 0x2C40 },
+ { 0x2C11, 0x2C41 },
+ { 0x2C12, 0x2C42 },
+ { 0x2C13, 0x2C43 },
+ { 0x2C14, 0x2C44 },
+ { 0x2C15, 0x2C45 },
+ { 0x2C16, 0x2C46 },
+ { 0x2C17, 0x2C47 },
+ { 0x2C18, 0x2C48 },
+ { 0x2C19, 0x2C49 },
+ { 0x2C1A, 0x2C4A },
+ { 0x2C1B, 0x2C4B },
+ { 0x2C1C, 0x2C4C },
+ { 0x2C1D, 0x2C4D },
+ { 0x2C1E, 0x2C4E },
+ { 0x2C1F, 0x2C4F },
+ { 0x2C20, 0x2C50 },
+ { 0x2C21, 0x2C51 },
+ { 0x2C22, 0x2C52 },
+ { 0x2C23, 0x2C53 },
+ { 0x2C24, 0x2C54 },
+ { 0x2C25, 0x2C55 },
+ { 0x2C26, 0x2C56 },
+ { 0x2C27, 0x2C57 },
+ { 0x2C28, 0x2C58 },
+ { 0x2C29, 0x2C59 },
+ { 0x2C2A, 0x2C5A },
+ { 0x2C2B, 0x2C5B },
+ { 0x2C2C, 0x2C5C },
+ { 0x2C2D, 0x2C5D },
+ { 0x2C2E, 0x2C5E },
+ { 0x2C80, 0x2C81 },
+ { 0x2C82, 0x2C83 },
+ { 0x2C84, 0x2C85 },
+ { 0x2C86, 0x2C87 },
+ { 0x2C88, 0x2C89 },
+ { 0x2C8A, 0x2C8B },
+ { 0x2C8C, 0x2C8D },
+ { 0x2C8E, 0x2C8F },
+ { 0x2C90, 0x2C91 },
+ { 0x2C92, 0x2C93 },
+ { 0x2C94, 0x2C95 },
+ { 0x2C96, 0x2C97 },
+ { 0x2C98, 0x2C99 },
+ { 0x2C9A, 0x2C9B },
+ { 0x2C9C, 0x2C9D },
+ { 0x2C9E, 0x2C9F },
+ { 0x2CA0, 0x2CA1 },
+ { 0x2CA2, 0x2CA3 },
+ { 0x2CA4, 0x2CA5 },
+ { 0x2CA6, 0x2CA7 },
+ { 0x2CA8, 0x2CA9 },
+ { 0x2CAA, 0x2CAB },
+ { 0x2CAC, 0x2CAD },
+ { 0x2CAE, 0x2CAF },
+ { 0x2CB0, 0x2CB1 },
+ { 0x2CB2, 0x2CB3 },
+ { 0x2CB4, 0x2CB5 },
+ { 0x2CB6, 0x2CB7 },
+ { 0x2CB8, 0x2CB9 },
+ { 0x2CBA, 0x2CBB },
+ { 0x2CBC, 0x2CBD },
+ { 0x2CBE, 0x2CBF },
+ { 0x2CC0, 0x2CC1 },
+ { 0x2CC2, 0x2CC3 },
+ { 0x2CC4, 0x2CC5 },
+ { 0x2CC6, 0x2CC7 },
+ { 0x2CC8, 0x2CC9 },
+ { 0x2CCA, 0x2CCB },
+ { 0x2CCC, 0x2CCD },
+ { 0x2CCE, 0x2CCF },
+ { 0x2CD0, 0x2CD1 },
+ { 0x2CD2, 0x2CD3 },
+ { 0x2CD4, 0x2CD5 },
+ { 0x2CD6, 0x2CD7 },
+ { 0x2CD8, 0x2CD9 },
+ { 0x2CDA, 0x2CDB },
+ { 0x2CDC, 0x2CDD },
+ { 0x2CDE, 0x2CDF },
+ { 0x2CE0, 0x2CE1 },
+ { 0x2CE2, 0x2CE3 },
+ { 0xFF21, 0xFF41 },
+ { 0xFF22, 0xFF42 },
+ { 0xFF23, 0xFF43 },
+ { 0xFF24, 0xFF44 },
+ { 0xFF25, 0xFF45 },
+ { 0xFF26, 0xFF46 },
+ { 0xFF27, 0xFF47 },
+ { 0xFF28, 0xFF48 },
+ { 0xFF29, 0xFF49 },
+ { 0xFF2A, 0xFF4A },
+ { 0xFF2B, 0xFF4B },
+ { 0xFF2C, 0xFF4C },
+ { 0xFF2D, 0xFF4D },
+ { 0xFF2E, 0xFF4E },
+ { 0xFF2F, 0xFF4F },
+ { 0xFF30, 0xFF50 },
+ { 0xFF31, 0xFF51 },
+ { 0xFF32, 0xFF52 },
+ { 0xFF33, 0xFF53 },
+ { 0xFF34, 0xFF54 },
+ { 0xFF35, 0xFF55 },
+ { 0xFF36, 0xFF56 },
+ { 0xFF37, 0xFF57 },
+ { 0xFF38, 0xFF58 },
+ { 0xFF39, 0xFF59 },
+ { 0xFF3A, 0xFF5A },
+};
+
+#define N_ucs_totitle_map 866
+
+static wc_map ucs_totitle_map[ N_ucs_totitle_map ] = {
+ { 0x0061, 0x0041 },
+ { 0x0062, 0x0042 },
+ { 0x0063, 0x0043 },
+ { 0x0064, 0x0044 },
+ { 0x0065, 0x0045 },
+ { 0x0066, 0x0046 },
+ { 0x0067, 0x0047 },
+ { 0x0068, 0x0048 },
+ { 0x0069, 0x0049 },
+ { 0x006A, 0x004A },
+ { 0x006B, 0x004B },
+ { 0x006C, 0x004C },
+ { 0x006D, 0x004D },
+ { 0x006E, 0x004E },
+ { 0x006F, 0x004F },
+ { 0x0070, 0x0050 },
+ { 0x0071, 0x0051 },
+ { 0x0072, 0x0052 },
+ { 0x0073, 0x0053 },
+ { 0x0074, 0x0054 },
+ { 0x0075, 0x0055 },
+ { 0x0076, 0x0056 },
+ { 0x0077, 0x0057 },
+ { 0x0078, 0x0058 },
+ { 0x0079, 0x0059 },
+ { 0x007A, 0x005A },
+ { 0x00B5, 0x039C },
+ { 0x00E0, 0x00C0 },
+ { 0x00E1, 0x00C1 },
+ { 0x00E2, 0x00C2 },
+ { 0x00E3, 0x00C3 },
+ { 0x00E4, 0x00C4 },
+ { 0x00E5, 0x00C5 },
+ { 0x00E6, 0x00C6 },
+ { 0x00E7, 0x00C7 },
+ { 0x00E8, 0x00C8 },
+ { 0x00E9, 0x00C9 },
+ { 0x00EA, 0x00CA },
+ { 0x00EB, 0x00CB },
+ { 0x00EC, 0x00CC },
+ { 0x00ED, 0x00CD },
+ { 0x00EE, 0x00CE },
+ { 0x00EF, 0x00CF },
+ { 0x00F0, 0x00D0 },
+ { 0x00F1, 0x00D1 },
+ { 0x00F2, 0x00D2 },
+ { 0x00F3, 0x00D3 },
+ { 0x00F4, 0x00D4 },
+ { 0x00F5, 0x00D5 },
+ { 0x00F6, 0x00D6 },
+ { 0x00F8, 0x00D8 },
+ { 0x00F9, 0x00D9 },
+ { 0x00FA, 0x00DA },
+ { 0x00FB, 0x00DB },
+ { 0x00FC, 0x00DC },
+ { 0x00FD, 0x00DD },
+ { 0x00FE, 0x00DE },
+ { 0x00FF, 0x0178 },
+ { 0x0101, 0x0100 },
+ { 0x0103, 0x0102 },
+ { 0x0105, 0x0104 },
+ { 0x0107, 0x0106 },
+ { 0x0109, 0x0108 },
+ { 0x010B, 0x010A },
+ { 0x010D, 0x010C },
+ { 0x010F, 0x010E },
+ { 0x0111, 0x0110 },
+ { 0x0113, 0x0112 },
+ { 0x0115, 0x0114 },
+ { 0x0117, 0x0116 },
+ { 0x0119, 0x0118 },
+ { 0x011B, 0x011A },
+ { 0x011D, 0x011C },
+ { 0x011F, 0x011E },
+ { 0x0121, 0x0120 },
+ { 0x0123, 0x0122 },
+ { 0x0125, 0x0124 },
+ { 0x0127, 0x0126 },
+ { 0x0129, 0x0128 },
+ { 0x012B, 0x012A },
+ { 0x012D, 0x012C },
+ { 0x012F, 0x012E },
+ { 0x0131, 0x0049 },
+ { 0x0133, 0x0132 },
+ { 0x0135, 0x0134 },
+ { 0x0137, 0x0136 },
+ { 0x013A, 0x0139 },
+ { 0x013C, 0x013B },
+ { 0x013E, 0x013D },
+ { 0x0140, 0x013F },
+ { 0x0142, 0x0141 },
+ { 0x0144, 0x0143 },
+ { 0x0146, 0x0145 },
+ { 0x0148, 0x0147 },
+ { 0x014B, 0x014A },
+ { 0x014D, 0x014C },
+ { 0x014F, 0x014E },
+ { 0x0151, 0x0150 },
+ { 0x0153, 0x0152 },
+ { 0x0155, 0x0154 },
+ { 0x0157, 0x0156 },
+ { 0x0159, 0x0158 },
+ { 0x015B, 0x015A },
+ { 0x015D, 0x015C },
+ { 0x015F, 0x015E },
+ { 0x0161, 0x0160 },
+ { 0x0163, 0x0162 },
+ { 0x0165, 0x0164 },
+ { 0x0167, 0x0166 },
+ { 0x0169, 0x0168 },
+ { 0x016B, 0x016A },
+ { 0x016D, 0x016C },
+ { 0x016F, 0x016E },
+ { 0x0171, 0x0170 },
+ { 0x0173, 0x0172 },
+ { 0x0175, 0x0174 },
+ { 0x0177, 0x0176 },
+ { 0x017A, 0x0179 },
+ { 0x017C, 0x017B },
+ { 0x017E, 0x017D },
+ { 0x017F, 0x0053 },
+ { 0x0183, 0x0182 },
+ { 0x0185, 0x0184 },
+ { 0x0188, 0x0187 },
+ { 0x018C, 0x018B },
+ { 0x0192, 0x0191 },
+ { 0x0195, 0x01F6 },
+ { 0x0199, 0x0198 },
+ { 0x019A, 0x023D },
+ { 0x019E, 0x0220 },
+ { 0x01A1, 0x01A0 },
+ { 0x01A3, 0x01A2 },
+ { 0x01A5, 0x01A4 },
+ { 0x01A8, 0x01A7 },
+ { 0x01AD, 0x01AC },
+ { 0x01B0, 0x01AF },
+ { 0x01B4, 0x01B3 },
+ { 0x01B6, 0x01B5 },
+ { 0x01B9, 0x01B8 },
+ { 0x01BD, 0x01BC },
+ { 0x01BF, 0x01F7 },
+ { 0x01C4, 0x01C5 },
+ { 0x01C5, 0x01C5 },
+ { 0x01C6, 0x01C5 },
+ { 0x01C7, 0x01C8 },
+ { 0x01C8, 0x01C8 },
+ { 0x01C9, 0x01C8 },
+ { 0x01CA, 0x01CB },
+ { 0x01CB, 0x01CB },
+ { 0x01CC, 0x01CB },
+ { 0x01CE, 0x01CD },
+ { 0x01D0, 0x01CF },
+ { 0x01D2, 0x01D1 },
+ { 0x01D4, 0x01D3 },
+ { 0x01D6, 0x01D5 },
+ { 0x01D8, 0x01D7 },
+ { 0x01DA, 0x01D9 },
+ { 0x01DC, 0x01DB },
+ { 0x01DD, 0x018E },
+ { 0x01DF, 0x01DE },
+ { 0x01E1, 0x01E0 },
+ { 0x01E3, 0x01E2 },
+ { 0x01E5, 0x01E4 },
+ { 0x01E7, 0x01E6 },
+ { 0x01E9, 0x01E8 },
+ { 0x01EB, 0x01EA },
+ { 0x01ED, 0x01EC },
+ { 0x01EF, 0x01EE },
+ { 0x01F1, 0x01F2 },
+ { 0x01F2, 0x01F2 },
+ { 0x01F3, 0x01F2 },
+ { 0x01F5, 0x01F4 },
+ { 0x01F9, 0x01F8 },
+ { 0x01FB, 0x01FA },
+ { 0x01FD, 0x01FC },
+ { 0x01FF, 0x01FE },
+ { 0x0201, 0x0200 },
+ { 0x0203, 0x0202 },
+ { 0x0205, 0x0204 },
+ { 0x0207, 0x0206 },
+ { 0x0209, 0x0208 },
+ { 0x020B, 0x020A },
+ { 0x020D, 0x020C },
+ { 0x020F, 0x020E },
+ { 0x0211, 0x0210 },
+ { 0x0213, 0x0212 },
+ { 0x0215, 0x0214 },
+ { 0x0217, 0x0216 },
+ { 0x0219, 0x0218 },
+ { 0x021B, 0x021A },
+ { 0x021D, 0x021C },
+ { 0x021F, 0x021E },
+ { 0x0223, 0x0222 },
+ { 0x0225, 0x0224 },
+ { 0x0227, 0x0226 },
+ { 0x0229, 0x0228 },
+ { 0x022B, 0x022A },
+ { 0x022D, 0x022C },
+ { 0x022F, 0x022E },
+ { 0x0231, 0x0230 },
+ { 0x0233, 0x0232 },
+ { 0x023C, 0x023B },
+ { 0x0253, 0x0181 },
+ { 0x0254, 0x0186 },
+ { 0x0256, 0x0189 },
+ { 0x0257, 0x018A },
+ { 0x0259, 0x018F },
+ { 0x025B, 0x0190 },
+ { 0x0260, 0x0193 },
+ { 0x0263, 0x0194 },
+ { 0x0268, 0x0197 },
+ { 0x0269, 0x0196 },
+ { 0x026F, 0x019C },
+ { 0x0272, 0x019D },
+ { 0x0275, 0x019F },
+ { 0x0280, 0x01A6 },
+ { 0x0283, 0x01A9 },
+ { 0x0288, 0x01AE },
+ { 0x028A, 0x01B1 },
+ { 0x028B, 0x01B2 },
+ { 0x0292, 0x01B7 },
+ { 0x0294, 0x0241 },
+ { 0x0345, 0x0399 },
+ { 0x03AC, 0x0386 },
+ { 0x03AD, 0x0388 },
+ { 0x03AE, 0x0389 },
+ { 0x03AF, 0x038A },
+ { 0x03B1, 0x0391 },
+ { 0x03B2, 0x0392 },
+ { 0x03B3, 0x0393 },
+ { 0x03B4, 0x0394 },
+ { 0x03B5, 0x0395 },
+ { 0x03B6, 0x0396 },
+ { 0x03B7, 0x0397 },
+ { 0x03B8, 0x0398 },
+ { 0x03B9, 0x0399 },
+ { 0x03BA, 0x039A },
+ { 0x03BB, 0x039B },
+ { 0x03BC, 0x039C },
+ { 0x03BD, 0x039D },
+ { 0x03BE, 0x039E },
+ { 0x03BF, 0x039F },
+ { 0x03C0, 0x03A0 },
+ { 0x03C1, 0x03A1 },
+ { 0x03C2, 0x03A3 },
+ { 0x03C3, 0x03A3 },
+ { 0x03C4, 0x03A4 },
+ { 0x03C5, 0x03A5 },
+ { 0x03C6, 0x03A6 },
+ { 0x03C7, 0x03A7 },
+ { 0x03C8, 0x03A8 },
+ { 0x03C9, 0x03A9 },
+ { 0x03CA, 0x03AA },
+ { 0x03CB, 0x03AB },
+ { 0x03CC, 0x038C },
+ { 0x03CD, 0x038E },
+ { 0x03CE, 0x038F },
+ { 0x03D0, 0x0392 },
+ { 0x03D1, 0x0398 },
+ { 0x03D5, 0x03A6 },
+ { 0x03D6, 0x03A0 },
+ { 0x03D9, 0x03D8 },
+ { 0x03DB, 0x03DA },
+ { 0x03DD, 0x03DC },
+ { 0x03DF, 0x03DE },
+ { 0x03E1, 0x03E0 },
+ { 0x03E3, 0x03E2 },
+ { 0x03E5, 0x03E4 },
+ { 0x03E7, 0x03E6 },
+ { 0x03E9, 0x03E8 },
+ { 0x03EB, 0x03EA },
+ { 0x03ED, 0x03EC },
+ { 0x03EF, 0x03EE },
+ { 0x03F0, 0x039A },
+ { 0x03F1, 0x03A1 },
+ { 0x03F2, 0x03F9 },
+ { 0x03F5, 0x0395 },
+ { 0x03F8, 0x03F7 },
+ { 0x03FB, 0x03FA },
+ { 0x0430, 0x0410 },
+ { 0x0431, 0x0411 },
+ { 0x0432, 0x0412 },
+ { 0x0433, 0x0413 },
+ { 0x0434, 0x0414 },
+ { 0x0435, 0x0415 },
+ { 0x0436, 0x0416 },
+ { 0x0437, 0x0417 },
+ { 0x0438, 0x0418 },
+ { 0x0439, 0x0419 },
+ { 0x043A, 0x041A },
+ { 0x043B, 0x041B },
+ { 0x043C, 0x041C },
+ { 0x043D, 0x041D },
+ { 0x043E, 0x041E },
+ { 0x043F, 0x041F },
+ { 0x0440, 0x0420 },
+ { 0x0441, 0x0421 },
+ { 0x0442, 0x0422 },
+ { 0x0443, 0x0423 },
+ { 0x0444, 0x0424 },
+ { 0x0445, 0x0425 },
+ { 0x0446, 0x0426 },
+ { 0x0447, 0x0427 },
+ { 0x0448, 0x0428 },
+ { 0x0449, 0x0429 },
+ { 0x044A, 0x042A },
+ { 0x044B, 0x042B },
+ { 0x044C, 0x042C },
+ { 0x044D, 0x042D },
+ { 0x044E, 0x042E },
+ { 0x044F, 0x042F },
+ { 0x0450, 0x0400 },
+ { 0x0451, 0x0401 },
+ { 0x0452, 0x0402 },
+ { 0x0453, 0x0403 },
+ { 0x0454, 0x0404 },
+ { 0x0455, 0x0405 },
+ { 0x0456, 0x0406 },
+ { 0x0457, 0x0407 },
+ { 0x0458, 0x0408 },
+ { 0x0459, 0x0409 },
+ { 0x045A, 0x040A },
+ { 0x045B, 0x040B },
+ { 0x045C, 0x040C },
+ { 0x045D, 0x040D },
+ { 0x045E, 0x040E },
+ { 0x045F, 0x040F },
+ { 0x0461, 0x0460 },
+ { 0x0463, 0x0462 },
+ { 0x0465, 0x0464 },
+ { 0x0467, 0x0466 },
+ { 0x0469, 0x0468 },
+ { 0x046B, 0x046A },
+ { 0x046D, 0x046C },
+ { 0x046F, 0x046E },
+ { 0x0471, 0x0470 },
+ { 0x0473, 0x0472 },
+ { 0x0475, 0x0474 },
+ { 0x0477, 0x0476 },
+ { 0x0479, 0x0478 },
+ { 0x047B, 0x047A },
+ { 0x047D, 0x047C },
+ { 0x047F, 0x047E },
+ { 0x0481, 0x0480 },
+ { 0x048B, 0x048A },
+ { 0x048D, 0x048C },
+ { 0x048F, 0x048E },
+ { 0x0491, 0x0490 },
+ { 0x0493, 0x0492 },
+ { 0x0495, 0x0494 },
+ { 0x0497, 0x0496 },
+ { 0x0499, 0x0498 },
+ { 0x049B, 0x049A },
+ { 0x049D, 0x049C },
+ { 0x049F, 0x049E },
+ { 0x04A1, 0x04A0 },
+ { 0x04A3, 0x04A2 },
+ { 0x04A5, 0x04A4 },
+ { 0x04A7, 0x04A6 },
+ { 0x04A9, 0x04A8 },
+ { 0x04AB, 0x04AA },
+ { 0x04AD, 0x04AC },
+ { 0x04AF, 0x04AE },
+ { 0x04B1, 0x04B0 },
+ { 0x04B3, 0x04B2 },
+ { 0x04B5, 0x04B4 },
+ { 0x04B7, 0x04B6 },
+ { 0x04B9, 0x04B8 },
+ { 0x04BB, 0x04BA },
+ { 0x04BD, 0x04BC },
+ { 0x04BF, 0x04BE },
+ { 0x04C2, 0x04C1 },
+ { 0x04C4, 0x04C3 },
+ { 0x04C6, 0x04C5 },
+ { 0x04C8, 0x04C7 },
+ { 0x04CA, 0x04C9 },
+ { 0x04CC, 0x04CB },
+ { 0x04CE, 0x04CD },
+ { 0x04D1, 0x04D0 },
+ { 0x04D3, 0x04D2 },
+ { 0x04D5, 0x04D4 },
+ { 0x04D7, 0x04D6 },
+ { 0x04D9, 0x04D8 },
+ { 0x04DB, 0x04DA },
+ { 0x04DD, 0x04DC },
+ { 0x04DF, 0x04DE },
+ { 0x04E1, 0x04E0 },
+ { 0x04E3, 0x04E2 },
+ { 0x04E5, 0x04E4 },
+ { 0x04E7, 0x04E6 },
+ { 0x04E9, 0x04E8 },
+ { 0x04EB, 0x04EA },
+ { 0x04ED, 0x04EC },
+ { 0x04EF, 0x04EE },
+ { 0x04F1, 0x04F0 },
+ { 0x04F3, 0x04F2 },
+ { 0x04F5, 0x04F4 },
+ { 0x04F7, 0x04F6 },
+ { 0x04F9, 0x04F8 },
+ { 0x0501, 0x0500 },
+ { 0x0503, 0x0502 },
+ { 0x0505, 0x0504 },
+ { 0x0507, 0x0506 },
+ { 0x0509, 0x0508 },
+ { 0x050B, 0x050A },
+ { 0x050D, 0x050C },
+ { 0x050F, 0x050E },
+ { 0x0561, 0x0531 },
+ { 0x0562, 0x0532 },
+ { 0x0563, 0x0533 },
+ { 0x0564, 0x0534 },
+ { 0x0565, 0x0535 },
+ { 0x0566, 0x0536 },
+ { 0x0567, 0x0537 },
+ { 0x0568, 0x0538 },
+ { 0x0569, 0x0539 },
+ { 0x056A, 0x053A },
+ { 0x056B, 0x053B },
+ { 0x056C, 0x053C },
+ { 0x056D, 0x053D },
+ { 0x056E, 0x053E },
+ { 0x056F, 0x053F },
+ { 0x0570, 0x0540 },
+ { 0x0571, 0x0541 },
+ { 0x0572, 0x0542 },
+ { 0x0573, 0x0543 },
+ { 0x0574, 0x0544 },
+ { 0x0575, 0x0545 },
+ { 0x0576, 0x0546 },
+ { 0x0577, 0x0547 },
+ { 0x0578, 0x0548 },
+ { 0x0579, 0x0549 },
+ { 0x057A, 0x054A },
+ { 0x057B, 0x054B },
+ { 0x057C, 0x054C },
+ { 0x057D, 0x054D },
+ { 0x057E, 0x054E },
+ { 0x057F, 0x054F },
+ { 0x0580, 0x0550 },
+ { 0x0581, 0x0551 },
+ { 0x0582, 0x0552 },
+ { 0x0583, 0x0553 },
+ { 0x0584, 0x0554 },
+ { 0x0585, 0x0555 },
+ { 0x0586, 0x0556 },
+ { 0x1E01, 0x1E00 },
+ { 0x1E03, 0x1E02 },
+ { 0x1E05, 0x1E04 },
+ { 0x1E07, 0x1E06 },
+ { 0x1E09, 0x1E08 },
+ { 0x1E0B, 0x1E0A },
+ { 0x1E0D, 0x1E0C },
+ { 0x1E0F, 0x1E0E },
+ { 0x1E11, 0x1E10 },
+ { 0x1E13, 0x1E12 },
+ { 0x1E15, 0x1E14 },
+ { 0x1E17, 0x1E16 },
+ { 0x1E19, 0x1E18 },
+ { 0x1E1B, 0x1E1A },
+ { 0x1E1D, 0x1E1C },
+ { 0x1E1F, 0x1E1E },
+ { 0x1E21, 0x1E20 },
+ { 0x1E23, 0x1E22 },
+ { 0x1E25, 0x1E24 },
+ { 0x1E27, 0x1E26 },
+ { 0x1E29, 0x1E28 },
+ { 0x1E2B, 0x1E2A },
+ { 0x1E2D, 0x1E2C },
+ { 0x1E2F, 0x1E2E },
+ { 0x1E31, 0x1E30 },
+ { 0x1E33, 0x1E32 },
+ { 0x1E35, 0x1E34 },
+ { 0x1E37, 0x1E36 },
+ { 0x1E39, 0x1E38 },
+ { 0x1E3B, 0x1E3A },
+ { 0x1E3D, 0x1E3C },
+ { 0x1E3F, 0x1E3E },
+ { 0x1E41, 0x1E40 },
+ { 0x1E43, 0x1E42 },
+ { 0x1E45, 0x1E44 },
+ { 0x1E47, 0x1E46 },
+ { 0x1E49, 0x1E48 },
+ { 0x1E4B, 0x1E4A },
+ { 0x1E4D, 0x1E4C },
+ { 0x1E4F, 0x1E4E },
+ { 0x1E51, 0x1E50 },
+ { 0x1E53, 0x1E52 },
+ { 0x1E55, 0x1E54 },
+ { 0x1E57, 0x1E56 },
+ { 0x1E59, 0x1E58 },
+ { 0x1E5B, 0x1E5A },
+ { 0x1E5D, 0x1E5C },
+ { 0x1E5F, 0x1E5E },
+ { 0x1E61, 0x1E60 },
+ { 0x1E63, 0x1E62 },
+ { 0x1E65, 0x1E64 },
+ { 0x1E67, 0x1E66 },
+ { 0x1E69, 0x1E68 },
+ { 0x1E6B, 0x1E6A },
+ { 0x1E6D, 0x1E6C },
+ { 0x1E6F, 0x1E6E },
+ { 0x1E71, 0x1E70 },
+ { 0x1E73, 0x1E72 },
+ { 0x1E75, 0x1E74 },
+ { 0x1E77, 0x1E76 },
+ { 0x1E79, 0x1E78 },
+ { 0x1E7B, 0x1E7A },
+ { 0x1E7D, 0x1E7C },
+ { 0x1E7F, 0x1E7E },
+ { 0x1E81, 0x1E80 },
+ { 0x1E83, 0x1E82 },
+ { 0x1E85, 0x1E84 },
+ { 0x1E87, 0x1E86 },
+ { 0x1E89, 0x1E88 },
+ { 0x1E8B, 0x1E8A },
+ { 0x1E8D, 0x1E8C },
+ { 0x1E8F, 0x1E8E },
+ { 0x1E91, 0x1E90 },
+ { 0x1E93, 0x1E92 },
+ { 0x1E95, 0x1E94 },
+ { 0x1E9B, 0x1E60 },
+ { 0x1EA1, 0x1EA0 },
+ { 0x1EA3, 0x1EA2 },
+ { 0x1EA5, 0x1EA4 },
+ { 0x1EA7, 0x1EA6 },
+ { 0x1EA9, 0x1EA8 },
+ { 0x1EAB, 0x1EAA },
+ { 0x1EAD, 0x1EAC },
+ { 0x1EAF, 0x1EAE },
+ { 0x1EB1, 0x1EB0 },
+ { 0x1EB3, 0x1EB2 },
+ { 0x1EB5, 0x1EB4 },
+ { 0x1EB7, 0x1EB6 },
+ { 0x1EB9, 0x1EB8 },
+ { 0x1EBB, 0x1EBA },
+ { 0x1EBD, 0x1EBC },
+ { 0x1EBF, 0x1EBE },
+ { 0x1EC1, 0x1EC0 },
+ { 0x1EC3, 0x1EC2 },
+ { 0x1EC5, 0x1EC4 },
+ { 0x1EC7, 0x1EC6 },
+ { 0x1EC9, 0x1EC8 },
+ { 0x1ECB, 0x1ECA },
+ { 0x1ECD, 0x1ECC },
+ { 0x1ECF, 0x1ECE },
+ { 0x1ED1, 0x1ED0 },
+ { 0x1ED3, 0x1ED2 },
+ { 0x1ED5, 0x1ED4 },
+ { 0x1ED7, 0x1ED6 },
+ { 0x1ED9, 0x1ED8 },
+ { 0x1EDB, 0x1EDA },
+ { 0x1EDD, 0x1EDC },
+ { 0x1EDF, 0x1EDE },
+ { 0x1EE1, 0x1EE0 },
+ { 0x1EE3, 0x1EE2 },
+ { 0x1EE5, 0x1EE4 },
+ { 0x1EE7, 0x1EE6 },
+ { 0x1EE9, 0x1EE8 },
+ { 0x1EEB, 0x1EEA },
+ { 0x1EED, 0x1EEC },
+ { 0x1EEF, 0x1EEE },
+ { 0x1EF1, 0x1EF0 },
+ { 0x1EF3, 0x1EF2 },
+ { 0x1EF5, 0x1EF4 },
+ { 0x1EF7, 0x1EF6 },
+ { 0x1EF9, 0x1EF8 },
+ { 0x1F00, 0x1F08 },
+ { 0x1F01, 0x1F09 },
+ { 0x1F02, 0x1F0A },
+ { 0x1F03, 0x1F0B },
+ { 0x1F04, 0x1F0C },
+ { 0x1F05, 0x1F0D },
+ { 0x1F06, 0x1F0E },
+ { 0x1F07, 0x1F0F },
+ { 0x1F10, 0x1F18 },
+ { 0x1F11, 0x1F19 },
+ { 0x1F12, 0x1F1A },
+ { 0x1F13, 0x1F1B },
+ { 0x1F14, 0x1F1C },
+ { 0x1F15, 0x1F1D },
+ { 0x1F20, 0x1F28 },
+ { 0x1F21, 0x1F29 },
+ { 0x1F22, 0x1F2A },
+ { 0x1F23, 0x1F2B },
+ { 0x1F24, 0x1F2C },
+ { 0x1F25, 0x1F2D },
+ { 0x1F26, 0x1F2E },
+ { 0x1F27, 0x1F2F },
+ { 0x1F30, 0x1F38 },
+ { 0x1F31, 0x1F39 },
+ { 0x1F32, 0x1F3A },
+ { 0x1F33, 0x1F3B },
+ { 0x1F34, 0x1F3C },
+ { 0x1F35, 0x1F3D },
+ { 0x1F36, 0x1F3E },
+ { 0x1F37, 0x1F3F },
+ { 0x1F40, 0x1F48 },
+ { 0x1F41, 0x1F49 },
+ { 0x1F42, 0x1F4A },
+ { 0x1F43, 0x1F4B },
+ { 0x1F44, 0x1F4C },
+ { 0x1F45, 0x1F4D },
+ { 0x1F51, 0x1F59 },
+ { 0x1F53, 0x1F5B },
+ { 0x1F55, 0x1F5D },
+ { 0x1F57, 0x1F5F },
+ { 0x1F60, 0x1F68 },
+ { 0x1F61, 0x1F69 },
+ { 0x1F62, 0x1F6A },
+ { 0x1F63, 0x1F6B },
+ { 0x1F64, 0x1F6C },
+ { 0x1F65, 0x1F6D },
+ { 0x1F66, 0x1F6E },
+ { 0x1F67, 0x1F6F },
+ { 0x1F70, 0x1FBA },
+ { 0x1F71, 0x1FBB },
+ { 0x1F72, 0x1FC8 },
+ { 0x1F73, 0x1FC9 },
+ { 0x1F74, 0x1FCA },
+ { 0x1F75, 0x1FCB },
+ { 0x1F76, 0x1FDA },
+ { 0x1F77, 0x1FDB },
+ { 0x1F78, 0x1FF8 },
+ { 0x1F79, 0x1FF9 },
+ { 0x1F7A, 0x1FEA },
+ { 0x1F7B, 0x1FEB },
+ { 0x1F7C, 0x1FFA },
+ { 0x1F7D, 0x1FFB },
+ { 0x1F80, 0x1F88 },
+ { 0x1F81, 0x1F89 },
+ { 0x1F82, 0x1F8A },
+ { 0x1F83, 0x1F8B },
+ { 0x1F84, 0x1F8C },
+ { 0x1F85, 0x1F8D },
+ { 0x1F86, 0x1F8E },
+ { 0x1F87, 0x1F8F },
+ { 0x1F90, 0x1F98 },
+ { 0x1F91, 0x1F99 },
+ { 0x1F92, 0x1F9A },
+ { 0x1F93, 0x1F9B },
+ { 0x1F94, 0x1F9C },
+ { 0x1F95, 0x1F9D },
+ { 0x1F96, 0x1F9E },
+ { 0x1F97, 0x1F9F },
+ { 0x1FA0, 0x1FA8 },
+ { 0x1FA1, 0x1FA9 },
+ { 0x1FA2, 0x1FAA },
+ { 0x1FA3, 0x1FAB },
+ { 0x1FA4, 0x1FAC },
+ { 0x1FA5, 0x1FAD },
+ { 0x1FA6, 0x1FAE },
+ { 0x1FA7, 0x1FAF },
+ { 0x1FB0, 0x1FB8 },
+ { 0x1FB1, 0x1FB9 },
+ { 0x1FB3, 0x1FBC },
+ { 0x1FBE, 0x0399 },
+ { 0x1FC3, 0x1FCC },
+ { 0x1FD0, 0x1FD8 },
+ { 0x1FD1, 0x1FD9 },
+ { 0x1FE0, 0x1FE8 },
+ { 0x1FE1, 0x1FE9 },
+ { 0x1FE5, 0x1FEC },
+ { 0x1FF3, 0x1FFC },
+ { 0x2170, 0x2160 },
+ { 0x2171, 0x2161 },
+ { 0x2172, 0x2162 },
+ { 0x2173, 0x2163 },
+ { 0x2174, 0x2164 },
+ { 0x2175, 0x2165 },
+ { 0x2176, 0x2166 },
+ { 0x2177, 0x2167 },
+ { 0x2178, 0x2168 },
+ { 0x2179, 0x2169 },
+ { 0x217A, 0x216A },
+ { 0x217B, 0x216B },
+ { 0x217C, 0x216C },
+ { 0x217D, 0x216D },
+ { 0x217E, 0x216E },
+ { 0x217F, 0x216F },
+ { 0x24D0, 0x24B6 },
+ { 0x24D1, 0x24B7 },
+ { 0x24D2, 0x24B8 },
+ { 0x24D3, 0x24B9 },
+ { 0x24D4, 0x24BA },
+ { 0x24D5, 0x24BB },
+ { 0x24D6, 0x24BC },
+ { 0x24D7, 0x24BD },
+ { 0x24D8, 0x24BE },
+ { 0x24D9, 0x24BF },
+ { 0x24DA, 0x24C0 },
+ { 0x24DB, 0x24C1 },
+ { 0x24DC, 0x24C2 },
+ { 0x24DD, 0x24C3 },
+ { 0x24DE, 0x24C4 },
+ { 0x24DF, 0x24C5 },
+ { 0x24E0, 0x24C6 },
+ { 0x24E1, 0x24C7 },
+ { 0x24E2, 0x24C8 },
+ { 0x24E3, 0x24C9 },
+ { 0x24E4, 0x24CA },
+ { 0x24E5, 0x24CB },
+ { 0x24E6, 0x24CC },
+ { 0x24E7, 0x24CD },
+ { 0x24E8, 0x24CE },
+ { 0x24E9, 0x24CF },
+ { 0x2C30, 0x2C00 },
+ { 0x2C31, 0x2C01 },
+ { 0x2C32, 0x2C02 },
+ { 0x2C33, 0x2C03 },
+ { 0x2C34, 0x2C04 },
+ { 0x2C35, 0x2C05 },
+ { 0x2C36, 0x2C06 },
+ { 0x2C37, 0x2C07 },
+ { 0x2C38, 0x2C08 },
+ { 0x2C39, 0x2C09 },
+ { 0x2C3A, 0x2C0A },
+ { 0x2C3B, 0x2C0B },
+ { 0x2C3C, 0x2C0C },
+ { 0x2C3D, 0x2C0D },
+ { 0x2C3E, 0x2C0E },
+ { 0x2C3F, 0x2C0F },
+ { 0x2C40, 0x2C10 },
+ { 0x2C41, 0x2C11 },
+ { 0x2C42, 0x2C12 },
+ { 0x2C43, 0x2C13 },
+ { 0x2C44, 0x2C14 },
+ { 0x2C45, 0x2C15 },
+ { 0x2C46, 0x2C16 },
+ { 0x2C47, 0x2C17 },
+ { 0x2C48, 0x2C18 },
+ { 0x2C49, 0x2C19 },
+ { 0x2C4A, 0x2C1A },
+ { 0x2C4B, 0x2C1B },
+ { 0x2C4C, 0x2C1C },
+ { 0x2C4D, 0x2C1D },
+ { 0x2C4E, 0x2C1E },
+ { 0x2C4F, 0x2C1F },
+ { 0x2C50, 0x2C20 },
+ { 0x2C51, 0x2C21 },
+ { 0x2C52, 0x2C22 },
+ { 0x2C53, 0x2C23 },
+ { 0x2C54, 0x2C24 },
+ { 0x2C55, 0x2C25 },
+ { 0x2C56, 0x2C26 },
+ { 0x2C57, 0x2C27 },
+ { 0x2C58, 0x2C28 },
+ { 0x2C59, 0x2C29 },
+ { 0x2C5A, 0x2C2A },
+ { 0x2C5B, 0x2C2B },
+ { 0x2C5C, 0x2C2C },
+ { 0x2C5D, 0x2C2D },
+ { 0x2C5E, 0x2C2E },
+ { 0x2C81, 0x2C80 },
+ { 0x2C83, 0x2C82 },
+ { 0x2C85, 0x2C84 },
+ { 0x2C87, 0x2C86 },
+ { 0x2C89, 0x2C88 },
+ { 0x2C8B, 0x2C8A },
+ { 0x2C8D, 0x2C8C },
+ { 0x2C8F, 0x2C8E },
+ { 0x2C91, 0x2C90 },
+ { 0x2C93, 0x2C92 },
+ { 0x2C95, 0x2C94 },
+ { 0x2C97, 0x2C96 },
+ { 0x2C99, 0x2C98 },
+ { 0x2C9B, 0x2C9A },
+ { 0x2C9D, 0x2C9C },
+ { 0x2C9F, 0x2C9E },
+ { 0x2CA1, 0x2CA0 },
+ { 0x2CA3, 0x2CA2 },
+ { 0x2CA5, 0x2CA4 },
+ { 0x2CA7, 0x2CA6 },
+ { 0x2CA9, 0x2CA8 },
+ { 0x2CAB, 0x2CAA },
+ { 0x2CAD, 0x2CAC },
+ { 0x2CAF, 0x2CAE },
+ { 0x2CB1, 0x2CB0 },
+ { 0x2CB3, 0x2CB2 },
+ { 0x2CB5, 0x2CB4 },
+ { 0x2CB7, 0x2CB6 },
+ { 0x2CB9, 0x2CB8 },
+ { 0x2CBB, 0x2CBA },
+ { 0x2CBD, 0x2CBC },
+ { 0x2CBF, 0x2CBE },
+ { 0x2CC1, 0x2CC0 },
+ { 0x2CC3, 0x2CC2 },
+ { 0x2CC5, 0x2CC4 },
+ { 0x2CC7, 0x2CC6 },
+ { 0x2CC9, 0x2CC8 },
+ { 0x2CCB, 0x2CCA },
+ { 0x2CCD, 0x2CCC },
+ { 0x2CCF, 0x2CCE },
+ { 0x2CD1, 0x2CD0 },
+ { 0x2CD3, 0x2CD2 },
+ { 0x2CD5, 0x2CD4 },
+ { 0x2CD7, 0x2CD6 },
+ { 0x2CD9, 0x2CD8 },
+ { 0x2CDB, 0x2CDA },
+ { 0x2CDD, 0x2CDC },
+ { 0x2CDF, 0x2CDE },
+ { 0x2CE1, 0x2CE0 },
+ { 0x2CE3, 0x2CE2 },
+ { 0x2D00, 0x10A0 },
+ { 0x2D01, 0x10A1 },
+ { 0x2D02, 0x10A2 },
+ { 0x2D03, 0x10A3 },
+ { 0x2D04, 0x10A4 },
+ { 0x2D05, 0x10A5 },
+ { 0x2D06, 0x10A6 },
+ { 0x2D07, 0x10A7 },
+ { 0x2D08, 0x10A8 },
+ { 0x2D09, 0x10A9 },
+ { 0x2D0A, 0x10AA },
+ { 0x2D0B, 0x10AB },
+ { 0x2D0C, 0x10AC },
+ { 0x2D0D, 0x10AD },
+ { 0x2D0E, 0x10AE },
+ { 0x2D0F, 0x10AF },
+ { 0x2D10, 0x10B0 },
+ { 0x2D11, 0x10B1 },
+ { 0x2D12, 0x10B2 },
+ { 0x2D13, 0x10B3 },
+ { 0x2D14, 0x10B4 },
+ { 0x2D15, 0x10B5 },
+ { 0x2D16, 0x10B6 },
+ { 0x2D17, 0x10B7 },
+ { 0x2D18, 0x10B8 },
+ { 0x2D19, 0x10B9 },
+ { 0x2D1A, 0x10BA },
+ { 0x2D1B, 0x10BB },
+ { 0x2D1C, 0x10BC },
+ { 0x2D1D, 0x10BD },
+ { 0x2D1E, 0x10BE },
+ { 0x2D1F, 0x10BF },
+ { 0x2D20, 0x10C0 },
+ { 0x2D21, 0x10C1 },
+ { 0x2D22, 0x10C2 },
+ { 0x2D23, 0x10C3 },
+ { 0x2D24, 0x10C4 },
+ { 0x2D25, 0x10C5 },
+ { 0xFF41, 0xFF21 },
+ { 0xFF42, 0xFF22 },
+ { 0xFF43, 0xFF23 },
+ { 0xFF44, 0xFF24 },
+ { 0xFF45, 0xFF25 },
+ { 0xFF46, 0xFF26 },
+ { 0xFF47, 0xFF27 },
+ { 0xFF48, 0xFF28 },
+ { 0xFF49, 0xFF29 },
+ { 0xFF4A, 0xFF2A },
+ { 0xFF4B, 0xFF2B },
+ { 0xFF4C, 0xFF2C },
+ { 0xFF4D, 0xFF2D },
+ { 0xFF4E, 0xFF2E },
+ { 0xFF4F, 0xFF2F },
+ { 0xFF50, 0xFF30 },
+ { 0xFF51, 0xFF31 },
+ { 0xFF52, 0xFF32 },
+ { 0xFF53, 0xFF33 },
+ { 0xFF54, 0xFF34 },
+ { 0xFF55, 0xFF35 },
+ { 0xFF56, 0xFF36 },
+ { 0xFF57, 0xFF37 },
+ { 0xFF58, 0xFF38 },
+ { 0xFF59, 0xFF39 },
+ { 0xFF5A, 0xFF3A },
+};
diff --git a/libwc/map/ucs_isalpha.map b/libwc/map/ucs_isalpha.map
new file mode 100644
index 0000000..11fcf97
--- /dev/null
+++ b/libwc/map/ucs_isalpha.map
@@ -0,0 +1,469 @@
+/*
+ File generated from DerivedCoreProperties-4.1.0.txt.
+*/
+
+#define N_ucs_isalpha_map 461
+
+static wc_map ucs_isalpha_map[ N_ucs_isalpha_map ] = {
+ { 0x0041, 0x005A },
+ { 0x0061, 0x007A },
+ { 0x00AA, 0x00AA },
+ { 0x00B5, 0x00B5 },
+ { 0x00BA, 0x00BA },
+ { 0x00C0, 0x00D6 },
+ { 0x00D8, 0x00F6 },
+ { 0x00F8, 0x01BA },
+ { 0x01BB, 0x01BB },
+ { 0x01BC, 0x01BF },
+ { 0x01C0, 0x01C3 },
+ { 0x01C4, 0x0241 },
+ { 0x0250, 0x02AF },
+ { 0x02B0, 0x02C1 },
+ { 0x02C6, 0x02D1 },
+ { 0x02E0, 0x02E4 },
+ { 0x02EE, 0x02EE },
+ { 0x0345, 0x0345 },
+ { 0x037A, 0x037A },
+ { 0x0386, 0x0386 },
+ { 0x0388, 0x038A },
+ { 0x038C, 0x038C },
+ { 0x038E, 0x03A1 },
+ { 0x03A3, 0x03CE },
+ { 0x03D0, 0x03F5 },
+ { 0x03F7, 0x0481 },
+ { 0x048A, 0x04CE },
+ { 0x04D0, 0x04F9 },
+ { 0x0500, 0x050F },
+ { 0x0531, 0x0556 },
+ { 0x0559, 0x0559 },
+ { 0x0561, 0x0587 },
+ { 0x05B0, 0x05B9 },
+ { 0x05BB, 0x05BD },
+ { 0x05BF, 0x05BF },
+ { 0x05C1, 0x05C2 },
+ { 0x05C4, 0x05C5 },
+ { 0x05C7, 0x05C7 },
+ { 0x05D0, 0x05EA },
+ { 0x05F0, 0x05F2 },
+ { 0x0610, 0x0615 },
+ { 0x0621, 0x063A },
+ { 0x0640, 0x0640 },
+ { 0x0641, 0x064A },
+ { 0x064B, 0x0657 },
+ { 0x0659, 0x065E },
+ { 0x066E, 0x066F },
+ { 0x0670, 0x0670 },
+ { 0x0671, 0x06D3 },
+ { 0x06D5, 0x06D5 },
+ { 0x06D6, 0x06DC },
+ { 0x06E1, 0x06E4 },
+ { 0x06E5, 0x06E6 },
+ { 0x06E7, 0x06E8 },
+ { 0x06ED, 0x06ED },
+ { 0x06EE, 0x06EF },
+ { 0x06FA, 0x06FC },
+ { 0x06FF, 0x06FF },
+ { 0x0710, 0x0710 },
+ { 0x0711, 0x0711 },
+ { 0x0712, 0x072F },
+ { 0x0730, 0x073F },
+ { 0x074D, 0x076D },
+ { 0x0780, 0x07A5 },
+ { 0x07A6, 0x07B0 },
+ { 0x07B1, 0x07B1 },
+ { 0x0901, 0x0902 },
+ { 0x0903, 0x0903 },
+ { 0x0904, 0x0939 },
+ { 0x093D, 0x093D },
+ { 0x093E, 0x0940 },
+ { 0x0941, 0x0948 },
+ { 0x0949, 0x094C },
+ { 0x0950, 0x0950 },
+ { 0x0958, 0x0961 },
+ { 0x0962, 0x0963 },
+ { 0x097D, 0x097D },
+ { 0x0981, 0x0981 },
+ { 0x0982, 0x0983 },
+ { 0x0985, 0x098C },
+ { 0x098F, 0x0990 },
+ { 0x0993, 0x09A8 },
+ { 0x09AA, 0x09B0 },
+ { 0x09B2, 0x09B2 },
+ { 0x09B6, 0x09B9 },
+ { 0x09BD, 0x09BD },
+ { 0x09BE, 0x09C0 },
+ { 0x09C1, 0x09C4 },
+ { 0x09C7, 0x09C8 },
+ { 0x09CB, 0x09CC },
+ { 0x09CE, 0x09CE },
+ { 0x09D7, 0x09D7 },
+ { 0x09DC, 0x09DD },
+ { 0x09DF, 0x09E1 },
+ { 0x09E2, 0x09E3 },
+ { 0x09F0, 0x09F1 },
+ { 0x0A01, 0x0A02 },
+ { 0x0A03, 0x0A03 },
+ { 0x0A05, 0x0A0A },
+ { 0x0A0F, 0x0A10 },
+ { 0x0A13, 0x0A28 },
+ { 0x0A2A, 0x0A30 },
+ { 0x0A32, 0x0A33 },
+ { 0x0A35, 0x0A36 },
+ { 0x0A38, 0x0A39 },
+ { 0x0A3E, 0x0A40 },
+ { 0x0A41, 0x0A42 },
+ { 0x0A47, 0x0A48 },
+ { 0x0A4B, 0x0A4C },
+ { 0x0A59, 0x0A5C },
+ { 0x0A5E, 0x0A5E },
+ { 0x0A70, 0x0A71 },
+ { 0x0A72, 0x0A74 },
+ { 0x0A81, 0x0A82 },
+ { 0x0A83, 0x0A83 },
+ { 0x0A85, 0x0A8D },
+ { 0x0A8F, 0x0A91 },
+ { 0x0A93, 0x0AA8 },
+ { 0x0AAA, 0x0AB0 },
+ { 0x0AB2, 0x0AB3 },
+ { 0x0AB5, 0x0AB9 },
+ { 0x0ABD, 0x0ABD },
+ { 0x0ABE, 0x0AC0 },
+ { 0x0AC1, 0x0AC5 },
+ { 0x0AC7, 0x0AC8 },
+ { 0x0AC9, 0x0AC9 },
+ { 0x0ACB, 0x0ACC },
+ { 0x0AD0, 0x0AD0 },
+ { 0x0AE0, 0x0AE1 },
+ { 0x0AE2, 0x0AE3 },
+ { 0x0B01, 0x0B01 },
+ { 0x0B02, 0x0B03 },
+ { 0x0B05, 0x0B0C },
+ { 0x0B0F, 0x0B10 },
+ { 0x0B13, 0x0B28 },
+ { 0x0B2A, 0x0B30 },
+ { 0x0B32, 0x0B33 },
+ { 0x0B35, 0x0B39 },
+ { 0x0B3D, 0x0B3D },
+ { 0x0B3E, 0x0B3E },
+ { 0x0B3F, 0x0B3F },
+ { 0x0B40, 0x0B40 },
+ { 0x0B41, 0x0B43 },
+ { 0x0B47, 0x0B48 },
+ { 0x0B4B, 0x0B4C },
+ { 0x0B56, 0x0B56 },
+ { 0x0B57, 0x0B57 },
+ { 0x0B5C, 0x0B5D },
+ { 0x0B5F, 0x0B61 },
+ { 0x0B71, 0x0B71 },
+ { 0x0B82, 0x0B82 },
+ { 0x0B83, 0x0B83 },
+ { 0x0B85, 0x0B8A },
+ { 0x0B8E, 0x0B90 },
+ { 0x0B92, 0x0B95 },
+ { 0x0B99, 0x0B9A },
+ { 0x0B9C, 0x0B9C },
+ { 0x0B9E, 0x0B9F },
+ { 0x0BA3, 0x0BA4 },
+ { 0x0BA8, 0x0BAA },
+ { 0x0BAE, 0x0BB9 },
+ { 0x0BBE, 0x0BBF },
+ { 0x0BC0, 0x0BC0 },
+ { 0x0BC1, 0x0BC2 },
+ { 0x0BC6, 0x0BC8 },
+ { 0x0BCA, 0x0BCC },
+ { 0x0BD7, 0x0BD7 },
+ { 0x0C01, 0x0C03 },
+ { 0x0C05, 0x0C0C },
+ { 0x0C0E, 0x0C10 },
+ { 0x0C12, 0x0C28 },
+ { 0x0C2A, 0x0C33 },
+ { 0x0C35, 0x0C39 },
+ { 0x0C3E, 0x0C40 },
+ { 0x0C41, 0x0C44 },
+ { 0x0C46, 0x0C48 },
+ { 0x0C4A, 0x0C4C },
+ { 0x0C55, 0x0C56 },
+ { 0x0C60, 0x0C61 },
+ { 0x0C82, 0x0C83 },
+ { 0x0C85, 0x0C8C },
+ { 0x0C8E, 0x0C90 },
+ { 0x0C92, 0x0CA8 },
+ { 0x0CAA, 0x0CB3 },
+ { 0x0CB5, 0x0CB9 },
+ { 0x0CBD, 0x0CBD },
+ { 0x0CBE, 0x0CBE },
+ { 0x0CBF, 0x0CBF },
+ { 0x0CC0, 0x0CC4 },
+ { 0x0CC6, 0x0CC6 },
+ { 0x0CC7, 0x0CC8 },
+ { 0x0CCA, 0x0CCB },
+ { 0x0CCC, 0x0CCC },
+ { 0x0CD5, 0x0CD6 },
+ { 0x0CDE, 0x0CDE },
+ { 0x0CE0, 0x0CE1 },
+ { 0x0D02, 0x0D03 },
+ { 0x0D05, 0x0D0C },
+ { 0x0D0E, 0x0D10 },
+ { 0x0D12, 0x0D28 },
+ { 0x0D2A, 0x0D39 },
+ { 0x0D3E, 0x0D40 },
+ { 0x0D41, 0x0D43 },
+ { 0x0D46, 0x0D48 },
+ { 0x0D4A, 0x0D4C },
+ { 0x0D57, 0x0D57 },
+ { 0x0D60, 0x0D61 },
+ { 0x0D82, 0x0D83 },
+ { 0x0D85, 0x0D96 },
+ { 0x0D9A, 0x0DB1 },
+ { 0x0DB3, 0x0DBB },
+ { 0x0DBD, 0x0DBD },
+ { 0x0DC0, 0x0DC6 },
+ { 0x0DCF, 0x0DD1 },
+ { 0x0DD2, 0x0DD4 },
+ { 0x0DD6, 0x0DD6 },
+ { 0x0DD8, 0x0DDF },
+ { 0x0DF2, 0x0DF3 },
+ { 0x0E01, 0x0E30 },
+ { 0x0E31, 0x0E31 },
+ { 0x0E32, 0x0E33 },
+ { 0x0E34, 0x0E3A },
+ { 0x0E40, 0x0E45 },
+ { 0x0E46, 0x0E46 },
+ { 0x0E4D, 0x0E4D },
+ { 0x0E81, 0x0E82 },
+ { 0x0E84, 0x0E84 },
+ { 0x0E87, 0x0E88 },
+ { 0x0E8A, 0x0E8A },
+ { 0x0E8D, 0x0E8D },
+ { 0x0E94, 0x0E97 },
+ { 0x0E99, 0x0E9F },
+ { 0x0EA1, 0x0EA3 },
+ { 0x0EA5, 0x0EA5 },
+ { 0x0EA7, 0x0EA7 },
+ { 0x0EAA, 0x0EAB },
+ { 0x0EAD, 0x0EB0 },
+ { 0x0EB1, 0x0EB1 },
+ { 0x0EB2, 0x0EB3 },
+ { 0x0EB4, 0x0EB9 },
+ { 0x0EBB, 0x0EBC },
+ { 0x0EBD, 0x0EBD },
+ { 0x0EC0, 0x0EC4 },
+ { 0x0EC6, 0x0EC6 },
+ { 0x0ECD, 0x0ECD },
+ { 0x0EDC, 0x0EDD },
+ { 0x0F00, 0x0F00 },
+ { 0x0F40, 0x0F47 },
+ { 0x0F49, 0x0F6A },
+ { 0x0F71, 0x0F7E },
+ { 0x0F7F, 0x0F7F },
+ { 0x0F80, 0x0F81 },
+ { 0x0F88, 0x0F8B },
+ { 0x0F90, 0x0F97 },
+ { 0x0F99, 0x0FBC },
+ { 0x1000, 0x1021 },
+ { 0x1023, 0x1027 },
+ { 0x1029, 0x102A },
+ { 0x102C, 0x102C },
+ { 0x102D, 0x1030 },
+ { 0x1031, 0x1031 },
+ { 0x1032, 0x1032 },
+ { 0x1036, 0x1036 },
+ { 0x1038, 0x1038 },
+ { 0x1050, 0x1055 },
+ { 0x1056, 0x1057 },
+ { 0x1058, 0x1059 },
+ { 0x10A0, 0x10C5 },
+ { 0x10D0, 0x10FA },
+ { 0x10FC, 0x10FC },
+ { 0x1100, 0x1159 },
+ { 0x115F, 0x11A2 },
+ { 0x11A8, 0x11F9 },
+ { 0x1200, 0x1248 },
+ { 0x124A, 0x124D },
+ { 0x1250, 0x1256 },
+ { 0x1258, 0x1258 },
+ { 0x125A, 0x125D },
+ { 0x1260, 0x1288 },
+ { 0x128A, 0x128D },
+ { 0x1290, 0x12B0 },
+ { 0x12B2, 0x12B5 },
+ { 0x12B8, 0x12BE },
+ { 0x12C0, 0x12C0 },
+ { 0x12C2, 0x12C5 },
+ { 0x12C8, 0x12D6 },
+ { 0x12D8, 0x1310 },
+ { 0x1312, 0x1315 },
+ { 0x1318, 0x135A },
+ { 0x135F, 0x135F },
+ { 0x1380, 0x138F },
+ { 0x13A0, 0x13F4 },
+ { 0x1401, 0x166C },
+ { 0x166F, 0x1676 },
+ { 0x1681, 0x169A },
+ { 0x16A0, 0x16EA },
+ { 0x16EE, 0x16F0 },
+ { 0x1700, 0x170C },
+ { 0x170E, 0x1711 },
+ { 0x1712, 0x1713 },
+ { 0x1720, 0x1731 },
+ { 0x1732, 0x1733 },
+ { 0x1740, 0x1751 },
+ { 0x1752, 0x1753 },
+ { 0x1760, 0x176C },
+ { 0x176E, 0x1770 },
+ { 0x1772, 0x1773 },
+ { 0x1780, 0x17B3 },
+ { 0x17B6, 0x17B6 },
+ { 0x17B7, 0x17BD },
+ { 0x17BE, 0x17C5 },
+ { 0x17C6, 0x17C6 },
+ { 0x17C7, 0x17C8 },
+ { 0x17D7, 0x17D7 },
+ { 0x17DC, 0x17DC },
+ { 0x1820, 0x1842 },
+ { 0x1843, 0x1843 },
+ { 0x1844, 0x1877 },
+ { 0x1880, 0x18A8 },
+ { 0x18A9, 0x18A9 },
+ { 0x1900, 0x191C },
+ { 0x1920, 0x1922 },
+ { 0x1923, 0x1926 },
+ { 0x1927, 0x1928 },
+ { 0x1929, 0x192B },
+ { 0x1930, 0x1931 },
+ { 0x1932, 0x1932 },
+ { 0x1933, 0x1938 },
+ { 0x1950, 0x196D },
+ { 0x1970, 0x1974 },
+ { 0x1980, 0x19A9 },
+ { 0x19B0, 0x19C0 },
+ { 0x19C1, 0x19C7 },
+ { 0x19C8, 0x19C9 },
+ { 0x1A00, 0x1A16 },
+ { 0x1A17, 0x1A18 },
+ { 0x1A19, 0x1A1B },
+ { 0x1D00, 0x1D2B },
+ { 0x1D2C, 0x1D61 },
+ { 0x1D62, 0x1D77 },
+ { 0x1D78, 0x1D78 },
+ { 0x1D79, 0x1D9A },
+ { 0x1D9B, 0x1DBF },
+ { 0x1E00, 0x1E9B },
+ { 0x1EA0, 0x1EF9 },
+ { 0x1F00, 0x1F15 },
+ { 0x1F18, 0x1F1D },
+ { 0x1F20, 0x1F45 },
+ { 0x1F48, 0x1F4D },
+ { 0x1F50, 0x1F57 },
+ { 0x1F59, 0x1F59 },
+ { 0x1F5B, 0x1F5B },
+ { 0x1F5D, 0x1F5D },
+ { 0x1F5F, 0x1F7D },
+ { 0x1F80, 0x1FB4 },
+ { 0x1FB6, 0x1FBC },
+ { 0x1FBE, 0x1FBE },
+ { 0x1FC2, 0x1FC4 },
+ { 0x1FC6, 0x1FCC },
+ { 0x1FD0, 0x1FD3 },
+ { 0x1FD6, 0x1FDB },
+ { 0x1FE0, 0x1FEC },
+ { 0x1FF2, 0x1FF4 },
+ { 0x1FF6, 0x1FFC },
+ { 0x2071, 0x2071 },
+ { 0x207F, 0x207F },
+ { 0x2090, 0x2094 },
+ { 0x2102, 0x2102 },
+ { 0x2107, 0x2107 },
+ { 0x210A, 0x2113 },
+ { 0x2115, 0x2115 },
+ { 0x2119, 0x211D },
+ { 0x2124, 0x2124 },
+ { 0x2126, 0x2126 },
+ { 0x2128, 0x2128 },
+ { 0x212A, 0x212D },
+ { 0x212F, 0x2131 },
+ { 0x2133, 0x2134 },
+ { 0x2135, 0x2138 },
+ { 0x2139, 0x2139 },
+ { 0x213C, 0x213F },
+ { 0x2145, 0x2149 },
+ { 0x2160, 0x2183 },
+ { 0x24B6, 0x24E9 },
+ { 0x2C00, 0x2C2E },
+ { 0x2C30, 0x2C5E },
+ { 0x2C80, 0x2CE4 },
+ { 0x2D00, 0x2D25 },
+ { 0x2D30, 0x2D65 },
+ { 0x2D6F, 0x2D6F },
+ { 0x2D80, 0x2D96 },
+ { 0x2DA0, 0x2DA6 },
+ { 0x2DA8, 0x2DAE },
+ { 0x2DB0, 0x2DB6 },
+ { 0x2DB8, 0x2DBE },
+ { 0x2DC0, 0x2DC6 },
+ { 0x2DC8, 0x2DCE },
+ { 0x2DD0, 0x2DD6 },
+ { 0x2DD8, 0x2DDE },
+ { 0x3005, 0x3005 },
+ { 0x3006, 0x3006 },
+ { 0x3007, 0x3007 },
+ { 0x3021, 0x3029 },
+ { 0x3031, 0x3035 },
+ { 0x3038, 0x303A },
+ { 0x303B, 0x303B },
+ { 0x303C, 0x303C },
+ { 0x3041, 0x3096 },
+ { 0x309D, 0x309E },
+ { 0x309F, 0x309F },
+ { 0x30A1, 0x30FA },
+ { 0x30FC, 0x30FE },
+ { 0x30FF, 0x30FF },
+ { 0x3105, 0x312C },
+ { 0x3131, 0x318E },
+ { 0x31A0, 0x31B7 },
+ { 0x31F0, 0x31FF },
+ { 0x3400, 0x4DB5 },
+ { 0x4E00, 0x9FBB },
+ { 0xA000, 0xA014 },
+ { 0xA015, 0xA015 },
+ { 0xA016, 0xA48C },
+ { 0xA800, 0xA801 },
+ { 0xA803, 0xA805 },
+ { 0xA807, 0xA80A },
+ { 0xA80C, 0xA822 },
+ { 0xA823, 0xA824 },
+ { 0xA825, 0xA826 },
+ { 0xA827, 0xA827 },
+ { 0xAC00, 0xD7A3 },
+ { 0xF900, 0xFA2D },
+ { 0xFA30, 0xFA6A },
+ { 0xFA70, 0xFAD9 },
+ { 0xFB00, 0xFB06 },
+ { 0xFB13, 0xFB17 },
+ { 0xFB1D, 0xFB1D },
+ { 0xFB1E, 0xFB1E },
+ { 0xFB1F, 0xFB28 },
+ { 0xFB2A, 0xFB36 },
+ { 0xFB38, 0xFB3C },
+ { 0xFB3E, 0xFB3E },
+ { 0xFB40, 0xFB41 },
+ { 0xFB43, 0xFB44 },
+ { 0xFB46, 0xFBB1 },
+ { 0xFBD3, 0xFD3D },
+ { 0xFD50, 0xFD8F },
+ { 0xFD92, 0xFDC7 },
+ { 0xFDF0, 0xFDFB },
+ { 0xFE70, 0xFE74 },
+ { 0xFE76, 0xFEFC },
+ { 0xFF21, 0xFF3A },
+ { 0xFF41, 0xFF5A },
+ { 0xFF66, 0xFF6F },
+ { 0xFF70, 0xFF70 },
+ { 0xFF71, 0xFF9D },
+ { 0xFF9E, 0xFF9F },
+ { 0xFFA0, 0xFFBE },
+ { 0xFFC2, 0xFFC7 },
+ { 0xFFCA, 0xFFCF },
+ { 0xFFD2, 0xFFD7 },
+ { 0xFFDA, 0xFFDC },
+};
diff --git a/libwc/map/ucs_isdigit.map b/libwc/map/ucs_isdigit.map
new file mode 100644
index 0000000..475a901
--- /dev/null
+++ b/libwc/map/ucs_isdigit.map
@@ -0,0 +1,30 @@
+/*
+ File generated from UnicodeData-4.1.0.txt.
+*/
+
+
+#define N_ucs_isdigit_map 21
+
+static wc_map ucs_isdigit_map[ N_ucs_isdigit_map ] = {
+ { 0x0030, 0x0039 },
+ { 0x0660, 0x0669 },
+ { 0x06F0, 0x06F9 },
+ { 0x0966, 0x096F },
+ { 0x09E6, 0x09EF },
+ { 0x0A66, 0x0A6F },
+ { 0x0AE6, 0x0AEF },
+ { 0x0B66, 0x0B6F },
+ { 0x0BE6, 0x0BEF },
+ { 0x0C66, 0x0C6F },
+ { 0x0CE6, 0x0CEF },
+ { 0x0D66, 0x0D6F },
+ { 0x0E50, 0x0E59 },
+ { 0x0ED0, 0x0ED9 },
+ { 0x0F20, 0x0F29 },
+ { 0x1040, 0x1049 },
+ { 0x17E0, 0x17E9 },
+ { 0x1810, 0x1819 },
+ { 0x1946, 0x194F },
+ { 0x19D0, 0x19D9 },
+ { 0xFF10, 0xFF19 },
+};
diff --git a/libwc/map/ucs_islower.map b/libwc/map/ucs_islower.map
new file mode 100644
index 0000000..4d4d2d0
--- /dev/null
+++ b/libwc/map/ucs_islower.map
@@ -0,0 +1,471 @@
+/*
+ File generated from DerivedCoreProperties-4.1.0.txt.
+*/
+
+#define N_ucs_islower_map 463
+
+static wc_map ucs_islower_map[ N_ucs_islower_map ] = {
+ { 0x0061, 0x007A },
+ { 0x00AA, 0x00AA },
+ { 0x00B5, 0x00B5 },
+ { 0x00BA, 0x00BA },
+ { 0x00DF, 0x00F6 },
+ { 0x00F8, 0x00FF },
+ { 0x0101, 0x0101 },
+ { 0x0103, 0x0103 },
+ { 0x0105, 0x0105 },
+ { 0x0107, 0x0107 },
+ { 0x0109, 0x0109 },
+ { 0x010B, 0x010B },
+ { 0x010D, 0x010D },
+ { 0x010F, 0x010F },
+ { 0x0111, 0x0111 },
+ { 0x0113, 0x0113 },
+ { 0x0115, 0x0115 },
+ { 0x0117, 0x0117 },
+ { 0x0119, 0x0119 },
+ { 0x011B, 0x011B },
+ { 0x011D, 0x011D },
+ { 0x011F, 0x011F },
+ { 0x0121, 0x0121 },
+ { 0x0123, 0x0123 },
+ { 0x0125, 0x0125 },
+ { 0x0127, 0x0127 },
+ { 0x0129, 0x0129 },
+ { 0x012B, 0x012B },
+ { 0x012D, 0x012D },
+ { 0x012F, 0x012F },
+ { 0x0131, 0x0131 },
+ { 0x0133, 0x0133 },
+ { 0x0135, 0x0135 },
+ { 0x0137, 0x0138 },
+ { 0x013A, 0x013A },
+ { 0x013C, 0x013C },
+ { 0x013E, 0x013E },
+ { 0x0140, 0x0140 },
+ { 0x0142, 0x0142 },
+ { 0x0144, 0x0144 },
+ { 0x0146, 0x0146 },
+ { 0x0148, 0x0149 },
+ { 0x014B, 0x014B },
+ { 0x014D, 0x014D },
+ { 0x014F, 0x014F },
+ { 0x0151, 0x0151 },
+ { 0x0153, 0x0153 },
+ { 0x0155, 0x0155 },
+ { 0x0157, 0x0157 },
+ { 0x0159, 0x0159 },
+ { 0x015B, 0x015B },
+ { 0x015D, 0x015D },
+ { 0x015F, 0x015F },
+ { 0x0161, 0x0161 },
+ { 0x0163, 0x0163 },
+ { 0x0165, 0x0165 },
+ { 0x0167, 0x0167 },
+ { 0x0169, 0x0169 },
+ { 0x016B, 0x016B },
+ { 0x016D, 0x016D },
+ { 0x016F, 0x016F },
+ { 0x0171, 0x0171 },
+ { 0x0173, 0x0173 },
+ { 0x0175, 0x0175 },
+ { 0x0177, 0x0177 },
+ { 0x017A, 0x017A },
+ { 0x017C, 0x017C },
+ { 0x017E, 0x0180 },
+ { 0x0183, 0x0183 },
+ { 0x0185, 0x0185 },
+ { 0x0188, 0x0188 },
+ { 0x018C, 0x018D },
+ { 0x0192, 0x0192 },
+ { 0x0195, 0x0195 },
+ { 0x0199, 0x019B },
+ { 0x019E, 0x019E },
+ { 0x01A1, 0x01A1 },
+ { 0x01A3, 0x01A3 },
+ { 0x01A5, 0x01A5 },
+ { 0x01A8, 0x01A8 },
+ { 0x01AA, 0x01AB },
+ { 0x01AD, 0x01AD },
+ { 0x01B0, 0x01B0 },
+ { 0x01B4, 0x01B4 },
+ { 0x01B6, 0x01B6 },
+ { 0x01B9, 0x01BA },
+ { 0x01BD, 0x01BF },
+ { 0x01C6, 0x01C6 },
+ { 0x01C9, 0x01C9 },
+ { 0x01CC, 0x01CC },
+ { 0x01CE, 0x01CE },
+ { 0x01D0, 0x01D0 },
+ { 0x01D2, 0x01D2 },
+ { 0x01D4, 0x01D4 },
+ { 0x01D6, 0x01D6 },
+ { 0x01D8, 0x01D8 },
+ { 0x01DA, 0x01DA },
+ { 0x01DC, 0x01DD },
+ { 0x01DF, 0x01DF },
+ { 0x01E1, 0x01E1 },
+ { 0x01E3, 0x01E3 },
+ { 0x01E5, 0x01E5 },
+ { 0x01E7, 0x01E7 },
+ { 0x01E9, 0x01E9 },
+ { 0x01EB, 0x01EB },
+ { 0x01ED, 0x01ED },
+ { 0x01EF, 0x01F0 },
+ { 0x01F3, 0x01F3 },
+ { 0x01F5, 0x01F5 },
+ { 0x01F9, 0x01F9 },
+ { 0x01FB, 0x01FB },
+ { 0x01FD, 0x01FD },
+ { 0x01FF, 0x01FF },
+ { 0x0201, 0x0201 },
+ { 0x0203, 0x0203 },
+ { 0x0205, 0x0205 },
+ { 0x0207, 0x0207 },
+ { 0x0209, 0x0209 },
+ { 0x020B, 0x020B },
+ { 0x020D, 0x020D },
+ { 0x020F, 0x020F },
+ { 0x0211, 0x0211 },
+ { 0x0213, 0x0213 },
+ { 0x0215, 0x0215 },
+ { 0x0217, 0x0217 },
+ { 0x0219, 0x0219 },
+ { 0x021B, 0x021B },
+ { 0x021D, 0x021D },
+ { 0x021F, 0x021F },
+ { 0x0221, 0x0221 },
+ { 0x0223, 0x0223 },
+ { 0x0225, 0x0225 },
+ { 0x0227, 0x0227 },
+ { 0x0229, 0x0229 },
+ { 0x022B, 0x022B },
+ { 0x022D, 0x022D },
+ { 0x022F, 0x022F },
+ { 0x0231, 0x0231 },
+ { 0x0233, 0x0239 },
+ { 0x023C, 0x023C },
+ { 0x023F, 0x0240 },
+ { 0x0250, 0x02AF },
+ { 0x02B0, 0x02B8 },
+ { 0x02C0, 0x02C1 },
+ { 0x02E0, 0x02E4 },
+ { 0x0345, 0x0345 },
+ { 0x037A, 0x037A },
+ { 0x0390, 0x0390 },
+ { 0x03AC, 0x03CE },
+ { 0x03D0, 0x03D1 },
+ { 0x03D5, 0x03D7 },
+ { 0x03D9, 0x03D9 },
+ { 0x03DB, 0x03DB },
+ { 0x03DD, 0x03DD },
+ { 0x03DF, 0x03DF },
+ { 0x03E1, 0x03E1 },
+ { 0x03E3, 0x03E3 },
+ { 0x03E5, 0x03E5 },
+ { 0x03E7, 0x03E7 },
+ { 0x03E9, 0x03E9 },
+ { 0x03EB, 0x03EB },
+ { 0x03ED, 0x03ED },
+ { 0x03EF, 0x03F3 },
+ { 0x03F5, 0x03F5 },
+ { 0x03F8, 0x03F8 },
+ { 0x03FB, 0x03FC },
+ { 0x0430, 0x045F },
+ { 0x0461, 0x0461 },
+ { 0x0463, 0x0463 },
+ { 0x0465, 0x0465 },
+ { 0x0467, 0x0467 },
+ { 0x0469, 0x0469 },
+ { 0x046B, 0x046B },
+ { 0x046D, 0x046D },
+ { 0x046F, 0x046F },
+ { 0x0471, 0x0471 },
+ { 0x0473, 0x0473 },
+ { 0x0475, 0x0475 },
+ { 0x0477, 0x0477 },
+ { 0x0479, 0x0479 },
+ { 0x047B, 0x047B },
+ { 0x047D, 0x047D },
+ { 0x047F, 0x047F },
+ { 0x0481, 0x0481 },
+ { 0x048B, 0x048B },
+ { 0x048D, 0x048D },
+ { 0x048F, 0x048F },
+ { 0x0491, 0x0491 },
+ { 0x0493, 0x0493 },
+ { 0x0495, 0x0495 },
+ { 0x0497, 0x0497 },
+ { 0x0499, 0x0499 },
+ { 0x049B, 0x049B },
+ { 0x049D, 0x049D },
+ { 0x049F, 0x049F },
+ { 0x04A1, 0x04A1 },
+ { 0x04A3, 0x04A3 },
+ { 0x04A5, 0x04A5 },
+ { 0x04A7, 0x04A7 },
+ { 0x04A9, 0x04A9 },
+ { 0x04AB, 0x04AB },
+ { 0x04AD, 0x04AD },
+ { 0x04AF, 0x04AF },
+ { 0x04B1, 0x04B1 },
+ { 0x04B3, 0x04B3 },
+ { 0x04B5, 0x04B5 },
+ { 0x04B7, 0x04B7 },
+ { 0x04B9, 0x04B9 },
+ { 0x04BB, 0x04BB },
+ { 0x04BD, 0x04BD },
+ { 0x04BF, 0x04BF },
+ { 0x04C2, 0x04C2 },
+ { 0x04C4, 0x04C4 },
+ { 0x04C6, 0x04C6 },
+ { 0x04C8, 0x04C8 },
+ { 0x04CA, 0x04CA },
+ { 0x04CC, 0x04CC },
+ { 0x04CE, 0x04CE },
+ { 0x04D1, 0x04D1 },
+ { 0x04D3, 0x04D3 },
+ { 0x04D5, 0x04D5 },
+ { 0x04D7, 0x04D7 },
+ { 0x04D9, 0x04D9 },
+ { 0x04DB, 0x04DB },
+ { 0x04DD, 0x04DD },
+ { 0x04DF, 0x04DF },
+ { 0x04E1, 0x04E1 },
+ { 0x04E3, 0x04E3 },
+ { 0x04E5, 0x04E5 },
+ { 0x04E7, 0x04E7 },
+ { 0x04E9, 0x04E9 },
+ { 0x04EB, 0x04EB },
+ { 0x04ED, 0x04ED },
+ { 0x04EF, 0x04EF },
+ { 0x04F1, 0x04F1 },
+ { 0x04F3, 0x04F3 },
+ { 0x04F5, 0x04F5 },
+ { 0x04F7, 0x04F7 },
+ { 0x04F9, 0x04F9 },
+ { 0x0501, 0x0501 },
+ { 0x0503, 0x0503 },
+ { 0x0505, 0x0505 },
+ { 0x0507, 0x0507 },
+ { 0x0509, 0x0509 },
+ { 0x050B, 0x050B },
+ { 0x050D, 0x050D },
+ { 0x050F, 0x050F },
+ { 0x0561, 0x0587 },
+ { 0x1D00, 0x1D2B },
+ { 0x1D2C, 0x1D61 },
+ { 0x1D62, 0x1D77 },
+ { 0x1D78, 0x1D78 },
+ { 0x1D79, 0x1D9A },
+ { 0x1D9B, 0x1DBF },
+ { 0x1E01, 0x1E01 },
+ { 0x1E03, 0x1E03 },
+ { 0x1E05, 0x1E05 },
+ { 0x1E07, 0x1E07 },
+ { 0x1E09, 0x1E09 },
+ { 0x1E0B, 0x1E0B },
+ { 0x1E0D, 0x1E0D },
+ { 0x1E0F, 0x1E0F },
+ { 0x1E11, 0x1E11 },
+ { 0x1E13, 0x1E13 },
+ { 0x1E15, 0x1E15 },
+ { 0x1E17, 0x1E17 },
+ { 0x1E19, 0x1E19 },
+ { 0x1E1B, 0x1E1B },
+ { 0x1E1D, 0x1E1D },
+ { 0x1E1F, 0x1E1F },
+ { 0x1E21, 0x1E21 },
+ { 0x1E23, 0x1E23 },
+ { 0x1E25, 0x1E25 },
+ { 0x1E27, 0x1E27 },
+ { 0x1E29, 0x1E29 },
+ { 0x1E2B, 0x1E2B },
+ { 0x1E2D, 0x1E2D },
+ { 0x1E2F, 0x1E2F },
+ { 0x1E31, 0x1E31 },
+ { 0x1E33, 0x1E33 },
+ { 0x1E35, 0x1E35 },
+ { 0x1E37, 0x1E37 },
+ { 0x1E39, 0x1E39 },
+ { 0x1E3B, 0x1E3B },
+ { 0x1E3D, 0x1E3D },
+ { 0x1E3F, 0x1E3F },
+ { 0x1E41, 0x1E41 },
+ { 0x1E43, 0x1E43 },
+ { 0x1E45, 0x1E45 },
+ { 0x1E47, 0x1E47 },
+ { 0x1E49, 0x1E49 },
+ { 0x1E4B, 0x1E4B },
+ { 0x1E4D, 0x1E4D },
+ { 0x1E4F, 0x1E4F },
+ { 0x1E51, 0x1E51 },
+ { 0x1E53, 0x1E53 },
+ { 0x1E55, 0x1E55 },
+ { 0x1E57, 0x1E57 },
+ { 0x1E59, 0x1E59 },
+ { 0x1E5B, 0x1E5B },
+ { 0x1E5D, 0x1E5D },
+ { 0x1E5F, 0x1E5F },
+ { 0x1E61, 0x1E61 },
+ { 0x1E63, 0x1E63 },
+ { 0x1E65, 0x1E65 },
+ { 0x1E67, 0x1E67 },
+ { 0x1E69, 0x1E69 },
+ { 0x1E6B, 0x1E6B },
+ { 0x1E6D, 0x1E6D },
+ { 0x1E6F, 0x1E6F },
+ { 0x1E71, 0x1E71 },
+ { 0x1E73, 0x1E73 },
+ { 0x1E75, 0x1E75 },
+ { 0x1E77, 0x1E77 },
+ { 0x1E79, 0x1E79 },
+ { 0x1E7B, 0x1E7B },
+ { 0x1E7D, 0x1E7D },
+ { 0x1E7F, 0x1E7F },
+ { 0x1E81, 0x1E81 },
+ { 0x1E83, 0x1E83 },
+ { 0x1E85, 0x1E85 },
+ { 0x1E87, 0x1E87 },
+ { 0x1E89, 0x1E89 },
+ { 0x1E8B, 0x1E8B },
+ { 0x1E8D, 0x1E8D },
+ { 0x1E8F, 0x1E8F },
+ { 0x1E91, 0x1E91 },
+ { 0x1E93, 0x1E93 },
+ { 0x1E95, 0x1E9B },
+ { 0x1EA1, 0x1EA1 },
+ { 0x1EA3, 0x1EA3 },
+ { 0x1EA5, 0x1EA5 },
+ { 0x1EA7, 0x1EA7 },
+ { 0x1EA9, 0x1EA9 },
+ { 0x1EAB, 0x1EAB },
+ { 0x1EAD, 0x1EAD },
+ { 0x1EAF, 0x1EAF },
+ { 0x1EB1, 0x1EB1 },
+ { 0x1EB3, 0x1EB3 },
+ { 0x1EB5, 0x1EB5 },
+ { 0x1EB7, 0x1EB7 },
+ { 0x1EB9, 0x1EB9 },
+ { 0x1EBB, 0x1EBB },
+ { 0x1EBD, 0x1EBD },
+ { 0x1EBF, 0x1EBF },
+ { 0x1EC1, 0x1EC1 },
+ { 0x1EC3, 0x1EC3 },
+ { 0x1EC5, 0x1EC5 },
+ { 0x1EC7, 0x1EC7 },
+ { 0x1EC9, 0x1EC9 },
+ { 0x1ECB, 0x1ECB },
+ { 0x1ECD, 0x1ECD },
+ { 0x1ECF, 0x1ECF },
+ { 0x1ED1, 0x1ED1 },
+ { 0x1ED3, 0x1ED3 },
+ { 0x1ED5, 0x1ED5 },
+ { 0x1ED7, 0x1ED7 },
+ { 0x1ED9, 0x1ED9 },
+ { 0x1EDB, 0x1EDB },
+ { 0x1EDD, 0x1EDD },
+ { 0x1EDF, 0x1EDF },
+ { 0x1EE1, 0x1EE1 },
+ { 0x1EE3, 0x1EE3 },
+ { 0x1EE5, 0x1EE5 },
+ { 0x1EE7, 0x1EE7 },
+ { 0x1EE9, 0x1EE9 },
+ { 0x1EEB, 0x1EEB },
+ { 0x1EED, 0x1EED },
+ { 0x1EEF, 0x1EEF },
+ { 0x1EF1, 0x1EF1 },
+ { 0x1EF3, 0x1EF3 },
+ { 0x1EF5, 0x1EF5 },
+ { 0x1EF7, 0x1EF7 },
+ { 0x1EF9, 0x1EF9 },
+ { 0x1F00, 0x1F07 },
+ { 0x1F10, 0x1F15 },
+ { 0x1F20, 0x1F27 },
+ { 0x1F30, 0x1F37 },
+ { 0x1F40, 0x1F45 },
+ { 0x1F50, 0x1F57 },
+ { 0x1F60, 0x1F67 },
+ { 0x1F70, 0x1F7D },
+ { 0x1F80, 0x1F87 },
+ { 0x1F90, 0x1F97 },
+ { 0x1FA0, 0x1FA7 },
+ { 0x1FB0, 0x1FB4 },
+ { 0x1FB6, 0x1FB7 },
+ { 0x1FBE, 0x1FBE },
+ { 0x1FC2, 0x1FC4 },
+ { 0x1FC6, 0x1FC7 },
+ { 0x1FD0, 0x1FD3 },
+ { 0x1FD6, 0x1FD7 },
+ { 0x1FE0, 0x1FE7 },
+ { 0x1FF2, 0x1FF4 },
+ { 0x1FF6, 0x1FF7 },
+ { 0x2071, 0x2071 },
+ { 0x207F, 0x207F },
+ { 0x2090, 0x2094 },
+ { 0x210A, 0x210A },
+ { 0x210E, 0x210F },
+ { 0x2113, 0x2113 },
+ { 0x212F, 0x212F },
+ { 0x2134, 0x2134 },
+ { 0x2139, 0x2139 },
+ { 0x213C, 0x213D },
+ { 0x2146, 0x2149 },
+ { 0x2170, 0x217F },
+ { 0x24D0, 0x24E9 },
+ { 0x2C30, 0x2C5E },
+ { 0x2C81, 0x2C81 },
+ { 0x2C83, 0x2C83 },
+ { 0x2C85, 0x2C85 },
+ { 0x2C87, 0x2C87 },
+ { 0x2C89, 0x2C89 },
+ { 0x2C8B, 0x2C8B },
+ { 0x2C8D, 0x2C8D },
+ { 0x2C8F, 0x2C8F },
+ { 0x2C91, 0x2C91 },
+ { 0x2C93, 0x2C93 },
+ { 0x2C95, 0x2C95 },
+ { 0x2C97, 0x2C97 },
+ { 0x2C99, 0x2C99 },
+ { 0x2C9B, 0x2C9B },
+ { 0x2C9D, 0x2C9D },
+ { 0x2C9F, 0x2C9F },
+ { 0x2CA1, 0x2CA1 },
+ { 0x2CA3, 0x2CA3 },
+ { 0x2CA5, 0x2CA5 },
+ { 0x2CA7, 0x2CA7 },
+ { 0x2CA9, 0x2CA9 },
+ { 0x2CAB, 0x2CAB },
+ { 0x2CAD, 0x2CAD },
+ { 0x2CAF, 0x2CAF },
+ { 0x2CB1, 0x2CB1 },
+ { 0x2CB3, 0x2CB3 },
+ { 0x2CB5, 0x2CB5 },
+ { 0x2CB7, 0x2CB7 },
+ { 0x2CB9, 0x2CB9 },
+ { 0x2CBB, 0x2CBB },
+ { 0x2CBD, 0x2CBD },
+ { 0x2CBF, 0x2CBF },
+ { 0x2CC1, 0x2CC1 },
+ { 0x2CC3, 0x2CC3 },
+ { 0x2CC5, 0x2CC5 },
+ { 0x2CC7, 0x2CC7 },
+ { 0x2CC9, 0x2CC9 },
+ { 0x2CCB, 0x2CCB },
+ { 0x2CCD, 0x2CCD },
+ { 0x2CCF, 0x2CCF },
+ { 0x2CD1, 0x2CD1 },
+ { 0x2CD3, 0x2CD3 },
+ { 0x2CD5, 0x2CD5 },
+ { 0x2CD7, 0x2CD7 },
+ { 0x2CD9, 0x2CD9 },
+ { 0x2CDB, 0x2CDB },
+ { 0x2CDD, 0x2CDD },
+ { 0x2CDF, 0x2CDF },
+ { 0x2CE1, 0x2CE1 },
+ { 0x2CE3, 0x2CE4 },
+ { 0x2D00, 0x2D25 },
+ { 0xFB00, 0xFB06 },
+ { 0xFB13, 0xFB17 },
+ { 0xFF41, 0xFF5A },
+};
diff --git a/libwc/map/ucs_isupper.map b/libwc/map/ucs_isupper.map
new file mode 100644
index 0000000..2bfc5cd
--- /dev/null
+++ b/libwc/map/ucs_isupper.map
@@ -0,0 +1,455 @@
+/*
+ File generated from DerivedCoreProperties-4.1.0.txt.
+*/
+
+#define N_ucs_isupper_map 447
+
+static wc_map ucs_isupper_map[ N_ucs_isupper_map ] = {
+ { 0x0041, 0x005A },
+ { 0x00C0, 0x00D6 },
+ { 0x00D8, 0x00DE },
+ { 0x0100, 0x0100 },
+ { 0x0102, 0x0102 },
+ { 0x0104, 0x0104 },
+ { 0x0106, 0x0106 },
+ { 0x0108, 0x0108 },
+ { 0x010A, 0x010A },
+ { 0x010C, 0x010C },
+ { 0x010E, 0x010E },
+ { 0x0110, 0x0110 },
+ { 0x0112, 0x0112 },
+ { 0x0114, 0x0114 },
+ { 0x0116, 0x0116 },
+ { 0x0118, 0x0118 },
+ { 0x011A, 0x011A },
+ { 0x011C, 0x011C },
+ { 0x011E, 0x011E },
+ { 0x0120, 0x0120 },
+ { 0x0122, 0x0122 },
+ { 0x0124, 0x0124 },
+ { 0x0126, 0x0126 },
+ { 0x0128, 0x0128 },
+ { 0x012A, 0x012A },
+ { 0x012C, 0x012C },
+ { 0x012E, 0x012E },
+ { 0x0130, 0x0130 },
+ { 0x0132, 0x0132 },
+ { 0x0134, 0x0134 },
+ { 0x0136, 0x0136 },
+ { 0x0139, 0x0139 },
+ { 0x013B, 0x013B },
+ { 0x013D, 0x013D },
+ { 0x013F, 0x013F },
+ { 0x0141, 0x0141 },
+ { 0x0143, 0x0143 },
+ { 0x0145, 0x0145 },
+ { 0x0147, 0x0147 },
+ { 0x014A, 0x014A },
+ { 0x014C, 0x014C },
+ { 0x014E, 0x014E },
+ { 0x0150, 0x0150 },
+ { 0x0152, 0x0152 },
+ { 0x0154, 0x0154 },
+ { 0x0156, 0x0156 },
+ { 0x0158, 0x0158 },
+ { 0x015A, 0x015A },
+ { 0x015C, 0x015C },
+ { 0x015E, 0x015E },
+ { 0x0160, 0x0160 },
+ { 0x0162, 0x0162 },
+ { 0x0164, 0x0164 },
+ { 0x0166, 0x0166 },
+ { 0x0168, 0x0168 },
+ { 0x016A, 0x016A },
+ { 0x016C, 0x016C },
+ { 0x016E, 0x016E },
+ { 0x0170, 0x0170 },
+ { 0x0172, 0x0172 },
+ { 0x0174, 0x0174 },
+ { 0x0176, 0x0176 },
+ { 0x0178, 0x0179 },
+ { 0x017B, 0x017B },
+ { 0x017D, 0x017D },
+ { 0x0181, 0x0182 },
+ { 0x0184, 0x0184 },
+ { 0x0186, 0x0187 },
+ { 0x0189, 0x018B },
+ { 0x018E, 0x0191 },
+ { 0x0193, 0x0194 },
+ { 0x0196, 0x0198 },
+ { 0x019C, 0x019D },
+ { 0x019F, 0x01A0 },
+ { 0x01A2, 0x01A2 },
+ { 0x01A4, 0x01A4 },
+ { 0x01A6, 0x01A7 },
+ { 0x01A9, 0x01A9 },
+ { 0x01AC, 0x01AC },
+ { 0x01AE, 0x01AF },
+ { 0x01B1, 0x01B3 },
+ { 0x01B5, 0x01B5 },
+ { 0x01B7, 0x01B8 },
+ { 0x01BC, 0x01BC },
+ { 0x01C4, 0x01C4 },
+ { 0x01C7, 0x01C7 },
+ { 0x01CA, 0x01CA },
+ { 0x01CD, 0x01CD },
+ { 0x01CF, 0x01CF },
+ { 0x01D1, 0x01D1 },
+ { 0x01D3, 0x01D3 },
+ { 0x01D5, 0x01D5 },
+ { 0x01D7, 0x01D7 },
+ { 0x01D9, 0x01D9 },
+ { 0x01DB, 0x01DB },
+ { 0x01DE, 0x01DE },
+ { 0x01E0, 0x01E0 },
+ { 0x01E2, 0x01E2 },
+ { 0x01E4, 0x01E4 },
+ { 0x01E6, 0x01E6 },
+ { 0x01E8, 0x01E8 },
+ { 0x01EA, 0x01EA },
+ { 0x01EC, 0x01EC },
+ { 0x01EE, 0x01EE },
+ { 0x01F1, 0x01F1 },
+ { 0x01F4, 0x01F4 },
+ { 0x01F6, 0x01F8 },
+ { 0x01FA, 0x01FA },
+ { 0x01FC, 0x01FC },
+ { 0x01FE, 0x01FE },
+ { 0x0200, 0x0200 },
+ { 0x0202, 0x0202 },
+ { 0x0204, 0x0204 },
+ { 0x0206, 0x0206 },
+ { 0x0208, 0x0208 },
+ { 0x020A, 0x020A },
+ { 0x020C, 0x020C },
+ { 0x020E, 0x020E },
+ { 0x0210, 0x0210 },
+ { 0x0212, 0x0212 },
+ { 0x0214, 0x0214 },
+ { 0x0216, 0x0216 },
+ { 0x0218, 0x0218 },
+ { 0x021A, 0x021A },
+ { 0x021C, 0x021C },
+ { 0x021E, 0x021E },
+ { 0x0220, 0x0220 },
+ { 0x0222, 0x0222 },
+ { 0x0224, 0x0224 },
+ { 0x0226, 0x0226 },
+ { 0x0228, 0x0228 },
+ { 0x022A, 0x022A },
+ { 0x022C, 0x022C },
+ { 0x022E, 0x022E },
+ { 0x0230, 0x0230 },
+ { 0x0232, 0x0232 },
+ { 0x023A, 0x023B },
+ { 0x023D, 0x023E },
+ { 0x0241, 0x0241 },
+ { 0x0386, 0x0386 },
+ { 0x0388, 0x038A },
+ { 0x038C, 0x038C },
+ { 0x038E, 0x038F },
+ { 0x0391, 0x03A1 },
+ { 0x03A3, 0x03AB },
+ { 0x03D2, 0x03D4 },
+ { 0x03D8, 0x03D8 },
+ { 0x03DA, 0x03DA },
+ { 0x03DC, 0x03DC },
+ { 0x03DE, 0x03DE },
+ { 0x03E0, 0x03E0 },
+ { 0x03E2, 0x03E2 },
+ { 0x03E4, 0x03E4 },
+ { 0x03E6, 0x03E6 },
+ { 0x03E8, 0x03E8 },
+ { 0x03EA, 0x03EA },
+ { 0x03EC, 0x03EC },
+ { 0x03EE, 0x03EE },
+ { 0x03F4, 0x03F4 },
+ { 0x03F7, 0x03F7 },
+ { 0x03F9, 0x03FA },
+ { 0x03FD, 0x042F },
+ { 0x0460, 0x0460 },
+ { 0x0462, 0x0462 },
+ { 0x0464, 0x0464 },
+ { 0x0466, 0x0466 },
+ { 0x0468, 0x0468 },
+ { 0x046A, 0x046A },
+ { 0x046C, 0x046C },
+ { 0x046E, 0x046E },
+ { 0x0470, 0x0470 },
+ { 0x0472, 0x0472 },
+ { 0x0474, 0x0474 },
+ { 0x0476, 0x0476 },
+ { 0x0478, 0x0478 },
+ { 0x047A, 0x047A },
+ { 0x047C, 0x047C },
+ { 0x047E, 0x047E },
+ { 0x0480, 0x0480 },
+ { 0x048A, 0x048A },
+ { 0x048C, 0x048C },
+ { 0x048E, 0x048E },
+ { 0x0490, 0x0490 },
+ { 0x0492, 0x0492 },
+ { 0x0494, 0x0494 },
+ { 0x0496, 0x0496 },
+ { 0x0498, 0x0498 },
+ { 0x049A, 0x049A },
+ { 0x049C, 0x049C },
+ { 0x049E, 0x049E },
+ { 0x04A0, 0x04A0 },
+ { 0x04A2, 0x04A2 },
+ { 0x04A4, 0x04A4 },
+ { 0x04A6, 0x04A6 },
+ { 0x04A8, 0x04A8 },
+ { 0x04AA, 0x04AA },
+ { 0x04AC, 0x04AC },
+ { 0x04AE, 0x04AE },
+ { 0x04B0, 0x04B0 },
+ { 0x04B2, 0x04B2 },
+ { 0x04B4, 0x04B4 },
+ { 0x04B6, 0x04B6 },
+ { 0x04B8, 0x04B8 },
+ { 0x04BA, 0x04BA },
+ { 0x04BC, 0x04BC },
+ { 0x04BE, 0x04BE },
+ { 0x04C0, 0x04C1 },
+ { 0x04C3, 0x04C3 },
+ { 0x04C5, 0x04C5 },
+ { 0x04C7, 0x04C7 },
+ { 0x04C9, 0x04C9 },
+ { 0x04CB, 0x04CB },
+ { 0x04CD, 0x04CD },
+ { 0x04D0, 0x04D0 },
+ { 0x04D2, 0x04D2 },
+ { 0x04D4, 0x04D4 },
+ { 0x04D6, 0x04D6 },
+ { 0x04D8, 0x04D8 },
+ { 0x04DA, 0x04DA },
+ { 0x04DC, 0x04DC },
+ { 0x04DE, 0x04DE },
+ { 0x04E0, 0x04E0 },
+ { 0x04E2, 0x04E2 },
+ { 0x04E4, 0x04E4 },
+ { 0x04E6, 0x04E6 },
+ { 0x04E8, 0x04E8 },
+ { 0x04EA, 0x04EA },
+ { 0x04EC, 0x04EC },
+ { 0x04EE, 0x04EE },
+ { 0x04F0, 0x04F0 },
+ { 0x04F2, 0x04F2 },
+ { 0x04F4, 0x04F4 },
+ { 0x04F6, 0x04F6 },
+ { 0x04F8, 0x04F8 },
+ { 0x0500, 0x0500 },
+ { 0x0502, 0x0502 },
+ { 0x0504, 0x0504 },
+ { 0x0506, 0x0506 },
+ { 0x0508, 0x0508 },
+ { 0x050A, 0x050A },
+ { 0x050C, 0x050C },
+ { 0x050E, 0x050E },
+ { 0x0531, 0x0556 },
+ { 0x10A0, 0x10C5 },
+ { 0x1E00, 0x1E00 },
+ { 0x1E02, 0x1E02 },
+ { 0x1E04, 0x1E04 },
+ { 0x1E06, 0x1E06 },
+ { 0x1E08, 0x1E08 },
+ { 0x1E0A, 0x1E0A },
+ { 0x1E0C, 0x1E0C },
+ { 0x1E0E, 0x1E0E },
+ { 0x1E10, 0x1E10 },
+ { 0x1E12, 0x1E12 },
+ { 0x1E14, 0x1E14 },
+ { 0x1E16, 0x1E16 },
+ { 0x1E18, 0x1E18 },
+ { 0x1E1A, 0x1E1A },
+ { 0x1E1C, 0x1E1C },
+ { 0x1E1E, 0x1E1E },
+ { 0x1E20, 0x1E20 },
+ { 0x1E22, 0x1E22 },
+ { 0x1E24, 0x1E24 },
+ { 0x1E26, 0x1E26 },
+ { 0x1E28, 0x1E28 },
+ { 0x1E2A, 0x1E2A },
+ { 0x1E2C, 0x1E2C },
+ { 0x1E2E, 0x1E2E },
+ { 0x1E30, 0x1E30 },
+ { 0x1E32, 0x1E32 },
+ { 0x1E34, 0x1E34 },
+ { 0x1E36, 0x1E36 },
+ { 0x1E38, 0x1E38 },
+ { 0x1E3A, 0x1E3A },
+ { 0x1E3C, 0x1E3C },
+ { 0x1E3E, 0x1E3E },
+ { 0x1E40, 0x1E40 },
+ { 0x1E42, 0x1E42 },
+ { 0x1E44, 0x1E44 },
+ { 0x1E46, 0x1E46 },
+ { 0x1E48, 0x1E48 },
+ { 0x1E4A, 0x1E4A },
+ { 0x1E4C, 0x1E4C },
+ { 0x1E4E, 0x1E4E },
+ { 0x1E50, 0x1E50 },
+ { 0x1E52, 0x1E52 },
+ { 0x1E54, 0x1E54 },
+ { 0x1E56, 0x1E56 },
+ { 0x1E58, 0x1E58 },
+ { 0x1E5A, 0x1E5A },
+ { 0x1E5C, 0x1E5C },
+ { 0x1E5E, 0x1E5E },
+ { 0x1E60, 0x1E60 },
+ { 0x1E62, 0x1E62 },
+ { 0x1E64, 0x1E64 },
+ { 0x1E66, 0x1E66 },
+ { 0x1E68, 0x1E68 },
+ { 0x1E6A, 0x1E6A },
+ { 0x1E6C, 0x1E6C },
+ { 0x1E6E, 0x1E6E },
+ { 0x1E70, 0x1E70 },
+ { 0x1E72, 0x1E72 },
+ { 0x1E74, 0x1E74 },
+ { 0x1E76, 0x1E76 },
+ { 0x1E78, 0x1E78 },
+ { 0x1E7A, 0x1E7A },
+ { 0x1E7C, 0x1E7C },
+ { 0x1E7E, 0x1E7E },
+ { 0x1E80, 0x1E80 },
+ { 0x1E82, 0x1E82 },
+ { 0x1E84, 0x1E84 },
+ { 0x1E86, 0x1E86 },
+ { 0x1E88, 0x1E88 },
+ { 0x1E8A, 0x1E8A },
+ { 0x1E8C, 0x1E8C },
+ { 0x1E8E, 0x1E8E },
+ { 0x1E90, 0x1E90 },
+ { 0x1E92, 0x1E92 },
+ { 0x1E94, 0x1E94 },
+ { 0x1EA0, 0x1EA0 },
+ { 0x1EA2, 0x1EA2 },
+ { 0x1EA4, 0x1EA4 },
+ { 0x1EA6, 0x1EA6 },
+ { 0x1EA8, 0x1EA8 },
+ { 0x1EAA, 0x1EAA },
+ { 0x1EAC, 0x1EAC },
+ { 0x1EAE, 0x1EAE },
+ { 0x1EB0, 0x1EB0 },
+ { 0x1EB2, 0x1EB2 },
+ { 0x1EB4, 0x1EB4 },
+ { 0x1EB6, 0x1EB6 },
+ { 0x1EB8, 0x1EB8 },
+ { 0x1EBA, 0x1EBA },
+ { 0x1EBC, 0x1EBC },
+ { 0x1EBE, 0x1EBE },
+ { 0x1EC0, 0x1EC0 },
+ { 0x1EC2, 0x1EC2 },
+ { 0x1EC4, 0x1EC4 },
+ { 0x1EC6, 0x1EC6 },
+ { 0x1EC8, 0x1EC8 },
+ { 0x1ECA, 0x1ECA },
+ { 0x1ECC, 0x1ECC },
+ { 0x1ECE, 0x1ECE },
+ { 0x1ED0, 0x1ED0 },
+ { 0x1ED2, 0x1ED2 },
+ { 0x1ED4, 0x1ED4 },
+ { 0x1ED6, 0x1ED6 },
+ { 0x1ED8, 0x1ED8 },
+ { 0x1EDA, 0x1EDA },
+ { 0x1EDC, 0x1EDC },
+ { 0x1EDE, 0x1EDE },
+ { 0x1EE0, 0x1EE0 },
+ { 0x1EE2, 0x1EE2 },
+ { 0x1EE4, 0x1EE4 },
+ { 0x1EE6, 0x1EE6 },
+ { 0x1EE8, 0x1EE8 },
+ { 0x1EEA, 0x1EEA },
+ { 0x1EEC, 0x1EEC },
+ { 0x1EEE, 0x1EEE },
+ { 0x1EF0, 0x1EF0 },
+ { 0x1EF2, 0x1EF2 },
+ { 0x1EF4, 0x1EF4 },
+ { 0x1EF6, 0x1EF6 },
+ { 0x1EF8, 0x1EF8 },
+ { 0x1F08, 0x1F0F },
+ { 0x1F18, 0x1F1D },
+ { 0x1F28, 0x1F2F },
+ { 0x1F38, 0x1F3F },
+ { 0x1F48, 0x1F4D },
+ { 0x1F59, 0x1F59 },
+ { 0x1F5B, 0x1F5B },
+ { 0x1F5D, 0x1F5D },
+ { 0x1F5F, 0x1F5F },
+ { 0x1F68, 0x1F6F },
+ { 0x1FB8, 0x1FBB },
+ { 0x1FC8, 0x1FCB },
+ { 0x1FD8, 0x1FDB },
+ { 0x1FE8, 0x1FEC },
+ { 0x1FF8, 0x1FFB },
+ { 0x2102, 0x2102 },
+ { 0x2107, 0x2107 },
+ { 0x210B, 0x210D },
+ { 0x2110, 0x2112 },
+ { 0x2115, 0x2115 },
+ { 0x2119, 0x211D },
+ { 0x2124, 0x2124 },
+ { 0x2126, 0x2126 },
+ { 0x2128, 0x2128 },
+ { 0x212A, 0x212D },
+ { 0x2130, 0x2131 },
+ { 0x2133, 0x2133 },
+ { 0x213E, 0x213F },
+ { 0x2145, 0x2145 },
+ { 0x2160, 0x216F },
+ { 0x24B6, 0x24CF },
+ { 0x2C00, 0x2C2E },
+ { 0x2C80, 0x2C80 },
+ { 0x2C82, 0x2C82 },
+ { 0x2C84, 0x2C84 },
+ { 0x2C86, 0x2C86 },
+ { 0x2C88, 0x2C88 },
+ { 0x2C8A, 0x2C8A },
+ { 0x2C8C, 0x2C8C },
+ { 0x2C8E, 0x2C8E },
+ { 0x2C90, 0x2C90 },
+ { 0x2C92, 0x2C92 },
+ { 0x2C94, 0x2C94 },
+ { 0x2C96, 0x2C96 },
+ { 0x2C98, 0x2C98 },
+ { 0x2C9A, 0x2C9A },
+ { 0x2C9C, 0x2C9C },
+ { 0x2C9E, 0x2C9E },
+ { 0x2CA0, 0x2CA0 },
+ { 0x2CA2, 0x2CA2 },
+ { 0x2CA4, 0x2CA4 },
+ { 0x2CA6, 0x2CA6 },
+ { 0x2CA8, 0x2CA8 },
+ { 0x2CAA, 0x2CAA },
+ { 0x2CAC, 0x2CAC },
+ { 0x2CAE, 0x2CAE },
+ { 0x2CB0, 0x2CB0 },
+ { 0x2CB2, 0x2CB2 },
+ { 0x2CB4, 0x2CB4 },
+ { 0x2CB6, 0x2CB6 },
+ { 0x2CB8, 0x2CB8 },
+ { 0x2CBA, 0x2CBA },
+ { 0x2CBC, 0x2CBC },
+ { 0x2CBE, 0x2CBE },
+ { 0x2CC0, 0x2CC0 },
+ { 0x2CC2, 0x2CC2 },
+ { 0x2CC4, 0x2CC4 },
+ { 0x2CC6, 0x2CC6 },
+ { 0x2CC8, 0x2CC8 },
+ { 0x2CCA, 0x2CCA },
+ { 0x2CCC, 0x2CCC },
+ { 0x2CCE, 0x2CCE },
+ { 0x2CD0, 0x2CD0 },
+ { 0x2CD2, 0x2CD2 },
+ { 0x2CD4, 0x2CD4 },
+ { 0x2CD6, 0x2CD6 },
+ { 0x2CD8, 0x2CD8 },
+ { 0x2CDA, 0x2CDA },
+ { 0x2CDC, 0x2CDC },
+ { 0x2CDE, 0x2CDE },
+ { 0x2CE0, 0x2CE0 },
+ { 0x2CE2, 0x2CE2 },
+ { 0xFF21, 0xFF3A },
+};
diff --git a/libwc/status.c b/libwc/status.c
index ad98196..d25c924 100644
--- a/libwc/status.c
+++ b/libwc/status.c
@@ -25,6 +25,7 @@ wc_option WcOption = {
WC_FALSE, /* gb18030_as_ucs */
WC_FALSE, /* no_replace */
WC_TRUE, /* use_wide */
+ WC_FALSE, /* east_asian_width */
};
static wc_status output_st;
diff --git a/libwc/ucs.c b/libwc/ucs.c
index 2534b5a..d7b6948 100644
--- a/libwc/ucs.c
+++ b/libwc/ucs.c
@@ -17,11 +17,17 @@
#include "ucs.map"
+#include "map/ucs_ambwidth.map"
#include "map/ucs_wide.map"
#include "map/ucs_combining.map"
#include "map/ucs_precompose.map"
#include "map/ucs_hangul.map"
#include "map/ucs_fullwidth.map"
+#include "map/ucs_isalpha.map"
+#include "map/ucs_isdigit.map"
+#include "map/ucs_islower.map"
+#include "map/ucs_isupper.map"
+#include "map/ucs_case.map"
#define MAX_TAG_MAP 0x100
static int n_tag_map = 0;
@@ -107,6 +113,8 @@ wc_any_to_ucs(wc_wchar_t cc)
f = WC_CCS_INDEX(cc.ccs);
switch (WC_CCS_TYPE(cc.ccs)) {
case WC_CCS_A_CS94:
+ if (cc.ccs == WC_CCS_US_ASCII)
+ return cc.code;
if (f < WC_F_ISO_BASE || f > WC_F_CS94_END)
return WC_C_UCS4_ERROR;
map = cs94_ucs_map[f - WC_F_ISO_BASE];
@@ -511,11 +519,26 @@ wc_ucs_to_ccs(wc_uint32 ucs)
if (0x80 <= ucs && ucs <= 0x9F)
return WC_CCS_C1;
return ((ucs <= WC_C_UCS2_END) ? WC_CCS_UCS2 : WC_CCS_UCS4)
+ | ((WcOption.east_asian_width && wc_is_ucs_ambiguous_width(ucs))
+ ? WC_CCS_A_WIDE : 0)
| (wc_is_ucs_wide(ucs) ? WC_CCS_A_WIDE : 0)
| (wc_is_ucs_combining(ucs) ? WC_CCS_A_COMB : 0);
}
wc_bool
+wc_is_ucs_ambiguous_width(wc_uint32 ucs)
+{
+ if (0xa1 <= ucs && ucs <= 0xfe && WcOption.use_jisx0213)
+ return 1;
+ else if (ucs <= WC_C_UCS2_END)
+ return (wc_map_range_search((wc_uint16)ucs,
+ ucs_ambwidth_map, N_ucs_ambwidth_map) != NULL);
+ else
+ return ((0xF0000 <= ucs && ucs <= 0xFFFFD)
+ || (0x100000 <= ucs && ucs <= 0x10FFFD));
+}
+
+wc_bool
wc_is_ucs_wide(wc_uint32 ucs)
{
if (ucs <= WC_C_UCS2_END)
@@ -542,6 +565,74 @@ wc_is_ucs_hangul(wc_uint32 ucs)
ucs_hangul_map, N_ucs_hangul_map) != NULL);
}
+wc_bool
+wc_is_ucs_alpha(wc_uint32 ucs)
+{
+ return (ucs <= WC_C_UCS2_END &&
+ wc_map_range_search((wc_uint16)ucs,
+ ucs_isalpha_map, N_ucs_isalpha_map) != NULL);
+}
+
+wc_bool
+wc_is_ucs_digit(wc_uint32 ucs)
+{
+ return (ucs <= WC_C_UCS2_END &&
+ wc_map_range_search((wc_uint16)ucs,
+ ucs_isdigit_map, N_ucs_isdigit_map) != NULL);
+}
+
+wc_bool
+wc_is_ucs_alnum(wc_uint32 ucs)
+{
+ return (wc_is_ucs_alpha(ucs) || wc_is_ucs_digit(ucs));
+}
+
+wc_bool
+wc_is_ucs_lower(wc_uint32 ucs)
+{
+ return (ucs <= WC_C_UCS2_END &&
+ wc_map_range_search((wc_uint16)ucs,
+ ucs_islower_map, N_ucs_islower_map) != NULL);
+}
+
+wc_bool
+wc_is_ucs_upper(wc_uint32 ucs)
+{
+ return (ucs <= WC_C_UCS2_END &&
+ wc_map_range_search((wc_uint16)ucs,
+ ucs_isupper_map, N_ucs_isupper_map) != NULL);
+}
+
+wc_uint32
+wc_ucs_toupper(wc_uint32 ucs)
+{
+ wc_map *conv = NULL;
+ if (ucs <= WC_C_UCS2_END)
+ conv = wc_map_search((wc_uint16)ucs,
+ ucs_toupper_map, N_ucs_toupper_map);
+ return conv ? (wc_uint32)(conv->code2) : ucs;
+}
+
+wc_uint32
+wc_ucs_tolower(wc_uint32 ucs)
+{
+ wc_map *conv = NULL;
+ if (ucs <= WC_C_UCS2_END)
+ conv = wc_map_search((wc_uint16)ucs,
+ ucs_tolower_map, N_ucs_tolower_map);
+ return conv ? (wc_uint32)(conv->code2) : ucs;
+}
+
+wc_uint32
+wc_ucs_totitle(wc_uint32 ucs)
+{
+ wc_map *conv = NULL;
+ if (ucs <= WC_C_UCS2_END)
+ conv = wc_map_search((wc_uint16)ucs,
+ ucs_totitle_map, N_ucs_totitle_map);
+ return conv ? (wc_uint32)(conv->code2) : ucs;
+}
+
wc_uint32
wc_ucs_precompose(wc_uint32 ucs1, wc_uint32 ucs2)
{
diff --git a/libwc/ucs.h b/libwc/ucs.h
index 5003bac..261351e 100644
--- a/libwc/ucs.h
+++ b/libwc/ucs.h
@@ -44,9 +44,18 @@ extern wc_wchar_t wc_any_to_iso2022(wc_wchar_t cc, wc_status *st);
extern wc_wchar_t wc_ucs_to_iso2022(wc_uint32 ucs);
extern wc_wchar_t wc_ucs_to_iso2022w(wc_uint32 ucs);
extern wc_ccs wc_ucs_to_ccs(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_ambiguous_width(wc_uint32 ucs);
extern wc_bool wc_is_ucs_wide(wc_uint32 ucs);
extern wc_bool wc_is_ucs_combining(wc_uint32 ucs);
extern wc_bool wc_is_ucs_hangul(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_alpha(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_digit(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_alnum(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_lower(wc_uint32 ucs);
+extern wc_bool wc_is_ucs_upper(wc_uint32 ucs);
+extern wc_uint32 wc_ucs_toupper(wc_uint32 ucs);
+extern wc_uint32 wc_ucs_tolower(wc_uint32 ucs);
+extern wc_uint32 wc_ucs_totitle(wc_uint32 ucs);
extern wc_uint32 wc_ucs_precompose(wc_uint32 ucs1, wc_uint32 ucs2);
extern wc_uint32 wc_ucs_to_fullwidth(wc_uint32 ucs);
extern int wc_ucs_put_tag(char *tag);
diff --git a/libwc/wc_types.h b/libwc/wc_types.h
index 845bf2f..bbf1f42 100644
--- a/libwc/wc_types.h
+++ b/libwc/wc_types.h
@@ -91,6 +91,7 @@ typedef struct {
wc_bool gb18030_as_ucs; /* treat 4 bytes char. of GB18030 as Unicode */
wc_bool no_replace; /* don't output replace character */
wc_bool use_wide; /* use wide characters */
+ wc_bool east_asian_width; /* East Asian Ambiguous characters are wide */
} wc_option;
typedef struct {
diff --git a/main.c b/main.c
index fed8c55..b421943 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.258 2007/05/31 01:19:50 inu Exp $ */
+/* $Id: main.c,v 1.270 2010/08/24 10:11:51 htrb Exp $ */
#define MAINPROGRAM
#include "fm.h"
#include <signal.h>
@@ -14,6 +14,13 @@
#include "terms.h"
#include "myctype.h"
#include "regex.h"
+#ifdef USE_M17N
+#include "wc.h"
+#include "wtf.h"
+#ifdef USE_UNICODE
+#include "ucs.h"
+#endif
+#endif
#ifdef USE_MOUSE
#ifdef USE_GPM
#include <gpm.h>
@@ -85,8 +92,7 @@ static void keyPressEventProc(int c);
int show_params_p = 0;
void show_params(FILE * fp);
-static char *getCurWord(Buffer *buf, int *spos, int *epos,
- const char *badchars);
+static char *getCurWord(Buffer *buf, int *spos, int *epos);
static int display_ok = FALSE;
static void do_dump(Buffer *);
@@ -194,12 +200,10 @@ fusage(FILE * f, int err)
#ifdef USE_M17N
fprintf(f, " -I charset document charset\n");
fprintf(f, " -O charset display/output charset\n");
-#ifndef DEBIAN /* disabled by ukai: -s is used for squeeze multi lines */
fprintf(f, " -e EUC-JP\n");
fprintf(f, " -s Shift_JIS\n");
fprintf(f, " -j JIS\n");
#endif
-#endif
fprintf(f, " -B load bookmark\n");
fprintf(f, " -bookmark file specify bookmark file\n");
fprintf(f, " -T type specify content-type\n");
@@ -242,14 +246,9 @@ fusage(FILE * f, int err)
fprintf(f,
" -cookie use cookie (-no-cookie: don't use cookie)\n");
#endif /* USE_COOKIE */
- fprintf(f, " -pauth user:pass proxy authentication\n");
- fprintf(f, " -graph use graphic character\n");
- fprintf(f, " -no-graph don't use graphic character\n");
-#ifdef DEBIAN /* replaced by ukai: pager requires -s */
- fprintf(f, " -s squeeze multiple blank lines\n");
-#else
+ fprintf(f, " -graph use DEC special graphics for border of table and menu\n");
+ fprintf(f, " -no-graph use ACII character for border of table and menu\n");
fprintf(f, " -S squeeze multiple blank lines\n");
-#endif
fprintf(f, " -W toggle wrap search mode\n");
fprintf(f, " -X don't use termcap init/deinit\n");
fprintf(f,
@@ -323,21 +322,27 @@ static void
sig_chld(int signo)
{
int p_stat;
-#ifdef HAVE_WAITPID
pid_t pid;
- while ((pid = waitpid(-1, &p_stat, WNOHANG)) > 0) {
- ;
- }
+#ifdef HAVE_WAITPID
+ while ((pid = waitpid(-1, &p_stat, WNOHANG)) > 0)
#elif HAVE_WAIT3
- int pid;
-
- while ((pid = wait3(&p_stat, WNOHANG, NULL)) > 0) {
- ;
- }
+ while ((pid = wait3(&p_stat, WNOHANG, NULL)) > 0)
#else
- wait(&p_stat);
+ if ((pid = wait(&p_stat)) > 0)
#endif
+ {
+ DownloadList *d;
+
+ if (WIFEXITED(p_stat)) {
+ for (d = FirstDL; d != NULL; d = d->next) {
+ if (d->pid == pid) {
+ d->err = WEXITSTATUS(p_stat);
+ break;
+ }
+ }
+ }
+ }
mySignal(SIGCHLD, sig_chld);
return;
}
@@ -525,14 +530,12 @@ main(int argc, char **argv, char **envp)
PagerMax = atoi(argv[i]);
}
#ifdef USE_M17N
-#ifndef DEBIAN /* XXX: use -o kanjicode={S|J|E} */
else if (!strcmp("-s", argv[i]))
DisplayCharset = WC_CES_SHIFT_JIS;
else if (!strcmp("-j", argv[i]))
DisplayCharset = WC_CES_ISO_2022_JP;
else if (!strcmp("-e", argv[i]))
DisplayCharset = WC_CES_EUC_JP;
-#endif
else if (!strncmp("-I", argv[i], 2)) {
if (argv[i][2] != '\0')
p = argv[i] + 2;
@@ -557,9 +560,9 @@ main(int argc, char **argv, char **envp)
}
#endif
else if (!strcmp("-graph", argv[i]))
- UseGraphicChar = TRUE;
+ UseGraphicChar = GRAPHIC_CHAR_DEC;
else if (!strcmp("-no-graph", argv[i]))
- UseGraphicChar = FALSE;
+ UseGraphicChar = GRAPHIC_CHAR_ASCII;
else if (!strcmp("-T", argv[i])) {
if (++i >= argc)
usage();
@@ -629,6 +632,9 @@ main(int argc, char **argv, char **envp)
if (++i >= argc)
usage();
COLS = atoi(argv[i]);
+ if (COLS > MAXIMUM_COLS) {
+ COLS = MAXIMUM_COLS;
+ }
}
else if (!strcmp("-ppc", argv[i])) {
double ppc;
@@ -697,22 +703,7 @@ main(int argc, char **argv, char **envp)
accept_cookie = TRUE;
}
#endif /* USE_COOKIE */
- else if (!strcmp("-pauth", argv[i])) {
- if (++i >= argc)
- usage();
- proxy_auth_cookie = Strnew_m_charp("Basic ",
- encodeB(argv[i])->ptr,
- NULL);
- while (argv[i][0]) {
- argv[i][0] = '\0';
- argv[i]++;
- }
- }
-#ifdef DEBIAN
- else if (!strcmp("-s", argv[i]))
-#else
else if (!strcmp("-S", argv[i]))
-#endif
squeezeBlankLine = TRUE;
else if (!strcmp("-X", argv[i]))
Do_not_use_ti_te = TRUE;
@@ -794,7 +785,7 @@ main(int argc, char **argv, char **envp)
}
if (w3m_dump) {
if (COLS == 0)
- COLS = 80;
+ COLS = DEFAULT_COLS;
}
#ifdef USE_BINMODE_STREAM
@@ -868,12 +859,6 @@ main(int argc, char **argv, char **envp)
w3m_version,
"<br>Written by <a href='mailto:aito@fw.ipsj.or.jp'>Akinori Ito</a>",
NULL);
-#ifdef DEBIAN
- Strcat_m_charp(s_page,
- "<p>Debian package is maintained by <a href='mailto:ukai@debian.or.jp'>Fumitoshi UKAI</a>.",
- "You can read <a href='file:///usr/share/doc/w3m/'>w3m documents on your local system</a>.",
- NULL);
-#endif /* DEBIAN */
newbuf = loadHTMLString(s_page);
if (newbuf == NULL)
Strcat_charp(err_msg, "w3m: Can't load string.\n");
@@ -1152,18 +1137,11 @@ main(int argc, char **argv, char **envp)
mouse_inactive();
#endif /* USE_MOUSE */
if (IS_ASCII(c)) { /* Ascii */
- if( vi_prec_num ){
- if(((prec_num && c == '0') || '1' <= c) && (c <= '9')) {
- prec_num = prec_num * 10 + (int)(c - '0');
- if (prec_num > PREC_LIMIT)
- prec_num = PREC_LIMIT;
- }
- else {
- set_buffer_environ(Currentbuf);
- save_buffer_position(Currentbuf);
- keyPressEventProc((int)c);
- prec_num = 0;
- }
+ if (('0' <= c) && (c <= '9') &&
+ (prec_num || (GlobalKeymap[c] == FUNCNAME_nulcmd))) {
+ prec_num = prec_num * 10 + (int)(c - '0');
+ if (prec_num > PREC_LIMIT)
+ prec_num = PREC_LIMIT;
}
else {
set_buffer_environ(Currentbuf);
@@ -1284,8 +1262,25 @@ do_dump(Buffer *buf)
dump_head(buf);
if (w3m_dump & DUMP_SOURCE)
dump_source(buf);
- if (w3m_dump == DUMP_BUFFER)
+ if (w3m_dump == DUMP_BUFFER) {
+ int i;
saveBuffer(buf, stdout, FALSE);
+ if (displayLinkNumber && buf->href) {
+ printf("\nReferences:\n\n");
+ for (i = 0; i < buf->href->nanchor; i++) {
+ ParsedURL pu;
+ static Str s = NULL;
+ if (buf->href->anchors[i].slave)
+ continue;
+ parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
+ s = parsedURL2Str(&pu);
+ if (DecodeURL)
+ s = Strnew_charp(url_unquote_conv
+ (s->ptr, Currentbuf->document_charset));
+ printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr);
+ }
+ }
+ }
mySignal(SIGINT, prevtrap);
}
@@ -2259,7 +2254,32 @@ DEFUN(movR1, MOVE_RIGHT1,
* From: Takashi Nishimoto <g96p0935@mse.waseda.ac.jp> Date: Mon, 14 Jun
* 1999 09:29:56 +0900
*/
-#define IS_WORD_CHAR(c,p) (IS_ALNUM(c) && CharType(p) == PC_ASCII)
+#if defined(USE_M17N) && defined(USE_UNICODE)
+#define nextChar(s, l) do { (s)++; } while ((s) < (l)->len && (l)->propBuf[s] & PC_WCHAR2)
+#define prevChar(s, l) do { (s)--; } while ((s) > 0 && (l)->propBuf[s] & PC_WCHAR2)
+
+static wc_uint32
+getChar(char *p)
+{
+ return wc_any_to_ucs(wtf_parse1(&p));
+}
+
+static int
+is_wordchar(wc_uint32 c)
+{
+ return wc_is_ucs_alnum(c);
+}
+#else
+#define nextChar(s, l) (s)++
+#define prevChar(s, l) (s)--
+#define getChar(p) ((int)*(p))
+
+static int
+is_wordchar(int c)
+{
+ return IS_ALNUM(c);
+}
+#endif
static int
prev_nonnull_line(Line *line)
@@ -2279,8 +2299,7 @@ prev_nonnull_line(Line *line)
DEFUN(movLW, PREV_WORD, "Move to previous word")
{
char *lb;
- Lineprop *pb;
- Line *pline;
+ Line *pline, *l;
int ppos;
int i, n = searchKeyNum();
@@ -2295,12 +2314,14 @@ DEFUN(movLW, PREV_WORD, "Move to previous word")
goto end;
while (1) {
- lb = Currentbuf->currentLine->lineBuf;
- pb = Currentbuf->currentLine->propBuf;
- while (Currentbuf->pos > 0 &&
- !IS_WORD_CHAR(lb[Currentbuf->pos - 1],
- pb[Currentbuf->pos - 1])) {
- Currentbuf->pos--;
+ l = Currentbuf->currentLine;
+ lb = l->lineBuf;
+ while (Currentbuf->pos > 0) {
+ int tmp = Currentbuf->pos;
+ prevChar(tmp, l);
+ if (is_wordchar(getChar(&lb[tmp])))
+ break;
+ Currentbuf->pos = tmp;
}
if (Currentbuf->pos > 0)
break;
@@ -2312,12 +2333,14 @@ DEFUN(movLW, PREV_WORD, "Move to previous word")
Currentbuf->pos = Currentbuf->currentLine->len;
}
- lb = Currentbuf->currentLine->lineBuf;
- pb = Currentbuf->currentLine->propBuf;
- while (Currentbuf->pos > 0 &&
- IS_WORD_CHAR(lb[Currentbuf->pos - 1],
- pb[Currentbuf->pos - 1])) {
- Currentbuf->pos--;
+ l = Currentbuf->currentLine;
+ lb = l->lineBuf;
+ while (Currentbuf->pos > 0) {
+ int tmp = Currentbuf->pos;
+ prevChar(tmp, l);
+ if (!is_wordchar(getChar(&lb[tmp])))
+ break;
+ Currentbuf->pos = tmp;
}
}
end:
@@ -2344,8 +2367,7 @@ next_nonnull_line(Line *line)
DEFUN(movRW, NEXT_WORD, "Move to next word")
{
char *lb;
- Lineprop *pb;
- Line *pline;
+ Line *pline, *l;
int ppos;
int i, n = searchKeyNum();
@@ -2359,18 +2381,17 @@ DEFUN(movRW, NEXT_WORD, "Move to next word")
if (next_nonnull_line(Currentbuf->currentLine) < 0)
goto end;
- lb = Currentbuf->currentLine->lineBuf;
- pb = Currentbuf->currentLine->propBuf;
-
- while (lb[Currentbuf->pos] &&
- IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos]))
- Currentbuf->pos++;
+ l = Currentbuf->currentLine;
+ lb = l->lineBuf;
+ while (Currentbuf->pos < l->len &&
+ is_wordchar(getChar(&lb[Currentbuf->pos])))
+ nextChar(Currentbuf->pos, l);
while (1) {
- while (lb[Currentbuf->pos] &&
- !IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos]))
- Currentbuf->pos++;
- if (lb[Currentbuf->pos])
+ while (Currentbuf->pos < l->len &&
+ !is_wordchar(getChar(&lb[Currentbuf->pos])))
+ nextChar(Currentbuf->pos, l);
+ if (Currentbuf->pos < l->len)
break;
if (next_nonnull_line(Currentbuf->currentLine->next) < 0) {
Currentbuf->currentLine = pline;
@@ -2378,8 +2399,8 @@ DEFUN(movRW, NEXT_WORD, "Move to next word")
goto end;
}
Currentbuf->pos = 0;
- lb = Currentbuf->currentLine->lineBuf;
- pb = Currentbuf->currentLine->propBuf;
+ l = Currentbuf->currentLine;
+ lb = l->lineBuf;
}
}
end:
@@ -2901,6 +2922,42 @@ gotoLabel(char *label)
return;
}
+static int
+handleMailto(char *url)
+{
+ Str to;
+ char *pos;
+
+ if (strncasecmp(url, "mailto:", 7))
+ return 0;
+#ifdef USE_W3MMAILER
+ if (! non_null(Mailer) || MailtoOptions == MAILTO_OPTIONS_USE_W3MMAILER)
+ return 0;
+#else
+ if (!non_null(Mailer)) {
+ /* FIXME: gettextize? */
+ disp_err_message("no mailer is specified", TRUE);
+ return 1;
+ }
+#endif
+
+ /* invoke external mailer */
+ if (MailtoOptions == MAILTO_OPTIONS_USE_MAILTO_URL) {
+ to = Strnew_charp(html_unquote(url));
+ } else {
+ to = Strnew_charp(url + 7);
+ if ((pos = strchr(to->ptr, '?')) != NULL)
+ Strtruncate(to, pos - to->ptr);
+ }
+ fmTerm();
+ system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)),
+ FALSE)->ptr);
+ fmInit();
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ pushHashHist(URLHist, url);
+ return 1;
+}
+
/* follow HREF link */
DEFUN(followA, GOTO_LINK, "Go to current link")
{
@@ -2950,31 +3007,8 @@ DEFUN(followA, GOTO_LINK, "Go to current link")
return;
}
}
- if (!strncasecmp(a->url, "mailto:", 7)
-#ifdef USE_W3MMAILER
- && non_null(Mailer) && strchr(a->url, '?') == NULL
-#endif
- ) {
- /* invoke external mailer */
- Str to = Strnew_charp(a->url + 7);
-#ifndef USE_W3MMAILER
- char *pos;
- if (!non_null(Mailer)) {
- /* FIXME: gettextize? */
- disp_err_message("no mailer is specified", TRUE);
- return;
- }
- if ((pos = strchr(to->ptr, '?')) != NULL)
- Strtruncate(to, pos - to->ptr);
-#endif
- fmTerm();
- system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)),
- FALSE)->ptr);
- fmInit();
- displayBuffer(Currentbuf, B_FORCE_REDRAW);
- pushHashHist(URLHist, a->url);
+ if (handleMailto(a->url))
return;
- }
#if 0
else if (!strncasecmp(a->url, "news:", 5) && strchr(a->url, '@') == NULL) {
/* news:newsgroup is not supported */
@@ -3987,31 +4021,8 @@ cmd_loadURL(char *url, ParsedURL *current, char *referer, FormList *request)
{
Buffer *buf;
- if (!strncasecmp(url, "mailto:", 7)
-#ifdef USE_W3MMAILER
- && non_null(Mailer) && strchr(url, '?') == NULL
-#endif
- ) {
- /* invoke external mailer */
- Str to = Strnew_charp(url + 7);
-#ifndef USE_W3MMAILER
- char *pos;
- if (!non_null(Mailer)) {
- /* FIXME: gettextize? */
- disp_err_message("no mailer is specified", TRUE);
- return;
- }
- if ((pos = strchr(to->ptr, '?')) != NULL)
- Strtruncate(to, pos - to->ptr);
-#endif
- fmTerm();
- system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)),
- FALSE)->ptr);
- fmInit();
- displayBuffer(Currentbuf, B_FORCE_REDRAW);
- pushHashHist(URLHist, url);
+ if (handleMailto(url))
return;
- }
#if 0
if (!strncasecmp(url, "news:", 5) && strchr(url, '@') == NULL) {
/* news:newsgroup is not supported */
@@ -4623,10 +4634,10 @@ DEFUN(vwSrc, SOURCE VIEW, "View HTML source")
buf = newBuffer(INIT_BUFFER_WIDTH);
- if (!strcasecmp(Currentbuf->type, "text/html")) {
+ if (is_html_type(Currentbuf->type)) {
buf->type = "text/plain";
if (Currentbuf->real_type &&
- !strcasecmp(Currentbuf->real_type, "text/html"))
+ is_html_type(Currentbuf->real_type))
buf->real_type = "text/plain";
else
buf->real_type = Currentbuf->real_type;
@@ -4776,8 +4787,8 @@ DEFUN(reload, RELOAD, "Reload buffer")
repBuffer(Currentbuf, buf);
if ((buf->type != NULL) && (sbuf.type != NULL) &&
((!strcasecmp(buf->type, "text/plain") &&
- !strcasecmp(sbuf.type, "text/html")) ||
- (!strcasecmp(buf->type, "text/html") &&
+ is_html_type(sbuf.type)) ||
+ (is_html_type(buf->type) &&
!strcasecmp(sbuf.type, "text/plain")))) {
vwSrc();
if (Currentbuf != buf)
@@ -4914,7 +4925,7 @@ DEFUN(chkWORD, MARK_WORD, "Mark current word as anchor")
{
char *p;
int spos, epos;
- p = getCurWord(Currentbuf, &spos, &epos, ":\"\'`<>()[]{}&|;*?$");
+ p = getCurWord(Currentbuf, &spos, &epos);
if (p == NULL)
return;
reAnchorWord(Currentbuf, Currentbuf->currentLine, spos, epos);
@@ -5099,7 +5110,7 @@ DEFUN(dispI, DISPLAY_IMAGE, "Restart loading and drawing of images")
return;
displayImage = TRUE;
/*
- * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html")))
+ * if (!(Currentbuf->type && is_html_type(Currentbuf->type)))
* return;
*/
Currentbuf->image_flag = IMG_FLAG_AUTO;
@@ -5112,7 +5123,7 @@ DEFUN(stopI, STOP_IMAGE, "Stop loading and drawing of images")
if (!activeImage)
return;
/*
- * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html")))
+ * if (!(Currentbuf->type && is_html_type(Currentbuf->type)))
* return;
*/
Currentbuf->image_flag = IMG_FLAG_SKIP;
@@ -5526,17 +5537,8 @@ DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrap search mode")
}
}
-static int
-is_wordchar(int c, const char *badchars)
-{
- if (badchars)
- return !(IS_SPACE(c) || strchr(badchars, c));
- else
- return IS_ALPHA(c);
-}
-
static char *
-getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars)
+getCurWord(Buffer *buf, int *spos, int *epos)
{
char *p;
Line *l = buf->currentLine;
@@ -5548,15 +5550,20 @@ getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars)
return NULL;
p = l->lineBuf;
e = buf->pos;
- while (e > 0 && !is_wordchar(p[e], badchars))
- e--;
- if (!is_wordchar(p[e], badchars))
+ while (e > 0 && !is_wordchar(getChar(&p[e])))
+ prevChar(e, l);
+ if (!is_wordchar(getChar(&p[e])))
return NULL;
b = e;
- while (b > 0 && is_wordchar(p[b - 1], badchars))
- b--;
- while (e < l->len && is_wordchar(p[e], badchars))
- e++;
+ while (b > 0) {
+ int tmp = b;
+ prevChar(tmp, l);
+ if (!is_wordchar(getChar(&p[tmp])))
+ break;
+ b = tmp;
+ }
+ while (e < l->len && is_wordchar(getChar(&p[e])))
+ nextChar(e, l);
*spos = b;
*epos = e;
return &p[b];
@@ -5568,7 +5575,7 @@ GetWord(Buffer *buf)
int b, e;
char *p;
- if ((p = getCurWord(buf, &b, &e, 0)) != NULL) {
+ if ((p = getCurWord(buf, &b, &e)) != NULL) {
return Strnew_charp_n(p, e - b)->ptr;
}
return NULL;
@@ -6355,7 +6362,8 @@ addDownloadList(pid_t pid, char *url, char *save, char *lock, clen_t size)
d->lock = lock;
d->size = size;
d->time = time(0);
- d->ok = FALSE;
+ d->running = TRUE;
+ d->err = 0;
d->next = NULL;
d->prev = LastDL;
if (LastDL)
@@ -6375,7 +6383,7 @@ checkDownloadList(void)
if (!FirstDL)
return FALSE;
for (d = FirstDL; d != NULL; d = d->next) {
- if (!d->ok && !lstat(d->lock, &st))
+ if (d->running && !lstat(d->lock, &st))
return TRUE;
}
return FALSE;
@@ -6415,15 +6423,16 @@ DownloadListBuffer(void)
"<form method=internal action=download><hr>\n");
for (d = LastDL; d != NULL; d = d->prev) {
if (lstat(d->lock, &st))
- d->ok = TRUE;
+ d->running = FALSE;
Strcat_charp(src, "<pre>\n");
Strcat(src, Sprintf("%s\n --&gt; %s\n ", html_quote(d->url),
html_quote(conv_from_system(d->save))));
duration = cur_time - d->time;
if (!stat(d->save, &st)) {
size = st.st_size;
- if (d->ok) {
- d->size = size;
+ if (!d->running) {
+ if (!d->err)
+ d->size = size;
duration = st.st_mtime - d->time;
}
}
@@ -6442,7 +6451,7 @@ DownloadListBuffer(void)
Strcat_char(src, '_');
Strcat_char(src, '\n');
}
- if (!d->ok && size < d->size)
+ if ((d->running || d->err) && size < d->size)
Strcat(src, Sprintf(" %s / %s bytes (%d%%)",
convert_size3(size), convert_size3(d->size),
(int)(100.0 * size / d->size)));
@@ -6453,20 +6462,28 @@ DownloadListBuffer(void)
Strcat(src, Sprintf(" %02d:%02d:%02d rate %s/sec",
duration / (60 * 60), (duration / 60) % 60,
duration % 60, convert_size(rate, 1)));
- if (!d->ok && size < d->size && rate) {
+ if (d->running && size < d->size && rate) {
eta = (d->size - size) / rate;
Strcat(src, Sprintf(" eta %02d:%02d:%02d", eta / (60 * 60),
(eta / 60) % 60, eta % 60));
}
}
Strcat_char(src, '\n');
- if (d->ok) {
+ if (!d->running) {
Strcat(src, Sprintf("<input type=submit name=ok%d value=OK>",
d->pid));
- if (size < d->size)
- Strcat_charp(src, " Download incompleted");
- else
- Strcat_charp(src, " Download completed");
+ switch (d->err) {
+ case 0: if (size < d->size)
+ Strcat_charp(src, " Download ended but probably not complete");
+ else
+ Strcat_charp(src, " Download complete");
+ break;
+ case 1: Strcat_charp(src, " Error: could not open destination file");
+ break;
+ case 2: Strcat_charp(src, " Error: could not write to file (disk full)");
+ break;
+ default: Strcat_charp(src, " Error: unknown reason");
+ }
}
else
Strcat(src, Sprintf("<input type=submit name=stop%d value=STOP>",
@@ -6520,7 +6537,7 @@ stopDownload(void)
if (!FirstDL)
return;
for (d = FirstDL; d != NULL; d = d->next) {
- if (d->ok)
+ if (!d->running)
continue;
#ifndef __MINGW32_VERSION
kill(d->pid, SIGKILL);
diff --git a/mktable.c b/mktable.c
index 9cbe620..63a8c03 100644
--- a/mktable.c
+++ b/mktable.c
@@ -1,4 +1,4 @@
-/* $Id: mktable.c,v 1.15 2007/05/31 01:19:50 inu Exp $ */
+/* $Id: mktable.c,v 1.16 2010/12/15 10:50:24 htrb Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include "myctype.h"
@@ -102,7 +102,7 @@ main(int argc, char *argv[], char **envp)
}
printf("static HashItem_si MyHashItem[] = {\n");
for (i = 0; i < j; i++) {
- printf(" /* %d */ {\"%s\",%s,", i,
+ printf(" /* %d */ {\"%s\", %s, ", i,
hashitems[i]->key, hashitems[i]->value);
if (hashitems[i]->next == NULL) {
printf("NULL},\n");
@@ -116,13 +116,13 @@ main(int argc, char *argv[], char **envp)
for (i = 0; i < hash->size; i++) {
if (hash->tab[i])
- printf(" &MyHashItem[%d],\n",
+ printf(" &MyHashItem[%d],\n",
getHash_hss_i(rhash, hash->tab[i], -1));
else
- printf(" NULL,\n");
+ printf(" NULL,\n");
}
printf("};\n\n");
- printf("Hash_si %s = {%d, MyHashItemTbl};\n", fbase->ptr, hash->size);
+ printf("Hash_si %s = { %d, MyHashItemTbl };\n", fbase->ptr, hash->size);
exit(0);
}
diff --git a/po/CVS/Entries b/po/CVS/Entries
new file mode 100644
index 0000000..1e7831b
--- /dev/null
+++ b/po/CVS/Entries
@@ -0,0 +1,16 @@
+/.cvsignore/1.2/Thu Sep 25 18:35:43 2003//
+/LINGUAS/1.1/Wed Sep 24 18:35:06 2003//
+/POTFILES.in/1.2/Wed Sep 24 18:35:06 2003//
+/boldquot.sed/1.1/Tue Sep 23 18:42:25 2003//
+/en@boldquot.header/1.1/Tue Sep 23 18:42:25 2003//
+/en@quot.header/1.1/Tue Sep 23 18:42:25 2003//
+/insert-header.sin/1.1/Tue Sep 23 18:42:25 2003//
+/quot.sed/1.1/Tue Sep 23 18:42:25 2003//
+/remove-potcdate.sin/1.1/Tue Sep 23 18:42:25 2003//
+/Makevars/1.2/Tue Jan 4 09:22:28 2011//
+/ChangeLog/1.2/Tue Jan 4 12:39:29 2011//
+/Makefile.in.in/1.3/Tue Jan 4 12:39:29 2011//
+/Rules-quot/1.2/Tue Jan 4 12:39:29 2011//
+/ja.po/1.14/Sat Jan 15 04:29:58 2011//
+/w3m.pot/1.14/Sat Jan 15 02:20:26 2011//
+D
diff --git a/po/CVS/Repository b/po/CVS/Repository
new file mode 100644
index 0000000..139f7dd
--- /dev/null
+++ b/po/CVS/Repository
@@ -0,0 +1 @@
+w3m/po
diff --git a/po/CVS/Root b/po/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/po/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/po/ChangeLog b/po/ChangeLog
index 644b5e8..7ad8364 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-04 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.18.1.
+ * Rules-quot: Upgrade to gettext-0.18.1.
+
2003-09-24 gettextize <bug-gnu-gettext@gnu.org>
* Makefile.in.in: New file, from gettext-0.12.1.
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index bd848de..83d8838 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -1,5 +1,5 @@
# Makefile for PO directory in any package using GNU gettext.
-# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public
@@ -7,9 +7,13 @@
# functionality.
# Please note that the actual code of GNU gettext is covered by the GNU
# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18
+GETTEXT_MACRO_VERSION = 0.18
PACKAGE = @PACKAGE@
VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
SHELL = /bin/sh
@SET_MAKE@
@@ -22,17 +26,36 @@ prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
datadir = @datadir@
-localedir = $(datadir)/locale
+localedir = @localedir@
gettextsrcdir = $(datadir)/gettext/po
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
MSGMERGE = msgmerge
MSGMERGE_UPDATE = @MSGMERGE@ --update
MSGINIT = msginit
@@ -45,7 +68,7 @@ UPDATEPOFILES = @UPDATEPOFILES@
DUMMYPOFILES = @DUMMYPOFILES@
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
$(POFILES) $(GMOFILES) \
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
@@ -56,7 +79,7 @@ CATALOGS = @CATALOGS@
# Makevars gets inserted here. (Don't remove this line!)
.SUFFIXES:
-.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
.po.mo:
@echo "$(MSGFMT) -c -o $@ $<"; \
@@ -65,19 +88,32 @@ CATALOGS = @CATALOGS@
.po.gmo:
@lang=`echo $* | sed -e 's,.*/,,'`; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
- cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
.sin.sed:
sed -e '/^#/d' $< > t-$@
mv t-$@ $@
-all: all-@USE_NLS@
+all: check-macro-version all-@USE_NLS@
all-yes: stamp-po
all-no:
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
# stamp-po is a timestamp denoting the last time at which the CATALOGS have
# been loosely updated. Its purpose is that when a developer or translator
# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
@@ -87,10 +123,13 @@ all-no:
# $(POFILES) has been designed to not touch files that don't need to be
# changed.
stamp-po: $(srcdir)/$(DOMAIN).pot
- test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS)
- @echo "touch stamp-po"
- @echo timestamp > stamp-poT
- @mv stamp-poT stamp-po
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
# otherwise packages like GCC can not be built if only parts of the source
@@ -99,11 +138,34 @@ stamp-po: $(srcdir)/$(DOMAIN).pot
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
- $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
- --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
- --files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
- --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+ if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+ package_gnu='GNU '; \
+ else \
+ package_gnu=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_gnu}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
test ! -f $(DOMAIN).po || { \
if test -f $(srcdir)/$(DOMAIN).pot; then \
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
@@ -129,16 +191,27 @@ $(srcdir)/$(DOMAIN).pot:
# Note that a PO file is not touched if it doesn't need to be changed.
$(POFILES): $(srcdir)/$(DOMAIN).pot
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
- test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
- cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
install: install-exec install-data
install-exec:
install-data: install-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
for file in $(DISTFILES.common) Makevars.template; do \
$(INSTALL_DATA) $(srcdir)/$$file \
$(DESTDIR)$(gettextsrcdir)/$$file; \
@@ -151,13 +224,12 @@ install-data: install-data-@USE_NLS@
fi
install-data-no: all
install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
@@ -197,19 +269,18 @@ installdirs: installdirs-exec installdirs-data
installdirs-exec:
installdirs-data: installdirs-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
else \
: ; \
fi
installdirs-data-no:
installdirs-data-yes:
- $(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
if test -n "$$lc"; then \
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
@@ -284,11 +355,14 @@ dist distdir:
$(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
+dist2: stamp-po $(DISTFILES)
dists="$(DISTFILES)"; \
if test "$(PACKAGE)" = "gettext-tools"; then \
dists="$$dists Makevars.template"; \
fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
if test -f $(srcdir)/ChangeLog; then \
dists="$$dists ChangeLog"; \
fi; \
@@ -300,9 +374,9 @@ dist2: $(DISTFILES)
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
- cp -p $$file $(distdir); \
+ cp -p $$file $(distdir) || exit 1; \
else \
- cp -p $(srcdir)/$$file $(distdir); \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
fi; \
done
@@ -311,6 +385,13 @@ update-po: Makefile
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
$(MAKE) update-gmo
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
# General rule for updating PO files.
.nop.po-update:
@@ -319,9 +400,15 @@ update-po: Makefile
tmpdir=`pwd`; \
echo "$$lang:"; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
- echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
cd $(srcdir); \
- if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
rm -f $$tmpdir/$$lang.new.po; \
else \
@@ -342,10 +429,13 @@ $(DUMMYPOFILES):
update-gmo: Makefile $(GMOFILES)
@:
-Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
force:
diff --git a/po/Rules-quot b/po/Rules-quot
index 5f46d23..af52487 100644
--- a/po/Rules-quot
+++ b/po/Rules-quot
@@ -4,6 +4,11 @@ DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.heade
.SUFFIXES: .insert-header .po-update-en
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
en@quot.po-update: en@quot.po-update-en
en@boldquot.po-update: en@boldquot.po-update-en
@@ -15,7 +20,7 @@ en@boldquot.po-update: en@boldquot.po-update-en
ll=`echo $$lang | sed -e 's/@.*//'`; \
LC_ALL=C; export LC_ALL; \
cd $(srcdir); \
- if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
rm -f $$tmpdir/$$lang.new.po; \
else \
diff --git a/po/ja.po b/po/ja.po
index d02416a..d67c695 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,49 +1,50 @@
# Japanese translations for w3m package
-# w3m ¥Ñ¥Ã¥±¡¼¥¸¤ËÂФ¹¤ë±ÑÌõ.
+# w3m パッケージã«å¯¾ã™ã‚‹è‹±è¨³.
# Copyright (C) 2003 THE w3m'S COPYRIGHT HOLDER
# This file is distributed under the same license as the w3m package.
# Fumitoshi UKAI <ukai@debian.or.jp>, 2003.
#
msgid ""
msgstr ""
-"Project-Id-Version: w3m 0.5.2\n"
+"Project-Id-Version: w3m 0.5.3\n"
"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2007-05-07 10:49+0900\n"
-"PO-Revision-Date: 2007-05-07 10:52+0900\n"
+"POT-Creation-Date: 2010-08-20 18:44+0900\n"
+"PO-Revision-Date: 2010-08-20 18:45+0900\n"
"Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n"
"Language-Team: Japanese\n"
+"Language: \n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: menu.c:267
msgid " Back (b) "
-msgstr "Ìá¤ë (b)"
+msgstr "戻る (b)"
#: menu.c:268
msgid " Select Buffer(s) "
-msgstr "¥Ð¥Ã¥Õ¥¡ÁªÂò (s)"
+msgstr "ãƒãƒƒãƒ•ã‚¡é¸æŠž (s)"
#: menu.c:270
msgid " Select Tab (t) "
-msgstr "¥¿¥ÖÁªÂò (t)"
+msgstr "タブé¸æŠž (t)"
#: menu.c:272
msgid " View Source (v) "
-msgstr "¥½¡¼¥¹¤òɽ¼¨ (v)"
+msgstr "ソースを表示 (v)"
#: menu.c:273
msgid " Edit Source (e) "
-msgstr "¥½¡¼¥¹¤òÊÔ½¸ (e)"
+msgstr "ソースを編集 (e)"
#: menu.c:274
msgid " Save Source (S) "
-msgstr "¥½¡¼¥¹¤òÊݸ (S)"
+msgstr "ソースをä¿å­˜ (S)"
#: menu.c:275
msgid " Reload (r) "
-msgstr "ºÆÆɤ߹þ¤ß (r)"
+msgstr "å†èª­ã¿è¾¼ã¿ (r)"
#: menu.c:276 menu.c:283 menu.c:287
msgid " ---------------- "
@@ -51,781 +52,829 @@ msgstr "----------------"
#: menu.c:277
msgid " Go Link (a) "
-msgstr "¥ê¥ó¥¯¤òɽ¼¨ (a)"
+msgstr "リンクを表示 (a)"
#: menu.c:278
msgid " on New Tab (n) "
-msgstr "¿·¥¿¥Ö¤Çɽ¼¨ (n)"
+msgstr "新タブã§è¡¨ç¤º (n)"
#: menu.c:279
msgid " Save Link (A) "
-msgstr "¥ê¥ó¥¯¤òÊݸ (A)"
+msgstr "リンクをä¿å­˜ (A)"
#: menu.c:280
msgid " View Image (i) "
-msgstr "²èÁü¤òɽ¼¨ (i)"
+msgstr "ç”»åƒã‚’表示 (i)"
#: menu.c:281
msgid " Save Image (I) "
-msgstr "²èÁü¤òÊݸ (I)"
+msgstr "ç”»åƒã‚’ä¿å­˜ (I)"
#: menu.c:282
msgid " View Frame (f) "
-msgstr "¥Õ¥ì¡¼¥àɽ¼¨ (f)"
+msgstr "フレーム表示 (f)"
#: menu.c:284
msgid " Bookmark (B) "
-msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯ (B)"
+msgstr "ブックマーク (B)"
#: menu.c:285
msgid " Help (h) "
-msgstr "¥Ø¥ë¥× (h)"
+msgstr "ヘルプ (h)"
#: menu.c:286
msgid " Option (o) "
-msgstr "¥ª¥×¥·¥ç¥ó (o)"
+msgstr "オプション (o)"
#: menu.c:288
msgid " Quit (q) "
-msgstr "½ªÎ» (q)"
+msgstr "終了 (q)"
#: rc.c:60
msgid "External Viewer Setup"
-msgstr "³°Éô¥Ó¥å¡¼¥¢¤ÎÊÔ½¸"
+msgstr "外部ビューアã®ç·¨é›†"
#: rc.c:61
msgid "Tab width in characters"
-msgstr "¥¿¥ÖÉý"
+msgstr "タブ幅"
#: rc.c:62
msgid "Indent for HTML rendering"
-msgstr "HTMLÀ°·Á»þ¤Î¥¤¥ó¥Ç¥ó¥ÈÉý"
+msgstr "HTML整形時ã®ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆå¹…"
#: rc.c:63
msgid "Number of pixels per character (4.0...32.0)"
-msgstr "ʸ»úÉý (4.0...32.0)"
+msgstr "文字幅 (4.0...32.0)"
#: rc.c:64
msgid "Number of pixels per line (4.0...64.0)"
-msgstr "°ì¹Ô¤Î¹â¤µ (4.0...64.0)"
+msgstr "一行ã®é«˜ã• (4.0...64.0)"
#: rc.c:65
msgid "Number of remembered lines when used as a pager"
-msgstr "¥Ú¡¼¥¸¥ã¤È¤·¤ÆÍøÍѤ·¤¿»þ¤ËÊݸ¤µ¤ì¤ë¹Ô¿ô"
+msgstr "ページャã¨ã—ã¦åˆ©ç”¨ã—ãŸæ™‚ã«ä¿å­˜ã•ã‚Œã‚‹è¡Œæ•°"
#: rc.c:66
msgid "Use URL history"
-msgstr "ÍúÎò¤ò»È¤¦"
+msgstr "履歴を使ã†"
#: rc.c:67
msgid "Number of remembered URL"
-msgstr "ÊÝ»ý¤¹¤ëURLÍúÎò¤Î¿ô"
+msgstr "ä¿æŒã™ã‚‹URL履歴ã®æ•°"
#: rc.c:68
msgid "Save URL history"
-msgstr "URLÍúÎò¤ÎÊݸ"
+msgstr "URL履歴ã®ä¿å­˜"
#: rc.c:69
msgid "Render frames automatically"
-msgstr "¥Õ¥ì¡¼¥à¤Î¼«Æ°É½¼¨"
+msgstr "フレームã®è‡ªå‹•è¡¨ç¤º"
#: rc.c:70
msgid "Treat argument without scheme as URL"
-msgstr "scheme ¤Î¤Ê¤¤°ú¿ô¤â URL ¤È¤ß¤Ê¤¹"
+msgstr "scheme ã®ãªã„引数も URL ã¨ã¿ãªã™"
#: rc.c:71
msgid "Use _self as default target"
-msgstr "target¤¬Ì¤»ØÄê¤Î¾ì¹ç¤Ë_self¤ò»ÈÍѤ¹¤ë"
+msgstr "targetãŒæœªæŒ‡å®šã®å ´åˆã«_selfを使用ã™ã‚‹"
#: rc.c:72
msgid "Open link on new tab if target is _blank or _new"
-msgstr "target¤¬_blank¤«_new¤Î¾ì¹ç¤Ï¿·¤·¤¤¥¿¥Ö¤Ç³«¤¯"
+msgstr "targetãŒ_blankã‹_newã®å ´åˆã¯æ–°ã—ã„タブã§é–‹ã"
#: rc.c:73
msgid "Open download list panel on new tab"
-msgstr "Download list panel ¤ò¿·¤·¤¤¥¿¥Ö¤Ç³«¤¯"
+msgstr "Download list panel ã‚’æ–°ã—ã„タブã§é–‹ã"
#: rc.c:74
msgid "Display link URL automatically"
-msgstr "¥ê¥ó¥¯Àè¤Î¼«Æ°É½¼¨"
+msgstr "リンク先ã®è‡ªå‹•è¡¨ç¤º"
#: rc.c:75
-msgid "Display decoded URL"
-msgstr "URL¤ò¥Ç¥³¡¼¥É¤·¤Æɽ¼¨"
+msgid "Display link numbers"
+msgstr "リンク番å·ã®è¡¨ç¤º"
#: rc.c:76
-msgid "Display current line number"
-msgstr "¸½ºß¤Î¹ÔÈÖ¹æ¤Îɽ¼¨"
+msgid "Display decoded URL"
+msgstr "URLをデコードã—ã¦è¡¨ç¤º"
#: rc.c:77
+msgid "Display current line number"
+msgstr "ç¾åœ¨ã®è¡Œç•ªå·ã®è¡¨ç¤º"
+
+#: rc.c:78
msgid "Display inline images"
-msgstr "¥¤¥ó¥é¥¤¥ó²èÁü¤òɽ¼¨"
+msgstr "インライン画åƒã‚’表示"
#: rc.c:79
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "ALT ã¾ãŸã¯ TITLE ãŒãªã„ç”»åƒã®ä»£æ›¿ãƒ†ã‚­ã‚¹ãƒˆè¡¨ç¤º"
+
+#: rc.c:81
msgid "Load inline images automatically"
-msgstr "¥¤¥ó¥é¥¤¥ó²èÁü¤ò¼«Æ°¤ÇÆɤ߹þ¤à"
+msgstr "インライン画åƒã‚’自動ã§èª­ã¿è¾¼ã‚€"
-#: rc.c:80
+#: rc.c:82
msgid "Maximum processes for parallel image loading"
-msgstr "²èÁüÆɤ߹þ¤ß»þ¤ÎºÇÂç¥×¥í¥»¥¹¿ô"
+msgstr "ç”»åƒèª­ã¿è¾¼ã¿æ™‚ã®æœ€å¤§ãƒ—ロセス数"
-#: rc.c:81
+#: rc.c:83
msgid "Use external image viewer"
-msgstr "²èÁü¤ò³°Éô¥Ó¥å¡¼¥ï¤Çɽ¼¨"
+msgstr "ç”»åƒã‚’外部ビューワã§è¡¨ç¤º"
-#: rc.c:82
+#: rc.c:84
msgid "Scale of image (%)"
-msgstr "²èÁü¤Î¥¹¥±¡¼¥ë(%)"
+msgstr "ç”»åƒã®ã‚¹ã‚±ãƒ¼ãƒ«(%)"
-#: rc.c:83
+#: rc.c:85
msgid "External command to display image"
-msgstr "²èÁü¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥³¥Þ¥ó¥É"
+msgstr "ç”»åƒã‚’表示ã™ã‚‹ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰"
-#: rc.c:84
+#: rc.c:86
msgid "Use link list of image map"
-msgstr "¥¤¥á¡¼¥¸¥Þ¥Ã¥×¤Î¥ê¥ó¥¯Àè°ìÍ÷¤òɽ¼¨"
+msgstr "イメージマップã®ãƒªãƒ³ã‚¯å…ˆä¸€è¦§ã‚’表示"
-#: rc.c:86
+#: rc.c:88
msgid "Display file names in multi-column format"
-msgstr "¥Õ¥¡¥¤¥ë̾¤Î¥Þ¥ë¥Á¥«¥é¥àɽ¼¨"
+msgstr "ファイルåã®ãƒžãƒ«ãƒã‚«ãƒ©ãƒ è¡¨ç¤º"
-#: rc.c:87
+#: rc.c:89
msgid "Use ASCII equivalents to display entities"
-msgstr "¥¨¥ó¥Æ¥£¥Æ¥£¤ò ASCII ¤ÎÂåÂØɽ¸½¤Çɽ¤¹"
+msgstr "エンティティを ASCII ã®ä»£æ›¿è¡¨ç¾ã§è¡¨ã™"
-#: rc.c:88
-msgid "Use graphic char for border of table and menu"
-msgstr "¥Æ¡¼¥Ö¥ë¤ä¥á¥Ë¥å¡¼¤ÎÏÈ¤Ë graphic ʸ»ú¤ò»È¤¦"
+#: rc.c:90
+msgid "Character type for border of table and menu"
+msgstr "テーブルやメニューã®æž ã«ä½¿ã†æ–‡å­—"
-#: rc.c:89
+#: rc.c:91
msgid "Fold lines in TEXTAREA"
-msgstr "TEXTAREA ¤Î¹Ô¤òÀÞ¤êÊÖ¤·¤Æɽ¼¨"
+msgstr "TEXTAREA ã®è¡Œã‚’折り返ã—ã¦è¡¨ç¤º"
-#: rc.c:90
+#: rc.c:92
msgid "Display INS, DEL, S and STRIKE element"
-msgstr "INS, DEL, S, STRIKE Í×ÁǤÎɽ¼¨"
+msgstr "INS, DEL, S, STRIKE è¦ç´ ã®è¡¨ç¤º"
-#: rc.c:91
+#: rc.c:93
msgid "Display with color"
-msgstr "¥«¥é¡¼É½¼¨"
+msgstr "カラー表示"
-#: rc.c:92
+#: rc.c:94
msgid "Color of normal character"
-msgstr "ʸ»ú¤Î¿§"
+msgstr "文字ã®è‰²"
-#: rc.c:93
+#: rc.c:95
msgid "Color of anchor"
-msgstr "¥¢¥ó¥«¡¼¤Î¿§"
+msgstr "アンカーã®è‰²"
-#: rc.c:94
+#: rc.c:96
msgid "Color of image link"
-msgstr "²èÁü¥ê¥ó¥¯¤Î¿§"
+msgstr "ç”»åƒãƒªãƒ³ã‚¯ã®è‰²"
-#: rc.c:95
+#: rc.c:97
msgid "Color of form"
-msgstr "¥Õ¥©¡¼¥à¤Î¿§"
+msgstr "フォームã®è‰²"
-#: rc.c:96
+#: rc.c:98
msgid "Enable coloring of active link"
-msgstr "¸½ºßÁªÂò¤µ¤ì¤Æ¤¤¤ë¥ê¥ó¥¯¤Î¿§¤ò»ØÄꤹ¤ë"
+msgstr "ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„るリンクã®è‰²ã‚’指定ã™ã‚‹"
-#: rc.c:97
+#: rc.c:99
msgid "Color of currently active link"
-msgstr "¸½ºßÁªÂò¤µ¤ì¤Æ¤¤¤ë¥ê¥ó¥¯¤Î¿§"
+msgstr "ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„るリンクã®è‰²"
-#: rc.c:98
+#: rc.c:100
msgid "Use visited link color"
-msgstr "ˬ¤ì¤¿¤³¤È¤¬¤¢¤ë¥ê¥ó¥¯¤Ï¿§¤òÊѤ¨¤ë"
+msgstr "訪れãŸã“ã¨ãŒã‚るリンクã¯è‰²ã‚’変ãˆã‚‹"
-#: rc.c:99
+#: rc.c:101
msgid "Color of visited link"
-msgstr "ˬ¤ì¤¿¤³¤È¤¬¤¢¤ë¥ê¥ó¥¯¤Î¿§"
+msgstr "訪れãŸã“ã¨ãŒã‚るリンクã®è‰²"
-#: rc.c:100
+#: rc.c:102
msgid "Color of background"
-msgstr "Çطʤο§"
+msgstr "背景ã®è‰²"
-#: rc.c:101
+#: rc.c:103
msgid "Color of mark"
-msgstr "¥Þ¡¼¥¯¤Î¿§"
+msgstr "マークã®è‰²"
-#: rc.c:102
+#: rc.c:104
msgid "Use proxy"
-msgstr "¥×¥í¥­¥·¤ò»ÈÍѤ¹¤ë"
+msgstr "プロキシを使用ã™ã‚‹"
-#: rc.c:103
+#: rc.c:105
msgid "URL of HTTP proxy host"
-msgstr "HTTP¥×¥í¥­¥·(URL¤ÇÆþÎÏ)"
+msgstr "HTTPプロキシ(URLã§å…¥åŠ›)"
-#: rc.c:105
+#: rc.c:107
msgid "URL of HTTPS proxy host"
-msgstr "HTTPS¥×¥í¥­¥·(URL¤ÇÆþÎÏ)"
+msgstr "HTTPSプロキシ(URLã§å…¥åŠ›)"
-#: rc.c:108
+#: rc.c:110
msgid "URL of GOPHER proxy host"
-msgstr "GOPHER¥×¥í¥­¥·(URL¤ÇÆþÎÏ)"
+msgstr "GOPHERプロキシ(URLã§å…¥åŠ›)"
-#: rc.c:110
+#: rc.c:112
msgid "URL of FTP proxy host"
-msgstr "FTP¥×¥í¥­¥·(URL¤ÇÆþÎÏ)"
+msgstr "FTPプロキシ(URLã§å…¥åŠ›)"
-#: rc.c:111
+#: rc.c:113
msgid "Domains to be accessed directly (no proxy)"
-msgstr "¥×¥í¥­¥·¤«¤é½ü³°¤¹¤ë¥É¥á¥¤¥ó"
+msgstr "プロキシã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³"
-#: rc.c:112
+#: rc.c:114
msgid "Check noproxy by network address"
-msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¥¢¥É¥ì¥¹¤Ç¥×¥í¥­¥·½ü³°¤Î¥Á¥§¥Ã¥¯"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ãƒ—ロキシ除外ã®ãƒã‚§ãƒƒã‚¯"
-#: rc.c:113
+#: rc.c:115
msgid "Disable cache"
-msgstr "Cache ¤ò»È¤ï¤Ê¤¤"
+msgstr "Cache を使ã‚ãªã„"
-#: rc.c:115
+#: rc.c:117
msgid "News server"
-msgstr "News ¥µ¡¼¥Ð"
+msgstr "News サーãƒ"
-#: rc.c:116
+#: rc.c:118
msgid "Mode of news server"
-msgstr "News ¥µ¡¼¥Ð¤Î¥â¡¼¥É"
+msgstr "News サーãƒã®ãƒ¢ãƒ¼ãƒ‰"
-#: rc.c:117
+#: rc.c:119
msgid "Number of news messages"
-msgstr "News ¤ò°ìÍ÷ɽ¼¨¤¹¤ë»þ¤Î¿ô"
+msgstr "News を一覧表示ã™ã‚‹æ™‚ã®æ•°"
-#: rc.c:119
+#: rc.c:121
msgid "Order of name resolution"
-msgstr "̾Á°²ò·è¤Î½ç½ø"
+msgstr "åå‰è§£æ±ºã®é †åº"
-#: rc.c:120
+#: rc.c:122
msgid "Directory corresponding to / (document root)"
-msgstr "/ ¤Çɽ¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê(document root)"
+msgstr "/ ã§è¡¨ã•ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª(document root)"
-#: rc.c:121
+#: rc.c:123
msgid "Directory corresponding to /~user"
-msgstr "/~user ¤Çɽ¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê"
+msgstr "/~user ã§è¡¨ã•ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª"
-#: rc.c:122
+#: rc.c:124
msgid "Directory corresponding to /cgi-bin"
-msgstr "/cgi-bin ¤Çɽ¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê"
+msgstr "/cgi-bin ã§è¡¨ã•ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª"
-#: rc.c:123
+#: rc.c:125
msgid "Confirm when quitting with q"
-msgstr "q ¤Ç¤Î½ªÎ»»þ¤Ë³Îǧ¤¹¤ë"
+msgstr "q ã§ã®çµ‚了時ã«ç¢ºèªã™ã‚‹"
-#: rc.c:124
+#: rc.c:126
msgid "Close tab if buffer is last when back"
-msgstr "Ìá¤ë»þ¤Ë¥Ð¥Ã¥Õ¥¡¤¬ºÇ¸å¤Ê¤é¥¿¥Ö¤òÊĤ¸¤ë"
+msgstr "戻る時ã«ãƒãƒƒãƒ•ã‚¡ãŒæœ€å¾Œãªã‚‰ã‚¿ãƒ–ã‚’é–‰ã˜ã‚‹"
-#: rc.c:126
+#: rc.c:128
msgid "Enable mark operations"
-msgstr "¥Þ¡¼¥¯µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë"
+msgstr "マーク機能を有効ã«ã™ã‚‹"
-#: rc.c:128
+#: rc.c:130
msgid "Enable Emacs-style line editing"
-msgstr "EmacsÉ÷¤Î¹ÔÊÔ½¸¤Ë¤¹¤ë"
+msgstr "Emacs風ã®è¡Œç·¨é›†ã«ã™ã‚‹"
-#: rc.c:129
+#: rc.c:131
msgid "Enable vi-like numeric prefix"
-msgstr "viÉ÷¤Î¿ôÃÍ¥×¥ì¥Õ¥£¥¯¥¹"
+msgstr "vi風ã®æ•°å€¤ãƒ—レフィクス"
-#: rc.c:130
+#: rc.c:132
msgid "Move cursor to top line when going to label"
-msgstr "¥é¥Ù¥ë¤Ë°ÜÆ°¤¹¤ë»þ¤Ë¥«¡¼¥½¥ë¤¬¥È¥Ã¥×¤Ë¤Ê¤ë¤è¤¦¤Ë¤¹¤ë"
+msgstr "ラベルã«ç§»å‹•ã™ã‚‹æ™‚ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒãƒˆãƒƒãƒ—ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹"
-#: rc.c:131
+#: rc.c:133
msgid "Move cursor to top line when moving to next page"
-msgstr "¼¡¤Î¥Ú¡¼¥¸¤Ë°ÜÆ°¤¹¤ë»þ¤Ë¥«¡¼¥½¥ë¤¬¥È¥Ã¥×¤Ë¤Ê¤ë¤è¤¦¤Ë¤¹¤ë"
+msgstr "次ã®ãƒšãƒ¼ã‚¸ã«ç§»å‹•ã™ã‚‹æ™‚ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒãƒˆãƒƒãƒ—ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹"
-#: rc.c:132
+#: rc.c:134
msgid "Fold lines of plain text file"
-msgstr "plain text ¥Õ¥¡¥¤¥ë¤Î¹Ô¤òÀÞ¤êÊÖ¤¹"
+msgstr "plain text ファイルã®è¡Œã‚’折り返ã™"
-#: rc.c:133
+#: rc.c:135
msgid "Show line numbers"
-msgstr "¹ÔÈÖ¹æ¤òɽ¼¨¤¹¤ë"
+msgstr "行番å·ã‚’表示ã™ã‚‹"
-#: rc.c:134
+#: rc.c:136
msgid "Show search string"
-msgstr "¸¡º÷ʸ»úÎó¤òɽ¼¨¤¹¤ë"
+msgstr "検索文字列を表示ã™ã‚‹"
-#: rc.c:135
+#: rc.c:137
msgid "List of mime.types files"
-msgstr "ÍøÍѤ¹¤ëmime.types"
+msgstr "利用ã™ã‚‹mime.types"
-#: rc.c:136
+#: rc.c:138
msgid "List of mailcap files"
-msgstr "ÍøÍѤ¹¤ëmailcap"
+msgstr "利用ã™ã‚‹mailcap"
-#: rc.c:137
+#: rc.c:139
msgid "List of urimethodmap files"
-msgstr "ÍøÍѤ¹¤ëurimethodmap"
+msgstr "利用ã™ã‚‹urimethodmap"
-#: rc.c:138
+#: rc.c:140
msgid "Editor"
-msgstr "ÍøÍѤ¹¤ë¥¨¥Ç¥£¥¿"
+msgstr "利用ã™ã‚‹ã‚¨ãƒ‡ã‚£ã‚¿"
-#: rc.c:139
+#: rc.c:141
msgid "Mailer"
-msgstr "ÍøÍѤ¹¤ë¥á¡¼¥é"
+msgstr "利用ã™ã‚‹ãƒ¡ãƒ¼ãƒ©"
-#: rc.c:140
+#: rc.c:142
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "mailto ã‚¿ã‚°ã®å–り扱ã„"
+
+#: rc.c:143
msgid "External Browser"
-msgstr "³°Éô¥Ö¥é¥¦¥¶"
+msgstr "外部ブラウザ"
-#: rc.c:141
+#: rc.c:144
msgid "Second External Browser"
-msgstr "³°Éô¥Ö¥é¥¦¥¶¤½¤Î2"
+msgstr "外部ブラウザãã®2"
-#: rc.c:142
+#: rc.c:145
msgid "Third External Browser"
-msgstr "³°Éô¥Ö¥é¥¦¥¶¤½¤Î3"
+msgstr "外部ブラウザãã®3"
-#: rc.c:143
+#: rc.c:146
msgid "Disable secret file security check"
-msgstr "¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤"
+msgstr "パスワードファイルã®ãƒ‘ーミッションをãƒã‚§ãƒƒã‚¯ã—ãªã„"
-#: rc.c:144
+#: rc.c:147
msgid "Password file"
-msgstr "¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë"
+msgstr "パスワードファイル"
-#: rc.c:145
+#: rc.c:148
msgid "File for setting form on loading"
-msgstr "ʸ½ñÆɹþ»þ¤Î¥Õ¥©¡¼¥àÀßÄêÍÑ¥Õ¥¡¥¤¥ë"
+msgstr "文書読込時ã®ãƒ•ã‚©ãƒ¼ãƒ è¨­å®šç”¨ãƒ•ã‚¡ã‚¤ãƒ«"
-#: rc.c:146
+#: rc.c:149
msgid "Password for anonymous FTP (your mail address)"
-msgstr "FTP¤Î¥Ñ¥¹¥ï¡¼¥É(ÉáÄ̤ϼ«Ê¬¤Îmail address¤ò»È¤¦)"
+msgstr "FTPã®ãƒ‘スワード(普通ã¯è‡ªåˆ†ã®mail addressを使ã†)"
-#: rc.c:147
+#: rc.c:150
msgid "Generate domain part of password for FTP"
-msgstr "FTP¤Î¥Ñ¥¹¥ï¡¼¥É¤Î¥É¥á¥¤¥ó̾¤ò¼«Æ°À¸À®¤¹¤ë"
+msgstr "FTPã®ãƒ‘スワードã®ãƒ‰ãƒ¡ã‚¤ãƒ³åを自動生æˆã™ã‚‹"
-#: rc.c:148
+#: rc.c:151
msgid "User-Agent identification string"
msgstr "User-Agent"
-#: rc.c:149
+#: rc.c:152
msgid "Accept-Encoding header"
-msgstr "°µ½ÌÊýË¡(Accept-Encoding:)"
+msgstr "圧縮方法(Accept-Encoding:)"
-#: rc.c:150
+#: rc.c:153
msgid "Accept header"
-msgstr "¼õ¤±¤Ä¤±¤ë¥á¥Ç¥£¥¢¥¿¥¤¥×(Accept:)"
+msgstr "å—ã‘ã¤ã‘るメディアタイプ(Accept:)"
-#: rc.c:151
+#: rc.c:154
msgid "Accept-Language header"
-msgstr "¼õ¤±¤Ä¤±¤ë¸À¸ì(Accept-Language:)"
+msgstr "å—ã‘ã¤ã‘る言語(Accept-Language:)"
-#: rc.c:152
+#: rc.c:155
msgid "Treat URL-like strings as links in all pages"
-msgstr "Á´¤Æ¤Î¥Ú¡¼¥¸¤ÎURLÉ÷¤Îʸ»úÎó¤ò¥ê¥ó¥¯¤Ë¤¹¤ë"
+msgstr "å…¨ã¦ã®ãƒšãƒ¼ã‚¸ã®URL風ã®æ–‡å­—列をリンクã«ã™ã‚‹"
-#: rc.c:153
+#: rc.c:156
msgid "Wrap search"
-msgstr "ÀÞ¤êÊÖ¤·¸¡º÷"
+msgstr "折り返ã—検索"
-#: rc.c:154
+#: rc.c:157
msgid "Display unseen objects (e.g. bgimage tag)"
-msgstr "ÇطʲèÁüÅù¤Ø¤Î¥ê¥ó¥¯¤òºî¤ë"
+msgstr "背景画åƒç­‰ã¸ã®ãƒªãƒ³ã‚¯ã‚’作る"
-#: rc.c:155
+#: rc.c:158
msgid "Uncompress compressed data automatically when downloading"
-msgstr "¥À¥¦¥ó¥í¡¼¥É»þ¤Ë¼«Æ°Åª¤Ë°µ½Ì¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²òÅह¤ë"
+msgstr "ダウンロード時ã«è‡ªå‹•çš„ã«åœ§ç¸®ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã‚’解å‡ã™ã‚‹"
-#: rc.c:157
+#: rc.c:160
msgid "Run external viewer in a separate session"
-msgstr "³°Éô¥Ó¥å¡¼¥¢¤òÊÌ¥»¥Ã¥·¥ç¥ó¤ÇÆ°¤«¤¹"
+msgstr "外部ビューアを別セッションã§å‹•ã‹ã™"
-#: rc.c:159
+#: rc.c:162
msgid "Run external viewer in the background"
-msgstr "³°Éô¥Ó¥å¡¼¥¢¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇÆ°¤«¤¹"
+msgstr "外部ビューアをãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å‹•ã‹ã™"
-#: rc.c:161
+#: rc.c:164
msgid "Use external program for directory listing"
-msgstr "¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¤Ë³°Éô¥³¥Þ¥ó¥É¤ò»È¤¦"
+msgstr "ディレクトリリストã«å¤–部コマンドを使ã†"
-#: rc.c:162
+#: rc.c:165
msgid "URL of directory listing command"
-msgstr "¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥ÈÍÑ¥³¥Þ¥ó¥É"
+msgstr "ディレクトリリスト用コマンド"
-#: rc.c:164
+#: rc.c:167
msgid "Enable dictionary lookup through CGI"
-msgstr "¼­½ñ°ú¤­¤òCGI·Ðͳ¤Ç¤ª¤³¤Ê¤¦"
+msgstr "辞書引ãã‚’CGI経由ã§ãŠã“ãªã†"
-#: rc.c:165
+#: rc.c:168
msgid "URL of dictionary lookup command"
-msgstr "¼­½ñ°ú¤­¥³¥Þ¥ó¥É¤ÎURL"
+msgstr "辞書引ãコマンドã®URL"
-#: rc.c:167
+#: rc.c:170
msgid "Display link name for images lacking ALT"
-msgstr "¶õ¤ÎIMG ALT°À­¤Î»þ¤Ë¥ê¥ó¥¯Ì¾¤òɽ¼¨¤¹¤ë"
+msgstr "空ã®IMG ALT属性ã®æ™‚ã«ãƒªãƒ³ã‚¯åを表示ã™ã‚‹"
-#: rc.c:168
+#: rc.c:171
msgid "Index file for directories"
-msgstr "³Æ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë"
+msgstr "å„ディレクトリã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«"
-#: rc.c:169
+#: rc.c:172
msgid "Prepend http:// to URL automatically"
-msgstr "URL¤Ë¼«Æ°Åª¤Ë http:// ¤òÊ䤦"
+msgstr "URLã«è‡ªå‹•çš„ã« http:// を補ã†"
-#: rc.c:170
+#: rc.c:173
msgid "Default value for open-URL command"
-msgstr "URL¤ò³«¤¯»þ¤Î¥Ç¥Õ¥©¥ë¥Èʸ»úÎó"
+msgstr "URLã‚’é–‹ã時ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆæ–‡å­—列"
-#: rc.c:171
+#: rc.c:174
msgid "Decode Content-Transfer-Encoding when saving"
-msgstr "Êݸ»þ¤Ë Content-Transfer-Encoding ¤ò¥Ç¥³¡¼¥É¤¹¤ë"
+msgstr "ä¿å­˜æ™‚ã« Content-Transfer-Encoding をデコードã™ã‚‹"
-#: rc.c:172
+#: rc.c:175
msgid "Preserve timestamp when saving"
-msgstr "Êݸ»þ¤Ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤òÊÝ»ý¤¹¤ë"
+msgstr "ä¿å­˜æ™‚ã«ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’ä¿æŒã™ã‚‹"
-#: rc.c:174
+#: rc.c:177
msgid "Enable mouse"
-msgstr "¥Þ¥¦¥¹¤ò»È¤¦"
+msgstr "マウスを使ã†"
-#: rc.c:175
+#: rc.c:178
msgid "Scroll in reverse direction of mouse drag"
-msgstr "¥Þ¥¦¥¹¤Î¥É¥é¥Ã¥°Æ°ºî¤òµÕ¤Ë¤¹¤ë"
+msgstr "マウスã®ãƒ‰ãƒ©ãƒƒã‚°å‹•ä½œã‚’逆ã«ã™ã‚‹"
-#: rc.c:176
+#: rc.c:179
msgid "Behavior of wheel scroll speed"
-msgstr "¥Û¥¤¡¼¥ë¤Ç¤Î¥¹¥¯¥í¡¼¥ë®Å٤ΰ·¤¤"
+msgstr "ホイールã§ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«é€Ÿåº¦ã®æ‰±ã„"
-#: rc.c:177
+#: rc.c:180
msgid "(A only)Scroll by # (%) of screen"
-msgstr "(A¤Î¤ß)²èÌ̤β¿%¥¹¥¯¥í¡¼¥ë¤¹¤ë¤«"
+msgstr "(Aã®ã¿)ç”»é¢ã®ä½•%スクロールã™ã‚‹ã‹"
-#: rc.c:178
+#: rc.c:181
msgid "(B only)Scroll by # lines"
-msgstr "(B¤Î¤ß)¥¹¥¯¥í¡¼¥ë¤¹¤ë¹Ô¿ô"
+msgstr "(Bã®ã¿)スクロールã™ã‚‹è¡Œæ•°"
-#: rc.c:180
+#: rc.c:183
msgid "Free memory of undisplayed buffers"
-msgstr "ɽ¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤Î¥á¥â¥ê¤ò²òÊü¤¹¤ë"
+msgstr "表示ã•ã‚Œã¦ã„ãªã„ãƒãƒƒãƒ•ã‚¡ã®ãƒ¡ãƒ¢ãƒªã‚’解放ã™ã‚‹"
-#: rc.c:181
+#: rc.c:184
msgid "Suppress `Referer:' header"
-msgstr "Referer: ¤òÁ÷¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë"
+msgstr "Referer: ã‚’é€ã‚‰ãªã„よã†ã«ã™ã‚‹"
-#: rc.c:182
+#: rc.c:185
msgid "Search case-insensitively"
-msgstr "¥µ¡¼¥Á»þ¤ËÂçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤·¤Ê¤¤"
+msgstr "サーãƒæ™‚ã«å¤§æ–‡å­—å°æ–‡å­—ã®åŒºåˆ¥ã‚’ã—ãªã„"
-#: rc.c:183
+#: rc.c:186
msgid "Use LESSOPEN"
-msgstr "LESSOPEN¤ò»ÈÍÑ"
+msgstr "LESSOPENを使用"
-#: rc.c:186
+#: rc.c:189
msgid "Perform SSL server verification"
-msgstr "SSL¤Î¥µ¡¼¥Ðǧ¾Ú¤ò¹Ô¤¦"
+msgstr "SSLã®ã‚µãƒ¼ãƒèªè¨¼ã‚’è¡Œã†"
-#: rc.c:187
+#: rc.c:190
msgid "PEM encoded certificate file of client"
-msgstr "SSL¤Î¥¯¥é¥¤¥¢¥ó¥ÈÍÑPEM·Á¼°¾ÚÌÀ½ñ¥Õ¥¡¥¤¥ë"
+msgstr "SSLã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”¨PEMå½¢å¼è¨¼æ˜Žæ›¸ãƒ•ã‚¡ã‚¤ãƒ«"
-#: rc.c:188
+#: rc.c:191
msgid "PEM encoded private key file of client"
-msgstr "SSL¤Î¥¯¥é¥¤¥¢¥ó¥ÈÍÑPEM·Á¼°ÈëÌ©¸°¥Õ¥¡¥¤¥ë"
+msgstr "SSLã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”¨PEMå½¢å¼ç§˜å¯†éµãƒ•ã‚¡ã‚¤ãƒ«"
-#: rc.c:189
+#: rc.c:192
msgid "Path to directory for PEM encoded certificates of CAs"
-msgstr "SSL¤Îǧ¾Ú¶É¤ÎPEM·Á¼°¾ÚÌÀ½ñ·²¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥Ñ¥¹"
+msgstr "SSLã®èªè¨¼å±€ã®PEMå½¢å¼è¨¼æ˜Žæ›¸ç¾¤ã®ã‚るディレクトリã¸ã®ãƒ‘ス"
-#: rc.c:190
+#: rc.c:193
msgid "File consisting of PEM encoded certificates of CAs"
-msgstr "SSL¤Îǧ¾Ú¶É¤ÎPEM·Á¼°¾ÚÌÀ½ñ·²¤Î¥Õ¥¡¥¤¥ë"
+msgstr "SSLã®èªè¨¼å±€ã®PEMå½¢å¼è¨¼æ˜Žæ›¸ç¾¤ã®ãƒ•ã‚¡ã‚¤ãƒ«"
-#: rc.c:192
+#: rc.c:195
msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
-msgstr "»È¤ï¤Ê¤¤SSL¥á¥½¥Ã¥É¤Î¥ê¥¹¥È(2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "使ã‚ãªã„SSLメソッドã®ãƒªã‚¹ãƒˆ(2: SSLv2, 3: SSLv3, t:TLSv1)"
-#: rc.c:195
+#: rc.c:198
msgid "Enable cookie processing"
-msgstr "¥¯¥Ã¥­¡¼¤ò»ÈÍѤ¹¤ë"
+msgstr "クッキーを使用ã™ã‚‹"
-#: rc.c:196
+#: rc.c:199
msgid "Print a message when receiving a cookie"
-msgstr "¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤¿¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë"
+msgstr "クッキーをå—ã‘付ã‘ãŸã¨ãã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹"
-#: rc.c:197
+#: rc.c:200
msgid "Accept cookies"
-msgstr "¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤ë"
+msgstr "クッキーをå—ã‘付ã‘ã‚‹"
-#: rc.c:198
+#: rc.c:201
msgid "Action to be taken on invalid cookie"
-msgstr "ÌäÂê¤Î¤¢¤ë¥¯¥Ã¥­¡¼¤Ç¤â¼õ¤±ÉÕ¤±¤ë"
+msgstr "å•é¡Œã®ã‚るクッキーã§ã‚‚å—ã‘付ã‘ã‚‹"
-#: rc.c:199
+#: rc.c:202
msgid "Domains to reject cookies from"
-msgstr "¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤Ê¤¤¥É¥á¥¤¥ó"
+msgstr "クッキーをå—ã‘付ã‘ãªã„ドメイン"
-#: rc.c:200
+#: rc.c:203
msgid "Domains to accept cookies from"
-msgstr "¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤ë¥É¥á¥¤¥ó"
+msgstr "クッキーをå—ã‘付ã‘るドメイン"
-#: rc.c:202
+#: rc.c:204
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "[wrong number of dots] を無視ã™ã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³"
+
+#: rc.c:206
msgid "Number of redirections to follow"
-msgstr "½¾¤¦¥ê¥À¥¤¥ì¥¯¥È¤Î²ó¿ô"
+msgstr "従ã†ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã®å›žæ•°"
-#: rc.c:203
+#: rc.c:207
msgid "Enable processing of meta-refresh tag"
-msgstr "meta refresh ¤ËÂбþ¤¹¤ë"
+msgstr "meta refresh ã«å¯¾å¿œã™ã‚‹"
-#: rc.c:206
+#: rc.c:210
msgid "Enable Migemo (Roma-ji search)"
-msgstr "Migemo(¥í¡¼¥Þ»ú¸¡º÷)¤ò»ÈÍѤ¹¤ë"
+msgstr "Migemo(ローマ字検索)を使用ã™ã‚‹"
-#: rc.c:207
+#: rc.c:211
msgid "Migemo command"
-msgstr "Migemo¥³¥Þ¥ó¥É"
+msgstr "Migemoコマンド"
-#: rc.c:211
+#: rc.c:215
msgid "Display charset"
-msgstr "ɽ¼¨ÍÑʸ»ú¥³¡¼¥É"
+msgstr "表示用文字コード"
-#: rc.c:212
+#: rc.c:216
msgid "Default document charset"
-msgstr "ʸ½ñ¤Îɸ½à¤Îʸ»ú¥³¡¼¥É"
+msgstr "文書ã®æ¨™æº–ã®æ–‡å­—コード"
-#: rc.c:213
+#: rc.c:217
msgid "Automatic charset detect when loading"
-msgstr "ʸ½ñ¤ÎÆɤ߹þ¤ß»þ¤Ëʸ»ú¥³¡¼¥É¤Î¼«Æ°È½Äê¤ò¹Ô¤¦"
+msgstr "文書ã®èª­ã¿è¾¼ã¿æ™‚ã«æ–‡å­—コードã®è‡ªå‹•åˆ¤å®šã‚’è¡Œã†"
-#: rc.c:214
+#: rc.c:218
msgid "System charset"
-msgstr "¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É"
+msgstr "システムã®æ–‡å­—コード"
-#: rc.c:215
+#: rc.c:219
msgid "System charset follows locale(LC_CTYPE)"
-msgstr "Locale(LC_CTYPE) ¤Ë½¾¤Ã¤Æ¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤òÀßÄê"
+msgstr "Locale(LC_CTYPE) ã«å¾“ã£ã¦ã‚·ã‚¹ãƒ†ãƒ ã®æ–‡å­—コードを設定"
-#: rc.c:216
+#: rc.c:220
msgid "Output halfdump with display charset"
-msgstr "ɽ¼¨ÍÑʸ»ú¥³¡¼¥É¤Ç halfdump ¤Î½ÐÎϤò¹Ô¤¦"
+msgstr "表示用文字コード㧠halfdump ã®å‡ºåŠ›ã‚’è¡Œã†"
-#: rc.c:217
+#: rc.c:221
msgid "Use multi column characters"
-msgstr "Ê£¿ô¥«¥é¥à¤Îʸ»ú¤ò»È¤¦"
+msgstr "複数カラムã®æ–‡å­—を使ã†"
-#: rc.c:218
+#: rc.c:222
msgid "Use combining characters"
-msgstr "·ë¹çʸ»ú¤ò»È¤¦"
+msgstr "çµåˆæ–‡å­—を使ã†"
-#: rc.c:219
+#: rc.c:223
+msgid "Use double width for some Unicode characters"
+msgstr "ã‚る種ã®Unicode文字を全角ã«ã™ã‚‹"
+
+#: rc.c:224
msgid "Use Unicode language tags"
-msgstr "Unicode ¤Î¸À¸ì¥¿¥°¤ò»È¤¦"
+msgstr "Unicode ã®è¨€èªžã‚¿ã‚°ã‚’使ã†"
-#: rc.c:220
+#: rc.c:225
msgid "Charset conversion using Unicode map"
-msgstr "Unicode¤ò²ð¤·¤¿¥³¡¼¥ÉÊÑ´¹"
+msgstr "Unicodeを介ã—ãŸã‚³ãƒ¼ãƒ‰å¤‰æ›"
-#: rc.c:221
+#: rc.c:226
msgid "Charset conversion when loading"
-msgstr "ʸ½ñ¤ÎÆɤ߹þ¤ß»þ¤Ëʸ»ú¥³¡¼¥É¤òÊÑ´¹¤¹¤ë"
+msgstr "文書ã®èª­ã¿è¾¼ã¿æ™‚ã«æ–‡å­—コードを変æ›ã™ã‚‹"
-#: rc.c:222
+#: rc.c:227
msgid "Adjust search string for document charset"
-msgstr "¸¡º÷ʸ»úÎó¤òʸ½ñ¤Îʸ»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë"
+msgstr "検索文字列を文書ã®æ–‡å­—コードã«å¤‰æ›ã™ã‚‹"
-#: rc.c:223
+#: rc.c:228
msgid "Fix character width when conversion"
-msgstr "ʸ»úÉý¤ÎÊѤï¤ëÊÑ´¹¤ò¤·¤Ê¤¤"
+msgstr "文字幅ã®å¤‰ã‚る変æ›ã‚’ã—ãªã„"
-#: rc.c:224
+#: rc.c:229
msgid "Use GB 12345 Unicode map instead of GB 2312's"
-msgstr "GB 12345 ¤Î Unicode ¥Þ¥Ã¥×¤ò GB 2312 ÍѤ˻Ȥ¦"
+msgstr "GB 12345 ã® Unicode マップを GB 2312 用ã«ä½¿ã†"
-#: rc.c:225
+#: rc.c:230
msgid "Use JIS X 0201 Roman for ISO-2022-JP"
-msgstr "ISO-2022-JP ¤Ç JIS X 0201-Roman ¤ò»È¤¦"
+msgstr "ISO-2022-JP 㧠JIS X 0201-Roman を使ã†"
-#: rc.c:226
+#: rc.c:231
msgid "Use JIS C 6226:1978 for ISO-2022-JP"
-msgstr "ISO-2022-JP ¤Ç JIS C 6226:1978(µìJIS) ¤ò»È¤¦"
+msgstr "ISO-2022-JP 㧠JIS C 6226:1978(æ—§JIS) を使ã†"
-#: rc.c:227
+#: rc.c:232
msgid "Use JIS X 0201 Katakana"
-msgstr "JIS X 0201-Katakana ¤ò»È¤¦"
+msgstr "JIS X 0201-Katakana を使ã†"
-#: rc.c:228
+#: rc.c:233
msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
-msgstr "JIS X 0212:1990(Êä½õ´Á»ú) ¤ò»È¤¦"
+msgstr "JIS X 0212:1990(補助漢字) を使ã†"
-#: rc.c:229
+#: rc.c:234
msgid "Use JIS X 0213:2000 (2000JIS)"
-msgstr "JIS X 0213:2000(2000JIS) ¤ò»È¤¦"
+msgstr "JIS X 0213:2000(2000JIS) を使ã†"
-#: rc.c:230
+#: rc.c:235
msgid "Strict ISO-2022-JP/KR/CN"
-msgstr "¸·³Ê¤Ê ISO-2022-JP/KR/CN ¤ò»È¤¦"
+msgstr "厳格㪠ISO-2022-JP/KR/CN を使ã†"
-#: rc.c:231
+#: rc.c:236
msgid "Treat 4 bytes char. of GB18030 as Unicode"
-msgstr "GB18030 ¤Î 4¥Ð¥¤¥Èʸ»ú¤ò Unicode ¤È¤·¤Æ°·¤¦"
+msgstr "GB18030 ã® 4ãƒã‚¤ãƒˆæ–‡å­—ã‚’ Unicode ã¨ã—ã¦æ‰±ã†"
-#: rc.c:234
+#: rc.c:237
+msgid "Simple Preserve space"
+msgstr "å˜ç´”ãªç©ºç™½ã®ä¿å­˜"
+
+#: rc.c:240
msgid "keymap file"
-msgstr "keymap¥Õ¥¡¥¤¥ë"
+msgstr "keymapファイル"
-#: rc.c:251
+#: rc.c:257
msgid "black"
-msgstr "¹õ"
+msgstr "é»’"
-#: rc.c:252
+#: rc.c:258
msgid "red"
-msgstr "ÀÖ"
+msgstr "赤"
-#: rc.c:253
+#: rc.c:259
msgid "green"
-msgstr "ÎÐ"
+msgstr "ç·‘"
-#: rc.c:254
+#: rc.c:260
msgid "yellow"
-msgstr "²«"
+msgstr "黄"
-#: rc.c:255
+#: rc.c:261
msgid "blue"
-msgstr "ÀÄ"
+msgstr "é’"
-#: rc.c:256
+#: rc.c:262
msgid "magenta"
-msgstr "ȍ"
+msgstr "ç´«"
-#: rc.c:257
+#: rc.c:263
msgid "cyan"
-msgstr "¶õ¿§"
+msgstr "空色"
-#: rc.c:258
+#: rc.c:264
msgid "white"
-msgstr "Çò"
+msgstr "白"
-#: rc.c:259
+#: rc.c:265
msgid "terminal"
-msgstr "üËö"
+msgstr "端末"
-#: rc.c:278
+#: rc.c:284
msgid "none"
-msgstr "̵¤·"
+msgstr "ç„¡ã—"
-#: rc.c:279
+#: rc.c:285
msgid "current URL"
-msgstr "¸½ºß¤ÎURL"
+msgstr "ç¾åœ¨ã®URL"
-#: rc.c:280
+#: rc.c:286
msgid "link URL"
-msgstr "¥ê¥ó¥¯Àè¤ÎURL"
+msgstr "リンク先ã®URL"
-#: rc.c:285
+#: rc.c:291
msgid "simple"
-msgstr "¥·¥ó¥×¥ë"
+msgstr "シンプル"
-#: rc.c:286
+#: rc.c:292
msgid "use tag"
-msgstr "¥¿¥°¤Çɽ¼¨"
+msgstr "ã‚¿ã‚°ã§è¡¨ç¤º"
-#: rc.c:287
+#: rc.c:293
msgid "fontify"
-msgstr "ʸ»úÁõ¾þ"
+msgstr "文字装飾"
-#: rc.c:293
+#: rc.c:299
msgid "A:relative to screen height"
-msgstr "A:²èÌÌ¥µ¥¤¥º¤ËÈæÎã"
+msgstr "A:ç”»é¢ã‚µã‚¤ã‚ºã«æ¯”例"
-#: rc.c:294
+#: rc.c:300
msgid "B:fixed speed"
-msgstr "B:°ìÄê¤Î¹Ô¿ô"
+msgstr "B:一定ã®è¡Œæ•°"
-#: rc.c:301
+#: rc.c:307
msgid "unspecified"
-msgstr "»ØÄꤷ¤Ê¤¤"
+msgstr "指定ã—ãªã„"
-#: rc.c:302
+#: rc.c:308
msgid "inet inet6"
-msgstr "IPv4Í¥Àè"
+msgstr "IPv4優先"
-#: rc.c:303
+#: rc.c:309
msgid "inet6 inet"
-msgstr "IPv6Í¥Àè"
+msgstr "IPv6優先"
-#: rc.c:304
+#: rc.c:310
msgid "inet only"
-msgstr "IPv4¤Î¤ß"
+msgstr "IPv4ã®ã¿"
-#: rc.c:305
+#: rc.c:311
msgid "inet6 only"
-msgstr "IPv6¤Î¤ß"
+msgstr "IPv6ã®ã¿"
-#: rc.c:312
+#: rc.c:318
msgid "discard"
-msgstr "ÇË´þ¤¹¤ë"
+msgstr "破棄ã™ã‚‹"
-#: rc.c:314
+#: rc.c:320
msgid "accept"
-msgstr "¼õ¤±Æþ¤ì¤ë"
+msgstr "å—ã‘入れる"
-#: rc.c:316
+#: rc.c:322
msgid "ask"
-msgstr "³Îǧ¤¹¤ë"
+msgstr "確èªã™ã‚‹"
+
+#: rc.c:329
+msgid "use internal mailer instead"
+msgstr "内部メーラを使用"
+
+#: rc.c:331
+msgid "ignore options and use only the address"
+msgstr "アドレスã®ã¿ä½¿ç”¨"
+
+#: rc.c:332
+msgid "use full mailto URL"
+msgstr "URL 全体を使用"
-#: rc.c:326
+#: rc.c:341
msgid "OFF"
-msgstr "̵¸ú"
+msgstr "無効"
-#: rc.c:327
+#: rc.c:342
msgid "Only ISO 2022"
-msgstr "ISO 2022 ¤Î¤ß"
+msgstr "ISO 2022 ã®ã¿"
-#: rc.c:328
+#: rc.c:343
msgid "ON"
-msgstr "Í­¸ú"
+msgstr "有効"
+
+#: rc.c:349
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.c:350
+msgid "charset specific"
+msgstr "文字コードä¾å­˜"
+
+#: rc.c:351
+msgid "DEC special graphics"
+msgstr "DEC 特殊文字"
-#: rc.c:679
+#: rc.c:714
msgid "Display Settings"
-msgstr "ɽ¼¨´Ø·¸"
+msgstr "表示関係"
-#: rc.c:681
+#: rc.c:716
msgid "Color Settings"
-msgstr "ɽ¼¨¿§"
+msgstr "表示色"
-#: rc.c:683
+#: rc.c:718
msgid "Miscellaneous Settings"
-msgstr "»¨Â¿¤ÊÀßÄê"
+msgstr "雑多ãªè¨­å®š"
-#: rc.c:684
+#: rc.c:719
msgid "Directory Settings"
-msgstr "¥Ç¥£¥ì¥¯¥È¥êÀßÄê"
+msgstr "ディレクトリ設定"
-#: rc.c:685
+#: rc.c:720
msgid "External Program Settings"
-msgstr "³°Éô¥×¥í¥°¥é¥à"
+msgstr "外部プログラム"
-#: rc.c:686
+#: rc.c:721
msgid "Network Settings"
-msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¤ÎÀßÄê"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è¨­å®š"
-#: rc.c:687
+#: rc.c:722
msgid "Proxy Settings"
-msgstr "¥×¥í¥­¥·¤ÎÀßÄê"
+msgstr "プロキシã®è¨­å®š"
-#: rc.c:689
+#: rc.c:724
msgid "SSL Settings"
-msgstr "SSL¤ÎÀßÄê"
+msgstr "SSLã®è¨­å®š"
-#: rc.c:692
+#: rc.c:727
msgid "Cookie Settings"
-msgstr "¥¯¥Ã¥­¡¼¤ÎÀßÄê"
+msgstr "クッキーã®è¨­å®š"
-#: rc.c:695
+#: rc.c:730
msgid "Charset Settings"
-msgstr "ʸ»ú¥³¡¼¥É¤ÎÀßÄê"
+msgstr "文字コードã®è¨­å®š"
#. TRANSLATORS:
#. * AcceptLang default: this is used in Accept-Language: HTTP request
#. * header. For example, ja.po should translate it as
#. * "ja;q=1.0, en;q=0.5" like that.
#.
-#: rc.c:1163
+#: rc.c:1209
msgid "en;q=1.0"
msgstr "ja;q=1.0, en;q=0.5"
diff --git a/po/w3m.pot b/po/w3m.pot
index 7c7eb04..e164b1e 100644
--- a/po/w3m.pot
+++ b/po/w3m.pot
@@ -6,12 +6,13 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: w3m 0.5.3\n"
"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2007-05-28 19:49+0900\n"
+"POT-Creation-Date: 2010-08-20 18:44+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -149,674 +150,722 @@ msgid "Display link URL automatically"
msgstr ""
#: rc.c:75
-msgid "Display decoded URL"
+msgid "Display link numbers"
msgstr ""
#: rc.c:76
-msgid "Display current line number"
+msgid "Display decoded URL"
msgstr ""
#: rc.c:77
+msgid "Display current line number"
+msgstr ""
+
+#: rc.c:78
msgid "Display inline images"
msgstr ""
#: rc.c:79
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr ""
+
+#: rc.c:81
msgid "Load inline images automatically"
msgstr ""
-#: rc.c:80
+#: rc.c:82
msgid "Maximum processes for parallel image loading"
msgstr ""
-#: rc.c:81
+#: rc.c:83
msgid "Use external image viewer"
msgstr ""
-#: rc.c:82
+#: rc.c:84
msgid "Scale of image (%)"
msgstr ""
-#: rc.c:83
+#: rc.c:85
msgid "External command to display image"
msgstr ""
-#: rc.c:84
+#: rc.c:86
msgid "Use link list of image map"
msgstr ""
-#: rc.c:86
+#: rc.c:88
msgid "Display file names in multi-column format"
msgstr ""
-#: rc.c:87
+#: rc.c:89
msgid "Use ASCII equivalents to display entities"
msgstr ""
-#: rc.c:88
-msgid "Use graphic char for border of table and menu"
+#: rc.c:90
+msgid "Character type for border of table and menu"
msgstr ""
-#: rc.c:89
+#: rc.c:91
msgid "Fold lines in TEXTAREA"
msgstr ""
-#: rc.c:90
+#: rc.c:92
msgid "Display INS, DEL, S and STRIKE element"
msgstr ""
-#: rc.c:91
+#: rc.c:93
msgid "Display with color"
msgstr ""
-#: rc.c:92
+#: rc.c:94
msgid "Color of normal character"
msgstr ""
-#: rc.c:93
+#: rc.c:95
msgid "Color of anchor"
msgstr ""
-#: rc.c:94
+#: rc.c:96
msgid "Color of image link"
msgstr ""
-#: rc.c:95
+#: rc.c:97
msgid "Color of form"
msgstr ""
-#: rc.c:96
+#: rc.c:98
msgid "Enable coloring of active link"
msgstr ""
-#: rc.c:97
+#: rc.c:99
msgid "Color of currently active link"
msgstr ""
-#: rc.c:98
+#: rc.c:100
msgid "Use visited link color"
msgstr ""
-#: rc.c:99
+#: rc.c:101
msgid "Color of visited link"
msgstr ""
-#: rc.c:100
+#: rc.c:102
msgid "Color of background"
msgstr ""
-#: rc.c:101
+#: rc.c:103
msgid "Color of mark"
msgstr ""
-#: rc.c:102
+#: rc.c:104
msgid "Use proxy"
msgstr ""
-#: rc.c:103
+#: rc.c:105
msgid "URL of HTTP proxy host"
msgstr ""
-#: rc.c:105
+#: rc.c:107
msgid "URL of HTTPS proxy host"
msgstr ""
-#: rc.c:108
+#: rc.c:110
msgid "URL of GOPHER proxy host"
msgstr ""
-#: rc.c:110
+#: rc.c:112
msgid "URL of FTP proxy host"
msgstr ""
-#: rc.c:111
+#: rc.c:113
msgid "Domains to be accessed directly (no proxy)"
msgstr ""
-#: rc.c:112
+#: rc.c:114
msgid "Check noproxy by network address"
msgstr ""
-#: rc.c:113
+#: rc.c:115
msgid "Disable cache"
msgstr ""
-#: rc.c:115
+#: rc.c:117
msgid "News server"
msgstr ""
-#: rc.c:116
+#: rc.c:118
msgid "Mode of news server"
msgstr ""
-#: rc.c:117
+#: rc.c:119
msgid "Number of news messages"
msgstr ""
-#: rc.c:119
+#: rc.c:121
msgid "Order of name resolution"
msgstr ""
-#: rc.c:120
+#: rc.c:122
msgid "Directory corresponding to / (document root)"
msgstr ""
-#: rc.c:121
+#: rc.c:123
msgid "Directory corresponding to /~user"
msgstr ""
-#: rc.c:122
+#: rc.c:124
msgid "Directory corresponding to /cgi-bin"
msgstr ""
-#: rc.c:123
+#: rc.c:125
msgid "Confirm when quitting with q"
msgstr ""
-#: rc.c:124
+#: rc.c:126
msgid "Close tab if buffer is last when back"
msgstr ""
-#: rc.c:126
+#: rc.c:128
msgid "Enable mark operations"
msgstr ""
-#: rc.c:128
+#: rc.c:130
msgid "Enable Emacs-style line editing"
msgstr ""
-#: rc.c:129
+#: rc.c:131
msgid "Enable vi-like numeric prefix"
msgstr ""
-#: rc.c:130
+#: rc.c:132
msgid "Move cursor to top line when going to label"
msgstr ""
-#: rc.c:131
+#: rc.c:133
msgid "Move cursor to top line when moving to next page"
msgstr ""
-#: rc.c:132
+#: rc.c:134
msgid "Fold lines of plain text file"
msgstr ""
-#: rc.c:133
+#: rc.c:135
msgid "Show line numbers"
msgstr ""
-#: rc.c:134
+#: rc.c:136
msgid "Show search string"
msgstr ""
-#: rc.c:135
+#: rc.c:137
msgid "List of mime.types files"
msgstr ""
-#: rc.c:136
+#: rc.c:138
msgid "List of mailcap files"
msgstr ""
-#: rc.c:137
+#: rc.c:139
msgid "List of urimethodmap files"
msgstr ""
-#: rc.c:138
+#: rc.c:140
msgid "Editor"
msgstr ""
-#: rc.c:139
+#: rc.c:141
msgid "Mailer"
msgstr ""
-#: rc.c:140
+#: rc.c:142
+msgid "How to call Mailer for mailto URLs with options"
+msgstr ""
+
+#: rc.c:143
msgid "External Browser"
msgstr ""
-#: rc.c:141
+#: rc.c:144
msgid "Second External Browser"
msgstr ""
-#: rc.c:142
+#: rc.c:145
msgid "Third External Browser"
msgstr ""
-#: rc.c:143
+#: rc.c:146
msgid "Disable secret file security check"
msgstr ""
-#: rc.c:144
+#: rc.c:147
msgid "Password file"
msgstr ""
-#: rc.c:145
+#: rc.c:148
msgid "File for setting form on loading"
msgstr ""
-#: rc.c:146
+#: rc.c:149
msgid "Password for anonymous FTP (your mail address)"
msgstr ""
-#: rc.c:147
+#: rc.c:150
msgid "Generate domain part of password for FTP"
msgstr ""
-#: rc.c:148
+#: rc.c:151
msgid "User-Agent identification string"
msgstr ""
-#: rc.c:149
+#: rc.c:152
msgid "Accept-Encoding header"
msgstr ""
-#: rc.c:150
+#: rc.c:153
msgid "Accept header"
msgstr ""
-#: rc.c:151
+#: rc.c:154
msgid "Accept-Language header"
msgstr ""
-#: rc.c:152
+#: rc.c:155
msgid "Treat URL-like strings as links in all pages"
msgstr ""
-#: rc.c:153
+#: rc.c:156
msgid "Wrap search"
msgstr ""
-#: rc.c:154
+#: rc.c:157
msgid "Display unseen objects (e.g. bgimage tag)"
msgstr ""
-#: rc.c:155
+#: rc.c:158
msgid "Uncompress compressed data automatically when downloading"
msgstr ""
-#: rc.c:157
+#: rc.c:160
msgid "Run external viewer in a separate session"
msgstr ""
-#: rc.c:159
+#: rc.c:162
msgid "Run external viewer in the background"
msgstr ""
-#: rc.c:161
+#: rc.c:164
msgid "Use external program for directory listing"
msgstr ""
-#: rc.c:162
+#: rc.c:165
msgid "URL of directory listing command"
msgstr ""
-#: rc.c:164
+#: rc.c:167
msgid "Enable dictionary lookup through CGI"
msgstr ""
-#: rc.c:165
+#: rc.c:168
msgid "URL of dictionary lookup command"
msgstr ""
-#: rc.c:167
+#: rc.c:170
msgid "Display link name for images lacking ALT"
msgstr ""
-#: rc.c:168
+#: rc.c:171
msgid "Index file for directories"
msgstr ""
-#: rc.c:169
+#: rc.c:172
msgid "Prepend http:// to URL automatically"
msgstr ""
-#: rc.c:170
+#: rc.c:173
msgid "Default value for open-URL command"
msgstr ""
-#: rc.c:171
+#: rc.c:174
msgid "Decode Content-Transfer-Encoding when saving"
msgstr ""
-#: rc.c:172
+#: rc.c:175
msgid "Preserve timestamp when saving"
msgstr ""
-#: rc.c:174
+#: rc.c:177
msgid "Enable mouse"
msgstr ""
-#: rc.c:175
+#: rc.c:178
msgid "Scroll in reverse direction of mouse drag"
msgstr ""
-#: rc.c:176
+#: rc.c:179
msgid "Behavior of wheel scroll speed"
msgstr ""
-#: rc.c:177
+#: rc.c:180
msgid "(A only)Scroll by # (%) of screen"
msgstr ""
-#: rc.c:178
+#: rc.c:181
msgid "(B only)Scroll by # lines"
msgstr ""
-#: rc.c:180
+#: rc.c:183
msgid "Free memory of undisplayed buffers"
msgstr ""
-#: rc.c:181
+#: rc.c:184
msgid "Suppress `Referer:' header"
msgstr ""
-#: rc.c:182
+#: rc.c:185
msgid "Search case-insensitively"
msgstr ""
-#: rc.c:183
+#: rc.c:186
msgid "Use LESSOPEN"
msgstr ""
-#: rc.c:186
+#: rc.c:189
msgid "Perform SSL server verification"
msgstr ""
-#: rc.c:187
+#: rc.c:190
msgid "PEM encoded certificate file of client"
msgstr ""
-#: rc.c:188
+#: rc.c:191
msgid "PEM encoded private key file of client"
msgstr ""
-#: rc.c:189
+#: rc.c:192
msgid "Path to directory for PEM encoded certificates of CAs"
msgstr ""
-#: rc.c:190
+#: rc.c:193
msgid "File consisting of PEM encoded certificates of CAs"
msgstr ""
-#: rc.c:192
+#: rc.c:195
msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
msgstr ""
-#: rc.c:195
+#: rc.c:198
msgid "Enable cookie processing"
msgstr ""
-#: rc.c:196
+#: rc.c:199
msgid "Print a message when receiving a cookie"
msgstr ""
-#: rc.c:197
+#: rc.c:200
msgid "Accept cookies"
msgstr ""
-#: rc.c:198
+#: rc.c:201
msgid "Action to be taken on invalid cookie"
msgstr ""
-#: rc.c:199
+#: rc.c:202
msgid "Domains to reject cookies from"
msgstr ""
-#: rc.c:200
+#: rc.c:203
msgid "Domains to accept cookies from"
msgstr ""
-#: rc.c:202
+#: rc.c:204
+msgid "Domains to avoid [wrong number of dots]"
+msgstr ""
+
+#: rc.c:206
msgid "Number of redirections to follow"
msgstr ""
-#: rc.c:203
+#: rc.c:207
msgid "Enable processing of meta-refresh tag"
msgstr ""
-#: rc.c:206
+#: rc.c:210
msgid "Enable Migemo (Roma-ji search)"
msgstr ""
-#: rc.c:207
+#: rc.c:211
msgid "Migemo command"
msgstr ""
-#: rc.c:211
+#: rc.c:215
msgid "Display charset"
msgstr ""
-#: rc.c:212
+#: rc.c:216
msgid "Default document charset"
msgstr ""
-#: rc.c:213
+#: rc.c:217
msgid "Automatic charset detect when loading"
msgstr ""
-#: rc.c:214
+#: rc.c:218
msgid "System charset"
msgstr ""
-#: rc.c:215
+#: rc.c:219
msgid "System charset follows locale(LC_CTYPE)"
msgstr ""
-#: rc.c:216
+#: rc.c:220
msgid "Output halfdump with display charset"
msgstr ""
-#: rc.c:217
+#: rc.c:221
msgid "Use multi column characters"
msgstr ""
-#: rc.c:218
+#: rc.c:222
msgid "Use combining characters"
msgstr ""
-#: rc.c:219
+#: rc.c:223
+msgid "Use double width for some Unicode characters"
+msgstr ""
+
+#: rc.c:224
msgid "Use Unicode language tags"
msgstr ""
-#: rc.c:220
+#: rc.c:225
msgid "Charset conversion using Unicode map"
msgstr ""
-#: rc.c:221
+#: rc.c:226
msgid "Charset conversion when loading"
msgstr ""
-#: rc.c:222
+#: rc.c:227
msgid "Adjust search string for document charset"
msgstr ""
-#: rc.c:223
+#: rc.c:228
msgid "Fix character width when conversion"
msgstr ""
-#: rc.c:224
+#: rc.c:229
msgid "Use GB 12345 Unicode map instead of GB 2312's"
msgstr ""
-#: rc.c:225
+#: rc.c:230
msgid "Use JIS X 0201 Roman for ISO-2022-JP"
msgstr ""
-#: rc.c:226
+#: rc.c:231
msgid "Use JIS C 6226:1978 for ISO-2022-JP"
msgstr ""
-#: rc.c:227
+#: rc.c:232
msgid "Use JIS X 0201 Katakana"
msgstr ""
-#: rc.c:228
+#: rc.c:233
msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
msgstr ""
-#: rc.c:229
+#: rc.c:234
msgid "Use JIS X 0213:2000 (2000JIS)"
msgstr ""
-#: rc.c:230
+#: rc.c:235
msgid "Strict ISO-2022-JP/KR/CN"
msgstr ""
-#: rc.c:231
+#: rc.c:236
msgid "Treat 4 bytes char. of GB18030 as Unicode"
msgstr ""
-#: rc.c:234
+#: rc.c:237
+msgid "Simple Preserve space"
+msgstr ""
+
+#: rc.c:240
msgid "keymap file"
msgstr ""
-#: rc.c:251
+#: rc.c:257
msgid "black"
msgstr ""
-#: rc.c:252
+#: rc.c:258
msgid "red"
msgstr ""
-#: rc.c:253
+#: rc.c:259
msgid "green"
msgstr ""
-#: rc.c:254
+#: rc.c:260
msgid "yellow"
msgstr ""
-#: rc.c:255
+#: rc.c:261
msgid "blue"
msgstr ""
-#: rc.c:256
+#: rc.c:262
msgid "magenta"
msgstr ""
-#: rc.c:257
+#: rc.c:263
msgid "cyan"
msgstr ""
-#: rc.c:258
+#: rc.c:264
msgid "white"
msgstr ""
-#: rc.c:259
+#: rc.c:265
msgid "terminal"
msgstr ""
-#: rc.c:278
+#: rc.c:284
msgid "none"
msgstr ""
-#: rc.c:279
+#: rc.c:285
msgid "current URL"
msgstr ""
-#: rc.c:280
+#: rc.c:286
msgid "link URL"
msgstr ""
-#: rc.c:285
+#: rc.c:291
msgid "simple"
msgstr ""
-#: rc.c:286
+#: rc.c:292
msgid "use tag"
msgstr ""
-#: rc.c:287
+#: rc.c:293
msgid "fontify"
msgstr ""
-#: rc.c:293
+#: rc.c:299
msgid "A:relative to screen height"
msgstr ""
-#: rc.c:294
+#: rc.c:300
msgid "B:fixed speed"
msgstr ""
-#: rc.c:301
+#: rc.c:307
msgid "unspecified"
msgstr ""
-#: rc.c:302
+#: rc.c:308
msgid "inet inet6"
msgstr ""
-#: rc.c:303
+#: rc.c:309
msgid "inet6 inet"
msgstr ""
-#: rc.c:304
+#: rc.c:310
msgid "inet only"
msgstr ""
-#: rc.c:305
+#: rc.c:311
msgid "inet6 only"
msgstr ""
-#: rc.c:312
+#: rc.c:318
msgid "discard"
msgstr ""
-#: rc.c:314
+#: rc.c:320
msgid "accept"
msgstr ""
-#: rc.c:316
+#: rc.c:322
msgid "ask"
msgstr ""
-#: rc.c:326
+#: rc.c:329
+msgid "use internal mailer instead"
+msgstr ""
+
+#: rc.c:331
+msgid "ignore options and use only the address"
+msgstr ""
+
+#: rc.c:332
+msgid "use full mailto URL"
+msgstr ""
+
+#: rc.c:341
msgid "OFF"
msgstr ""
-#: rc.c:327
+#: rc.c:342
msgid "Only ISO 2022"
msgstr ""
-#: rc.c:328
+#: rc.c:343
msgid "ON"
msgstr ""
-#: rc.c:679
+#: rc.c:349
+msgid "ASCII"
+msgstr ""
+
+#: rc.c:350
+msgid "charset specific"
+msgstr ""
+
+#: rc.c:351
+msgid "DEC special graphics"
+msgstr ""
+
+#: rc.c:714
msgid "Display Settings"
msgstr ""
-#: rc.c:681
+#: rc.c:716
msgid "Color Settings"
msgstr ""
-#: rc.c:683
+#: rc.c:718
msgid "Miscellaneous Settings"
msgstr ""
-#: rc.c:684
+#: rc.c:719
msgid "Directory Settings"
msgstr ""
-#: rc.c:685
+#: rc.c:720
msgid "External Program Settings"
msgstr ""
-#: rc.c:686
+#: rc.c:721
msgid "Network Settings"
msgstr ""
-#: rc.c:687
+#: rc.c:722
msgid "Proxy Settings"
msgstr ""
-#: rc.c:689
+#: rc.c:724
msgid "SSL Settings"
msgstr ""
-#: rc.c:692
+#: rc.c:727
msgid "Cookie Settings"
msgstr ""
-#: rc.c:695
+#: rc.c:730
msgid "Charset Settings"
msgstr ""
@@ -825,6 +874,6 @@ msgstr ""
#. * header. For example, ja.po should translate it as
#. * "ja;q=1.0, en;q=0.5" like that.
#.
-#: rc.c:1169
+#: rc.c:1209
msgid "en;q=1.0"
msgstr ""
diff --git a/proto.h b/proto.h
index b8f4885..f8a7345 100644
--- a/proto.h
+++ b/proto.h
@@ -1,4 +1,4 @@
-/* $Id: proto.h,v 1.101 2006/04/07 13:21:12 inu Exp $ */
+/* $Id: proto.h,v 1.104 2010/07/25 09:55:05 htrb Exp $ */
/*
* This file was automatically generated by version 1.7 of cextract.
* Manual editing not recommended.
@@ -165,6 +165,7 @@ extern ParsedURL *schemeToProxy(int scheme);
extern void examineFile(char *path, URLFile *uf);
extern char *acceptableEncoding();
extern int dir_exist(char *path);
+extern int is_html_type(char *type);
#ifdef USE_M17N
extern char **get_symbol(wc_ces charset, int *width);
extern char **set_symbol(int width);
@@ -176,6 +177,9 @@ extern Str convertLine0(URLFile *uf, Str line, int mode);
#define convertLine(uf,line,mode,charset,dcharset) convertLine0(uf,line,mode)
#endif
extern void push_symbol(Str str, char symbol, int width, int n);
+#ifdef USE_UNICODE
+extern void update_utf8_symbol(void);
+#endif
extern Buffer *loadFile(char *path);
extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer,
int flag, FormList *request);
@@ -774,6 +778,8 @@ extern void wrapToggle(void);
extern void saveBufferInfo(void);
#endif
+extern Str getLinkNumberStr(int correction);
+
extern void dispVer(void);
#ifdef USE_INCLUDED_SRAND48
diff --git a/rc.c b/rc.c
index abb2e31..8441a39 100644
--- a/rc.c
+++ b/rc.c
@@ -1,4 +1,4 @@
-/* $Id: rc.c,v 1.106 2007/05/23 15:06:06 inu Exp $ */
+/* $Id: rc.c,v 1.116 2010/08/20 09:47:09 htrb Exp $ */
/*
* Initialization file etc.
*/
@@ -72,9 +72,11 @@ static int OptionEncode = FALSE;
#define CMT_OPEN_TAB_BLANK N_("Open link on new tab if target is _blank or _new")
#define CMT_OPEN_TAB_DL_LIST N_("Open download list panel on new tab")
#define CMT_DISPLINK N_("Display link URL automatically")
+#define CMT_DISPLINKNUMBER N_("Display link numbers")
#define CMT_DECODE_URL N_("Display decoded URL")
#define CMT_DISPLINEINFO N_("Display current line number")
#define CMT_DISP_IMAGE N_("Display inline images")
+#define CMT_PSEUDO_INLINES N_("Display pseudo-ALTs for inline images with no ALT or TITLE string")
#ifdef USE_IMAGE
#define CMT_AUTO_IMAGE N_("Load inline images automatically")
#define CMT_MAX_LOAD_IMAGE N_("Maximum processes for parallel image loading")
@@ -85,7 +87,7 @@ static int OptionEncode = FALSE;
#endif
#define CMT_MULTICOL N_("Display file names in multi-column format")
#define CMT_ALT_ENTITY N_("Use ASCII equivalents to display entities")
-#define CMT_GRAPHIC_CHAR N_("Use graphic char for border of table and menu")
+#define CMT_GRAPHIC_CHAR N_("Character type for border of table and menu")
#define CMT_FOLD_TEXTAREA N_("Fold lines in TEXTAREA")
#define CMT_DISP_INS_DEL N_("Display INS, DEL, S and STRIKE element")
#define CMT_COLOR N_("Display with color")
@@ -137,6 +139,7 @@ static int OptionEncode = FALSE;
#define CMT_URIMETHODMAP N_("List of urimethodmap files")
#define CMT_EDITOR N_("Editor")
#define CMT_MAILER N_("Mailer")
+#define CMT_MAILTO_OPTIONS N_("How to call Mailer for mailto URLs with options")
#define CMT_EXTBRZ N_("External Browser")
#define CMT_EXTBRZ2 N_("Second External Browser")
#define CMT_EXTBRZ3 N_("Third External Browser")
@@ -198,6 +201,7 @@ static int OptionEncode = FALSE;
#define CMT_ACCEPTBADCOOKIE N_("Action to be taken on invalid cookie")
#define CMT_COOKIE_REJECT_DOMAINS N_("Domains to reject cookies from")
#define CMT_COOKIE_ACCEPT_DOMAINS N_("Domains to accept cookies from")
+#define CMT_COOKIE_AVOID_WONG_NUMBER_OF_DOTS N_("Domains to avoid [wrong number of dots]")
#endif
#define CMT_FOLLOW_REDIRECTION N_("Number of redirections to follow")
#define CMT_META_REFRESH N_("Enable processing of meta-refresh tag")
@@ -216,6 +220,7 @@ static int OptionEncode = FALSE;
#define CMT_EXT_HALFDUMP N_("Output halfdump with display charset")
#define CMT_USE_WIDE N_("Use multi column characters")
#define CMT_USE_COMBINING N_("Use combining characters")
+#define CMT_EAST_ASIAN_WIDTH N_("Use double width for some Unicode characters")
#define CMT_USE_LANGUAGE_TAG N_("Use Unicode language tags")
#define CMT_UCS_CONV N_("Charset conversion using Unicode map")
#define CMT_PRE_CONV N_("Charset conversion when loading")
@@ -229,6 +234,7 @@ static int OptionEncode = FALSE;
#define CMT_USE_JISX0213 N_("Use JIS X 0213:2000 (2000JIS)")
#define CMT_STRICT_ISO2022 N_("Strict ISO-2022-JP/KR/CN")
#define CMT_GB18030_AS_UCS N_("Treat 4 bytes char. of GB18030 as Unicode")
+#define CMT_SIMPLE_PRESERVE_SPACE N_("Simple Preserve space")
#endif
#define CMT_KEYMAP_FILE N_("keymap file")
@@ -318,6 +324,15 @@ static struct sel_c badcookiestr[] = {
};
#endif /* USE_COOKIE */
+static struct sel_c mailtooptionsstr[] = {
+#ifdef USE_W3MMAILER
+ {N_S(MAILTO_OPTIONS_USE_W3MMAILER), N_("use internal mailer instead")},
+#endif
+ {N_S(MAILTO_OPTIONS_IGNORE), N_("ignore options and use only the address")},
+ {N_S(MAILTO_OPTIONS_USE_MAILTO_URL), N_("use full mailto URL")},
+ {0, NULL, NULL}
+};
+
#ifdef USE_M17N
static wc_ces_list *display_charset_str = NULL;
static wc_ces_list *document_charset_str = NULL;
@@ -330,6 +345,13 @@ static struct sel_c auto_detect_str[] = {
};
#endif
+static struct sel_c graphic_char_str[] = {
+ {N_S(GRAPHIC_CHAR_ASCII), N_("ASCII")},
+ {N_S(GRAPHIC_CHAR_CHARSET), N_("charset specific")},
+ {N_S(GRAPHIC_CHAR_DEC), N_("DEC special graphics")},
+ {0, NULL, NULL}
+};
+
struct param_ptr params1[] = {
{"tabstop", P_NZINT, PI_TEXT, (void *)&Tabstop, CMT_TABSTOP, NULL},
{"indent_incr", P_NZINT, PI_TEXT, (void *)&IndentIncr, CMT_INDENT_INCR,
@@ -348,6 +370,8 @@ struct param_ptr params1[] = {
CMT_OPEN_TAB_DL_LIST, NULL},
{"display_link", P_INT, PI_ONOFF, (void *)&displayLink, CMT_DISPLINK,
NULL},
+ {"display_link_number", P_INT, PI_ONOFF, (void *)&displayLinkNumber,
+ CMT_DISPLINKNUMBER, NULL},
{"decode_url", P_INT, PI_ONOFF, (void *)&DecodeURL, CMT_DECODE_URL, NULL},
{"display_lineinfo", P_INT, PI_ONOFF, (void *)&displayLineInfo,
CMT_DISPLINEINFO, NULL},
@@ -364,8 +388,8 @@ struct param_ptr params1[] = {
{"multicol", P_INT, PI_ONOFF, (void *)&multicolList, CMT_MULTICOL, NULL},
{"alt_entity", P_CHARINT, PI_ONOFF, (void *)&UseAltEntity, CMT_ALT_ENTITY,
NULL},
- {"graphic_char", P_CHARINT, PI_ONOFF, (void *)&UseGraphicChar,
- CMT_GRAPHIC_CHAR, NULL},
+ {"graphic_char", P_CHARINT, PI_SEL_C, (void *)&UseGraphicChar,
+ CMT_GRAPHIC_CHAR, (void *)graphic_char_str},
{"fold_textarea", P_CHARINT, PI_ONOFF, (void *)&FoldTextarea,
CMT_FOLD_TEXTAREA, NULL},
{"display_ins_del", P_INT, PI_SEL_C, (void *)&displayInsDel,
@@ -377,6 +401,8 @@ struct param_ptr params1[] = {
/* XXX: emacs-w3m force to off display_image even if image options off */
{"display_image", P_INT, PI_ONOFF, (void *)&displayImage, CMT_DISP_IMAGE,
NULL},
+ {"pseudo_inlines", P_INT, PI_ONOFF, (void *)&pseudoInlines,
+ CMT_PSEUDO_INLINES, NULL},
#ifdef USE_IMAGE
{"auto_image", P_INT, PI_ONOFF, (void *)&autoImage, CMT_AUTO_IMAGE, NULL},
{"max_load_image", P_INT, PI_TEXT, (void *)&maxLoadImage,
@@ -527,6 +553,8 @@ struct param_ptr params6[] = {
CMT_URIMETHODMAP, NULL},
#endif
{"editor", P_STRING, PI_TEXT, (void *)&Editor, CMT_EDITOR, NULL},
+ {"mailto_options", P_INT, PI_SEL_C, (void *)&MailtoOptions,
+ CMT_MAILTO_OPTIONS, (void *)mailtooptionsstr},
{"mailer", P_STRING, PI_TEXT, (void *)&Mailer, CMT_MAILER, NULL},
{"extbrowser", P_STRING, PI_TEXT, (void *)&ExtBrowser, CMT_EXTBRZ, NULL},
{"extbrowser2", P_STRING, PI_TEXT, (void *)&ExtBrowser2, CMT_EXTBRZ2,
@@ -573,6 +601,9 @@ struct param_ptr params8[] = {
(void *)&cookie_reject_domains, CMT_COOKIE_REJECT_DOMAINS, NULL},
{"cookie_accept_domains", P_STRING, PI_TEXT,
(void *)&cookie_accept_domains, CMT_COOKIE_ACCEPT_DOMAINS, NULL},
+ {"cookie_avoid_wrong_number_of_dots", P_STRING, PI_TEXT,
+ (void *)&cookie_avoid_wrong_number_of_dots,
+ CMT_COOKIE_AVOID_WONG_NUMBER_OF_DOTS, NULL},
{NULL, 0, 0, NULL, NULL, NULL},
};
#endif
@@ -640,6 +671,8 @@ struct param_ptr params10[] = {
{"use_combining", P_CHARINT, PI_ONOFF, (void *)&WcOption.use_combining,
CMT_USE_COMBINING, NULL},
#ifdef USE_UNICODE
+ {"east_asian_width", P_CHARINT, PI_ONOFF,
+ (void *)&WcOption.east_asian_width, CMT_EAST_ASIAN_WIDTH, NULL},
{"use_language_tag", P_CHARINT, PI_ONOFF,
(void *)&WcOption.use_language_tag, CMT_USE_LANGUAGE_TAG, NULL},
{"ucs_conv", P_CHARINT, PI_ONOFF, (void *)&WcOption.ucs_conv, CMT_UCS_CONV,
@@ -671,6 +704,8 @@ struct param_ptr params10[] = {
{"gb18030_as_ucs", P_CHARINT, PI_ONOFF, (void *)&WcOption.gb18030_as_ucs,
CMT_GB18030_AS_UCS, NULL},
#endif
+ {"simple_preserve_space", P_CHARINT, PI_ONOFF, (void *)&SimplePreserveSpace,
+ CMT_SIMPLE_PRESERVE_SPACE, NULL},
{NULL, 0, 0, NULL, NULL, NULL},
};
#endif
@@ -1061,9 +1096,11 @@ interpret_rc(FILE * f)
for (;;) {
line = Strfgets(f);
- Strchop(line);
- if (line->length == 0)
+ if (line->length == 0) /* end of file */
break;
+ Strchop(line);
+ if (line->length == 0) /* blank line */
+ continue;
Strremovefirstspaces(line);
if (line->ptr[0] == '#') /* comment */
continue;
@@ -1105,6 +1142,9 @@ parse_cookie()
Cookie_reject_domains = make_domain_list(cookie_reject_domains);
if (non_null(cookie_accept_domains))
Cookie_accept_domains = make_domain_list(cookie_accept_domains);
+ if (non_null(cookie_avoid_wrong_number_of_dots))
+ Cookie_avoid_wrong_number_of_dots_domains
+ = make_domain_list(cookie_avoid_wrong_number_of_dots);
}
#endif
@@ -1172,6 +1212,9 @@ sync_with_option(void)
AcceptEncoding = acceptableEncoding();
if (AcceptMedia == NULL || *AcceptMedia == '\0')
AcceptMedia = acceptableMimeTypes();
+#ifdef USE_UNICODE
+ update_utf8_symbol();
+#endif
if (fmInitialized) {
initKeymap(FALSE);
#ifdef USE_MOUSE
@@ -1246,7 +1289,7 @@ init_rc(void)
interpret_rc(f);
fclose(f);
}
- if ((f = fopen(config_file, "rt")) != NULL) {
+ if (config_file && (f = fopen(config_file, "rt")) != NULL) {
interpret_rc(f);
fclose(f);
}
@@ -1258,6 +1301,8 @@ init_rc(void)
((tmp_dir = getenv("TMP")) == NULL || *tmp_dir == '\0') &&
((tmp_dir = getenv("TEMP")) == NULL || *tmp_dir == '\0'))
tmp_dir = "/tmp";
+ create_option_search_table();
+ goto open_rc;
}
@@ -1439,8 +1484,8 @@ panel_set_option(struct parsed_tagarg *arg)
FILE *f = NULL;
char *p;
- if (no_rc_dir) {
- disp_message("There's no ~/.w3m directory... config not saved", FALSE);
+ if (config_file == NULL) {
+ disp_message("There's no config file... config not saved", FALSE);
}
else {
f = fopen(config_file, "wt");
diff --git a/regex.c b/regex.c
index 09166fc..5bee4b2 100644
--- a/regex.c
+++ b/regex.c
@@ -1,4 +1,4 @@
-/* $Id: regex.c,v 1.22 2003/09/24 18:49:00 ukai Exp $ */
+/* $Id: regex.c,v 1.23 2010/08/24 10:11:51 htrb Exp $ */
/*
* regex: Regular expression pattern match library
*
@@ -684,8 +684,18 @@ match_longchar(longchar * a, longchar * b, int ignore)
#ifdef USE_M17N
if (a->type != b->type)
return 0;
- if (a->type == RE_TYPE_WCHAR_T)
+ if (a->type == RE_TYPE_WCHAR_T) {
+#ifdef USE_UNICODE
+ if (ignore) {
+ wc_uint32 ua = wc_any_to_ucs(a->wch), ub = wc_any_to_ucs(b->wch);
+ return (ua == ub ||
+ ua == wc_ucs_tolower(ub) ||
+ ua == wc_ucs_toupper(ub) ||
+ ua == wc_ucs_totitle(ub));
+ }
+#endif
return (a->wch.ccs == b->wch.ccs) && (a->wch.code == b->wch.code);
+ }
#endif
if (ignore && IS_ALPHA(b->ch))
return (a->ch == TOLOWER(b->ch) || a->ch == TOUPPER(b->ch));
@@ -699,9 +709,28 @@ match_range_longchar(longchar * a, longchar * b, longchar * c, int ignore)
#ifdef USE_M17N
if (a->type != b->type || a->type != c->type)
return 0;
- if (a->type == RE_TYPE_WCHAR_T)
- return ((a->wch.ccs == c->wch.ccs && c->wch.ccs == b->wch.ccs) &&
- (a->wch.code <= c->wch.code && c->wch.code <= b->wch.code));
+ if (a->type == RE_TYPE_WCHAR_T) {
+ if (a->wch.ccs != c->wch.ccs || c->wch.ccs != b->wch.ccs)
+ return 0;
+#ifdef USE_UNICODE
+ if (ignore) {
+ wc_uint32 uc = wc_any_to_ucs(c->wch);
+
+ if (wc_is_ucs_alpha(uc)) {
+ wc_uint32 ua = wc_any_to_ucs(a->wch);
+ wc_uint32 ub = wc_any_to_ucs(b->wch);
+ wc_uint32 upper = wc_ucs_toupper(uc);
+ wc_uint32 lower = wc_ucs_tolower(uc);
+ wc_uint32 title = wc_ucs_totitle(uc);
+
+ return ((ua <= upper && upper <= ub) ||
+ (ua <= lower && lower <= ub) ||
+ (ua <= title && title <= ub));
+ }
+ }
+#endif
+ return (a->wch.code <= c->wch.code && c->wch.code <= b->wch.code);
+ }
#endif
if (ignore && IS_ALPHA(c->ch))
return ((a->ch <= TOLOWER(c->ch) && TOLOWER(c->ch) <= b->ch) ||
diff --git a/scripts/CVS/Entries b/scripts/CVS/Entries
new file mode 100644
index 0000000..2d1a4e5
--- /dev/null
+++ b/scripts/CVS/Entries
@@ -0,0 +1,13 @@
+/.cvsignore/1.10/Mon Sep 22 22:53:53 2003//
+/dirlist.cgi.in/1.7/Fri Feb 7 15:06:17 2003//
+/w3mhelp-funcdesc.en.pl.in/1.4/Mon Mar 22 17:03:13 2004//
+/w3mhelp-funcdesc.ja.pl.in/1.4/Mon Mar 22 17:03:13 2004//
+/w3mhelp-funcname.pl.in/1.3/Mon Apr 7 15:19:43 2003//
+/w3mmail.cgi.in/1.14/Mon Aug 30 16:32:24 2004//
+/xface2xbm.in/1.3/Mon Nov 18 17:33:01 2002//
+/xface2xpm.in/1.1/Tue Apr 9 14:45:58 2002//
+D/bm2menu////
+D/multipart////
+D/w3mman////
+/Makefile.in/1.11/Tue Jan 4 09:22:28 2011//
+/w3mhelp.cgi.in/1.29/Tue Jan 4 09:22:28 2011//
diff --git a/scripts/CVS/Repository b/scripts/CVS/Repository
new file mode 100644
index 0000000..578c817
--- /dev/null
+++ b/scripts/CVS/Repository
@@ -0,0 +1 @@
+w3m/scripts
diff --git a/scripts/CVS/Root b/scripts/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/scripts/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index 7efcb24..4da9ce5 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -24,7 +24,6 @@ srcdir = @srcdir@
sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
VPATH = $(srcdir):.
-DESTDIR =
CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
diff --git a/scripts/bm2menu/CVS/Entries b/scripts/bm2menu/CVS/Entries
new file mode 100644
index 0000000..448ac0a
--- /dev/null
+++ b/scripts/bm2menu/CVS/Entries
@@ -0,0 +1,3 @@
+/README/1.1/Thu Nov 15 00:32:14 2001//
+/bm2menu.pl/1.1/Thu Nov 15 00:32:14 2001//
+D
diff --git a/scripts/bm2menu/CVS/Repository b/scripts/bm2menu/CVS/Repository
new file mode 100644
index 0000000..c3eaf83
--- /dev/null
+++ b/scripts/bm2menu/CVS/Repository
@@ -0,0 +1 @@
+w3m/scripts/bm2menu
diff --git a/scripts/bm2menu/CVS/Root b/scripts/bm2menu/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/scripts/bm2menu/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/scripts/multipart/CVS/Entries b/scripts/multipart/CVS/Entries
new file mode 100644
index 0000000..b503f2a
--- /dev/null
+++ b/scripts/multipart/CVS/Entries
@@ -0,0 +1,6 @@
+/.cvsignore/1.2/Mon Sep 22 22:53:53 2003//
+/README/1.2/Wed Nov 21 09:21:59 2001//
+/mailcap/1.1/Thu Nov 15 00:32:14 2001//
+/multipart.cgi.in/1.11/Tue Feb 18 15:26:39 2003//
+/Makefile.in/1.6/Tue Jan 4 09:22:28 2011//
+D
diff --git a/scripts/multipart/CVS/Repository b/scripts/multipart/CVS/Repository
new file mode 100644
index 0000000..cb383c6
--- /dev/null
+++ b/scripts/multipart/CVS/Repository
@@ -0,0 +1 @@
+w3m/scripts/multipart
diff --git a/scripts/multipart/CVS/Root b/scripts/multipart/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/scripts/multipart/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/scripts/multipart/Makefile.in b/scripts/multipart/Makefile.in
index 20af165..6c7ec6f 100644
--- a/scripts/multipart/Makefile.in
+++ b/scripts/multipart/Makefile.in
@@ -24,7 +24,6 @@ srcdir = @srcdir@
sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
VPATH = $(top_srcdir):.
-DESTDIR =
CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
diff --git a/scripts/w3mman/CVS/Entries b/scripts/w3mman/CVS/Entries
new file mode 100644
index 0000000..2cc31ff
--- /dev/null
+++ b/scripts/w3mman/CVS/Entries
@@ -0,0 +1,8 @@
+/.cvsignore/1.3/Mon Sep 22 22:53:53 2003//
+/README/1.3/Wed Dec 18 16:48:02 2002//
+/hlink.cgi/1.1/Thu Nov 15 00:32:14 2001//
+/w3mman.1.in/1.6/Fri Apr 7 15:33:56 2006//
+/w3mman.in/1.5/Fri Apr 7 15:33:56 2006//
+/Makefile.in/1.5/Tue Jan 4 09:22:28 2011//
+/w3mman2html.cgi.in/1.9/Tue Jan 4 09:22:28 2011//
+D
diff --git a/scripts/w3mman/CVS/Repository b/scripts/w3mman/CVS/Repository
new file mode 100644
index 0000000..430e75e
--- /dev/null
+++ b/scripts/w3mman/CVS/Repository
@@ -0,0 +1 @@
+w3m/scripts/w3mman
diff --git a/scripts/w3mman/CVS/Root b/scripts/w3mman/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/scripts/w3mman/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/scripts/w3mman/Makefile.in b/scripts/w3mman/Makefile.in
index 6c567c7..569e2fc 100644
--- a/scripts/w3mman/Makefile.in
+++ b/scripts/w3mman/Makefile.in
@@ -24,7 +24,6 @@ srcdir = @srcdir@
sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
VPATH = $(top_srcdir):.
-DESTDIR =
CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
index 3cb105d..f430307 100644
--- a/scripts/w3mman/w3mman2html.cgi.in
+++ b/scripts/w3mman/w3mman2html.cgi.in
@@ -76,7 +76,7 @@ if ($query{"local"}) {
if (! ($file =~ /^\//)) {
$file = $query{"pwd"} . '/' . $file;
}
- open(F, "$MAN -l $file 2> /dev/null |");
+ open(F, "MAN_KEEP_FORMATTING=1 $MAN -l $file 2> /dev/null |");
} else {
$man = $query{"man"};
if ($man =~ s/\((\w+)\)$//) {
@@ -92,7 +92,7 @@ if ($query{"local"}) {
$section =~ s:([^-\w\200-\377.,])::g;
$man =~ s:([^-\w\200-\377.,])::g;
- open(F, "$MAN $section $man 2> /dev/null |");
+ open(F, "MAN_KEEP_FORMATTING=1 $MAN $section $man 2> /dev/null |");
}
$ok = 0;
undef $header;
diff --git a/symbol.c b/symbol.c
index 9a482b3..50475ae 100644
--- a/symbol.c
+++ b/symbol.c
@@ -18,7 +18,7 @@ typedef struct {
wc_ces ces;
char width;
char **item;
- char encode;
+ char **conved_item;
} symbol_set;
typedef struct {
@@ -27,17 +27,17 @@ typedef struct {
} charset_symbol_set;
/* *INDENT-OFF* */
-static symbol_set alt_symbol_set = { WC_CES_US_ASCII, 1, alt_symbol, 1 };
-static symbol_set alt2_symbol_set = { WC_CES_US_ASCII, 2, alt2_symbol, 1 };
-static symbol_set eucjp_symbol_set = { WC_CES_EUC_JP, 2, eucjp_symbol, 0 };
-static symbol_set euckr_symbol_set = { WC_CES_EUC_KR, 2, euckr_symbol, 0 };
-static symbol_set euccn_symbol_set = { WC_CES_EUC_CN, 2, euccn_symbol, 0 };
-static symbol_set euctw_symbol_set = { WC_CES_EUC_TW, 2, euctw_symbol, 0 };
-static symbol_set big5_symbol_set = { WC_CES_BIG5, 2, big5_symbol, 0 };
+static symbol_set alt_symbol_set = { WC_CES_US_ASCII, 1, alt_symbol, alt_symbol };
+static symbol_set alt2_symbol_set = { WC_CES_US_ASCII, 2, alt2_symbol, alt2_symbol };
+static symbol_set eucjp_symbol_set = { WC_CES_EUC_JP, 2, eucjp_symbol, NULL };
+static symbol_set euckr_symbol_set = { WC_CES_EUC_KR, 2, euckr_symbol, NULL };
+static symbol_set euccn_symbol_set = { WC_CES_EUC_CN, 2, euccn_symbol, NULL };
+static symbol_set euctw_symbol_set = { WC_CES_EUC_TW, 2, euctw_symbol, NULL };
+static symbol_set big5_symbol_set = { WC_CES_BIG5, 2, big5_symbol, NULL };
#ifdef USE_UNICODE
-static symbol_set utf8_symbol_set = { WC_CES_UTF_8, 1, utf8_symbol, 0 };
+static symbol_set utf8_symbol_set = { WC_CES_UTF_8, 1, utf8_symbol, NULL };
#endif
-static symbol_set cp850_symbol_set = { WC_CES_CP850, 1, cp850_symbol, 0 };
+static symbol_set cp850_symbol_set = { WC_CES_CP850, 1, cp850_symbol, NULL };
static charset_symbol_set charset_symbol_list[] = {
{ WC_CES_EUC_JP, &eucjp_symbol_set },
@@ -73,11 +73,12 @@ encode_symbol(symbol_set * s)
{
int i;
+ for (i = 0; s->item[i]; i++) ;
+ s->conved_item = New_N(char *, i);
for (i = 0; s->item[i]; i++) {
if (*(s->item[i]))
- s->item[i] = wc_conv(s->item[i], s->ces, InnerCharset)->ptr;
+ s->conved_item[i] = wc_conv(s->item[i], s->ces, InnerCharset)->ptr;
}
- s->encode = 1;
}
char **
@@ -86,28 +87,34 @@ get_symbol(wc_ces charset, int *width)
charset_symbol_set *p;
symbol_set *s = NULL;
- if (charset == save_charset && save_symbol != NULL &&
- *width == save_symbol->width) {
- *width = save_symbol->width;
- return save_symbol->item;
- }
- save_charset = charset;
- for (p = charset_symbol_list; p->charset; p++) {
- if (charset == p->charset &&
- (*width == 0 || *width == p->symbol->width)) {
- s = p->symbol;
- break;
+ if (UseGraphicChar != GRAPHIC_CHAR_ASCII) {
+ if (charset == save_charset && save_symbol != NULL &&
+ *width == save_symbol->width) {
+ return save_symbol->conved_item;
}
- }
- if (s == NULL)
+ save_charset = charset;
+ for (p = charset_symbol_list; p->charset; p++) {
+ if (charset == p->charset &&
+ (*width == 0 || *width == p->symbol->width)) {
+ s = p->symbol;
+ break;
+ }
+ }
+ if (s == NULL)
+ s = (*width == 2) ? &alt2_symbol_set : &alt_symbol_set;
+ if (s != save_symbol) {
+ if (!s->conved_item)
+ encode_symbol(s);
+ save_symbol = s;
+ }
+ } else {
+ if (save_symbol != NULL && *width == save_symbol->width)
+ return save_symbol->conved_item;
s = (*width == 2) ? &alt2_symbol_set : &alt_symbol_set;
- if (s != save_symbol) {
- if (!s->encode)
- encode_symbol(s);
save_symbol = s;
}
*width = s->width;
- return s->item;
+ return s->conved_item;
}
char **
@@ -137,6 +144,21 @@ set_symbol(int width)
return symbol_buf;
}
+#ifdef USE_UNICODE
+void
+update_utf8_symbol(void)
+{
+ charset_symbol_set *p;
+ utf8_symbol_set.width = WcOption.east_asian_width ? 2 : 1;
+ for (p = charset_symbol_list; p->charset; p++) {
+ if (p->charset == WC_CES_UTF_8) {
+ encode_symbol(p->symbol);
+ break;
+ }
+ }
+}
+#endif
+
#else
char **
diff --git a/table.c b/table.c
index 78422d4..e1243ff 100644
--- a/table.c
+++ b/table.c
@@ -1,4 +1,4 @@
-/* $Id: table.c,v 1.55 2007/05/23 13:07:44 inu Exp $ */
+/* $Id: table.c,v 1.58 2010/08/09 11:59:19 htrb Exp $ */
/*
* HTML table
*/
@@ -2408,6 +2408,8 @@ table_close_anchor0(struct table *tbl, struct table_mode *mode)
case HTML_N_COLGROUP:\
case HTML_COL
+#define ATTR_ROWSPAN_MAX 32766
+
static int
feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
int width, struct parsed_tag *tag)
@@ -2592,6 +2594,9 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
else
valign = HTT_MIDDLE;
if (parsedtag_get_value(tag, ATTR_ROWSPAN, &rowspan)) {
+ if(rowspan > ATTR_ROWSPAN_MAX) {
+ rowspan = ATTR_ROWSPAN_MAX;
+ }
if ((tbl->row + rowspan) >= tbl->max_rowsize)
check_row(tbl, tbl->row + rowspan);
}
@@ -2912,6 +2917,12 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
check_rowcol(tbl, mode);
if (i == 0) {
Str tmp = process_anchor(tag, line);
+ if (displayLinkNumber)
+ {
+ Str t = getLinkNumberStr(-1);
+ feed_table_inline_tag(tbl, NULL, mode, t->length);
+ Strcat(tmp, t);
+ }
pushdata(tbl, tbl->row, tbl->col, tmp->ptr);
}
else
diff --git a/tagtable.tab b/tagtable.tab
index d3ecfaf..f9b7b76 100644
--- a/tagtable.tab
+++ b/tagtable.tab
@@ -60,6 +60,8 @@ kbd HTML_NOP
/kbd HTML_NOP
samp HTML_NOP
/samp HTML_NOP
+span HTML_SPAN
+/span HTML_N_SPAN
strong HTML_STRONG
/strong HTML_N_STRONG
var HTML_NOP
@@ -161,6 +163,34 @@ pre_int HTML_PRE_INT
bgsound HTML_BGSOUND
applet HTML_APPLET
embed HTML_EMBED
+span HTML_SPAN
+/span HTML_N_SPAN
+abbr HTML_ABBR
+/abbr HTML_N_ABBR
+acronym HTML_ACRONYM
+/acronym HTML_N_ACRONYM
+area HTML_AREA
+basefont HTML_BASEFONT
+bdo HTML_BDO
+/bdo HTML_N_BDO
+big HTML_BIG
+/big HTML_N_BIG
+button HTML_BUTTON
+fieldset HTML_FIELDSET
+/fieldset HTML_N_FIELDSET
+iframe HTML_IFRAME
+label HTML_LABEL
+/label HTML_N_LABEL
+legend HTML_LEGEND
+/legend HTML_N_LEGEND
+noscript HTML_NOSCRIPT
+/noscript HTML_N_NOSCRIPT
+object HTML_OBJECT
+optgroup HTML_OPTGROUP
+/optgroup HTML_N_OPTGROUP
+param HTML_PARAM
+small HTML_SMALL
+/small HTML_N_SMALL
internal HTML_INTERNAL
/internal HTML_N_INTERNAL
select_int HTML_SELECT_INT
diff --git a/terms.c b/terms.c
index 157178f..7a3c987 100644
--- a/terms.c
+++ b/terms.c
@@ -1,4 +1,4 @@
-/* $Id: terms.c,v 1.57 2007/05/30 04:44:00 inu Exp $ */
+/* $Id: terms.c,v 1.63 2010/08/20 09:34:47 htrb Exp $ */
/*
* An original curses library for EUC-kanji by Akinori ITO, December 1989
* revised by Akinori ITO, January 1995
@@ -26,7 +26,7 @@
#endif /* USE_GPM */
#ifdef USE_SYSMOUSE
#include <osreldate.h>
-#if (__FreeBSD_version >= 400017)
+#if (__FreeBSD_version >= 400017) || (__FreeBSD_kernel_version >= 400017)
#include <sys/consio.h>
#include <sys/fbio.h>
#else
@@ -256,7 +256,7 @@ check_cygwin_console(void)
#endif /* __CYGWIN__ */
char *getenv(const char *);
-MySignalHandler reset_exit(SIGNAL_ARG), error_dump(SIGNAL_ARG);
+MySignalHandler reset_exit(SIGNAL_ARG), reset_error_exit(SIGNAL_ARG), error_dump(SIGNAL_ARG);
void setlinescols(void);
void flush_tty();
@@ -564,7 +564,7 @@ ttymode_set(int mode, int imode)
if (errno == EINTR || errno == EAGAIN)
continue;
printf("Error occured while set %x: errno=%d\n", mode, errno);
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
#endif
}
@@ -585,7 +585,7 @@ ttymode_reset(int mode, int imode)
if (errno == EINTR || errno == EAGAIN)
continue;
printf("Error occured while reset %x: errno=%d\n", mode, errno);
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
#endif /* __MINGW32_VERSION */
}
@@ -602,7 +602,7 @@ set_cc(int spec, int val)
if (errno == EINTR || errno == EAGAIN)
continue;
printf("Error occured: errno=%d\n", errno);
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
}
#endif /* not HAVE_SGTTY_H */
@@ -637,19 +637,31 @@ reset_tty(void)
close_tty();
}
-MySignalHandler
-reset_exit(SIGNAL_ARG)
+static MySignalHandler
+reset_exit_with_value(SIGNAL_ARG, int rval)
{
#ifdef USE_MOUSE
if (mouseActive)
mouse_end();
#endif /* USE_MOUSE */
reset_tty();
- w3m_exit(0);
+ w3m_exit(rval);
SIGNAL_RETURN;
}
MySignalHandler
+reset_error_exit(SIGNAL_ARG)
+{
+ reset_exit_with_value(SIGNAL_ARGLIST, 1);
+}
+
+MySignalHandler
+reset_exit(SIGNAL_ARG)
+{
+ reset_exit_with_value(SIGNAL_ARGLIST, 0);
+}
+
+MySignalHandler
error_dump(SIGNAL_ARG)
{
mySignal(SIGIOT, SIG_DFL);
@@ -708,14 +720,14 @@ getTCstr(void)
ent = getenv("TERM") ? getenv("TERM") : DEFAULT_TERM;
if (ent == NULL) {
fprintf(stderr, "TERM is not set\n");
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
r = tgetent(bp, ent);
if (r != 1) {
/* Can't find termcap entry */
fprintf(stderr, "Can't find termcap entry %s\n", ent);
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
GETSTR(T_ce, "ce"); /* clear to the end of line */
@@ -1201,7 +1213,7 @@ graphend(void)
int
graph_ok(void)
{
- if (!UseGraphicChar)
+ if (UseGraphicChar != GRAPHIC_CHAR_DEC)
return 0;
return T_as[0] != 0 && T_ae[0] != 0 && T_ac[0] != 0;
}
@@ -1897,7 +1909,7 @@ wgetch(void *p)
int
do_getch()
{
- if (is_xterm)
+ if (is_xterm || !gpm_handler)
return getch();
else
return Gpm_Getch();
@@ -2008,7 +2020,7 @@ sleep_till_anykey(int sec, int purge)
er = TerminalSet(tty, &ioval);
if (er == -1) {
printf("Error occured: errno=%d\n", errno);
- reset_exit(SIGNAL_ARGLIST);
+ reset_error_exit(SIGNAL_ARGLIST);
}
return ret;
}
@@ -2037,6 +2049,7 @@ mouse_init()
conn.maxMod = 0;
conn.minMod = 0;
+ gpm_handler = NULL;
r = Gpm_Open(&conn, 0);
if (r == -2) {
/*
diff --git a/url.c b/url.c
index 4faafce..ed6062e 100644
--- a/url.c
+++ b/url.c
@@ -1,4 +1,4 @@
-/* $Id: url.c,v 1.95 2007/05/23 15:06:06 inu Exp $ */
+/* $Id: url.c,v 1.100 2010/12/15 10:50:24 htrb Exp $ */
#include "fm.h"
#ifndef __MINGW32_VERSION
#include <sys/types.h>
@@ -101,6 +101,7 @@ static struct table2 DefaultGuess[] = {
{"html", "text/html"},
{"htm", "text/html"},
{"shtml", "text/html"},
+ {"xhtml", "application/xhtml+xml"},
{"gif", "image/gif"},
{"jpeg", "image/jpeg"},
{"jpg", "image/jpeg"},
@@ -374,6 +375,9 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
#if SSLEAY_VERSION_NUMBER >= 0x00905100
init_PRNG();
#endif /* SSLEAY_VERSION_NUMBER >= 0x00905100 */
+#if (SSLEAY_VERSION_NUMBER >= 0x00908070) && !defined(OPENSSL_NO_TLSEXT)
+ SSL_set_tlsext_host_name(handle,hostname);
+#endif /* (SSLEAY_VERSION_NUMBER >= 0x00908070) && !defined(OPENSSL_NO_TLSEXT) */
if (SSL_connect(handle) > 0) {
Str serv_cert = ssl_get_certificate(handle, hostname);
if (serv_cert) {
@@ -1303,6 +1307,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
Strcat_charp(s, "Cache-control: no-cache\r\n");
}
if (!NoSendReferer) {
+#ifdef USE_SSL
+ if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) {
+ /* Don't send Referer: if https:// -> http:// */
+ }
+ else
+#endif
if (referer == NULL && current && current->scheme != SCM_LOCAL &&
(current->scheme != SCM_FTP ||
(current->user == NULL && current->pass == NULL))) {
@@ -1375,7 +1385,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
Str tmp;
TextListItem *i;
int seen_www_auth = 0;
- int seen_proxy_auth = 0;
#ifdef USE_COOKIE
Str cookie;
#endif /* USE_COOKIE */
@@ -1399,7 +1408,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
}
if (strncasecmp(i->ptr, "Proxy-Authorization:",
sizeof("Proxy-Authorization:") - 1) == 0) {
- seen_proxy_auth = 1;
#ifdef USE_SSL
if (pu->scheme == SCM_HTTPS
&& hr->command != HR_COMMAND_CONNECT)
@@ -1806,20 +1814,26 @@ static void
add_index_file(ParsedURL *pu, URLFile *uf)
{
char *p, *q;
+ TextList *index_file_list = NULL;
+ TextListItem *ti;
- if (index_file == NULL || index_file[0] == '\0') {
+ if (non_null(index_file))
+ index_file_list = make_domain_list(index_file);
+ if (index_file_list == NULL) {
uf->stream = NULL;
return;
}
- p = Strnew_m_charp(pu->file, "/", file_quote(index_file), NULL)->ptr;
- p = cleanupName(p);
- q = cleanupName(file_unquote(p));
- examineFile(q, uf);
- if (uf->stream == NULL)
- return;
- pu->file = p;
- pu->real_file = q;
- return;
+ for (ti = index_file_list->first; ti; ti = ti->next) {
+ p = Strnew_m_charp(pu->file, "/", file_quote(ti->ptr), NULL)->ptr;
+ p = cleanupName(p);
+ q = cleanupName(file_unquote(p));
+ examineFile(q, uf);
+ if (uf->stream != NULL) {
+ pu->file = p;
+ pu->real_file = q;
+ return;
+ }
+ }
}
static char *
diff --git a/version.c.in b/version.c.in
index 76501b3..27dab36 100644
--- a/version.c.in
+++ b/version.c.in
@@ -1,5 +1,5 @@
-/* $Id: version.c.in,v 1.46 2007/05/31 12:17:05 inu Exp $ */
-#define CURRENT_VERSION "w3m/0.5.2"
+/* $Id: version.c.in,v 1.48 2011/01/15 07:52:48 inu Exp $ */
+#define CURRENT_VERSION "w3m/0.5.3"
#ifndef FM_H
char *w3m_version = CURRENT_VERSION;
diff --git a/w3m-doc/CVS/Entries b/w3m-doc/CVS/Entries
new file mode 100644
index 0000000..f0a18f0
--- /dev/null
+++ b/w3m-doc/CVS/Entries
@@ -0,0 +1,18 @@
+/README.html/1.1.1.1/Thu Nov 8 05:18:53 2001//
+/community.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/configuration.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/contain.wd/1.3/Tue Nov 27 03:54:49 2001//
+/copyright.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/define.wd/1.2/Tue Nov 27 03:54:49 2001//
+/detail.html.in/1.3/Tue Nov 27 03:54:49 2001//
+/development.html.in/1.1/Fri Nov 9 04:59:18 2001//
+/faq.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/function.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/index.html.in/1.3/Tue Nov 27 03:54:49 2001//
+/install.html.in/1.3/Tue Jul 9 06:14:14 2002//
+/mkdocs/1.2/Tue Nov 27 03:54:49 2001//
+/operation.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/outline.html.in/1.2/Tue Nov 27 03:54:49 2001//
+/prologue.html.in/1.3/Tue Oct 29 14:28:30 2002//
+/w3mdoc.pl/1.1.1.1/Thu Nov 8 05:18:52 2001//
+D/sample////
diff --git a/w3m-doc/CVS/Repository b/w3m-doc/CVS/Repository
new file mode 100644
index 0000000..2dd7815
--- /dev/null
+++ b/w3m-doc/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3m-doc
diff --git a/w3m-doc/CVS/Root b/w3m-doc/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3m-doc/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3m-doc/sample/CVS/Entries b/w3m-doc/sample/CVS/Entries
new file mode 100644
index 0000000..1207c1a
--- /dev/null
+++ b/w3m-doc/sample/CVS/Entries
@@ -0,0 +1,9 @@
+/README/1.1.1.1/Thu Nov 8 05:18:53 2001//
+/define.wd/1.1.1.1/Thu Nov 8 05:18:53 2001//
+/html.wd/1.1.1.1/Thu Nov 8 05:18:53 2001//
+/keymap.cgi/1.1.1.1/Thu Nov 8 05:18:54 2001//
+/s.wd/1.1.1.1/Thu Nov 8 05:18:54 2001//
+/sample.html/1.1.1.1/Thu Nov 8 05:18:54 2001//
+/sample.wd/1.1.1.1/Thu Nov 8 05:18:53 2001//
+/w3mdoc.pl/1.1.1.1/Thu Nov 8 05:18:53 2001//
+D
diff --git a/w3m-doc/sample/CVS/Repository b/w3m-doc/sample/CVS/Repository
new file mode 100644
index 0000000..d328633
--- /dev/null
+++ b/w3m-doc/sample/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3m-doc/sample
diff --git a/w3m-doc/sample/CVS/Root b/w3m-doc/sample/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3m-doc/sample/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3mimg/CVS/Entries b/w3mimg/CVS/Entries
new file mode 100644
index 0000000..ad83b16
--- /dev/null
+++ b/w3mimg/CVS/Entries
@@ -0,0 +1,7 @@
+/.cvsignore/1.1/Mon Sep 22 22:53:53 2003//
+D/fb////
+D/x11////
+/Makefile.in/1.11/Tue Jan 4 09:22:28 2011//
+/w3mimg.c/1.6/Tue Jan 4 09:22:28 2011//
+/w3mimg.h/1.9/Tue Jan 4 09:22:28 2011//
+D/win////
diff --git a/w3mimg/CVS/Repository b/w3mimg/CVS/Repository
new file mode 100644
index 0000000..d59666d
--- /dev/null
+++ b/w3mimg/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3mimg
diff --git a/w3mimg/CVS/Root b/w3mimg/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3mimg/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in
index a197352..dfc550c 100644
--- a/w3mimg/Makefile.in
+++ b/w3mimg/Makefile.in
@@ -11,10 +11,11 @@ AR=ar
RANLIB=@RANLIB@
RM=rm
-IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@
+SUBDIRS=fb x11 win
+IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
IMGOBJS=@IMGOBJS@
-.PHONY: fb x11
+.PHONY: $(SUBDIRS)
all: @IMGTARGETS@ w3mimg.a
w3mimg.a: $(IMGOBJS)
@@ -24,18 +25,18 @@ w3mimg.a: $(IMGOBJS)
w3mimg.o: w3mimg.c
$(CC) $(CFLAGS) -c $<
-fb x11:
+$(SUBDIRS):
cd $@ && $(MAKE) CC="$(CC)" OPTS="$(OPTS)"
clean:
@-$(RM) -f *.o
- @for dir in fb x11; do \
+ @for dir in $(SUBDIRS); do \
(cd $$dir && $(MAKE) clean RM=$(RM)); \
done
-$(RM) -f w3mimg.a
distclean: clean
- for subdir in fb x11; \
+ for subdir in $(SUBDIRS); \
do \
(cd $$subdir && $(MAKE) distclean); \
done
diff --git a/w3mimg/fb/CVS/Entries b/w3mimg/fb/CVS/Entries
new file mode 100644
index 0000000..549e962
--- /dev/null
+++ b/w3mimg/fb/CVS/Entries
@@ -0,0 +1,11 @@
+/.cvsignore/1.1/Mon Sep 22 22:53:53 2003//
+/Makefile.in/1.4/Mon Apr 26 17:00:38 2004//
+/fb.c/1.16/Sun Jul 13 16:19:10 2003//
+/fb.h/1.7/Mon Jul 7 15:48:17 2003//
+/fb_gdkpixbuf.c/1.21/Mon Nov 8 17:14:06 2004//
+/fb_img.c/1.6/Mon Jul 7 15:48:17 2003//
+/fb_img.h/1.9/Wed Aug 4 17:32:28 2004//
+/fb_imlib2.c/1.10/Wed Aug 4 17:32:28 2004//
+/fb_w3mimg.c/1.14/Wed Aug 4 17:32:28 2004//
+/readme.txt/1.2/Mon Jul 22 16:17:32 2002//
+D
diff --git a/w3mimg/fb/CVS/Repository b/w3mimg/fb/CVS/Repository
new file mode 100644
index 0000000..336666e
--- /dev/null
+++ b/w3mimg/fb/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3mimg/fb
diff --git a/w3mimg/fb/CVS/Root b/w3mimg/fb/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3mimg/fb/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3mimg/w3mimg.c b/w3mimg/w3mimg.c
index 144a2d9..46b5cac 100644
--- a/w3mimg/w3mimg.c
+++ b/w3mimg/w3mimg.c
@@ -1,4 +1,4 @@
-/* $Id: w3mimg.c,v 1.5 2002/11/06 03:50:49 ukai Exp $ */
+/* $Id: w3mimg.c,v 1.6 2010/12/21 10:13:55 htrb Exp $ */
#include <stdio.h>
#include <stdlib.h>
@@ -14,6 +14,10 @@ w3mimg_open()
uid_t runner_uid = getuid();
uid_t owner_uid = geteuid();
#endif
+#ifdef USE_W3MIMG_WIN
+ if (w_op == NULL)
+ w_op = w3mimg_winopen();
+#endif
#ifdef USE_W3MIMG_X11
#ifdef W3MIMGDISPLAY_SETUID
/* run in user privileges */
diff --git a/w3mimg/w3mimg.h b/w3mimg/w3mimg.h
index 3807ca5..f6415a9 100644
--- a/w3mimg/w3mimg.h
+++ b/w3mimg/w3mimg.h
@@ -1,6 +1,13 @@
-/* $Id: w3mimg.h,v 1.8 2003/07/13 16:19:10 ukai Exp $ */
+/* $Id: w3mimg.h,v 1.9 2010/12/21 10:13:55 htrb Exp $ */
+#ifndef W3MIMG_W3MIMG_H
+#define W3MIMG_W3MIMG_H
+
#include "config.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifdef USE_W3MIMG_FB
#include "w3mimg/fb/fb.h"
#include "w3mimg/fb/fb_img.h"
@@ -42,5 +49,13 @@ extern w3mimg_op *w3mimg_x11open();
#ifdef USE_W3MIMG_FB
extern w3mimg_op *w3mimg_fbopen();
#endif
+#ifdef USE_W3MIMG_WIN
+extern w3mimg_op *w3mimg_winopen();
+#endif
extern w3mimg_op *w3mimg_open();
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* W3MIMG_W3MIMG_H */
diff --git a/w3mimg/win/.cvsignore b/w3mimg/win/.cvsignore
new file mode 100644
index 0000000..f3c7a7c
--- /dev/null
+++ b/w3mimg/win/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/w3mimg/win/CVS/Entries b/w3mimg/win/CVS/Entries
new file mode 100644
index 0000000..5025b4b
--- /dev/null
+++ b/w3mimg/win/CVS/Entries
@@ -0,0 +1,4 @@
+/Makefile.in/1.1/Tue Dec 21 10:13:55 2010//
+/win_w3mimg.cpp/1.2/Fri Dec 24 09:52:06 2010//
+/.cvsignore/1.1/Wed Jan 5 09:52:10 2011//
+D
diff --git a/w3mimg/win/CVS/Repository b/w3mimg/win/CVS/Repository
new file mode 100644
index 0000000..06901a3
--- /dev/null
+++ b/w3mimg/win/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3mimg/win
diff --git a/w3mimg/win/CVS/Root b/w3mimg/win/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3mimg/win/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3mimg/win/Makefile.in b/w3mimg/win/Makefile.in
new file mode 100644
index 0000000..b760a3d
--- /dev/null
+++ b/w3mimg/win/Makefile.in
@@ -0,0 +1,31 @@
+#
+# w3mimg/win/Makefile
+#
+#
+@SET_MAKE@
+SHELL=@SHELL@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = $(srcdir):.
+CFLAGS=$(OPTS) -I../.. -I$(top_srcdir) -I$(srcdir) @CFLAGS@ @CPPFLAGS@ @DEFS@ $(IMGCFLAGS)
+RM=rm
+CC=@CC@
+CXX=@CXX@
+
+IMGCFLAGS=@IMGWINCFLAGS@
+OBJS=win_w3mimg.o
+
+all: win_w3mimg.o
+
+win_w3mimg.o: win_w3mimg.cpp
+ $(CXX) $(CFLAGS) -c $<
+
+clean:
+ @-$(RM) -f *.o
+
+distclean: clean
+ -$(RM) -f Makefile
+
+#
+
+
diff --git a/w3mimg/win/win_w3mimg.cpp b/w3mimg/win/win_w3mimg.cpp
new file mode 100644
index 0000000..8099860
--- /dev/null
+++ b/w3mimg/win/win_w3mimg.cpp
@@ -0,0 +1,982 @@
+/* $Id: win_w3mimg.cpp,v 1.2 2010/12/24 09:52:06 htrb Exp $ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "config.h"
+#include <assert.h>
+#include <locale.h>
+
+#include <new>
+#include <algorithm>
+
+#include "w3mimg/w3mimg.h"
+#include <windows.h>
+#include <gdiplus.h>
+#include <unistd.h>
+#include <sys/cygwin.h>
+/* GDI+ can handle BMP, GIF, JPEG, PNG and TIFF by itself. */
+
+#define OFFSET_X 2
+#define OFFSET_Y 2
+#define DEBUG
+
+#ifdef DEBUG
+#define THROW_NONE throw()
+#else
+#define THROW_NONE
+#endif
+
+struct win_info {
+ HWND window;
+ Gdiplus::ARGB background_pixel;
+ ULONG_PTR gdiplus_token;
+ FILE *logfile;
+};
+
+struct window_list {
+ HWND *wnd;
+ size_t nwnd;
+ size_t capacity;
+};
+
+typedef Gdiplus::CachedBitmap *cache_handle;
+class win_image {
+private:
+ win_image(const win_image &); // decl only
+ win_image &operator=(const win_image &); // decl only
+
+ Gdiplus::Bitmap *gpbitmap;
+ unsigned int nframe;
+ unsigned int current;
+ unsigned long tick;
+ unsigned long loopcount; // zero = infinite
+ unsigned long *delay; // unit: millisecond
+ cache_handle *cache;
+
+public:
+ win_image() THROW_NONE;
+ ~win_image() THROW_NONE;
+ int load(w3mimg_op *wop, Gdiplus::Bitmap **p_gpbitmap,
+ int *wreturn, int *hreturn) THROW_NONE;
+ int show(w3mimg_op *wop, int sx, int sy, int sw, int sh, int x, int y) THROW_NONE;
+ int animate(w3mimg_op *wop) THROW_NONE;
+};
+
+static int win_init(w3mimg_op * wop) THROW_NONE;
+static int win_finish(w3mimg_op * wop) THROW_NONE;
+static int win_active(w3mimg_op * wop) THROW_NONE;
+static void win_set_background(w3mimg_op * wop, char *background) THROW_NONE;
+static void win_sync(w3mimg_op * wop) THROW_NONE;
+static void win_close(w3mimg_op * wop) THROW_NONE;
+
+static int win_load_image(w3mimg_op * wop, W3MImage * img, char *fname,
+ int w, int h) THROW_NONE;
+static int win_show_image(w3mimg_op * wop, W3MImage * img,
+ int sx, int sy, int sw, int sh, int x, int y) THROW_NONE;
+static void win_free_image(w3mimg_op * wop, W3MImage * img) THROW_NONE;
+static int win_get_image_size(w3mimg_op * wop, W3MImage * img,
+ char *fname, int *w, int *h) THROW_NONE;
+static int win_clear(w3mimg_op * wop, int x, int y, int w, int h) THROW_NONE;
+
+static int window_alive(w3mimg_op *wop) THROW_NONE;
+static Gdiplus::Bitmap *read_image_file(w3mimg_op *wop, const char *fname) THROW_NONE;
+static BOOL CALLBACK store_to_window_list(HWND hWnd, LPARAM wndlist) THROW_NONE;
+static void clear_window_list(struct window_list *wl) THROW_NONE;
+static const char *gdip_strerror(Gdiplus::Status status) THROW_NONE;
+static void gdip_perror(w3mimg_op *wop, Gdiplus::Status status, const char *func) THROW_NONE;
+static char *win32_strerror_alloc(DWORD status) THROW_NONE;
+static void win32_perror(w3mimg_op *wop, DWORD status, const char *func) THROW_NONE;
+#if 0 /* unused */
+static WCHAR *mb2wstr_alloc(const char *) THROW_NONE;
+static char *wstr2mb_alloc(const WCHAR *) THROW_NONE;
+#endif
+
+#define PRELUDE(wop, xi) \
+ assert(wop); \
+ struct win_info *xi = static_cast<struct win_info *>(wop->priv); \
+ assert(xi)
+
+win_image::win_image() THROW_NONE
+ : gpbitmap(NULL), nframe(0)
+{}
+
+win_image::~win_image() THROW_NONE
+{
+ if (this->cache) {
+ for (size_t i = 0; i != this->nframe; ++i) {
+ delete this->cache[i];
+ }
+ delete[] this->cache;
+ }
+ delete[] this->delay;
+ delete this->gpbitmap;
+}
+
+int
+win_image::load(w3mimg_op *wop, Gdiplus::Bitmap **p_gpbitmap, int *wreturn, int *hreturn) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ Gdiplus::Bitmap *gpbitmap = *p_gpbitmap;
+ assert(gpbitmap);
+ Gdiplus::Status status = Gdiplus::Ok;
+ int retval = 0;
+
+ Gdiplus::PropertyItem *loopcountbuf = NULL;
+ Gdiplus::PropertyItem *delaybuf = NULL;
+ unsigned long *delay = NULL;
+ cache_handle *cache = NULL;
+
+ if (xi->logfile) {
+ fprintf(xi->logfile, "win_image::load(%p, %p, %p, %p) start\n",
+ wop, gpbitmap, wreturn, hreturn);
+ }
+ {
+ unsigned int width = gpbitmap->GetWidth();
+ unsigned int height = gpbitmap->GetHeight();
+ unsigned int nframe = gpbitmap->GetFrameCount(&Gdiplus::FrameDimensionTime);
+ unsigned long loopcount = 0;
+ unsigned int first_frame = 0;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): size[0]=%ux%u\n", width, height);
+ if (nframe == 0) {
+ // Not an animated picture
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): zero frame count\n");
+ nframe = 1;
+ delay = new(std::nothrow) unsigned long[1];
+ if (delay == NULL)
+ goto last;
+ delay[0] = 0;
+ } else {
+ unsigned int loopcountsize = gpbitmap->GetPropertyItemSize(PropertyTagLoopCount);
+ unsigned int delaysize = gpbitmap->GetPropertyItemSize(PropertyTagFrameDelay);
+
+ // Get loop count
+ if (loopcountsize != 0) {
+ loopcountbuf = (Gdiplus::PropertyItem *)malloc(loopcountsize);
+ if (loopcountbuf == NULL)
+ goto last;
+ status = gpbitmap->GetPropertyItem(PropertyTagLoopCount, loopcountsize, loopcountbuf);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ if (loopcountbuf->type == PropertyTagTypeShort &&
+ loopcountbuf->length >= sizeof(unsigned short)) {
+ loopcount = *(unsigned short *)loopcountbuf->value;
+ } else if (loopcountbuf->type == PropertyTagTypeLong &&
+ loopcountbuf->length >= sizeof(unsigned long)) {
+ loopcount = *(unsigned long *)loopcountbuf->value;
+ }
+ }
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): loopcount=%lu\n", loopcount);
+ // Get delay times
+ if (delaysize != 0) {
+ delaybuf = (Gdiplus::PropertyItem *)malloc(delaysize);
+ if (delaybuf == NULL)
+ goto last;
+ status = gpbitmap->GetPropertyItem(PropertyTagFrameDelay, delaysize, delaybuf);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ delay = new(std::nothrow) unsigned long[nframe];
+ if (delay == NULL)
+ goto last;
+ std::fill(delay, delay + nframe, 0);
+ if (delaybuf->type == PropertyTagTypeShort) {
+ unsigned int count = delaybuf->length / sizeof(unsigned short);
+ for (unsigned int i = 0; i != count; ++i)
+ delay[i] = ((unsigned short *)delaybuf->value)[i] * 10;
+ } else if (delaybuf->type == PropertyTagTypeLong) {
+ unsigned int count = delaybuf->length / sizeof(unsigned long);
+ for (unsigned int i = 0; i != count; ++i)
+ delay[i] = ((unsigned long *)delaybuf->value)[i] * 10;
+ }
+ }
+ if (xi->logfile) {
+ for (unsigned int i = 0; i != nframe; ++i)
+ fprintf(xi->logfile, "win_image::load(): delay[%u]=%lu\n", i, delay[i]);
+ }
+ // Get dimensions
+ for (unsigned int nextframe = 1; nextframe != nframe; ++nextframe) {
+ status = gpbitmap->SelectActiveFrame(&Gdiplus::FrameDimensionTime, nextframe);
+ if (status != Gdiplus::Ok) {
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): SelectActiveFrame() to %u failed = %d: %s\n",
+ nextframe, (int)status, gdip_strerror(status));
+ goto last;
+ }
+ unsigned int iw = gpbitmap->GetWidth();
+ unsigned int ih = gpbitmap->GetHeight();
+ if (iw > width)
+ width = iw;
+ if (ih > height)
+ height = ih;
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): size[%u]=%ux%u\n", nextframe, iw, ih);
+ }
+ // Go to the first frame
+ first_frame = (0 < -wop->max_anim && -wop->max_anim < nframe) ? (nframe + wop->max_anim) : 0;
+ status = gpbitmap->SelectActiveFrame(&Gdiplus::FrameDimensionTime, first_frame);
+ if (status != Gdiplus::Ok) {
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): SelectActiveFrame() to %u frame = %d: %s\n",
+ first_frame, (int)status, gdip_strerror(status));
+ goto last;
+ }
+ }
+ // Allocate cache array
+ cache = new(std::nothrow) cache_handle[nframe];
+ if (cache == NULL)
+ goto last;
+ std::fill(cache, cache + nframe, (cache_handle)NULL);
+ // Sanity check
+ if (width > SHRT_MAX || height > SHRT_MAX) {
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load(): too big image: %ux%u\n", width, height);
+ goto last;
+ }
+ // Store the results
+ if (wreturn)
+ *wreturn = (int)width;
+ if (hreturn)
+ *hreturn = (int)height;
+ this->gpbitmap = gpbitmap;
+ *p_gpbitmap = NULL; // ownership transfer
+ this->nframe = nframe;
+ this->current = first_frame;
+ this->tick = 0;
+ this->loopcount = loopcount;
+ this->delay = delay;
+ delay = NULL; // ownership transfer
+ this->cache = cache;
+ cache = NULL; // ownership transfer
+ retval = 1;
+ }
+ goto last;
+
+gdip_error:
+ gdip_perror(wop, status, "win_image::load");
+ goto last;
+last:
+ delete[] cache;
+ delete[] delay;
+ free(delaybuf);
+ free(loopcountbuf);
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::load() = %d\n", retval);
+ return retval;
+}
+
+int
+win_image::show(w3mimg_op *wop, int sx, int sy, int sw, int sh, int x, int y) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ int retval = 0;
+ Gdiplus::Status status = Gdiplus::Ok;
+ cache_handle newcache = NULL;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::show(%p, %d, %d, %d, %d, %d, %d) start current=%u\n",
+ wop, sx, sy, sw, sh, x, y, this->current);
+ if (!window_alive(wop))
+ goto last;
+ {
+ int xx = x + wop->offset_x;
+ int yy = y + wop->offset_y;
+
+ // Prepare the Graphics object for painting
+ Gdiplus::Graphics graphics(xi->window);
+ if ((status = graphics.GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ Gdiplus::Rect clip(xx, yy, sw, sh);
+ status = graphics.SetClip(clip);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+
+ unsigned int retry_count = 2;
+ do {
+ if (this->cache[this->current] == NULL) {
+ // Cache the image
+ Gdiplus::Bitmap tmp_bitmap(sw, sh, &graphics);
+ if ((status = tmp_bitmap.GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ Gdiplus::Graphics tmp_graphics(&tmp_bitmap);
+ if ((status = tmp_graphics.GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ status = tmp_graphics.Clear(Gdiplus::Color(xi->background_pixel));
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ status = tmp_graphics.DrawImage(this->gpbitmap, 0, 0, sw, sh);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ Gdiplus::CachedBitmap *newcache = new Gdiplus::CachedBitmap(&tmp_bitmap, &graphics);
+ if (newcache == NULL)
+ goto last;
+ if ((status = newcache->GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ this->cache[this->current] = newcache;
+ newcache = NULL; // ownership transfer
+ --retry_count;
+ }
+ // Draw it
+ status = graphics.DrawCachedBitmap(this->cache[this->current], xx - sx, yy - sy);
+ if (status == Gdiplus::Ok)
+ break;
+ // maybe the user altered the display configuration
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::show(): stale cache = %d: %s\n",
+ (int)status, gdip_strerror(status));
+ delete this->cache[this->current];
+ this->cache[this->current] = NULL;
+ if (retry_count == 0)
+ goto last;
+ } while (1);
+
+ retval = 1;
+ }
+ goto last;
+gdip_error:
+ gdip_perror(wop, status, "win_image::show");
+ goto last;
+last:
+ delete newcache;
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::show() = %d\n", retval);
+ return retval;
+}
+
+int
+win_image::animate(w3mimg_op * wop) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ int retval = 0;
+ Gdiplus::Status status = Gdiplus::Ok;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::animate(%p) start\n", wop);
+ {
+ if (this->nframe <= 1)
+ goto animation_end;
+#define UNIT_TICK 50
+#define MIN_DELAY (UNIT_TICK*2)
+ this->tick += UNIT_TICK;
+ if (this->tick >= MIN_DELAY && this->tick >= this->delay[this->current]) {
+ this->tick = 0;
+ unsigned int nextframe = this->current + 1;
+ if (wop->max_anim == nextframe)
+ goto animation_end;
+ if (nextframe >= this->nframe) {
+ if (this->loopcount == 1 || wop->max_anim < 0) // end of the loop
+ goto animation_end;
+ nextframe = 0;
+ }
+ status = this->gpbitmap->SelectActiveFrame(&Gdiplus::FrameDimensionTime, nextframe);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ this->current = nextframe;
+ if (nextframe == 0 && this->loopcount > 1)
+ --this->loopcount;
+ }
+animation_end:
+ retval = 1;
+ }
+ goto last;
+gdip_error:
+ gdip_perror(wop, status, "win_image::animate");
+ goto last;
+last:
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_image::animate() = %d\n", retval);
+ return retval;
+}
+
+static int
+window_alive(w3mimg_op *wop) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ if (xi->window == NULL)
+ return 0;
+ if (IsWindow(xi->window))
+ return 1;
+ xi->window = NULL;
+ fputs("w3mimgdisplay: target window disappeared\n", stderr);
+ if (xi->logfile)
+ fputs("w3mimgdisplay: target window disappeared\n", xi->logfile);
+ return 0;
+}
+
+static int
+win_init(w3mimg_op *) THROW_NONE
+{
+ // nothing to do
+ return 1;
+}
+
+static int
+win_finish(w3mimg_op *) THROW_NONE
+{
+ // nothing to do
+ return 1;
+}
+
+static int
+win_clear(w3mimg_op *wop, int x, int y, int w, int h) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ Gdiplus::Status status = Gdiplus::Ok;
+ int retval = 0;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_clear(%p, %d, %d, %d, %d) start\n",
+ wop, x, y, w, h);
+ if (!window_alive(wop))
+ goto last;
+ {
+ if (x < 0)
+ x = 0;
+ if (y < 0)
+ y = 0;
+ Gdiplus::SolidBrush brush(Gdiplus::Color(xi->background_pixel));
+ if ((status = brush.GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ Gdiplus::Graphics graphics(xi->window);
+ if ((status = graphics.GetLastStatus()) != Gdiplus::Ok)
+ goto gdip_error;
+ status = graphics.FillRectangle(&brush, x + wop->offset_x, y + wop->offset_y, w, h);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+ retval = 1;
+ }
+ goto last;
+gdip_error:
+ gdip_perror(wop, status, "win_clear");
+ goto last;
+last:
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_clear() = %d\n", retval);
+ return retval;
+}
+
+static int
+win_active(w3mimg_op * wop) THROW_NONE
+{
+ return window_alive(wop);
+}
+
+static void
+win_set_background(w3mimg_op * wop, char *background) THROW_NONE
+{
+ PRELUDE(wop, xi);
+
+ HDC windc = NULL;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_set_background(%p, \"%s\")\n", wop, background ? background : "(auto)");
+ {
+ // Fallback value
+ // xi->background_pixel = Gdiplus::Color::White;
+ xi->background_pixel = Gdiplus::Color::Black;
+
+ // Explicit
+ if (background) {
+ unsigned int r, g, b;
+ if (sscanf(background, "#%02x%02x%02x", &r, &g, &b) == 3) {
+ xi->background_pixel = Gdiplus::Color::MakeARGB((BYTE)255, (BYTE)r, (BYTE)g, (BYTE)b);
+ goto last;
+ }
+ }
+
+ // Auto detect
+ if (xi->window == NULL || !IsWindow(xi->window))
+ goto last;
+ windc = GetDC(xi->window);
+ if (windc == NULL)
+ goto win32_error;
+ COLORREF c = GetPixel(windc,
+ (wop->offset_x >= 1) ? (wop->offset_x - 1) : 0,
+ (wop->offset_y >= 1) ? (wop->offset_y - 1) : 0);
+ xi->background_pixel = Gdiplus::Color::MakeARGB(
+ (BYTE)255, GetRValue(c), GetGValue(c), GetBValue(c));
+ }
+ goto last;
+win32_error:
+ win32_perror(wop, GetLastError(), "win_set_background");
+ goto last;
+last:
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_set_background() result = #%06x\n",
+ (unsigned int)xi->background_pixel);
+ if (windc)
+ ReleaseDC(xi->window, windc);
+}
+
+static void
+win_sync(w3mimg_op *) THROW_NONE
+{
+ // nothing to do
+ return;
+}
+
+static void
+win_close(w3mimg_op * wop) THROW_NONE
+{
+ PRELUDE(wop, xi);
+
+ if (xi->gdiplus_token)
+ Gdiplus::GdiplusShutdown(xi->gdiplus_token);
+ if (xi->logfile) {
+ fprintf(xi->logfile, "win_close(%p)\n", wop);
+ fclose(xi->logfile);
+ }
+ delete xi;
+ delete wop;
+}
+
+static Gdiplus::Bitmap *
+read_image_file(w3mimg_op *wop, const char *fname) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ Gdiplus::Status status = Gdiplus::Ok;
+ Gdiplus::Bitmap *retval = NULL;
+
+ WCHAR *wfname = NULL;
+ Gdiplus::Bitmap *gpbitmap = NULL;
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "read_image_file(%p, \"%s\") start\n", wop, fname);
+ {
+ wfname = (WCHAR *)cygwin_create_path(CCP_POSIX_TO_WIN_W, fname);
+ if (wfname == NULL)
+ goto last;
+ gpbitmap = new Gdiplus::Bitmap(wfname);
+ if (gpbitmap == NULL)
+ goto last;
+ status = gpbitmap->GetLastStatus();
+ switch (status) {
+ case Gdiplus::Ok:
+ break;
+ case Gdiplus::UnknownImageFormat:
+ case Gdiplus::FileNotFound:
+ goto last; // fail silently
+ default:
+ goto gdip_error;
+ }
+ retval = gpbitmap;
+ gpbitmap = NULL; // ownership transfer
+ }
+ goto last;
+gdip_error:
+ gdip_perror(wop, status, "read_image_file");
+last:
+ delete gpbitmap;
+ free(wfname);
+ if (xi->logfile)
+ fprintf(xi->logfile, "read_image_file() = %p\n", retval);
+ return retval;
+}
+
+static int
+win_load_image(w3mimg_op * wop, W3MImage * img, char *fname, int w, int h) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ int retval = 0;
+ Gdiplus::Bitmap *gpbitmap = NULL;
+ win_image *wimg = NULL;
+
+ assert(img);
+ if (xi->logfile) {
+ fprintf(xi->logfile, "win_load_image(%p, %p, \"%s\", %d, %d) start\n",
+ wop, img, fname, w, h);
+ }
+ {
+ gpbitmap = read_image_file(wop, fname);
+ if (gpbitmap == NULL)
+ goto last;
+ int iw, ih;
+ wimg = new(std::nothrow) win_image;
+ if (!wimg->load(wop, &gpbitmap, &iw, &ih))
+ goto last;
+ img->pixmap = wimg;
+ wimg = NULL; // ownership transfer
+ img->width = (0 <= w && w < iw) ? w : iw;
+ img->height = (0 <= h && h < ih) ? h : ih;
+ retval = 1;
+ }
+ goto last;
+last:
+ delete wimg;
+ delete gpbitmap;
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_load_image() = %d\n", retval);
+ return retval;
+}
+
+static int
+win_show_image(w3mimg_op * wop, W3MImage * img, int sx, int sy, int sw,
+ int sh, int x, int y) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ int retval = 0;
+
+ assert(img);
+ win_image *wimg = static_cast<win_image *>(img->pixmap);
+ assert(wimg);
+
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_show_image(%p, %p, %d, %d, %d, %d, %d, %d) start\n",
+ wop, img, sx, sy, sw, sh, x, y);
+ int sww = sw ? sw : img->width;
+ int shh = sh ? sh : img->height;
+ retval = wimg->show(wop, sx, sy, sww, shh, x, y)
+ && wimg->animate(wop);
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_show_image() = %d\n", retval);
+ return retval;
+}
+
+static void
+win_free_image(w3mimg_op * wop, W3MImage * img) THROW_NONE
+{
+ PRELUDE(wop, xi);
+
+ assert(img);
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_free_image(%p, %p) pixmap=%p\n", wop, img, img->pixmap);
+ delete static_cast<win_image *>(img->pixmap);
+ img->pixmap = NULL;
+ img->width = 0;
+ img->height = 0;
+}
+
+static int
+win_get_image_size(w3mimg_op * wop, W3MImage *img_unused, char *fname, int *w, int *h) THROW_NONE
+{
+ PRELUDE(wop, xi);
+ int retval = 0;
+ Gdiplus::Bitmap *gpbitmap = NULL;
+ win_image *wimg = NULL;
+
+ if (xi->logfile) {
+ fprintf(xi->logfile, "win_get_image_size(%p, %p, \"%s\", %p, %p) start\n",
+ wop, img_unused, fname, w, h);
+ }
+ {
+ gpbitmap = read_image_file(wop, fname);
+ if (gpbitmap == NULL)
+ goto last;
+ wimg = new(std::nothrow) win_image;
+ if (wimg == NULL)
+ goto last;
+ retval = wimg->load(wop, &gpbitmap, w, h);;
+ }
+ goto last;
+last:
+ delete wimg;
+ delete gpbitmap;
+ if (xi->logfile)
+ fprintf(xi->logfile, "win_get_image_size() = %d\n", retval);
+ return retval;
+}
+
+extern "C" w3mimg_op *
+w3mimg_winopen()
+{
+ w3mimg_op *retval = NULL;
+ Gdiplus::Status status = Gdiplus::Ok;
+
+ w3mimg_op *wop = NULL;
+ struct win_info *xi = NULL;
+ struct window_list children = { NULL, 0, 0 };
+
+ {
+ // Quit if running on X
+ const char *display_name;
+ if ((display_name = getenv("DISPLAY")) != NULL &&
+ display_name[0] && strcmp(display_name, ":0") != 0)
+ return NULL;
+
+ // Allocate the context objects
+ wop = new(std::nothrow) w3mimg_op(); // call the default ctor instead of "new w3mimg_op;"
+ if (wop == NULL)
+ return NULL;
+ wop->priv = xi = new(std::nothrow) win_info();
+ if (xi == NULL)
+ goto last;
+
+ // Debug logging
+ const char *logging_dir;
+ if ((logging_dir = getenv("W3MIMG_LOGDIR")) != NULL &&
+ logging_dir[0]) {
+ size_t l = strlen(logging_dir) + sizeof "/w3mimgXXXXXXXXXX.log";
+ char *fname = (char *)malloc(l);
+ snprintf(fname, l, "%s/w3mimg%d.log", logging_dir, (int)getpid());
+ xi->logfile = fopen(fname, "a");
+ if (xi->logfile) {
+ setvbuf(xi->logfile, NULL, _IONBF, 0);
+ fprintf(xi->logfile, "\nw3mimg_winopen() start pid=%d\n", (int)getpid());
+ }
+ }
+
+ // Look for the window to draw the image
+ xi->window = NULL;
+ const char *windowid;
+ if ((windowid = getenv("WINDOWID")) != NULL)
+ xi->window = FindWindowA(windowid, NULL);
+ if (!xi->window)
+ xi->window = GetForegroundWindow();
+ if (!xi->window)
+ goto win32_error;
+
+ WINDOWINFO winfo = WINDOWINFO();
+ winfo.cbSize = sizeof winfo;
+ GetWindowInfo(xi->window, &winfo);
+ wop->width = (int)(winfo.rcClient.right - winfo.rcClient.left);
+ wop->height = (int)(winfo.rcClient.bottom - winfo.rcClient.top);
+
+ // Search decendant windows and find out which is the text window
+ while (1) {
+ HWND p_window = xi->window;
+
+ clear_window_list(&children);
+ EnumChildWindows(xi->window, &store_to_window_list, (LPARAM)&children);
+ for (unsigned int i = 0; i < children.nwnd; i++) {
+ int width, height;
+
+ GetWindowInfo(children.wnd[i], &winfo);
+ width = (int)(winfo.rcClient.right - winfo.rcClient.left);
+ height = (int)(winfo.rcClient.bottom - winfo.rcClient.top);
+ if (width > wop->width * 0.7 &&
+ height > wop->height * 0.7) {
+ /* maybe text window */
+ wop->width = width;
+ wop->height = height;
+ xi->window = children.wnd[i];
+ }
+ }
+ if (p_window == xi->window)
+ break;
+ }
+
+ // Terminal may leave some border pixels
+ wop->offset_x = OFFSET_X;
+ wop->offset_y = OFFSET_Y;
+
+ // Start up the GDI+
+ Gdiplus::GdiplusStartupInput startup_input; /// default ctor
+ status = Gdiplus::GdiplusStartup(&xi->gdiplus_token, &startup_input, NULL);
+ if (status != Gdiplus::Ok)
+ goto gdip_error;
+
+ // Fill the context object
+ wop->init = win_init;
+ wop->finish = win_finish;
+ wop->active = win_active;
+ wop->set_background = win_set_background;
+ wop->sync = win_sync;
+ wop->close = win_close;
+ wop->clear = win_clear;
+
+ wop->load_image = win_load_image;
+ wop->show_image = win_show_image;
+ wop->free_image = win_free_image;
+ wop->get_image_size = win_get_image_size;
+
+ retval = wop; // take care of the object lifetime
+ }
+ goto last;
+win32_error:
+ win32_perror(wop, GetLastError(), "w3mimg_winopen");
+ goto last;
+gdip_error:
+ gdip_perror(wop, status, "w3mimg_winopen");
+ goto last;
+last:
+ if (xi && xi->logfile)
+ fprintf(xi->logfile, "w3mimg_winopen() = %p\n", retval);
+ clear_window_list(&children);
+ if (!retval) {
+ if (xi) {
+ if (xi->gdiplus_token)
+ Gdiplus::GdiplusShutdown(xi->gdiplus_token);
+ if (xi->logfile)
+ fclose(xi->logfile);
+ delete xi;
+ }
+ delete wop;
+ }
+ return retval;
+}
+
+static BOOL CALLBACK
+store_to_window_list(HWND hWnd, LPARAM wndlist) THROW_NONE
+{
+ struct window_list *wl = (struct window_list *)wndlist;
+
+ if (wl->nwnd >= wl->capacity) {
+ size_t newsize = (wl->capacity < 4 ) ? 4 : (wl->capacity * 2);
+ HWND *newbuf = (HWND *)realloc(wl->wnd, newsize * sizeof newbuf[0]);
+ if (newbuf == NULL) {
+ clear_window_list(wl);
+ return FALSE;
+ }
+ wl->wnd = newbuf;
+ wl->capacity = newsize;
+ }
+ wl->wnd[wl->nwnd++] = hWnd;
+ return TRUE;
+}
+
+static void
+clear_window_list(struct window_list *wl) THROW_NONE
+{
+ free(wl->wnd);
+ wl->wnd = NULL;
+ wl->nwnd = 0;
+ wl->capacity = 0;
+}
+
+static const char *
+gdip_strerror(Gdiplus::Status status) THROW_NONE
+{
+ size_t i;
+ struct status_rec {
+ Gdiplus::Status code;
+ const char *str;
+ };
+ static const struct status_rec table[] = {
+#define ERRITEM(s) { Gdiplus::s, #s }
+ ERRITEM(Ok),
+ ERRITEM(GenericError),
+ ERRITEM(InvalidParameter),
+ ERRITEM(OutOfMemory),
+ ERRITEM(ObjectBusy),
+ ERRITEM(InsufficientBuffer),
+ ERRITEM(NotImplemented),
+ ERRITEM(Win32Error),
+ ERRITEM(WrongState),
+ ERRITEM(Aborted),
+ ERRITEM(FileNotFound),
+ ERRITEM(ValueOverflow),
+ ERRITEM(AccessDenied),
+ ERRITEM(UnknownImageFormat),
+ ERRITEM(FontFamilyNotFound),
+ ERRITEM(FontStyleNotFound),
+ ERRITEM(NotTrueTypeFont),
+ ERRITEM(UnsupportedGdiplusVersion),
+ ERRITEM(GdiplusNotInitialized),
+ ERRITEM(PropertyNotFound),
+ ERRITEM(PropertyNotSupported),
+ ERRITEM(ProfileNotFound),
+#undef ERRITEM
+ };
+ for (i = 0; i != sizeof table / sizeof table[0]; ++i)
+ if (table[i].code == status)
+ return table[i].str;
+ return "unknown";
+}
+
+static void
+gdip_perror(w3mimg_op *wop, Gdiplus::Status status, const char *func) THROW_NONE
+{
+ const char *s = gdip_strerror(status);
+ fprintf(stderr, "w3mimgdisplay: GDI+ error %d: %s\n", (int)status, s);
+ if (wop && wop->priv) {
+ struct win_info *xi = (struct win_info *)wop->priv;
+ if (xi->logfile) {
+ fprintf(xi->logfile, "%s(): GDI+ error %d: %s\n", func, (int)status, s);
+ }
+ }
+}
+
+// Don't free() the result; use LocalFree() instead
+static char *
+win32_strerror_alloc(DWORD status) THROW_NONE
+{
+ char *errbuf = NULL;
+
+ FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, status, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
+ (LPSTR)&errbuf, 0, NULL);
+ if (errbuf) {
+ size_t len = strlen(errbuf);
+ if (len > 0 && errbuf[len - 1] == '\n')
+ errbuf[len - 1] = '\0';
+ }
+ return errbuf;
+}
+
+static void
+win32_perror(w3mimg_op *wop, DWORD status, const char *func) THROW_NONE
+{
+ char *errbuf = win32_strerror_alloc(status);
+ const char *s = errbuf ? errbuf : "(unknown)";
+
+ fprintf(stderr, "w3mimgdisplay: Win32 error %u: %s\n", (unsigned int)status, s);
+ if (wop && wop->priv) {
+ struct win_info *xi = (struct win_info *)wop->priv;
+ if (xi->logfile) {
+ fprintf(xi->logfile, "%s(): Win32 error %u: %s\n",
+ func, (unsigned int)status, s);
+ }
+ }
+ LocalFree(errbuf);
+}
+
+#if 0 /* unused */
+static WCHAR *
+mb2wstr_alloc(const char *s) THROW_NONE
+{
+ int len;
+ WCHAR *buf = NULL;
+
+ len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, s, -1, NULL, 0);
+ if (len <= 0) {
+ fprintf(stderr, "w3mimgdisplay: unable to convert string ecode=%u\n",
+ (unsigned int)GetLastError());
+ goto error;
+ }
+ buf = (WCHAR *)malloc(len * sizeof(WCHAR)); /* including L'\0' */
+ if (!buf)
+ goto error;
+ len = MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, s, -1, buf, len);
+ if (len <= 0) {
+ fprintf(stderr, "w3mimgdisplay: unable to convert string ecode=%u\n",
+ (unsigned int)GetLastError());
+ goto error;
+ }
+ return buf;
+error:
+ free(buf);
+ return NULL;
+}
+
+static char *
+wstr2mb_alloc(const WCHAR *ws) THROW_NONE
+{
+ int len;
+ char *buf = NULL;
+
+ len = WideCharToMultiByte(CP_OEMCP, WC_COMPOSITECHECK, ws, -1, NULL, 0, NULL, NULL);
+ if (len <= 0) {
+ fprintf(stderr, "w3mimgdisplay: unable to convert string ecode=%u\n",
+ (unsigned int)GetLastError());
+ goto error;
+ }
+ buf = (char *)malloc(len); /* including '\0' */
+ if (!buf)
+ goto error;
+ len = WideCharToMultiByte(CP_OEMCP, WC_COMPOSITECHECK, ws, -1, buf, len, NULL, NULL);
+ if (len <= 0) {
+ fprintf(stderr, "w3mimgdisplay: unable to convert string ecode=%u\n",
+ (unsigned int)GetLastError());
+ goto error;
+ }
+ return buf;
+error:
+ free(buf);
+ return NULL;
+}
+#endif /* unused */
diff --git a/w3mimg/x11/CVS/Entries b/w3mimg/x11/CVS/Entries
new file mode 100644
index 0000000..a3cf134
--- /dev/null
+++ b/w3mimg/x11/CVS/Entries
@@ -0,0 +1,4 @@
+/.cvsignore/1.1/Mon Sep 22 22:53:53 2003//
+/Makefile.in/1.4/Mon Apr 26 17:00:38 2004//
+/x11_w3mimg.c/1.29/Mon Nov 8 17:14:06 2004//
+D
diff --git a/w3mimg/x11/CVS/Repository b/w3mimg/x11/CVS/Repository
new file mode 100644
index 0000000..1268050
--- /dev/null
+++ b/w3mimg/x11/CVS/Repository
@@ -0,0 +1 @@
+w3m/w3mimg/x11
diff --git a/w3mimg/x11/CVS/Root b/w3mimg/x11/CVS/Root
new file mode 100644
index 0000000..121fa06
--- /dev/null
+++ b/w3mimg/x11/CVS/Root
@@ -0,0 +1 @@
+:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m
diff --git a/w3mimgdisplay.c b/w3mimgdisplay.c
index 78550e5..5486a47 100644
--- a/w3mimgdisplay.c
+++ b/w3mimgdisplay.c
@@ -1,4 +1,4 @@
-/* $Id: w3mimgdisplay.c,v 1.18 2003/07/13 16:20:42 ukai Exp $ */
+/* $Id: w3mimgdisplay.c,v 1.19 2010/12/21 10:13:55 htrb Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
@@ -65,6 +65,7 @@ main(int argc, char **argv)
if (defined_test) {
printf("%d %d\n", w_op->width - w_op->offset_x,
w_op->height - w_op->offset_y);
+ w_op->close(w_op);
exit(0);
}
@@ -75,6 +76,7 @@ main(int argc, char **argv)
if (w_op->get_image_size(w_op, &img, defined_size, &w, &h))
printf("%d %d\n", w, h);
}
+ w_op->close(w_op);
exit(0);
}