diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-07-16 22:33:30 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-07-16 22:33:30 +0000 |
commit | 0b50b90cf4efcd1646b2517a4777605ab2e844df (patch) | |
tree | 9a4b11349f5dc2acdd4280d4f9425d7b766be9a7 | |
parent | 4d45f12df9f220592a0c1b2eabe51d82cdc74daa (diff) | |
download | mandoc-0b50b90cf4efcd1646b2517a4777605ab2e844df.tar.gz |
Change chars.in HTML encoding to be a Unicode codepoint (int), which is
later formatted in html.c.
-rw-r--r-- | TODO | 6 | ||||
-rw-r--r-- | chars.c | 87 | ||||
-rw-r--r-- | chars.h | 6 | ||||
-rw-r--r-- | chars.in | 740 | ||||
-rw-r--r-- | html.c | 24 | ||||
-rw-r--r-- | term.c | 4 |
6 files changed, 461 insertions, 406 deletions
@@ -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 ************************************************************************ - @@ -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); @@ -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 @@ -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, " ", 7) -CHAR(" ", 1, " ", 1, " ", 7) -CHAR("~", 1, ascii_nbrsp, 1, " ", 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, "̋", 6) -CHAR("a-", 2, "-", 1, "¯", 6) -CHAR("a.", 2, ".", 1, "˙", 6) -CHAR("a^", 2, "^", 1, "̂", 6) -BOTH("\'", 1, "\'", 1, "́", 6) -BOTH("aa", 2, "\'", 1, "́", 6) -BOTH("ga", 2, "`", 1, "̀", 6) -BOTH("`", 1, "`", 1, "̀", 6) -CHAR("ab", 2, "`", 1, "̆", 6) -CHAR("ac", 2, ",", 1, "̧", 6) -CHAR("ad", 2, "\"", 1, "̈", 6) -CHAR("ah", 2, "v", 1, "ˇ", 6) -CHAR("ao", 2, "o", 1, "˚", 6) -CHAR("a~", 2, "~", 1, "̃", 6) -CHAR("ho", 2, ",", 1, "̨", 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, "„", 7) -CHAR("bq", 2, ",", 1, "‚", 7) -BOTH("lq", 2, "``", 2, "“", 7) -BOTH("rq", 2, "\'\'", 2, "”", 7) -CHAR("oq", 2, "`", 1, "‘", 7) -CHAR("cq", 2, "\'", 1, "’", 7) -CHAR("aq", 2, "\'", 1, "\'", 1) -CHAR("dq", 2, "\"", 1, "\"", 1) -CHAR("Fo", 2, "<<", 2, "«", 6) -CHAR("Fc", 2, ">>", 2, "»", 6) -CHAR("fo", 2, "<", 1, "‹", 7) -CHAR("fc", 2, ">", 1, "›", 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, "⟨", 8) -CHAR("ra", 2, ">", 1, "⟩", 8) -CHAR("bv", 2, "|", 1, "⎪", 7) -CHAR("braceex", 7, "|", 1, "⎪", 7) -CHAR("bracketlefttp", 13, "|", 1, "⎡", 7) -CHAR("bracketleftbp", 13, "|", 1, "⎣", 7) -CHAR("bracketleftex", 13, "|", 1, "⎢", 7) -CHAR("bracketrighttp", 14, "|", 1, "⎤", 7) -CHAR("bracketrightbp", 14, "|", 1, "⎦", 7) -CHAR("bracketrightex", 14, "|", 1, "⎥", 7) -CHAR("lt", 2, ",-", 2, "⎧", 7) -CHAR("bracelefttp", 11, ",-", 2, "⎧", 7) -CHAR("lk", 2, "{", 1, "⎨", 7) -CHAR("braceleftmid", 12, "{", 1, "⎨", 7) -CHAR("lb", 2, ",-", 2, "⎩", 7) -CHAR("braceleftbp", 11, "`-", 2, "⎩", 7) -CHAR("braceleftex", 11, "|", 1, "⎪", 7) -CHAR("rt", 2, "-.", 2, "⎫", 7) -CHAR("bracerighttp", 12, "-.", 2, "⎫", 7) -CHAR("rk", 2, "}", 1, "⎬", 7) -CHAR("bracerightmid", 13, "}", 1, "⎬", 7) -CHAR("rb", 2, "-\'", 2, "⎭", 7) -CHAR("bracerightbp", 12, "-\'", 2, "⎭", 7) -CHAR("bracerightex", 12, "|", 1, "⎪", 7) -CHAR("parenlefttp", 11, "/", 1, "⎛", 7) -CHAR("parenleftbp", 11, "\\", 1, "⎝", 7) -CHAR("parenleftex", 11, "|", 1, "⎜", 7) -CHAR("parenrighttp", 12, "\\", 1, "⎞", 7) -CHAR("parenrightbp", 12, "/", 1, "⎠", 7) -CHAR("parenrightex", 12, "|", 1, "⎟", 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, "Α", 6) -CHAR("*B", 2, "B", 1, "Β", 6) -CHAR("*G", 2, "|", 1, "Γ", 6) -CHAR("*D", 2, "/\\", 2, "Δ", 6) -CHAR("*E", 2, "E", 1, "Ε", 6) -CHAR("*Z", 2, "Z", 1, "Ζ", 6) -CHAR("*Y", 2, "H", 1, "Η", 6) -CHAR("*H", 2, "O", 1, "Θ", 6) -CHAR("*I", 2, "I", 1, "Ι", 6) -CHAR("*K", 2, "K", 1, "Κ", 6) -CHAR("*L", 2, "/\\", 2, "Λ", 6) -CHAR("*M", 2, "M", 1, "Μ", 6) -CHAR("*N", 2, "N", 1, "Ν", 6) -CHAR("*C", 2, "H", 1, "Ξ", 6) -CHAR("*O", 2, "O", 1, "Ο", 6) -CHAR("*P", 2, "TT", 2, "Π", 6) -CHAR("*R", 2, "P", 1, "Ρ", 6) -CHAR("*S", 2, ">", 1, "Σ", 6) -CHAR("*T", 2, "T", 1, "Τ", 6) -CHAR("*U", 2, "Y", 1, "Υ", 6) -CHAR("*F", 2, "O_", 1, "Φ", 6) -CHAR("*X", 2, "X", 1, "Χ", 6) -CHAR("*Q", 2, "Y", 1, "Ψ", 6) -CHAR("*W", 2, "O", 1, "Ω", 6) -CHAR("*a", 2, "a", 1, "α", 6) -CHAR("*b", 2, "B", 1, "β", 6) -CHAR("*g", 2, "y", 1, "γ", 6) -CHAR("*d", 2, "d", 1, "δ", 6) -CHAR("*e", 2, "e", 1, "ε", 6) -CHAR("*z", 2, "C", 1, "ζ", 6) -CHAR("*y", 2, "n", 1, "η", 6) -CHAR("*h", 2, "0", 1, "θ", 6) -CHAR("*i", 2, "i", 1, "ι", 6) -CHAR("*k", 2, "k", 1, "κ", 6) -CHAR("*l", 2, "\\", 1, "λ", 6) -CHAR("*m", 2, "u", 1, "μ", 6) -CHAR("*n", 2, "v", 1, "ν", 6) -CHAR("*c", 2, "E", 1, "ξ", 6) -CHAR("*o", 2, "o", 1, "ο", 6) -CHAR("*p", 2, "n", 1, "π", 6) -CHAR("*r", 2, "p", 1, "ρ", 6) -CHAR("*s", 2, "o", 1, "σ", 6) -CHAR("*t", 2, "t", 1, "τ", 6) -CHAR("*u", 2, "u", 1, "υ", 6) -CHAR("*f", 2, "o", 1, "ϕ", 6) -CHAR("*x", 2, "x", 1, "χ", 6) -CHAR("*q", 2, "u", 1, "ψ", 6) -CHAR("*w", 2, "w", 1, "ω", 6) -CHAR("+h", 2, "0", 1, "ϑ", 6) -CHAR("+f", 2, "o", 1, "φ", 6) -CHAR("+p", 2, "w", 1, "ϖ", 6) -CHAR("+e", 2, "e", 1, "ϵ", 7) -CHAR("ts", 2, "s", 1, "ς", 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, "Ç", 6) -CHAR(",c", 2, "c", 1, "ç", 6) -CHAR("/L", 2, "L", 1, "Ł", 6) -CHAR("/O", 2, "O", 1, "Ø", 6) -CHAR("/l", 2, "l", 1, "ł", 6) -CHAR("/o", 2, "o", 1, "ø", 6) -CHAR("oA", 2, "A", 1, "Å", 6) -CHAR("oa", 2, "a", 1, "å", 6) -CHAR(":A", 2, "A", 1, "Ä", 6) -CHAR(":E", 2, "E", 1, "Ë", 6) -CHAR(":I", 2, "I", 1, "Ï", 6) -CHAR(":O", 2, "O", 1, "Ö", 6) -CHAR(":U", 2, "U", 1, "Ü", 6) -CHAR(":a", 2, "a", 1, "ä", 6) -CHAR(":e", 2, "e", 1, "ë", 6) -CHAR(":i", 2, "i", 1, "ï", 6) -CHAR(":o", 2, "o", 1, "õ", 6) -CHAR(":u", 2, "u", 1, "ü", 6) -CHAR(":y", 2, "y", 1, "ÿ", 6) -CHAR("\'A", 2, "A", 1, "Á", 6) -CHAR("\'E", 2, "E", 1, "É", 6) -CHAR("\'I", 2, "I", 1, "Í", 6) -CHAR("\'O", 2, "O", 1, "Ó", 6) -CHAR("\'U", 2, "U", 1, "Ú", 6) -CHAR("\'a", 2, "a", 1, "á", 6) -CHAR("\'e", 2, "e", 1, "é", 6) -CHAR("\'i", 2, "i", 1, "í", 6) -CHAR("\'o", 2, "o", 1, "ó", 6) -CHAR("\'u", 2, "u", 1, "ú", 6) -CHAR("^A", 2, "A", 1, "Â", 6) -CHAR("^E", 2, "E", 1, "Ê", 6) -CHAR("^I", 2, "I", 1, "Î", 6) -CHAR("^O", 2, "O", 1, "Ô", 6) -CHAR("^U", 2, "U", 1, "Û", 6) -CHAR("^a", 2, "a", 1, "â", 6) -CHAR("^e", 2, "e", 1, "ê", 6) -CHAR("^i", 2, "i", 1, "î", 6) -CHAR("^o", 2, "o", 1, "ô", 6) -CHAR("^u", 2, "u", 1, "û", 6) -CHAR("`A", 2, "A", 1, "À", 6) -CHAR("`E", 2, "E", 1, "È", 6) -CHAR("`I", 2, "I", 1, "Ì", 6) -CHAR("`O", 2, "O", 1, "Ò", 6) -CHAR("`U", 2, "U", 1, "Ù", 6) -CHAR("`a", 2, "a", 1, "à", 6) -CHAR("`e", 2, "e", 1, "è", 6) -CHAR("`i", 2, "i", 1, "ì", 6) -CHAR("`o", 2, "o", 1, "ò", 6) -CHAR("`u", 2, "u", 1, "ù", 6) -CHAR("~A", 2, "A", 1, "Ã", 6) -CHAR("~N", 2, "N", 1, "Ñ", 6) -CHAR("~O", 2, "O", 1, "Õ", 6) -CHAR("~a", 2, "a", 1, "ã", 6) -CHAR("~n", 2, "n", 1, "ñ", 6) -CHAR("~o", 2, "o", 1, "õ", 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, "←", 7) -CHAR("->", 2, "->", 2, "→", 7) -CHAR("<>", 2, "<>", 2, "↔", 7) -CHAR("da", 2, "v", 1, "↓", 7) -BOTH("ua", 2, "^", 1, "↑", 7) -BOTH("va", 2, "^v", 2, "↕", 7) -CHAR("lA", 2, "<=", 2, "⇐", 7) -CHAR("rA", 2, "=>", 2, "⇒", 7) -CHAR("hA", 2, "<=>", 3, "⇔", 7) -CHAR("dA", 2, "v", 1, "⇓", 7) -CHAR("uA", 2, "^", 1, "⇑", 7) -CHAR("vA", 2, "^=v", 3, "⇕", 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, "∧", 7) -CHAR("OR", 2, "v", 1, "∨", 7) -CHAR("no", 2, "~", 1, "¬", 6) -CHAR("tno", 3, "~", 1, "¬", 6) -CHAR("te", 2, "3", 1, "∃", 7) -CHAR("fa", 2, "V", 1, "∀", 7) -CHAR("st", 2, "-)", 2, "∋", 7) -CHAR("tf", 2, ".:.", 3, "∴", 7) -CHAR("3d", 2, ".:.", 3, "∴", 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, "+", 5) -CHAR("mi", 2, "-", 1, "−", 7) -CHAR("-", 1, "-", 1, "-", 1) -CHAR("-+", 2, "-+", 2, "∓", 7) -CHAR("+-", 2, "+-", 2, "±", 6) -CHAR("t+-", 3, "+-", 2, "±", 6) -CHAR("pc", 2, ".", 1, "·", 6) -CHAR("md", 2, ".", 1, "⋅", 7) -CHAR("mu", 2, "x", 1, "×", 6) -CHAR("tmu", 3, "x", 1, "×", 6) -CHAR("c*", 2, "x", 1, "⊗", 7) -CHAR("c+", 2, "+", 1, "⊕", 7) -CHAR("di", 2, "-:-", 3, "÷", 6) -CHAR("tdi", 3, "-:-", 3, "÷", 6) -CHAR("f/", 2, "/", 1, "⁄", 7) -CHAR("**", 2, "*", 1, "∗", 7) -BOTH("<=", 2, "<=", 2, "≤", 7) -BOTH(">=", 2, ">=", 2, "≥", 7) -CHAR("<<", 2, "<<", 2, "≪", 7) -CHAR(">>", 2, ">>", 2, "≫", 7) -CHAR("eq", 2, "=", 1, "=", 5) -CHAR("!=", 2, "!=", 2, "≠", 7) -CHAR("==", 2, "==", 2, "≡", 7) -CHAR("ne", 2, "!==", 3, "≢", 7) -CHAR("=~", 2, "=~", 2, "≅", 7) -CHAR("-~", 2, "-~", 2, "≃", 7) -CHAR("ap", 2, "~", 1, "∼", 7) -CHAR("~~", 2, "~~", 2, "≈", 7) -CHAR("~=", 2, "~=", 2, "≌", 7) -CHAR("pt", 2, "oc", 2, "∝", 7) -CHAR("es", 2, "{}", 2, "∅", 7) -CHAR("mo", 2, "E", 1, "∈", 7) -CHAR("nm", 2, "!E", 2, "∉", 7) -CHAR("sb", 2, "(=", 2, "⊂", 7) -CHAR("nb", 2, "(!=", 3, "⊄", 7) -CHAR("sp", 2, "=)", 2, "⊃", 7) -CHAR("nc", 2, "!=)", 3, "⊅", 7) -CHAR("ib", 2, "(=", 2, "⊆", 7) -CHAR("ip", 2, "=)", 2, "⊇", 7) -CHAR("ca", 2, "(^)", 3, "∩", 7) -CHAR("cu", 2, "U", 1, "∪", 7) -CHAR("/_", 2, "/_", 2, "∠", 7) -CHAR("pp", 2, "_|_", 3, "⊥", 7) -CHAR("is", 2, "I", 1, "∫", 7) -CHAR("integral", 8, "I", 1, "∫", 7) -CHAR("sum", 3, "E", 1, "∑", 7) -CHAR("product", 7, "TT", 2, "∏", 7) -CHAR("coproduct", 9, "U", 1, "∐", 7) -CHAR("gr", 2, "V", 1, "∇", 7) -CHAR("sr", 2, "\\/", 2, "√", 7) -CHAR("sqrt", 4, "\\/", 2, "√", 7) -CHAR("lc", 2, "|~", 2, "⌈", 7) -CHAR("rc", 2, "~|", 2, "⌉", 7) -CHAR("lf", 2, "|_", 2, "⌊", 7) -CHAR("rf", 2, "_|", 2, "⌋", 7) -CHAR("if", 2, "oo", 2, "∞", 7) -CHAR("Ah", 2, "N", 1, "ℵ", 7) -CHAR("Im", 2, "I", 1, "ℑ", 7) -CHAR("Re", 2, "R", 1, "ℜ", 7) -CHAR("pd", 2, "a", 1, "∂", 7) -CHAR("-h", 2, "/h", 2, "ℏ", 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, "ff", 8) -CHAR("fi", 2, "fi", 2, "fi", 8) -CHAR("fl", 2, "fl", 2, "fl", 8) -CHAR("Fi", 2, "ffi", 3, "ffi", 8) -CHAR("Fl", 2, "ffl", 3, "ffl", 8) -BOTH("AE", 2, "AE", 2, "Æ", 6) -BOTH("ae", 2, "ae", 2, "æ", 6) -CHAR("OE", 2, "OE", 2, "Œ", 6) -CHAR("oe", 2, "oe", 2, "œ", 6) -CHAR("ss", 2, "ss", 2, "ß", 6) -CHAR("IJ", 2, "IJ", 2, "IJ", 6) -CHAR("ij", 2, "ij", 2, "ij", 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, "Ð", 6) -CHAR("Sd", 2, "o", 1, "ð", 6) -CHAR("TP", 2, "b", 1, "Þ", 6) -CHAR("Tp", 2, "b", 1, "þ", 6) -CHAR(".i", 2, "i", 1, "ı", 6) -CHAR(".j", 2, "j", 1, "ȷ", 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, "¢", 6) -CHAR("Eu", 2, "EUR", 3, "€", 7) -CHAR("eu", 2, "EUR", 3, "€", 7) -CHAR("Ye", 2, "Y", 1, "¥", 6) -CHAR("Po", 2, "L", 1, "£", 6) -CHAR("Cs", 2, "x", 1, "¤", 6) -CHAR("Fn", 2, "f", 1, "ƒ", 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, "—", 7) -STRING("PI", 2, "pi", 2, "π", 6) -STRING("L\"", 2, "``", 2, "“", 7) -STRING("R\"", 2, "\'\'", 2, "”", 7) -STRING("C+", 2, "C++", 3, "C++", 3) -STRING("C`", 2, "`", 1, "‘", 7) -STRING("C\'", 2, "\'", 1, "’", 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, "̈", 6) -STRING("8", 1, "B", 1, "β", 6) -STRING("o", 1, "o", 1, "°", 6) -STRING("D-", 2, "D", 1, "Ð", 6) -STRING("d-", 2, "o", 1, "ð", 6) -STRING("Th", 2, "b", 1, "Þ", 6) -STRING("th", 2, "b", 1, "þ", 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, "&", 5) -STRING("Ba", 2, "|", 1, "|", 1) -STRING("Ge", 2, ">=", 2, "≥", 7) -STRING("Gt", 2, ">", 1, ">", 4) -STRING("If", 2, "infinity", 8, "infinity", 8) -STRING("Le", 2, "<=", 2, "≤", 7) -STRING("Lq", 2, "``", 2, "“", 7) -STRING("Lt", 2, "<", 1, "<", 4) -STRING("Na", 2, "NaN", 3, "NaN", 3) -STRING("Ne", 2, "!=", 2, "≠", 7) -STRING("Pi", 2, "pi", 2, "π", 6) -STRING("Pm", 2, "+-", 2, "±", 6) -STRING("R", 1, "(R)", 3, "®", 6) -STRING("Rq", 2, "\'\'", 2, "”", 7) -STRING("Tm", 2, "tm", 2, "™", 7) -STRING("left-bracket", 12, "[", 1, "[", 1) -STRING("left-parenthesis", 16, "(", 1, "(", 1) -STRING("left-singlequote", 16, "`", 1, "‘", 7) -STRING("lp", 2, "(", 1, "(", 1) -STRING("q", 1, "\"", 1, """, 6) -STRING("quote-left", 10, "`", 1, "‘", 7) -STRING("quote-right", 11, "\'", 1, "’", 7) -STRING("right-bracket", 13, "]", 1, "]", 1) -STRING("right-parenthesis", 17, ")", 1, ")", 1) -STRING("right-singlequote", 17, "\'", 1, "’", 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, "|", 6) -CHAR("br", 2, "|", 1, "│", 7) -CHAR("ul", 2, "_", 1, "_", 5) -CHAR("rl", 2, "-", 1, "‾", 7) -CHAR("bb", 2, "|", 1, "¦", 6) -CHAR("sl", 2, "/", 1, "/", 5) -CHAR("rs", 2, "\\", 1, "\", 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, "○", 7) -CHAR("bu", 2, "o", 1, "•", 7) -CHAR("dd", 2, "=", 1, "‡", 7) -CHAR("dg", 2, "-", 1, "†", 7) -CHAR("lz", 2, "<>", 2, "◊", 7) -CHAR("sq", 2, "[]", 2, "□", 7) -CHAR("ps", 2, "9|", 2, "¶", 6) -CHAR("sc", 2, "S", 1, "§", 6) -CHAR("lh", 2, "<=", 2, "☜", 7) -CHAR("rh", 2, "=>", 2, "☞", 7) -CHAR("at", 2, "@", 1, "@", 5) -CHAR("sh", 2, "#", 1, "#", 5) -CHAR("CR", 2, "_|", 2, "↵", 7) -CHAR("OK", 2, "\\/", 2, "✓", 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, "©", 6) -CHAR("rg", 2, "(R)", 3, "®", 6) -CHAR("tm", 2, "tm", 2, "™", 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, "¡", 6) -CHAR("r?", 2, "c", 1, "¿", 6) -CHAR("em", 2, "--", 2, "—", 7) -CHAR("en", 2, "-", 1, "–", 7) -CHAR("hy", 2, "-", 1, "‐", 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, "°", 6) -CHAR("%0", 2, "%o", 2, "‰", 7) -CHAR("fm", 2, "\'", 1, "′", 7) -CHAR("sd", 2, "\"", 1, "″", 7) -CHAR("mc", 2, "mu", 2, "µ", 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 @@ -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); } @@ -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); } |