00001 // -*- Mode: c++ -*- 00002 #ifndef _ISO_639_2_H_ 00003 #define _ISO_639_2_H_ 00004 00005 #include <vector> 00006 using namespace std; 00007 00008 #include <QString> 00009 #include <QStringList> 00010 #include <QMap> 00011 00012 #include "mythbaseexp.h" 00013 00014 extern MBASE_PUBLIC QMap<int, QString> _iso639_key_to_english_name; 00015 00036 00037 MBASE_PUBLIC QString iso639_str_toName(const unsigned char *iso639); 00039 MBASE_PUBLIC QString iso639_key_toName(int iso639_2); 00040 MBASE_PUBLIC void iso639_clear_language_list(void); 00041 MBASE_PUBLIC QStringList iso639_get_language_list(void); 00042 MBASE_PUBLIC vector<int> iso639_get_language_key_list(void); 00043 MBASE_PUBLIC int iso639_key_to_canonical_key(int iso639_2); 00044 MBASE_PUBLIC QString iso639_str2_to_str3(const QString &str2); 00045 00046 static inline QString iso639_key_to_str3(int code) 00047 { 00048 char str[4]; 00049 str[0] = (code>>16) & 0xFF; 00050 str[1] = (code>>8) & 0xFF; 00051 str[2] = code & 0xFF; 00052 str[3] = 0; 00053 return QString(str); 00054 } 00055 00057 static inline bool iso639_is_key_undefined(int code) 00058 { 00059 int bits = code & 0xFFFFFF; 00060 return (0 == bits) || (0xFFFFFF == bits) || (0x756E64 == bits); 00061 } 00062 00063 static inline int iso639_str3_to_key(const unsigned char *iso639_2) 00064 { 00065 return ((tolower(iso639_2[0])<<16)|(tolower(iso639_2[1])<<8)|tolower(iso639_2[2])); 00066 } 00067 00068 static inline int iso639_str3_to_key(const char *iso639_2) 00069 { 00070 return iso639_str3_to_key((const unsigned char*)iso639_2); 00071 } 00072 00073 static inline int iso639_str3_to_key(const QString &iso639_2) 00074 { 00075 if (iso639_2.length() < 3) 00076 { 00077 return iso639_str3_to_key("und"); 00078 } 00079 else 00080 { 00081 return ((iso639_2.at(0).toAscii()<<16) | 00082 (iso639_2.at(1).toAscii()<<8) | 00083 (iso639_2.at(2).toAscii())); 00084 } 00085 } 00086 00087 00088 static inline int iso639_str2_to_key2(const unsigned char *iso639_1) 00089 { 00090 return (iso639_1[0]<<8)|iso639_1[1]; 00091 } 00092 00093 static inline int iso639_str2_to_key2(const char *iso639_1) 00094 { 00095 return iso639_str2_to_key2((const unsigned char*)iso639_1); 00096 } 00097 00098 static inline QString iso639_str_to_canonoical_str(const QString &str3) 00099 { 00100 int key = iso639_str3_to_key(str3.toAscii().constData()); 00101 int can = iso639_key_to_canonical_key(key); 00102 return iso639_key_to_str3(can); 00103 } 00104 00105 MBASE_PUBLIC QString GetISO639LanguageName(QString iso639Code); 00106 MBASE_PUBLIC QString GetISO639EnglishLanguageName(QString iso639Code); 00107 00108 #endif // _ISO_639_2_H_
1.6.3