[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