summaryrefslogtreecommitdiff
path: root/m17n.h
diff options
context:
space:
mode:
Diffstat (limited to 'm17n.h')
-rw-r--r--m17n.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/m17n.h b/m17n.h
new file mode 100644
index 0000000000..d76c5a9125
--- /dev/null
+++ b/m17n.h
@@ -0,0 +1,109 @@
+/**********************************************************************
+
+ m17n.h -
+
+ $Author$
+ $Date$
+ created at: Thu Dec 28 16:19:43 JST 2000
+
+ Copyright (C) 1993-2001 Yukihiro Matsumoto
+
+**********************************************************************/
+
+#ifndef M17N_H
+#define M17N_H
+
+#ifndef _
+#ifdef HAVE_PROTOTYPES
+# define _(args) args
+#else
+# define _(args) ()
+#endif
+#ifdef HAVE_STDARG_PROTOTYPES
+# define __(args) args
+#else
+# define __(args) ()
+#endif
+#endif
+
+void m17n_init _((void));
+
+typedef struct m17n_encoding {
+ const char *name;
+ int index;
+
+ int mbmaxlen;
+
+ int (*strlen) _((const unsigned char *p, const unsigned char *e, const struct m17n_encoding* enc));
+ int (*mbclen) _((int c, const struct m17n_encoding* enc));
+ int (*codelen) _((unsigned int c, const struct m17n_encoding* enc));
+ int (*mbcspan) _((const unsigned char *p, const unsigned char *e, const struct m17n_encoding* enc));
+ int (*islead) _((int c, struct m17n_encoding* enc));
+ unsigned char *(*nth) _((unsigned char *p, const unsigned char *e, int n, const struct m17n_encoding* enc));
+ int (*ctype) _((const unsigned int c, const unsigned int code, const struct m17n_encoding* enc));
+ unsigned int (*toupper) _((unsigned int c, const struct m17n_encoding* enc));
+ unsigned int (*tolower) _((unsigned int c, const struct m17n_encoding* enc));
+ unsigned int (*codepoint) _((const unsigned char *p, const unsigned char *e, const struct m17n_encoding* enc));
+ int (*firstbyte) _((unsigned int c, const struct m17n_encoding* enc));
+ void (*mbcput) _((unsigned int c, unsigned char *p, const struct m17n_encoding* enc));
+} m17n_encoding;
+
+extern m17n_encoding **m17n_encoding_table;
+
+m17n_encoding *m17n_define_encoding _((const char *name));
+
+#define m17n_encoding_to_index(enc) (enc)->index
+#define m17n_index_to_encoding(index) m17n_encoding_table[index]
+m17n_encoding *m17n_find_encoding _((const char *name));
+
+#define m17n_encoding_mbmaxlen(enc,n) (enc)->mbmaxlen = (n)
+#define m17n_encoding_func_strlen(enc,func) (enc)->strlen = (func)
+#define m17n_encoding_func_mbclen(enc,func) (enc)->mbclen = (func)
+#define m17n_encoding_func_codelen(enc,func) (enc)->codelen = (func)
+#define m17n_encoding_func_mbcspan(enc,func) (enc)->mbcspan = (func)
+#define m17n_encoding_func_islead(enc,func) (enc)->islead = (func)
+#define m17n_encoding_func_nth(enc,func) (enc)->nth = (func)
+#define m17n_encoding_func_ctype(enc,func) (enc)->ctype = (func)
+#define m17n_encoding_func_toupper(enc,func) (enc)->toupper = (func)
+#define m17n_encoding_func_tolower(enc,func) (enc)->tolower = (func)
+#define m17n_encoding_func_codepoint(enc,func) (enc)->codepoint = (func)
+#define m17n_encoding_func_firstbyte(enc,func) (enc)->firstbyte = (func)
+#define m17n_encoding_func_mbcput(enc,func) (enc)->mbcput = (func)
+
+#define m17n_mbmaxlen(enc) (enc)->mbmaxlen
+#define m17n_strlen(enc,p,e) (*(enc)->strlen)((p),(e),(enc))
+#define m17n_mbclen(enc,c) (*(enc)->mbclen)((c)&0xff,(enc))
+#define m17n_codelen(enc,c) (*(enc)->codelen)((c),(enc))
+#define m17n_mbcspan(enc,p,e) (*(enc)->mbcspan)((p),(e),(enc))
+#define m17n_islead(enc,c) (*(enc)->islead)((c)&0xff,(enc))
+#define m17n_nth(enc,p,e,n) (*(enc)->nth)((p),(e),(n),(enc))
+#define m17n_codepoint(enc,p,e) (*(enc)->codepoint)((p),(e),(enc))
+#define m17n_firstbyte(enc,c) (*(enc)->firstbyte)((c),(enc))
+#define m17n_mbcput(enc,c,p) (*(enc)->mbcput)((c),(p),(enc))
+
+#define M17N_U 01 /* Upper case */
+#define M17N_L 02 /* Lower case */
+#define M17N_N 04 /* Numeral (digit) */
+#define M17N_S 010 /* Spacing character */
+#define M17N_P 020 /* Punctuation */
+#define M17N_C 040 /* Control character */
+#define M17N_B 0100 /* Blank */
+#define M17N_X 0200 /* heXadecimal digit */
+
+#define m17n_isprint(enc,c) (*(enc)->ctype)((c),(M17N_P|M17N_U|M17N_L|M17N_N|M17N_B),(enc))
+#define m17n_isspace(enc,c) (*(enc)->ctype)((c),(M17N_S),(enc))
+#define m17n_isblank(enc,c) (*(enc)->ctype)((c),(M17N_B),(enc))
+#define m17n_ispunct(enc,c) (*(enc)->ctype)((c),(M17N_P),(enc))
+#define m17n_isupper(enc,c) (*(enc)->ctype)((c),(M17N_U),(enc))
+#define m17n_islower(enc,c) (*(enc)->ctype)((c),(M17N_L),(enc))
+#define m17n_isalnum(enc,c) (*(enc)->ctype)((c),(M17N_U|M17N_L|M17N_N),(enc))
+#define m17n_isalpha(enc,c) (*(enc)->ctype)((c),(M17N_U|M17N_L),(enc))
+#define m17n_isdigit(enc,c) (*(enc)->ctype)((c),(M17N_N),(enc))
+#define m17n_isxdigit(enc,c) (*(enc)->ctype)((c),(M17N_X),(enc))
+#define m17n_iscntrl(enc,c) (*(enc)->ctype)((c),(M17N_C),(enc))
+#define m17n_toupper(enc,c) (*(enc)->toupper)((c),(enc))
+#define m17n_tolower(enc,c) (*(enc)->tolower)((c),(enc))
+
+int m17n_memcmp _((const char *p1, const char *p2, long len, const m17n_encoding *enc));
+
+#endif /* M17N_H */