X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=charset%2Fcharconv.h;h=bf604a078cf9d51f982e2602a328fa598d097915;hb=d9c55a4d021b4a317a25f14f89468d62592aae0b;hp=a235025e9c628d16a518e17180aaacd6c40c48a4;hpb=2926a57424946281a78b9cc5b8098b1cff39e45a;p=libucw.git diff --git a/charset/charconv.h b/charset/charconv.h index a235025e..bf604a07 100644 --- a/charset/charconv.h +++ b/charset/charconv.h @@ -1,12 +1,28 @@ /* - * Character Set Conversion Library 1.1 + * Character Set Conversion Library 1.2 * - * (c) 1998--2001 Martin Mares + * (c) 1998--2005 Martin Mares + * (c) 2007 Pavel Charvat * * This software may be freely distributed and used according to the terms - * of the GNU General Public License. See file COPYING in any of the GNU packages. + * of the GNU Lesser General Public License. */ +#ifndef _CHARSET_CHARCONV_H +#define _CHARSET_CHARCONV_H + +#ifdef CONFIG_UCW_CLEAN_ABI +#define charset_name ucw_charset_name +#define conv_in_to_ucs ucw_conv_in_to_ucs +#define conv_init ucw_conv_init +#define conv_set_charset ucw_conv_set_charset +#define conv_ucs_to_out ucw_conv_ucs_to_out +#define conv_ucs_to_x ucw_conv_ucs_to_x +#define conv_x_count ucw_conv_x_count +#define conv_x_to_ucs ucw_conv_x_to_ucs +#define find_charset_by_name ucw_find_charset_by_name +#endif + struct conv_context { /* Parameters supplied by the caller */ @@ -20,9 +36,11 @@ struct conv_context { /* Internal variables */ int (*convert)(struct conv_context *); + int source_charset, dest_charset; unsigned short int *in_to_x; unsigned short int *x_to_out; - unsigned int state, value; + unsigned int state, code, remains; + unsigned char *string_at; }; void conv_init(struct conv_context *); @@ -33,11 +51,40 @@ void conv_set_charset(struct conv_context *, int, int); #define CONV_DEST_END 2 #define CONV_SKIP 4 -#define CONV_CHARSET_ASCII 0 -#define CONV_CHARSET_LATIN1 1 -#define CONV_CHARSET_LATIN2 2 -#define CONV_CHARSET_UTF8 8 -#define CONV_NUM_CHARSETS 9 +enum charset_id { + CONV_CHARSET_ASCII, + CONV_CHARSET_ISO_8859_1, + CONV_CHARSET_ISO_8859_2, + CONV_CHARSET_ISO_8859_3, + CONV_CHARSET_ISO_8859_4, + CONV_CHARSET_ISO_8859_5, + CONV_CHARSET_ISO_8859_6, + CONV_CHARSET_ISO_8859_7, + CONV_CHARSET_ISO_8859_8, + CONV_CHARSET_ISO_8859_9, + CONV_CHARSET_ISO_8859_10, + CONV_CHARSET_ISO_8859_11, + CONV_CHARSET_ISO_8859_13, + CONV_CHARSET_ISO_8859_14, + CONV_CHARSET_ISO_8859_15, + CONV_CHARSET_ISO_8859_16, + CONV_CHARSET_WIN1250, + CONV_CHARSET_WIN1251, + CONV_CHARSET_WIN1252, + CONV_CHARSET_KAMCS, + CONV_CHARSET_CSN369103, + CONV_CHARSET_CP852, + CONV_CHARSET_MACCE, + CONV_CHARSET_CORK, + CONV_CHARSET_UTF8, + CONV_CHARSET_UTF16_BE, + CONV_CHARSET_UTF16_LE, + CONV_NUM_CHARSETS +}; + +/* Conversion of a single character between current non-UTF8 charset and Unicode */ +int conv_in_to_ucs(struct conv_context *c, unsigned int y); +int conv_ucs_to_out(struct conv_context *c, unsigned int ucs); /* For those brave ones who want to mess with charconv internals */ unsigned int conv_x_to_ucs(unsigned int x); @@ -46,5 +93,7 @@ unsigned int conv_x_count(void); /* Charset names */ -int find_charset_by_name(char *); +int find_charset_by_name(const char *); char *charset_name(int); + +#endif