[prev in list] [next in list] [prev in thread] [next in thread]
List: xine-cvslog
Subject: [xine-cvs] CVS: xine-lib/src/xine-utils utils.c,1.23,1.24 xineutils.h,1.81,1.82
From: Frantisek Dvorak <valtri () users ! sourceforge ! net>
Date: 2004-03-27 12:59:48
Message-ID: E1B7DPg-0004SF-Ds () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]
Update of /cvsroot/xine/xine-lib/src/xine-utils
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17072/src/xine-utils
Modified Files:
utils.c xineutils.h
Log Message:
"+y"+p code from xine-ui for guessing locale codeset (default encoding for OSD).
Index: utils.c
===================================================================
RCS file: /cvsroot/xine/xine-lib/src/xine-utils/utils.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- utils.c 9 Dec 2003 00:02:39 -0000 1.23
+++ utils.c 27 Mar 2004 12:59:46 -0000 1.24
@@ -36,6 +36,186 @@
#if HAVE_UCONTEXT_H
#include <ucontext.h>
#endif
+#ifdef HAVE_LANGINFO_CODESET
+#include <langinfo.h>
+#endif
+
+
+typedef struct {
+ char *language;
+ char *encoding;
+ char *modifier;
+} lang_locale_t;
+
+
+static lang_locale_t lang_locales[] = {
+ { "af_ZA", "iso88591", NULL },
+ { "ar_AE", "iso88596", NULL },
+ { "ar_BH", "iso88596", NULL },
+ { "ar_DZ", "iso88596", NULL },
+ { "ar_EG", "iso88596", NULL },
+ { "ar_IN", "utf8", NULL },
+ { "ar_IQ", "iso88596", NULL },
+ { "ar_JO", "iso88596", NULL },
+ { "ar_KW", "iso88596", NULL },
+ { "ar_LB", "iso88596", NULL },
+ { "ar_LY", "iso88596", NULL },
+ { "ar_MA", "iso88596", NULL },
+ { "ar_OM", "iso88596", NULL },
+ { "ar_QA", "iso88596", NULL },
+ { "ar_SA", "iso88596", NULL },
+ { "ar_SD", "iso88596", NULL },
+ { "ar_SY", "iso88596", NULL },
+ { "ar_TN", "iso88596", NULL },
+ { "ar_YE", "iso88596", NULL },
+ { "be_BY", "cp1251", NULL },
+ { "bg_BG", "cp1251", NULL },
+ { "br_FR", "iso88591", NULL },
+ { "bs_BA", "iso88592", NULL },
+ { "ca_ES", "iso88591", NULL },
+ { "ca_ES", "iso885915", "euro" },
+ { "cs_CZ", "iso88592", NULL },
+ { "cy_GB", "iso885914", NULL },
+ { "da_DK", "iso88591", NULL },
+ { "de_AT", "iso88591", NULL },
+ { "de_AT", "iso885915", "euro" },
+ { "de_BE", "iso88591", NULL },
+ { "de_BE", "iso885915", "euro" },
+ { "de_CH", "iso88591", NULL },
+ { "de_DE", "iso88591", NULL },
+ { "de_DE", "iso885915", "euro" },
+ { "de_LU", "iso88591", NULL },
+ { "de_LU", "iso885915", "euro" },
+ { "el_GR", "iso88597", NULL },
+ { "en_AU", "iso88591", NULL },
+ { "en_BW", "iso88591", NULL },
+ { "en_CA", "iso88591", NULL },
+ { "en_DK", "iso88591", NULL },
+ { "en_GB", "iso88591", NULL },
+ { "en_HK", "iso88591", NULL },
+ { "en_IE", "iso88591", NULL },
+ { "en_IE", "iso885915", "euro" },
+ { "en_IN", "utf8", NULL },
+ { "en_NZ", "iso88591", NULL },
+ { "en_PH", "iso88591", NULL },
+ { "en_SG", "iso88591", NULL },
+ { "en_US", "iso88591", NULL },
+ { "en_ZA", "iso88591", NULL },
+ { "en_ZW", "iso88591", NULL },
+ { "es_AR", "iso88591", NULL },
+ { "es_BO", "iso88591", NULL },
+ { "es_CL", "iso88591", NULL },
+ { "es_CO", "iso88591", NULL },
+ { "es_CR", "iso88591", NULL },
+ { "es_DO", "iso88591", NULL },
+ { "es_EC", "iso88591", NULL },
+ { "es_ES", "iso88591", NULL },
+ { "es_ES", "iso885915", "euro" },
+ { "es_GT", "iso88591", NULL },
+ { "es_HN", "iso88591", NULL },
+ { "es_MX", "iso88591", NULL },
+ { "es_NI", "iso88591", NULL },
+ { "es_PA", "iso88591", NULL },
+ { "es_PE", "iso88591", NULL },
+ { "es_PR", "iso88591", NULL },
+ { "es_PY", "iso88591", NULL },
+ { "es_SV", "iso88591", NULL },
+ { "es_US", "iso88591", NULL },
+ { "es_UY", "iso88591", NULL },
+ { "es_VE", "iso88591", NULL },
+ { "et_EE", "iso88591", NULL },
+ { "eu_ES", "iso88591", NULL },
+ { "eu_ES", "iso885915", "euro" },
+ { "fa_IR", "utf8", NULL },
+ { "fi_FI", "iso88591", NULL },
+ { "fi_FI", "iso885915", "euro" },
+ { "fo_FO", "iso88591", NULL },
+ { "fr_BE", "iso88591", NULL },
+ { "fr_BE", "iso885915", "euro" },
+ { "fr_CA", "iso88591", NULL },
+ { "fr_CH", "iso88591", NULL },
+ { "fr_FR", "iso88591", NULL },
+ { "fr_FR", "iso885915", "euro" },
+ { "fr_LU", "iso88591", NULL },
+ { "fr_LU", "iso885915", "euro" },
+ { "ga_IE", "iso88591", NULL },
+ { "ga_IE", "iso885915", "euro" },
+ { "gl_ES", "iso88591", NULL },
+ { "gl_ES", "iso885915", "euro" },
+ { "gv_GB", "iso88591", NULL },
+ { "he_IL", "iso88598", NULL },
+ { "hi_IN", "utf8", NULL },
+ { "hr_HR", "iso88592", NULL },
+ { "hu_HU", "iso88592", NULL },
+ { "id_ID", "iso88591", NULL },
+ { "is_IS", "iso88591", NULL },
+ { "it_CH", "iso88591", NULL },
+ { "it_IT", "iso88591", NULL },
+ { "it_IT", "iso885915", "euro" },
+ { "iw_IL", "iso88598", NULL },
+ { "ja_JP", "eucjp", NULL },
+ { "ja_JP", "ujis", NULL },
+ { "japanese", "euc", NULL },
+ { "ka_GE", "georgianps", NULL },
+ { "kl_GL", "iso88591", NULL },
+ { "ko_KR", "euckr", NULL },
+ { "ko_KR", "utf8", NULL },
+ { "korean", "euc", NULL },
+ { "kw_GB", "iso88591", NULL },
+ { "lt_LT", "iso885913", NULL },
+ { "lv_LV", "iso885913", NULL },
+ { "mi_NZ", "iso885913", NULL },
+ { "mk_MK", "iso88595", NULL },
+ { "mr_IN", "utf8", NULL },
+ { "ms_MY", "iso88591", NULL },
+ { "mt_MT", "iso88593", NULL },
+ { "nb_NO", "ISO-8859-1", NULL },
+ { "nl_BE", "iso88591", NULL },
+ { "nl_BE", "iso885915", "euro" },
+ { "nl_NL", "iso88591", NULL },
+ { "nl_NL", "iso885915", "euro" },
+ { "nn_NO", "iso88591", NULL },
+ { "no_NO", "iso88591", NULL },
+ { "oc_FR", "iso88591", NULL },
+ { "pl_PL", "iso88592", NULL },
+ { "pt_BR", "iso88591", NULL },
+ { "pt_PT", "iso88591", NULL },
+ { "pt_PT", "iso885915", "euro" },
+ { "ro_RO", "iso88592", NULL },
+ { "ru_RU", "iso88595", NULL },
+ { "ru_RU", "koi8r", NULL },
+ { "ru_UA", "koi8u", NULL },
+ { "se_NO", "utf8", NULL },
+ { "sk_SK", "iso88592", NULL },
+ { "sl_SI", "iso88592", NULL },
+ { "sq_AL", "iso88591", NULL },
+ { "sr_YU", "iso88592", NULL },
+ { "sr_YU", "iso88595", "cyrillic" },
+ { "sv_FI", "iso88591", NULL },
+ { "sv_FI", "iso885915", "euro" },
+ { "sv_SE", "iso88591", NULL },
+ { "ta_IN", "utf8", NULL },
+ { "te_IN", "utf8", NULL },
+ { "tg_TJ", "koi8t", NULL },
+ { "th_TH", "tis620", NULL },
+ { "tl_PH", "iso88591", NULL },
+ { "tr_TR", "iso88599", NULL },
+ { "uk_UA", "koi8u", NULL },
+ { "ur_PK", "utf8", NULL },
+ { "uz_UZ", "iso88591", NULL },
+ { "vi_VN", "tcvn", NULL },
+ { "vi_VN", "utf8", NULL },
+ { "wa_BE", "iso88591", NULL },
+ { "wa_BE", "iso885915", "euro" },
+ { "yi_US", "cp1255", NULL },
+ { "zh_CN", "gb18030", NULL },
+ { "zh_CN", "gb2312", NULL },
+ { "zh_CN", "gbk", NULL },
+ { "zh_HK", "big5hkscs", NULL },
+ { "zh_TW", "big5", NULL },
+ { "zh_TW", "euctw", NULL },
+ { NULL, NULL, NULL }
+};
void *xine_xmalloc(size_t size) {
@@ -142,6 +322,7 @@
#endif
}
+
/* print a hexdump of length bytes from the data given in buf */
void xine_hexdump (const char *buf, int length) {
int i,j;
@@ -178,6 +359,74 @@
}
+static const lang_locale_t *_get_first_lang_locale(char *lcal) {
+ const lang_locale_t *llocale;
+
+ if(lcal && strlen(lcal)) {
+ llocale = &*lang_locales;
+
+ while(llocale->language) {
+ if(!strncmp(lcal, llocale->language, strlen(lcal)))
+ return llocale;
+
+ llocale++;
+ }
+ }
+ return NULL;
+}
+
+
+/*
+ * get encoding of current locale
+ */
+char *xine_get_system_encoding() {
+ char *codeset = NULL;
+
+#ifdef HAVE_LANGINFO_CODESET
+ codeset = nl_langinfo(CODESET);
+#endif
+ /*
+ * guess locale codeset according to shell variables
+ * when nl_langinfo(CODESET) isn't available or workig
+ */
+ if (!codeset || strstr(codeset, "ANSI") != 0) {
+ char *lang;
+
+ if(!(lang = getenv("LC_ALL")))
+ if(!(lang = getenv("LC_MESSAGES")))
+ lang = getenv("LANG");
+
+ codeset = NULL;
+
+ if(lang) {
+ char *lg, *enc, *mod;
+
+ lg = strdup(lang);
+
+ if((enc = strchr(lg, '.')) && (strlen(enc) > 1)) {
+ enc++;
+
+ if((mod = strchr(enc, '@')))
+ *mod = '\0';
+
+ codeset = strdup(enc);
+ }
+ else {
+ const lang_locale_t *llocale = _get_first_lang_locale(lg);
+
+ if(llocale && llocale->encoding)
+ codeset = strdup(llocale->encoding);
+ }
+
+ free(lg);
+ }
+ } else
+ codeset = strdup(codeset);
+
+ return codeset;
+}
+
+
#ifndef HAVE_BASENAME
#define FILESYSTEM_PREFIX_LEN(filename) 0
Index: xineutils.h
===================================================================
RCS file: /cvsroot/xine/xine-lib/src/xine-utils/xineutils.h,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- xineutils.h 18 Mar 2004 16:50:00 -0000 1.81
+++ xineutils.h 27 Mar 2004 12:59:46 -0000 1.82
@@ -1084,8 +1084,13 @@
*/
void xine_list_delete_current (xine_list_t *l);
+/**
+ * get encoding of current locale
+ */
+char *xine_get_system_encoding();
+
#ifndef HAVE_BASENAME
-/*
+/**
* get base name
*/
char *basename (char const *name);
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Xine-cvslog mailing list
Xine-cvslog@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-cvslog
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic