goldendict-ng/src/langcoder.hh
2024-10-10 00:03:14 -04:00

65 lines
1.7 KiB
C++

#ifndef LANGCODER_H
#define LANGCODER_H
#include <QString>
#include <QIcon>
#include "wstring.hh"
struct GDLangCode
{
QString code2; // ISO 639-1 -> always 2 letters thus code2
std::string code3; // ISO 639-2B ( http://www.loc.gov/standards/iso639-2/ )
int isRTL; // Right-to-left writing; 0 - no, 1 - yes, -1 - let Qt define
std::string lang; // Language name in English
};
class LangCoder
{
public:
static quint32 code2toInt( const char code[ 2 ] )
{
return ( ( (quint32)code[ 1 ] ) << 8 ) + (quint32)code[ 0 ];
}
static quint32 code2toInt( QString code )
{
if ( code.size() < 2 )
return 0;
auto c = code.toLatin1();
return ( ( (quint32)c[ 1 ] ) << 8 ) + (quint32)c[ 0 ];
}
static QString intToCode2( quint32 );
/// Finds the id for the given language name, written in english. The search
/// is case- and punctuation insensitive.
static quint32 findIdForLanguage( gd::wstring const & );
static quint32 findIdForLanguageCode3( std::string const & );
/// find id pairs like en-zh in dictioanry name
static std::pair< quint32, quint32 > findLangIdPairFromName( QString const & );
static std::pair< quint32, quint32 > findLangIdPairFromPath( std::string const & );
static quint32 guessId( const QString & lang );
/// Returns decoded name of language or empty string if not found.
static QString decode( quint32 _code );
/// Return true for RTL languages
static bool isLanguageRTL( quint32 code );
private:
static QMap< QString, GDLangCode > LANG_CODE_MAP;
static bool code2Exists( const QString & _code );
};
///////////////////////////////////////////////////////////////////////////////
#define LangCodeRole Qt::UserRole
#endif // LANGCODER_H