MythTV master
iso639.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2#ifndef ISO_639_2_H
3#define ISO_639_2_H
4
5#include <cctype>
6#include <vector>
7
8#include <QMap>
9#include <QString>
10
11#include "mythbaseexp.h"
12
13extern MBASE_PUBLIC QMap<int, QString> iso639_key_to_english_name;
14
36MBASE_PUBLIC QString iso639_str_toName(const unsigned char *iso639);
38MBASE_PUBLIC QString iso639_key_toName(int iso639_2);
41MBASE_PUBLIC std::vector<int> iso639_get_language_key_list(void);
43MBASE_PUBLIC QString iso639_str2_to_str3(const QString &str2);
44
45static inline QString iso639_key_to_str3(int code)
46{
47 std::string str { static_cast<char>((code>>16) & 0xFF),
48 static_cast<char>((code>>8) & 0xFF),
49 static_cast<char>(code & 0xFF) };
50 return QString::fromStdString(str);
51}
52
54static inline bool iso639_is_key_undefined(int code)
55{
56 int bits = code & 0xFFFFFF;
57 return (0 == bits) || (0xFFFFFF == bits) || (0x756E64 == bits);
58}
59
60static inline int iso639_str3_to_key(const unsigned char *iso639_2)
61{
62 return ((tolower(iso639_2[0])<<16)|(tolower(iso639_2[1])<<8)|tolower(iso639_2[2]));
63}
64
65static inline int iso639_str3_to_key(const char *iso639_2)
66{
67 return iso639_str3_to_key((const unsigned char*)iso639_2);
68}
69
70static inline int iso639_str3_to_key(const QString &iso639_2)
71{
72 if (iso639_2.length() < 3)
73 return iso639_str3_to_key("und");
74 return ((iso639_2.at(0).toLatin1()<<16) |
75 (iso639_2.at(1).toLatin1()<<8) |
76 (iso639_2.at(2).toLatin1()));
77}
78
79
80static inline int iso639_str2_to_key2(const unsigned char *iso639_1)
81{
82 return (iso639_1[0]<<8)|iso639_1[1];
83}
84
85static inline int iso639_str2_to_key2(const char *iso639_1)
86{
87 return iso639_str2_to_key2((const unsigned char*)iso639_1);
88}
89
90static inline QString iso639_str_to_canonoical_str(const QString &str3)
91{
92 int key = iso639_str3_to_key(str3.toLatin1().constData());
93 int can = iso639_key_to_canonical_key(key);
94 return iso639_key_to_str3(can);
95}
96
97MBASE_PUBLIC QString GetISO639LanguageName(const QString &iso639Code);
98MBASE_PUBLIC QString GetISO639EnglishLanguageName(const QString &iso639Code);
99
100#endif // ISO_639_2_H
static QString iso639_key_to_str3(int code)
Definition: iso639.h:45
MBASE_PUBLIC QString GetISO639EnglishLanguageName(const QString &iso639Code)
Definition: iso639.cpp:962
MBASE_PUBLIC QStringList iso639_get_language_list(void)
Returns list of three character ISO-639 language descriptors, starting with the most preferred.
Definition: iso639.cpp:33
static int iso639_str3_to_key(const unsigned char *iso639_2)
Definition: iso639.h:60
static int iso639_str2_to_key2(const unsigned char *iso639_1)
Definition: iso639.h:80
MBASE_PUBLIC QString iso639_key_toName(int iso639_2)
Converts a canonical key to language name in English.
Definition: iso639.cpp:109
static bool iso639_is_key_undefined(int code)
Returns true if the key is 0, 0xFFFFFF, or 'und'.
Definition: iso639.h:54
MBASE_PUBLIC QString GetISO639LanguageName(const QString &iso639Code)
Definition: iso639.cpp:954
static QString iso639_str_to_canonoical_str(const QString &str3)
Definition: iso639.h:90
MBASE_PUBLIC QString iso639_str2_to_str3(const QString &str2)
Definition: iso639.cpp:68
MBASE_PUBLIC std::vector< int > iso639_get_language_key_list(void)
Definition: iso639.cpp:56
MBASE_PUBLIC void iso639_clear_language_list(void)
Definition: iso639.cpp:22
MBASE_PUBLIC int iso639_key_to_canonical_key(int iso639_2)
Definition: iso639.cpp:118
MBASE_PUBLIC QMap< int, QString > iso639_key_to_english_name
Definition: iso639.cpp:10
MBASE_PUBLIC QString iso639_str_toName(const unsigned char *iso639)
Converts a 2 or 3 character iso639 string to a language name in English.
Definition: iso639.cpp:100
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15