From 29818ea40e49f660f2dbb25a1e0e9b260de3f1d7 Mon Sep 17 00:00:00 2001 From: nobody Date: Mon, 16 Jul 2001 11:29:18 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'GAL_0_9_1'. svn path=/tags/GAL_0_9_1/; revision=11125 --- camel/camel-charset-map.c | 321 ---------------------------------------------- 1 file changed, 321 deletions(-) delete mode 100644 camel/camel-charset-map.c (limited to 'camel/camel-charset-map.c') diff --git a/camel/camel-charset-map.c b/camel/camel-charset-map.c deleted file mode 100644 index 236197ef86..0000000000 --- a/camel/camel-charset-map.c +++ /dev/null @@ -1,321 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; -*- */ - -/* - * Authors: - * Michael Zucchi - * Dan Winship - * - * Copyright 2000, 2001 Ximian, Inc. (www.ximian.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -/* - if you want to build the charset map, compile this with something like: - gcc -DBUILD_MAP camel-charset-map.c `glib-config --cflags` - (plus any -I/-L/-l flags you need for iconv), then run it as - ./a.out > camel-charset-map-private.h - - Note that the big-endian variant isn't tested... - - The tables genereated work like this: - - An indirect array for each page of unicode character - Each array element has an indirect pointer to one of the bytes of - the generated bitmask. -*/ - -#ifdef BUILD_MAP -#include -#include - -static struct { - char *name; - unsigned int bit; /* assigned bit */ -} tables[] = { - /* These are the 8bit character sets (other than iso-8859-1, - * which is special-cased) which are supported by both other - * mailers and the GNOME environment. Note that the order - * they're listed in is the order they'll be tried in, so put - * the more-popular ones first. - */ - { "iso-8859-2", 0 }, /* Central/Eastern European */ - { "iso-8859-4", 0 }, /* Baltic */ - { "koi8-r", 0 }, /* Russian */ - { "windows-1251", 0 }, /* Russian */ - { "koi8-u", 0 }, /* Ukranian */ - { "iso-8859-5", 0 }, /* Least-popular Russian encoding */ - { "iso-8859-7", 0 }, /* Greek */ - { "iso-8859-9", 0 }, /* Turkish */ - { "iso-8859-13", 0 }, /* Baltic again */ - { "iso-8859-15", 0 }, /* New-and-improved iso-8859-1, but most - * programs that support this support UTF8 - */ - { 0, 0 } -}; - -unsigned int encoding_map[256 * 256]; - -#if G_BYTE_ORDER == G_BIG_ENDIAN -#define UCS "UCS-4BE" -#else -#define UCS "UCS-4LE" -#endif - -void main(void) -{ - int i, j; - int max, min; - int bit = 0x01; - int k; - int bytes; - iconv_t cd; - char in[128]; - guint32 out[128]; - char *inptr, *outptr; - size_t inlen, outlen; - - /* dont count the terminator */ - bytes = ((sizeof(tables)/sizeof(tables[0]))+7-1)/8; - - for (i = 0; i < 128; i++) - in[i] = i + 128; - - for (j = 0; tables[j].name; j++) { - cd = iconv_open (UCS, tables[j].name); - inptr = in; - outptr = (char *)(out); - inlen = sizeof (in); - outlen = sizeof (out); - while (iconv (cd, &inptr, &inlen, &outptr, &outlen) == -1) { - if (errno == EILSEQ) { - inptr++; - inlen--; - } else { - printf ("%s\n", strerror (errno)); - exit (1); - } - } - iconv_close (cd); - - for (i = 0; i < 128 - outlen / 4; i++) { - encoding_map[i] |= bit; - encoding_map[out[i]] |= bit; - } - - tables[j].bit = bit; - bit <<= 1; - } - - printf("/* This file is automatically generated: DO NOT EDIT */\n\n"); - - for (i=0;i<256;i++) { - /* first, do we need this block? */ - for (k=0;k> (k*8)) & 0xff ); - if (((j+1)&7) == 0 && j<255) - printf("\n\t"); - } - printf("\n};\n\n"); - } - } - } - - printf("struct {\n"); - for (k=0;k>8].bits%d?camel_charmap[(x)>>8].bits%d[(x)&0xff]<<%d:0)", k, k, k*8); - if (k -#include -#include -#include - -void camel_charset_init(CamelCharset *c) -{ - c->mask = ~0; - c->level = 0; -} - -void -camel_charset_step(CamelCharset *c, const char *in, int len) -{ - register unsigned int mask; - register int level; - const char *inptr = in, *inend = in+len; - - mask = c->mask; - level = c->level; - - /* check what charset a given string will fit in */ - while (inptr < inend) { - gunichar c; - const char *newinptr; - newinptr = g_utf8_next_char(inptr); - c = g_utf8_get_char(inptr); - if (newinptr == NULL || !g_unichar_validate (c)) { - inptr++; - continue; - } - - inptr = newinptr; - if (c<=0xffff) { - mask &= charset_mask(c); - - if (c>=128 && c<256) - level = MAX(level, 1); - else if (c>=256) - level = MAX(level, 2); - } else { - mask = 0; - level = MAX(level, 2); - } - } - - c->mask = mask; - c->level = level; -} - -/* gets the best charset from the mask of chars in it */ -static const char * -camel_charset_best_mask(unsigned int mask) -{ - int i; - - for (i=0;ilevel == 1) - return "ISO-8859-1"; - else if (charset->level == 2) - return camel_charset_best_mask(charset->mask); - else - return NULL; - -} - -/* finds the minimum charset for this string NULL means US-ASCII */ -const char * -camel_charset_best(const char *in, int len) -{ - CamelCharset charset; - - camel_charset_init(&charset); - camel_charset_step(&charset, in, len); - return camel_charset_best_name(&charset); -} - -char * -camel_charset_locale_name (void) -{ - char *locale, *charset = NULL; - - locale = setlocale (LC_ALL, NULL); - - if (!locale || !strcmp (locale, "C") || !strcmp (locale, "POSIX")) { - /* The locale "C" or "POSIX" is a portable locale; its - * LC_CTYPE part corresponds to the 7-bit ASCII character - * set. - */ - - return NULL; - } else { - /* A locale name is typically of the form language[_terri- - * tory][.codeset][@modifier], where language is an ISO 639 - * language code, territory is an ISO 3166 country code, and - * codeset is a character set or encoding identifier like - * ISO-8859-1 or UTF-8. - */ - char *p; - int len; - - p = strchr (locale, '@'); - len = p ? (p - locale) : strlen (locale); - if ((p = strchr (locale, '.'))) { - charset = g_strndup (p + 1, len - (p - locale) + 1); - g_strdown (charset); - } - } - - return charset; -} - -#endif /* !BUILD_MAP */ - -- cgit v1.2.3