summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-07-16 22:33:30 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-07-16 22:33:30 +0000
commit0b50b90cf4efcd1646b2517a4777605ab2e844df (patch)
tree9a4b11349f5dc2acdd4280d4f9425d7b766be9a7
parent4d45f12df9f220592a0c1b2eabe51d82cdc74daa (diff)
downloadmandoc-0b50b90cf4efcd1646b2517a4777605ab2e844df.tar.gz
Change chars.in HTML encoding to be a Unicode codepoint (int), which is
later formatted in html.c.
-rw-r--r--TODO6
-rw-r--r--chars.c87
-rw-r--r--chars.h6
-rw-r--r--chars.in740
-rw-r--r--html.c24
-rw-r--r--term.c4
6 files changed, 461 insertions, 406 deletions
diff --git a/TODO b/TODO
index 5d587515..73b487ad 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,9 @@
************************************************************************
+* Official mandoc TODO. May not be quite up to date.
+* $Id$
+************************************************************************
+
+************************************************************************
* missing features
************************************************************************
@@ -100,4 +105,3 @@ Several areas can be cleaned up to make mandoc even faster. These are
************************************************************************
* structural issues
************************************************************************
-
diff --git a/chars.c b/chars.c
index 730904fb..f7348626 100644
--- a/chars.c
+++ b/chars.c
@@ -32,11 +32,10 @@
struct ln {
struct ln *next;
const char *code;
- const char *ascii;
- const char *html;
size_t codesz;
+ const char *ascii;
size_t asciisz;
- size_t htmlsz;
+ int unicode;
int type;
#define CHARS_CHAR (1 << 0)
#define CHARS_STRING (1 << 1)
@@ -45,12 +44,12 @@ struct ln {
#define LINES_MAX 370
-#define CHAR(w, x, y, z, a, b) \
- { NULL, (w), (y), (a), (x), (z), (b), CHARS_CHAR },
-#define STRING(w, x, y, z, a, b) \
- { NULL, (w), (y), (a), (x), (z), (b), CHARS_STRING },
-#define BOTH(w, x, y, z, a, b) \
- { NULL, (w), (y), (a), (x), (z), (b), CHARS_BOTH },
+#define CHAR(in, insz, ch, chsz, code) \
+ { NULL, (in), (insz), (ch), (chsz), (code), CHARS_CHAR },
+#define STRING(in, insz, ch, chsz, code) \
+ { NULL, (in), (insz), (ch), (chsz), (code), CHARS_STRING },
+#define BOTH(in, insz, ch, chsz, code) \
+ { NULL, (in), (insz), (ch), (chsz), (code), CHARS_BOTH },
#define CHAR_TBL_START static struct ln lines[LINES_MAX] = {
#define CHAR_TBL_END };
@@ -64,8 +63,7 @@ struct tbl {
static inline int match(const struct ln *,
const char *, size_t, int);
-static const char *find(struct tbl *, const char *,
- size_t, size_t *, int);
+static const struct ln *find(struct tbl *, const char *, size_t, int);
void
@@ -126,24 +124,72 @@ chars_init(enum chars type)
}
+/*
+ * Special character to Unicode codepoint.
+ */
+int
+chars_spec2cp(void *arg, const char *p, size_t sz)
+{
+ const struct ln *ln;
+
+ ln = find((struct tbl *)arg, p, sz, CHARS_CHAR);
+ if (NULL == ln)
+ return(-1);
+ return(ln->unicode);
+}
+
+
+/*
+ * Reserved word to Unicode codepoint.
+ */
+int
+chars_res2cp(void *arg, const char *p, size_t sz)
+{
+ const struct ln *ln;
+
+ ln = find((struct tbl *)arg, p, sz, CHARS_STRING);
+ if (NULL == ln)
+ return(-1);
+ return(ln->unicode);
+}
+
+
+/*
+ * Special character to string array.
+ */
const char *
-chars_a2ascii(void *arg, const char *p, size_t sz, size_t *rsz)
+chars_spec2str(void *arg, const char *p, size_t sz, size_t *rsz)
{
+ const struct ln *ln;
+
+ ln = find((struct tbl *)arg, p, sz, CHARS_CHAR);
+ if (NULL == ln)
+ return(NULL);
- return(find((struct tbl *)arg, p, sz, rsz, CHARS_CHAR));
+ *rsz = ln->asciisz;
+ return(ln->ascii);
}
+/*
+ * Reserved word to string array.
+ */
const char *
-chars_a2res(void *arg, const char *p, size_t sz, size_t *rsz)
+chars_res2str(void *arg, const char *p, size_t sz, size_t *rsz)
{
+ const struct ln *ln;
- return(find((struct tbl *)arg, p, sz, rsz, CHARS_STRING));
+ ln = find((struct tbl *)arg, p, sz, CHARS_STRING);
+ if (NULL == ln)
+ return(NULL);
+
+ *rsz = ln->asciisz;
+ return(ln->ascii);
}
-static const char *
-find(struct tbl *tab, const char *p, size_t sz, size_t *rsz, int type)
+static const struct ln *
+find(struct tbl *tab, const char *p, size_t sz, int type)
{
struct ln *pp, *prev;
struct ln **htab;
@@ -179,12 +225,7 @@ find(struct tbl *tab, const char *p, size_t sz, size_t *rsz, int type)
htab[hash] = pp;
}
- if (CHARS_HTML == tab->type) {
- *rsz = pp->htmlsz;
- return(pp->html);
- }
- *rsz = pp->asciisz;
- return(pp->ascii);
+ return(pp);
}
return(NULL);
diff --git a/chars.h b/chars.h
index 0cb31141..88b3ebf5 100644
--- a/chars.h
+++ b/chars.h
@@ -25,8 +25,10 @@ enum chars {
};
void *chars_init(enum chars);
-const char *chars_a2ascii(void *, const char *, size_t, size_t *);
-const char *chars_a2res(void *, const char *, size_t, size_t *);
+const char *chars_spec2str(void *, const char *, size_t, size_t *);
+int chars_spec2cp(void *, const char *, size_t);
+const char *chars_res2str(void *, const char *, size_t, size_t *);
+int chars_res2cp(void *, const char *, size_t);
void chars_free(void *);
__END_DECLS
diff --git a/chars.in b/chars.in
index 27444b8b..119961db 100644
--- a/chars.in
+++ b/chars.in
@@ -36,411 +36,411 @@ static const char ascii_nbrsp[2] = { ASCII_NBRSP, 0 };
CHAR_TBL_START
/* Spacing. */
-CHAR("c", 1, "", 0, "", 0)
-CHAR("0", 1, " ", 1, "&#8194;", 7)
-CHAR(" ", 1, " ", 1, "&#8194;", 7)
-CHAR("~", 1, ascii_nbrsp, 1, "&#160;", 6)
-CHAR("%", 1, "", 0, "", 0)
-CHAR("&", 1, "", 0, "", 0)
-CHAR("^", 1, "", 0, "", 0)
-CHAR("|", 1, "", 0, "", 0)
-CHAR("}", 1, "", 0, "", 0)
+CHAR("c", 1, "", 0, -1)
+CHAR("0", 1, " ", 1, 8194)
+CHAR(" ", 1, " ", 1, 8194)
+CHAR("~", 1, ascii_nbrsp, 1, 160)
+CHAR("%", 1, "", 0, -1)
+CHAR("&", 1, "", 0, -1)
+CHAR("^", 1, "", 0, -1)
+CHAR("|", 1, "", 0, -1)
+CHAR("}", 1, "", 0, -1)
/* Accents. */
-CHAR("a\"", 2, "\"", 1, "&#779;", 6)
-CHAR("a-", 2, "-", 1, "&#175;", 6)
-CHAR("a.", 2, ".", 1, "&#729;", 6)
-CHAR("a^", 2, "^", 1, "&#770;", 6)
-BOTH("\'", 1, "\'", 1, "&#769;", 6)
-BOTH("aa", 2, "\'", 1, "&#769;", 6)
-BOTH("ga", 2, "`", 1, "&#768;", 6)
-BOTH("`", 1, "`", 1, "&#768;", 6)
-CHAR("ab", 2, "`", 1, "&#774;", 6)
-CHAR("ac", 2, ",", 1, "&#807;", 6)
-CHAR("ad", 2, "\"", 1, "&#776;", 6)
-CHAR("ah", 2, "v", 1, "&#711;", 6)
-CHAR("ao", 2, "o", 1, "&#730;", 6)
-CHAR("a~", 2, "~", 1, "&#771;", 6)
-CHAR("ho", 2, ",", 1, "&#808;", 6)
-CHAR("ha", 2, "^", 1, "^", 1)
-CHAR("ti", 2, "~", 1, "~", 1)
+CHAR("a\"", 2, "\"", 1, 779)
+CHAR("a-", 2, "-", 1, 175)
+CHAR("a.", 2, ".", 1, 729)
+CHAR("a^", 2, "^", 1, 770)
+BOTH("\'", 1, "\'", 1, 769)
+BOTH("aa", 2, "\'", 1, 769)
+BOTH("ga", 2, "`", 1, 768)
+BOTH("`", 1, "`", 1, 768)
+CHAR("ab", 2, "`", 1, 774)
+CHAR("ac", 2, ",", 1, 807)
+CHAR("ad", 2, "\"", 1, 776)
+CHAR("ah", 2, "v", 1, 711)
+CHAR("ao", 2, "o", 1, 730)
+CHAR("a~", 2, "~", 1, 771)
+CHAR("ho", 2, ",", 1, 808)
+CHAR("ha", 2, "^", 1, 94)
+CHAR("ti", 2, "~", 1, 126)
/* Quotes. */
-CHAR("Bq", 2, ",,", 2, "&#8222;", 7)
-CHAR("bq", 2, ",", 1, "&#8218;", 7)
-BOTH("lq", 2, "``", 2, "&#8220;", 7)
-BOTH("rq", 2, "\'\'", 2, "&#8221;", 7)
-CHAR("oq", 2, "`", 1, "&#8216;", 7)
-CHAR("cq", 2, "\'", 1, "&#8217;", 7)
-CHAR("aq", 2, "\'", 1, "\'", 1)
-CHAR("dq", 2, "\"", 1, "\"", 1)
-CHAR("Fo", 2, "<<", 2, "&#171;", 6)
-CHAR("Fc", 2, ">>", 2, "&#187;", 6)
-CHAR("fo", 2, "<", 1, "&#8249;", 7)
-CHAR("fc", 2, ">", 1, "&#8250;", 7)
+CHAR("Bq", 2, ",,", 2, 8222)
+CHAR("bq", 2, ",", 1, 8218)
+BOTH("lq", 2, "``", 2, 8220)
+BOTH("rq", 2, "\'\'", 2, 8221)
+CHAR("oq", 2, "`", 1, 8216)
+CHAR("cq", 2, "\'", 1, 8217)
+CHAR("aq", 2, "\'", 1, 39)
+CHAR("dq", 2, "\"", 1, 34)
+CHAR("Fo", 2, "<<", 2, 171)
+CHAR("Fc", 2, ">>", 2, 187)
+CHAR("fo", 2, "<", 1, 8249)
+CHAR("fc", 2, ">", 1, 8250)
/* Brackets. */
-CHAR("lB", 2, "[", 1, "[", 1)
-CHAR("rB", 2, "]", 1, "]", 1)
-CHAR("lC", 2, "{", 1, "{", 1)
-CHAR("rC", 2, "}", 1, "}", 1)
-CHAR("la", 2, "<", 1, "&#10216;", 8)
-CHAR("ra", 2, ">", 1, "&#10217;", 8)
-CHAR("bv", 2, "|", 1, "&#9130;", 7)
-CHAR("braceex", 7, "|", 1, "&#9130;", 7)
-CHAR("bracketlefttp", 13, "|", 1, "&#9121;", 7)
-CHAR("bracketleftbp", 13, "|", 1, "&#9123;", 7)
-CHAR("bracketleftex", 13, "|", 1, "&#9122;", 7)
-CHAR("bracketrighttp", 14, "|", 1, "&#9124;", 7)
-CHAR("bracketrightbp", 14, "|", 1, "&#9126;", 7)
-CHAR("bracketrightex", 14, "|", 1, "&#9125;", 7)
-CHAR("lt", 2, ",-", 2, "&#9127;", 7)
-CHAR("bracelefttp", 11, ",-", 2, "&#9127;", 7)
-CHAR("lk", 2, "{", 1, "&#9128;", 7)
-CHAR("braceleftmid", 12, "{", 1, "&#9128;", 7)
-CHAR("lb", 2, ",-", 2, "&#9129;", 7)
-CHAR("braceleftbp", 11, "`-", 2, "&#9129;", 7)
-CHAR("braceleftex", 11, "|", 1, "&#9130;", 7)
-CHAR("rt", 2, "-.", 2, "&#9131;", 7)
-CHAR("bracerighttp", 12, "-.", 2, "&#9131;", 7)
-CHAR("rk", 2, "}", 1, "&#9132;", 7)
-CHAR("bracerightmid", 13, "}", 1, "&#9132;", 7)
-CHAR("rb", 2, "-\'", 2, "&#9133;", 7)
-CHAR("bracerightbp", 12, "-\'", 2, "&#9133;", 7)
-CHAR("bracerightex", 12, "|", 1, "&#9130;", 7)
-CHAR("parenlefttp", 11, "/", 1, "&#9115;", 7)
-CHAR("parenleftbp", 11, "\\", 1, "&#9117;", 7)
-CHAR("parenleftex", 11, "|", 1, "&#9116;", 7)
-CHAR("parenrighttp", 12, "\\", 1, "&#9118;", 7)
-CHAR("parenrightbp", 12, "/", 1, "&#9120;", 7)
-CHAR("parenrightex", 12, "|", 1, "&#9119;", 7)
+CHAR("lB", 2, "[", 1, 91)
+CHAR("rB", 2, "]", 1, 93)
+CHAR("lC", 2, "{", 1, 123)
+CHAR("rC", 2, "}", 1, 125)
+CHAR("la", 2, "<", 1, 10216) /* FIXME: 60 */
+CHAR("ra", 2, ">", 1, 10217) /* FIXME: 62 */
+CHAR("bv", 2, "|", 1, 9130)
+CHAR("braceex", 7, "|", 1, 9130)
+CHAR("bracketlefttp", 13, "|", 1, 9121)
+CHAR("bracketleftbp", 13, "|", 1, 9123)
+CHAR("bracketleftex", 13, "|", 1, 9122)
+CHAR("bracketrighttp", 14, "|", 1, 9124)
+CHAR("bracketrightbp", 14, "|", 1, 9126)
+CHAR("bracketrightex", 14, "|", 1, 9125)
+CHAR("lt", 2, ",-", 2, 9127)
+CHAR("bracelefttp", 11, ",-", 2, 9127)
+CHAR("lk", 2, "{", 1, 9128)
+CHAR("braceleftmid", 12, "{", 1, 9128)
+CHAR("lb", 2, ",-", 2, 9129)
+CHAR("braceleftbp", 11, "`-", 2, 9129)
+CHAR("braceleftex", 11, "|", 1, 9130)
+CHAR("rt", 2, "-.", 2, 9131)
+CHAR("bracerighttp", 12, "-.", 2, 9131)
+CHAR("rk", 2, "}", 1, 9132)
+CHAR("bracerightmid", 13, "}", 1, 9132)
+CHAR("rb", 2, "-\'", 2, 9133)
+CHAR("bracerightbp", 12, "-\'", 2, 9133)
+CHAR("bracerightex", 12, "|", 1, 9130)
+CHAR("parenlefttp", 11, "/", 1, 9115)
+CHAR("parenleftbp", 11, "\\", 1, 9117)
+CHAR("parenleftex", 11, "|", 1, 9116)
+CHAR("parenrighttp", 12, "\\", 1, 9118)
+CHAR("parenrightbp", 12, "/", 1, 9120)
+CHAR("parenrightex", 12, "|", 1, 9119)
/* Greek characters. */
-CHAR("*A", 2, "A", 1, "&#913;", 6)
-CHAR("*B", 2, "B", 1, "&#914;", 6)
-CHAR("*G", 2, "|", 1, "&#915;", 6)
-CHAR("*D", 2, "/\\", 2, "&#916;", 6)
-CHAR("*E", 2, "E", 1, "&#917;", 6)
-CHAR("*Z", 2, "Z", 1, "&#918;", 6)
-CHAR("*Y", 2, "H", 1, "&#919;", 6)
-CHAR("*H", 2, "O", 1, "&#920;", 6)
-CHAR("*I", 2, "I", 1, "&#921;", 6)
-CHAR("*K", 2, "K", 1, "&#922;", 6)
-CHAR("*L", 2, "/\\", 2, "&#923;", 6)
-CHAR("*M", 2, "M", 1, "&#924;", 6)
-CHAR("*N", 2, "N", 1, "&#925;", 6)
-CHAR("*C", 2, "H", 1, "&#926;", 6)
-CHAR("*O", 2, "O", 1, "&#927;", 6)
-CHAR("*P", 2, "TT", 2, "&#928;", 6)
-CHAR("*R", 2, "P", 1, "&#929;", 6)
-CHAR("*S", 2, ">", 1, "&#931;", 6)
-CHAR("*T", 2, "T", 1, "&#932;", 6)
-CHAR("*U", 2, "Y", 1, "&#933;", 6)
-CHAR("*F", 2, "O_", 1, "&#934;", 6)
-CHAR("*X", 2, "X", 1, "&#935;", 6)
-CHAR("*Q", 2, "Y", 1, "&#936;", 6)
-CHAR("*W", 2, "O", 1, "&#937;", 6)
-CHAR("*a", 2, "a", 1, "&#945;", 6)
-CHAR("*b", 2, "B", 1, "&#946;", 6)
-CHAR("*g", 2, "y", 1, "&#947;", 6)
-CHAR("*d", 2, "d", 1, "&#948;", 6)
-CHAR("*e", 2, "e", 1, "&#949;", 6)
-CHAR("*z", 2, "C", 1, "&#950;", 6)
-CHAR("*y", 2, "n", 1, "&#951;", 6)
-CHAR("*h", 2, "0", 1, "&#952;", 6)
-CHAR("*i", 2, "i", 1, "&#953;", 6)
-CHAR("*k", 2, "k", 1, "&#954;", 6)
-CHAR("*l", 2, "\\", 1, "&#955;", 6)
-CHAR("*m", 2, "u", 1, "&#956;", 6)
-CHAR("*n", 2, "v", 1, "&#957;", 6)
-CHAR("*c", 2, "E", 1, "&#958;", 6)
-CHAR("*o", 2, "o", 1, "&#959;", 6)
-CHAR("*p", 2, "n", 1, "&#960;", 6)
-CHAR("*r", 2, "p", 1, "&#961;", 6)
-CHAR("*s", 2, "o", 1, "&#963;", 6)
-CHAR("*t", 2, "t", 1, "&#964;", 6)
-CHAR("*u", 2, "u", 1, "&#965;", 6)
-CHAR("*f", 2, "o", 1, "&#981;", 6)
-CHAR("*x", 2, "x", 1, "&#967;", 6)
-CHAR("*q", 2, "u", 1, "&#968;", 6)
-CHAR("*w", 2, "w", 1, "&#969;", 6)
-CHAR("+h", 2, "0", 1, "&#977;", 6)
-CHAR("+f", 2, "o", 1, "&#966;", 6)
-CHAR("+p", 2, "w", 1, "&#982;", 6)
-CHAR("+e", 2, "e", 1, "&#1013;", 7)
-CHAR("ts", 2, "s", 1, "&#962;", 6)
+CHAR("*A", 2, "A", 1, 913)
+CHAR("*B", 2, "B", 1, 914)
+CHAR("*G", 2, "|", 1, 915)
+CHAR("*D", 2, "/\\", 2, 916)
+CHAR("*E", 2, "E", 1, 917)
+CHAR("*Z", 2, "Z", 1, 918)
+CHAR("*Y", 2, "H", 1, 919)
+CHAR("*H", 2, "O", 1, 920)
+CHAR("*I", 2, "I", 1, 921)
+CHAR("*K", 2, "K", 1, 922)
+CHAR("*L", 2, "/\\", 2, 923)
+CHAR("*M", 2, "M", 1, 924)
+CHAR("*N", 2, "N", 1, 925)
+CHAR("*C", 2, "H", 1, 926)
+CHAR("*O", 2, "O", 1, 927)
+CHAR("*P", 2, "TT", 2, 928)
+CHAR("*R", 2, "P", 1, 929)
+CHAR("*S", 2, ">", 1, 931)
+CHAR("*T", 2, "T", 1, 932)
+CHAR("*U", 2, "Y", 1, 933)
+CHAR("*F", 2, "O_", 1, 934)
+CHAR("*X", 2, "X", 1, 935)
+CHAR("*Q", 2, "Y", 1, 936)
+CHAR("*W", 2, "O", 1, 937)
+CHAR("*a", 2, "a", 1, 945)
+CHAR("*b", 2, "B", 1, 946)
+CHAR("*g", 2, "y", 1, 947)
+CHAR("*d", 2, "d", 1, 948)
+CHAR("*e", 2, "e", 1, 949)
+CHAR("*z", 2, "C", 1, 950)
+CHAR("*y", 2, "n", 1, 951)
+CHAR("*h", 2, "0", 1, 952)
+CHAR("*i", 2, "i", 1, 953)
+CHAR("*k", 2, "k", 1, 954)
+CHAR("*l", 2, "\\", 1, 955)
+CHAR("*m", 2, "u", 1, 956)
+CHAR("*n", 2, "v", 1, 957)
+CHAR("*c", 2, "E", 1, 958)
+CHAR("*o", 2, "o", 1, 959)
+CHAR("*p", 2, "n", 1, 960)
+CHAR("*r", 2, "p", 1, 961)
+CHAR("*s", 2, "o", 1, 963)
+CHAR("*t", 2, "t", 1, 964)
+CHAR("*u", 2, "u", 1, 965)
+CHAR("*f", 2, "o", 1, 981)
+CHAR("*x", 2, "x", 1, 967)
+CHAR("*q", 2, "u", 1, 968)
+CHAR("*w", 2, "w", 1, 969)
+CHAR("+h", 2, "0", 1, 977)
+CHAR("+f", 2, "o", 1, 966)
+CHAR("+p", 2, "w", 1, 982)
+CHAR("+e", 2, "e", 1, 1013)
+CHAR("ts", 2, "s", 1, 962)
/* Accented letters. */
-CHAR(",C", 2, "C", 1, "&#199;", 6)
-CHAR(",c", 2, "c", 1, "&#231;", 6)
-CHAR("/L", 2, "L", 1, "&#321;", 6)
-CHAR("/O", 2, "O", 1, "&#216;", 6)
-CHAR("/l", 2, "l", 1, "&#322;", 6)
-CHAR("/o", 2, "o", 1, "&#248;", 6)
-CHAR("oA", 2, "A", 1, "&#197;", 6)
-CHAR("oa", 2, "a", 1, "&#229;", 6)
-CHAR(":A", 2, "A", 1, "&#196;", 6)
-CHAR(":E", 2, "E", 1, "&#203;", 6)
-CHAR(":I", 2, "I", 1, "&#207;", 6)
-CHAR(":O", 2, "O", 1, "&#214;", 6)
-CHAR(":U", 2, "U", 1, "&#220;", 6)
-CHAR(":a", 2, "a", 1, "&#228;", 6)
-CHAR(":e", 2, "e", 1, "&#235;", 6)
-CHAR(":i", 2, "i", 1, "&#239;", 6)
-CHAR(":o", 2, "o", 1, "&#245;", 6)
-CHAR(":u", 2, "u", 1, "&#252;", 6)
-CHAR(":y", 2, "y", 1, "&#255;", 6)
-CHAR("\'A", 2, "A", 1, "&#193;", 6)
-CHAR("\'E", 2, "E", 1, "&#201;", 6)
-CHAR("\'I", 2, "I", 1, "&#205;", 6)
-CHAR("\'O", 2, "O", 1, "&#211;", 6)
-CHAR("\'U", 2, "U", 1, "&#218;", 6)
-CHAR("\'a", 2, "a", 1, "&#225;", 6)
-CHAR("\'e", 2, "e", 1, "&#233;", 6)
-CHAR("\'i", 2, "i", 1, "&#237;", 6)
-CHAR("\'o", 2, "o", 1, "&#243;", 6)
-CHAR("\'u", 2, "u", 1, "&#250;", 6)
-CHAR("^A", 2, "A", 1, "&#194;", 6)
-CHAR("^E", 2, "E", 1, "&#202;", 6)
-CHAR("^I", 2, "I", 1, "&#206;", 6)
-CHAR("^O", 2, "O", 1, "&#212;", 6)
-CHAR("^U", 2, "U", 1, "&#219;", 6)
-CHAR("^a", 2, "a", 1, "&#226;", 6)
-CHAR("^e", 2, "e", 1, "&#234;", 6)
-CHAR("^i", 2, "i", 1, "&#238;", 6)
-CHAR("^o", 2, "o", 1, "&#244;", 6)
-CHAR("^u", 2, "u", 1, "&#251;", 6)
-CHAR("`A", 2, "A", 1, "&#192;", 6)
-CHAR("`E", 2, "E", 1, "&#200;", 6)
-CHAR("`I", 2, "I", 1, "&#204;", 6)
-CHAR("`O", 2, "O", 1, "&#210;", 6)
-CHAR("`U", 2, "U", 1, "&#217;", 6)
-CHAR("`a", 2, "a", 1, "&#224;", 6)
-CHAR("`e", 2, "e", 1, "&#232;", 6)
-CHAR("`i", 2, "i", 1, "&#236;", 6)
-CHAR("`o", 2, "o", 1, "&#242;", 6)
-CHAR("`u", 2, "u", 1, "&#249;", 6)
-CHAR("~A", 2, "A", 1, "&#195;", 6)
-CHAR("~N", 2, "N", 1, "&#209;", 6)
-CHAR("~O", 2, "O", 1, "&#213;", 6)
-CHAR("~a", 2, "a", 1, "&#227;", 6)
-CHAR("~n", 2, "n", 1, "&#241;", 6)
-CHAR("~o", 2, "o", 1, "&#245;", 6)
+CHAR(",C", 2, "C", 1, 199)
+CHAR(",c", 2, "c", 1, 231)
+CHAR("/L", 2, "L", 1, 321)
+CHAR("/O", 2, "O", 1, 216)
+CHAR("/l", 2, "l", 1, 322)
+CHAR("/o", 2, "o", 1, 248)
+CHAR("oA", 2, "A", 1, 197)
+CHAR("oa", 2, "a", 1, 229)
+CHAR(":A", 2, "A", 1, 196)
+CHAR(":E", 2, "E", 1, 203)
+CHAR(":I", 2, "I", 1, 207)
+CHAR(":O", 2, "O", 1, 214)
+CHAR(":U", 2, "U", 1, 220)
+CHAR(":a", 2, "a", 1, 228)
+CHAR(":e", 2, "e", 1, 235)
+CHAR(":i", 2, "i", 1, 239)
+CHAR(":o", 2, "o", 1, 245)
+CHAR(":u", 2, "u", 1, 252)
+CHAR(":y", 2, "y", 1, 255)
+CHAR("\'A", 2, "A", 1, 193)
+CHAR("\'E", 2, "E", 1, 201)
+CHAR("\'I", 2, "I", 1, 205)
+CHAR("\'O", 2, "O", 1, 211)
+CHAR("\'U", 2, "U", 1, 218)
+CHAR("\'a", 2, "a", 1, 225)
+CHAR("\'e", 2, "e", 1, 233)
+CHAR("\'i", 2, "i", 1, 237)
+CHAR("\'o", 2, "o", 1, 243)
+CHAR("\'u", 2, "u", 1, 250)
+CHAR("^A", 2, "A", 1, 194)
+CHAR("^E", 2, "E", 1, 202)
+CHAR("^I", 2, "I", 1, 206)
+CHAR("^O", 2, "O", 1, 212)
+CHAR("^U", 2, "U", 1, 219)
+CHAR("^a", 2, "a", 1, 226)
+CHAR("^e", 2, "e", 1, 234)
+CHAR("^i", 2, "i", 1, 238)
+CHAR("^o", 2, "o", 1, 244)
+CHAR("^u", 2, "u", 1, 251)
+CHAR("`A", 2, "A", 1, 192)
+CHAR("`E", 2, "E", 1, 200)
+CHAR("`I", 2, "I", 1, 204)
+CHAR("`O", 2, "O", 1, 210)
+CHAR("`U", 2, "U", 1, 217)
+CHAR("`a", 2, "a", 1, 224)
+CHAR("`e", 2, "e", 1, 232)
+CHAR("`i", 2, "i", 1, 236)
+CHAR("`o", 2, "o", 1, 242)
+CHAR("`u", 2, "u", 1, 249)
+CHAR("~A", 2, "A", 1, 195)
+CHAR("~N", 2, "N", 1, 209)
+CHAR("~O", 2, "O", 1, 213)
+CHAR("~a", 2, "a", 1, 227)
+CHAR("~n", 2, "n", 1, 241)
+CHAR("~o", 2, "o", 1, 245)
/* Arrows and lines. */
-CHAR("<-", 2, "<-", 2, "&#8592;", 7)
-CHAR("->", 2, "->", 2, "&#8594;", 7)
-CHAR("<>", 2, "<>", 2, "&#8596;", 7)
-CHAR("da", 2, "v", 1, "&#8595;", 7)
-BOTH("ua", 2, "^", 1, "&#8593;", 7)
-BOTH("va", 2, "^v", 2, "&#8597;", 7)
-CHAR("lA", 2, "<=", 2, "&#8656;", 7)
-CHAR("rA", 2, "=>", 2, "&#8658;", 7)
-CHAR("hA", 2, "<=>", 3, "&#8660;", 7)
-CHAR("dA", 2, "v", 1, "&#8659;", 7)
-CHAR("uA", 2, "^", 1, "&#8657;", 7)
-CHAR("vA", 2, "^=v", 3, "&#8661;", 7)
+CHAR("<-", 2, "<-", 2, 8592)
+CHAR("->", 2, "->", 2, 8594)
+CHAR("<>", 2, "<>", 2, 8596)
+CHAR("da", 2, "v", 1, 8595)
+BOTH("ua", 2, "^", 1, 8593)
+BOTH("va", 2, "^v", 2, 8597)
+CHAR("lA", 2, "<=", 2, 8656)
+CHAR("rA", 2, "=>", 2, 8658)
+CHAR("hA", 2, "<=>", 3, 8660)
+CHAR("dA", 2, "v", 1, 8659)
+CHAR("uA", 2, "^", 1, 8657)
+CHAR("vA", 2, "^=v", 3, 8661)
/* Logic. */
-CHAR("AN", 2, "^", 1, "&#8743;", 7)
-CHAR("OR", 2, "v", 1, "&#8744;", 7)
-CHAR("no", 2, "~", 1, "&#172;", 6)
-CHAR("tno", 3, "~", 1, "&#172;", 6)
-CHAR("te", 2, "3", 1, "&#8707;", 7)
-CHAR("fa", 2, "V", 1, "&#8704;", 7)
-CHAR("st", 2, "-)", 2, "&#8715;", 7)
-CHAR("tf", 2, ".:.", 3, "&#8756;", 7)
-CHAR("3d", 2, ".:.", 3, "&#8756;", 7)
-CHAR("or", 2, "|", 1, "|", 1)
+CHAR("AN", 2, "^", 1, 8743)
+CHAR("OR", 2, "v", 1, 8744)
+CHAR("no", 2, "~", 1, 172)
+CHAR("tno", 3, "~", 1, 172)
+CHAR("te", 2, "3", 1, 8707)
+CHAR("fa", 2, "V", 1, 8704)
+CHAR("st", 2, "-)", 2, 8715)
+CHAR("tf", 2, ".:.", 3, 8756)
+CHAR("3d", 2, ".:.", 3, 8756)
+CHAR("or", 2, "|", 1, 124)
/* Mathematicals. */
-CHAR("pl", 2, "+", 1, "&#43;", 5)
-CHAR("mi", 2, "-", 1, "&#8722;", 7)
-CHAR("-", 1, "-", 1, "-", 1)
-CHAR("-+", 2, "-+", 2, "&#8723;", 7)
-CHAR("+-", 2, "+-", 2, "&#177;", 6)
-CHAR("t+-", 3, "+-", 2, "&#177;", 6)
-CHAR("pc", 2, ".", 1, "&#183;", 6)
-CHAR("md", 2, ".", 1, "&#8901;", 7)
-CHAR("mu", 2, "x", 1, "&#215;", 6)
-CHAR("tmu", 3, "x", 1, "&#215;", 6)
-CHAR("c*", 2, "x", 1, "&#8855;", 7)
-CHAR("c+", 2, "+", 1, "&#8853;", 7)
-CHAR("di", 2, "-:-", 3, "&#247;", 6)
-CHAR("tdi", 3, "-:-", 3, "&#247;", 6)
-CHAR("f/", 2, "/", 1, "&#8260;", 7)
-CHAR("**", 2, "*", 1, "&#8727;", 7)
-BOTH("<=", 2, "<=", 2, "&#8804;", 7)
-BOTH(">=", 2, ">=", 2, "&#8805;", 7)
-CHAR("<<", 2, "<<", 2, "&#8810;", 7)
-CHAR(">>", 2, ">>", 2, "&#8811;", 7)
-CHAR("eq", 2, "=", 1, "&#61;", 5)
-CHAR("!=", 2, "!=", 2, "&#8800;", 7)
-CHAR("==", 2, "==", 2, "&#8801;", 7)
-CHAR("ne", 2, "!==", 3, "&#8802;", 7)
-CHAR("=~", 2, "=~", 2, "&#8773;", 7)
-CHAR("-~", 2, "-~", 2, "&#8771;", 7)
-CHAR("ap", 2, "~", 1, "&#8764;", 7)
-CHAR("~~", 2, "~~", 2, "&#8776;", 7)
-CHAR("~=", 2, "~=", 2, "&#8780;", 7)
-CHAR("pt", 2, "oc", 2, "&#8733;", 7)
-CHAR("es", 2, "{}", 2, "&#8709;", 7)
-CHAR("mo", 2, "E", 1, "&#8712;", 7)
-CHAR("nm", 2, "!E", 2, "&#8713;", 7)
-CHAR("sb", 2, "(=", 2, "&#8834;", 7)
-CHAR("nb", 2, "(!=", 3, "&#8836;", 7)
-CHAR("sp", 2, "=)", 2, "&#8835;", 7)
-CHAR("nc", 2, "!=)", 3, "&#8837;", 7)
-CHAR("ib", 2, "(=", 2, "&#8838;", 7)
-CHAR("ip", 2, "=)", 2, "&#8839;", 7)
-CHAR("ca", 2, "(^)", 3, "&#8745;", 7)
-CHAR("cu", 2, "U", 1, "&#8746;", 7)
-CHAR("/_", 2, "/_", 2, "&#8736;", 7)
-CHAR("pp", 2, "_|_", 3, "&#8869;", 7)
-CHAR("is", 2, "I", 1, "&#8747;", 7)
-CHAR("integral", 8, "I", 1, "&#8747;", 7)
-CHAR("sum", 3, "E", 1, "&#8721;", 7)
-CHAR("product", 7, "TT", 2, "&#8719;", 7)
-CHAR("coproduct", 9, "U", 1, "&#8720;", 7)
-CHAR("gr", 2, "V", 1, "&#8711;", 7)
-CHAR("sr", 2, "\\/", 2, "&#8730;", 7)
-CHAR("sqrt", 4, "\\/", 2, "&#8730;", 7)
-CHAR("lc", 2, "|~", 2, "&#8968;", 7)
-CHAR("rc", 2, "~|", 2, "&#8969;", 7)
-CHAR("lf", 2, "|_", 2, "&#8970;", 7)
-CHAR("rf", 2, "_|", 2, "&#8971;", 7)
-CHAR("if", 2, "oo", 2, "&#8734;", 7)
-CHAR("Ah", 2, "N", 1, "&#8501;", 7)
-CHAR("Im", 2, "I", 1, "&#8465;", 7)
-CHAR("Re", 2, "R", 1, "&#8476;", 7)
-CHAR("pd", 2, "a", 1, "&#8706;", 7)
-CHAR("-h", 2, "/h", 2, "&#8463;", 7)
+CHAR("pl", 2, "+", 1, 43)
+CHAR("mi", 2, "-", 1, 8722)
+CHAR("-", 1, "-", 1, 45)
+CHAR("-+", 2, "-+", 2, 8723)
+CHAR("+-", 2, "+-", 2, 177)
+CHAR("t+-", 3, "+-", 2, 177)
+CHAR("pc", 2, ".", 1, 183)
+CHAR("md", 2, ".", 1, 8901)
+CHAR("mu", 2, "x", 1, 215)
+CHAR("tmu", 3, "x", 1, 215)
+CHAR("c*", 2, "x", 1, 8855)
+CHAR("c+", 2, "+", 1, 8853)
+CHAR("di", 2, "-:-", 3, 247)
+CHAR("tdi", 3, "-:-", 3, 247)
+CHAR("f/", 2, "/", 1, 8260)
+CHAR("**", 2, "*", 1, 8727)
+BOTH("<=", 2, "<=", 2, 8804)
+BOTH(">=", 2, ">=", 2, 8805)
+CHAR("<<", 2, "<<", 2, 8810)
+CHAR(">>", 2, ">>", 2, 8811)
+CHAR("eq", 2, "=", 1, 61)
+CHAR("!=", 2, "!=", 2, 8800)
+CHAR("==", 2, "==", 2, 8801)
+CHAR("ne", 2, "!==", 3, 8802)
+CHAR("=~", 2, "=~", 2, 8773)
+CHAR("-~", 2, "-~", 2, 8771)
+CHAR("ap", 2, "~", 1, 8764)
+CHAR("~~", 2, "~~", 2, 8776)
+CHAR("~=", 2, "~=", 2, 8780)
+CHAR("pt", 2, "oc", 2, 8733)
+CHAR("es", 2, "{}", 2, 8709)
+CHAR("mo", 2, "E", 1, 8712)
+CHAR("nm", 2, "!E", 2, 8713)
+CHAR("sb", 2, "(=", 2, 8834)
+CHAR("nb", 2, "(!=", 3, 8836)
+CHAR("sp", 2, "=)", 2, 8835)
+CHAR("nc", 2, "!=)", 3, 8837)
+CHAR("ib", 2, "(=", 2, 8838)
+CHAR("ip", 2, "=)", 2, 8839)
+CHAR("ca", 2, "(^)", 3, 8745)
+CHAR("cu", 2, "U", 1, 8746)
+CHAR("/_", 2, "/_", 2, 8736)
+CHAR("pp", 2, "_|_", 3, 8869)
+CHAR("is", 2, "I", 1, 8747)
+CHAR("integral", 8, "I", 1, 8747)
+CHAR("sum", 3, "E", 1, 8721)
+CHAR("product", 7, "TT", 2, 8719)
+CHAR("coproduct", 9, "U", 1, 8720)
+CHAR("gr", 2, "V", 1, 8711)
+CHAR("sr", 2, "\\/", 2, 8730)
+CHAR("sqrt", 4, "\\/", 2, 8730)
+CHAR("lc", 2, "|~", 2, 8968)
+CHAR("rc", 2, "~|", 2, 8969)
+CHAR("lf", 2, "|_", 2, 8970)
+CHAR("rf", 2, "_|", 2, 8971)
+CHAR("if", 2, "oo", 2, 8734)
+CHAR("Ah", 2, "N", 1, 8501)
+CHAR("Im", 2, "I", 1, 8465)
+CHAR("Re", 2, "R", 1, 8476)
+CHAR("pd", 2, "a", 1, 8706)
+CHAR("-h", 2, "/h", 2, 8463)
/* Ligatures. */
-CHAR("ff", 2, "ff", 2, "&#64256;", 8)
-CHAR("fi", 2, "fi", 2, "&#64257;", 8)
-CHAR("fl", 2, "fl", 2, "&#64258;", 8)
-CHAR("Fi", 2, "ffi", 3, "&#64259;", 8)
-CHAR("Fl", 2, "ffl", 3, "&#64260;", 8)
-BOTH("AE", 2, "AE", 2, "&#198;", 6)
-BOTH("ae", 2, "ae", 2, "&#230;", 6)
-CHAR("OE", 2, "OE", 2, "&#338;", 6)
-CHAR("oe", 2, "oe", 2, "&#339;", 6)
-CHAR("ss", 2, "ss", 2, "&#223;", 6)
-CHAR("IJ", 2, "IJ", 2, "&#306;", 6)
-CHAR("ij", 2, "ij", 2, "&#307;", 6)
+CHAR("ff", 2, "ff", 2, 64256)
+CHAR("fi", 2, "fi", 2, 64257)
+CHAR("fl", 2, "fl", 2, 64258)
+CHAR("Fi", 2, "ffi", 3, 64259)
+CHAR("Fl", 2, "ffl", 3, 64260)
+BOTH("AE", 2, "AE", 2, 198)
+BOTH("ae", 2, "ae", 2, 230)
+CHAR("OE", 2, "OE", 2, 338)
+CHAR("oe", 2, "oe", 2, 339)
+CHAR("ss", 2, "ss", 2, 223)
+CHAR("IJ", 2, "IJ", 2, 306)
+CHAR("ij", 2, "ij", 2, 307)
/* Special letters. */
-CHAR("-D", 2, "D", 1, "&#208;", 6)
-CHAR("Sd", 2, "o", 1, "&#240;", 6)
-CHAR("TP", 2, "b", 1, "&#222;", 6)
-CHAR("Tp", 2, "b", 1, "&#254;", 6)
-CHAR(".i", 2, "i", 1, "&#305;", 6)
-CHAR(".j", 2, "j", 1, "&#567;", 6)
+CHAR("-D", 2, "D", 1, 208)
+CHAR("Sd", 2, "o", 1, 240)
+CHAR("TP", 2, "b", 1, 222)
+CHAR("Tp", 2, "b", 1, 254)
+CHAR(".i", 2, "i", 1, 305)
+CHAR(".j", 2, "j", 1, 567)
/* Currency. */
-CHAR("Do", 2, "$", 1, "$", 1)
-CHAR("ct", 2, "c", 1, "&#162;", 6)
-CHAR("Eu", 2, "EUR", 3, "&#8364;", 7)
-CHAR("eu", 2, "EUR", 3, "&#8364;", 7)
-CHAR("Ye", 2, "Y", 1, "&#165;", 6)
-CHAR("Po", 2, "L", 1, "&#163;", 6)
-CHAR("Cs", 2, "x", 1, "&#164;", 6)
-CHAR("Fn", 2, "f", 1, "&#402;", 6)
+CHAR("Do", 2, "$", 1, 36)
+CHAR("ct", 2, "c", 1, 162)
+CHAR("Eu", 2, "EUR", 3, 8364)
+CHAR("eu", 2, "EUR", 3, 8364)
+CHAR("Ye", 2, "Y", 1, 165)
+CHAR("Po", 2, "L", 1, 163)
+CHAR("Cs", 2, "x", 1, 164)
+CHAR("Fn", 2, "f", 1, 402)
/* pod2man holdovers. */
-STRING("--", 2, "--", 2, "&#8212;", 7)
-STRING("PI", 2, "pi", 2, "&#960;", 6)
-STRING("L\"", 2, "``", 2, "&#8220;", 7)
-STRING("R\"", 2, "\'\'", 2, "&#8221;", 7)
-STRING("C+", 2, "C++", 3, "C++", 3)
-STRING("C`", 2, "`", 1, "&#8216;", 7)
-STRING("C\'", 2, "\'", 1, "&#8217;", 7)
-STRING("Aq", 2, "\'", 1, "\'", 1)
-STRING("^", 1, "^", 1, "^", 1)
-STRING(",", 1, ",", 1, ",", 1)
-STRING("~", 1, "~", 1, "~", 1)
-STRING("/", 1, "/", 1, "/", 1)
-STRING(":", 1, "\"", 1, "&#776;", 6)
-STRING("8", 1, "B", 1, "&#946;", 6)
-STRING("o", 1, "o", 1, "&#176;", 6)
-STRING("D-", 2, "D", 1, "&#208;", 6)
-STRING("d-", 2, "o", 1, "&#240;", 6)
-STRING("Th", 2, "b", 1, "&#222;", 6)
-STRING("th", 2, "b", 1, "&#254;", 6)
+STRING("--", 2, "--", 2, 8212)
+STRING("PI", 2, "pi", 2, 960)
+STRING("L\"", 2, "``", 2, 8220)
+STRING("R\"", 2, "\'\'", 2, 8221)
+STRING("C+", 2, "C++", 3, 0)
+STRING("C`", 2, "`", 1, 8216)
+STRING("C\'", 2, "\'", 1, 8217)
+STRING("Aq", 2, "\'", 1, 39)
+STRING("^", 1, "^", 1, 94)
+STRING(",", 1, ",", 1, 44)
+STRING("~", 1, "~", 1, 126)
+STRING("/", 1, "/", 1, 47)
+STRING(":", 1, "\"", 1, 776)
+STRING("8", 1, "B", 1, 946)
+STRING("o", 1, "o", 1, 176)
+STRING("D-", 2, "D", 1, 208)
+STRING("d-", 2, "o", 1, 240)
+STRING("Th", 2, "b", 1, 222)
+STRING("th", 2, "b", 1, 254)
/* Old style. */
-STRING("Am", 2, "&", 1, "&amp;", 5)
-STRING("Ba", 2, "|", 1, "|", 1)
-STRING("Ge", 2, ">=", 2, "&#8805;", 7)
-STRING("Gt", 2, ">", 1, "&gt;", 4)
-STRING("If", 2, "infinity", 8, "infinity", 8)
-STRING("Le", 2, "<=", 2, "&#8804;", 7)
-STRING("Lq", 2, "``", 2, "&#8220;", 7)
-STRING("Lt", 2, "<", 1, "&lt;", 4)
-STRING("Na", 2, "NaN", 3, "NaN", 3)
-STRING("Ne", 2, "!=", 2, "&#8800;", 7)
-STRING("Pi", 2, "pi", 2, "&#960;", 6)
-STRING("Pm", 2, "+-", 2, "&#177;", 6)
-STRING("R", 1, "(R)", 3, "&#174;", 6)
-STRING("Rq", 2, "\'\'", 2, "&#8221;", 7)
-STRING("Tm", 2, "tm", 2, "&#8482;", 7)
-STRING("left-bracket", 12, "[", 1, "[", 1)
-STRING("left-parenthesis", 16, "(", 1, "(", 1)
-STRING("left-singlequote", 16, "`", 1, "&#8216;", 7)
-STRING("lp", 2, "(", 1, "(", 1)
-STRING("q", 1, "\"", 1, "&quot;", 6)
-STRING("quote-left", 10, "`", 1, "&#8216;", 7)
-STRING("quote-right", 11, "\'", 1, "&#8217;", 7)
-STRING("right-bracket", 13, "]", 1, "]", 1)
-STRING("right-parenthesis", 17, ")", 1, ")", 1)
-STRING("right-singlequote", 17, "\'", 1, "&#8217;", 7)
-STRING("rp", 2, ")", 1, ")", 1)
+STRING("Am", 2, "&", 1, 38)
+STRING("Ba", 2, "|", 1, 124)
+STRING("Ge", 2, ">=", 2, 8805)
+STRING("Gt", 2, ">", 1, 62)
+STRING("If", 2, "infinity", 8, 0)
+STRING("Le", 2, "<=", 2, 8804)
+STRING("Lq", 2, "``", 2, 8220)
+STRING("Lt", 2, "<", 1, 60)
+STRING("Na", 2, "NaN", 3, 0)
+STRING("Ne", 2, "!=", 2, 8800)
+STRING("Pi", 2, "pi", 2, 960)
+STRING("Pm", 2, "+-", 2, 177)
+STRING("R", 1, "(R)", 3, 174)
+STRING("Rq", 2, "\'\'", 2, 8221)
+STRING("Tm", 2, "tm", 2, 8482)
+STRING("left-bracket", 12, "[", 1, 91)
+STRING("left-parenthesis", 16, "(", 1, 40)
+STRING("left-singlequote", 16, "`", 1, 8216)
+STRING("lp", 2, "(", 1, 40)
+STRING("q", 1, "\"", 1, 34)
+STRING("quote-left", 10, "`", 1, 8216)
+STRING("quote-right", 11, "\'", 1, 8217)
+STRING("right-bracket", 13, "]", 1, 93)
+STRING("right-parenthesis", 17, ")", 1, 41)
+STRING("right-singlequote", 17, "\'", 1, 8217)
+STRING("rp", 2, ")", 1, 41)
/* Lines. */
-CHAR("ba", 2, "|", 1, "&#124;", 6)
-CHAR("br", 2, "|", 1, "&#9474;", 7)
-CHAR("ul", 2, "_", 1, "&#95;", 5)
-CHAR("rl", 2, "-", 1, "&#8254;", 7)
-CHAR("bb", 2, "|", 1, "&#166;", 6)
-CHAR("sl", 2, "/", 1, "&#47;", 5)
-CHAR("rs", 2, "\\", 1, "&#92;", 5)
+CHAR("ba", 2, "|", 1, 124)
+CHAR("br", 2, "|", 1, 9474)
+CHAR("ul", 2, "_", 1, 95)
+CHAR("rl", 2, "-", 1, 8254)
+CHAR("bb", 2, "|", 1, 166)
+CHAR("sl", 2, "/", 1, 47)
+CHAR("rs", 2, "\\", 1, 92)
/* Text markers. */
-CHAR("ci", 2, "o", 1, "&#9675;", 7)
-CHAR("bu", 2, "o", 1, "&#8226;", 7)
-CHAR("dd", 2, "=", 1, "&#8225;", 7)
-CHAR("dg", 2, "-", 1, "&#8224;", 7)
-CHAR("lz", 2, "<>", 2, "&#9674;", 7)
-CHAR("sq", 2, "[]", 2, "&#9633;", 7)
-CHAR("ps", 2, "9|", 2, "&#182;", 6)
-CHAR("sc", 2, "S", 1, "&#167;", 6)
-CHAR("lh", 2, "<=", 2, "&#9756;", 7)
-CHAR("rh", 2, "=>", 2, "&#9758;", 7)
-CHAR("at", 2, "@", 1, "&#64;", 5)
-CHAR("sh", 2, "#", 1, "&#35;", 5)
-CHAR("CR", 2, "_|", 2, "&#8629;", 7)
-CHAR("OK", 2, "\\/", 2, "&#10003;", 8)
+CHAR("ci", 2, "o", 1, 9675)
+CHAR("bu", 2, "o", 1, 8226)
+CHAR("dd", 2, "=", 1, 8225)
+CHAR("dg", 2, "-", 1, 8224)
+CHAR("lz", 2, "<>", 2, 9674)
+CHAR("sq", 2, "[]", 2, 9633)
+CHAR("ps", 2, "9|", 2, 182)
+CHAR("sc", 2, "S", 1, 167)
+CHAR("lh", 2, "<=", 2, 9756)
+CHAR("rh", 2, "=>", 2, 9758)
+CHAR("at", 2, "@", 1, 64)
+CHAR("sh", 2, "#", 1, 35)
+CHAR("CR", 2, "_|", 2, 8629)
+CHAR("OK", 2, "\\/", 2, 10003)
/* Legal symbols. */
-CHAR("co", 2, "(C)", 3, "&#169;", 6)
-CHAR("rg", 2, "(R)", 3, "&#174;", 6)
-CHAR("tm", 2, "tm", 2, "&#8482;", 7)
+CHAR("co", 2, "(C)", 3, 169)
+CHAR("rg", 2, "(R)", 3, 174)
+CHAR("tm", 2, "tm", 2, 8482)
/* Punctuation. */
-CHAR(".", 1, ".", 1, ".", 1)
-CHAR("r!", 2, "i", 1, "&#161;", 6)
-CHAR("r?", 2, "c", 1, "&#191;", 6)
-CHAR("em", 2, "--", 2, "&#8212;", 7)
-CHAR("en", 2, "-", 1, "&#8211;", 7)
-CHAR("hy", 2, "-", 1, "&#8208;", 7)
-CHAR("e", 1, "\\", 1, "\\", 1)
+CHAR(".", 1, ".", 1, 46)
+CHAR("r!", 2, "i", 1, 161)
+CHAR("r?", 2, "c", 1, 191)
+CHAR("em", 2, "--", 2, 8212)
+CHAR("en", 2, "-", 1, 8211)
+CHAR("hy", 2, "-", 1, 8208)
+CHAR("e", 1, "\\", 1, 92)
/* Units. */
-CHAR("de", 2, "o", 1, "&#176;", 6)
-CHAR("%0", 2, "%o", 2, "&#8240;", 7)
-CHAR("fm", 2, "\'", 1, "&#8242;", 7)
-CHAR("sd", 2, "\"", 1, "&#8243;", 7)
-CHAR("mc", 2, "mu", 2, "&#181;", 6)
+CHAR("de", 2, "o", 1, 176)
+CHAR("%0", 2, "%o", 2, 8240)
+CHAR("fm", 2, "\'", 1, 8242)
+CHAR("sd", 2, "\"", 1, 8243)
+CHAR("mc", 2, "mu", 2, 181)
CHAR_TBL_END
diff --git a/html.c b/html.c
index a97a62ed..13b9f516 100644
--- a/html.c
+++ b/html.c
@@ -217,28 +217,36 @@ print_gen_head(struct html *h)
static void
print_spec(struct html *h, const char *p, size_t len)
{
+ int cp;
const char *rhs;
size_t sz;
- rhs = chars_a2ascii(h->symtab, p, len, &sz);
-
- if (NULL == rhs)
+ if ((cp = chars_spec2cp(h->symtab, p, len)) > 0) {
+ printf("&#%d;", cp);
+ return;
+ } else if (-1 == cp)
return;
- fwrite(rhs, 1, sz, stdout);
+
+ if (NULL != (rhs = chars_spec2str(h->symtab, p, len, &sz)))
+ fwrite(rhs, 1, sz, stdout);
}
static void
print_res(struct html *h, const char *p, size_t len)
{
+ int cp;
const char *rhs;
size_t sz;
- rhs = chars_a2res(h->symtab, p, len, &sz);
-
- if (NULL == rhs)
+ if ((cp = chars_res2cp(h->symtab, p, len)) > 0) {
+ printf("&#%d;", cp);
+ return;
+ } else if (-1 == cp)
return;
- fwrite(rhs, 1, sz, stdout);
+
+ if (NULL != (rhs = chars_res2str(h->symtab, p, len, &sz)))
+ fwrite(rhs, 1, sz, stdout);
}
diff --git a/term.c b/term.c
index 03302779..8788953b 100644
--- a/term.c
+++ b/term.c
@@ -365,7 +365,7 @@ spec(struct termp *p, const char *word, size_t len)
const char *rhs;
size_t sz;
- rhs = chars_a2ascii(p->symtab, word, len, &sz);
+ rhs = chars_spec2str(p->symtab, word, len, &sz);
if (rhs)
encode(p, rhs, sz);
}
@@ -377,7 +377,7 @@ res(struct termp *p, const char *word, size_t len)
const char *rhs;
size_t sz;
- rhs = chars_a2res(p->symtab, word, len, &sz);
+ rhs = chars_res2str(p->symtab, word, len, &sz);
if (rhs)
encode(p, rhs, sz);
}