67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
/* $Id: entity.c,v 1.7 2003/09/24 18:48:59 ukai Exp $ */
|
|
#ifdef DUMMY
|
|
#include "Str.h"
|
|
#define NBSP " "
|
|
#define UseAltEntity 1
|
|
#undef USE_M17N
|
|
#else /* DUMMY */
|
|
#include "fm.h"
|
|
#ifdef USE_M17N
|
|
#ifdef USE_UNICODE
|
|
#include "ucs.h"
|
|
#include "utf8.h"
|
|
#endif
|
|
#endif
|
|
#endif /* DUMMY */
|
|
|
|
/* *INDENT-OFF* */
|
|
static char *alt_latin1[ 96 ] = {
|
|
NBSP, "!", "-c-", "-L-", "CUR", "=Y=", "|", "S:",
|
|
"\"", "(C)", "-a", "<<", "NOT", "-", "(R)", "-",
|
|
"DEG", "+-", "^2", "^3", "'", "u", "P:", ".",
|
|
",", "^1", "-o", ">>", "1/4", "1/2", "3/4", "?",
|
|
"A`", "A'", "A^", "A~", "A:", "AA", "AE", "C,",
|
|
"E`", "E'", "E^", "E:", "I`", "I'", "I^", "I:",
|
|
"D-", "N~", "O`", "O'", "O^", "O~", "O:", "x",
|
|
"O/", "U`", "U'", "U^", "U:", "Y'", "TH", "ss",
|
|
"a`", "a'", "a^", "a~", "a:", "aa", "ae", "c,",
|
|
"e`", "e'", "e^", "e:", "i`", "i'", "i^", "i:",
|
|
"d-", "n~", "o`", "o'", "o^", "o~", "o:", "-:",
|
|
"o/", "u`", "u'", "u^", "u:", "y'", "th", "y:"
|
|
};
|
|
/* *INDENT-ON* */
|
|
|
|
char *
|
|
conv_entity(unsigned int c)
|
|
{
|
|
char b = c & 0xff;
|
|
|
|
if (c < 0x20) /* C0 */
|
|
return " ";
|
|
if (c < 0x7f) /* ASCII */
|
|
return Strnew_charp_n(&b, 1)->ptr;
|
|
if (c < 0xa0) /* DEL, C1 */
|
|
return " ";
|
|
if (c == 0xa0)
|
|
return NBSP;
|
|
if (c < 0x100) { /* Latin1 (ISO 8859-1) */
|
|
if (UseAltEntity)
|
|
return alt_latin1[c - 0xa0];
|
|
#ifdef USE_M17N
|
|
return wc_conv_n(&b, 1, WC_CES_ISO_8859_1, InnerCharset)->ptr;
|
|
#else
|
|
return Strnew_charp_n(&b, 1)->ptr;
|
|
#endif
|
|
}
|
|
#ifdef USE_M17N
|
|
#ifdef USE_UNICODE
|
|
if (c <= WC_C_UCS4_END) { /* Unicode */
|
|
wc_uchar utf8[7];
|
|
wc_ucs_to_utf8(c, utf8);
|
|
return wc_conv((char *)utf8, WC_CES_UTF_8, InnerCharset)->ptr;
|
|
}
|
|
#endif
|
|
#endif
|
|
return "?";
|
|
}
|