00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SOPRANO_LANGUAGETAG_H
00023 #define SOPRANO_LANGUAGETAG_H
00024
00025 #include <QtCore/QSharedDataPointer>
00026 #include <QtCore/QTextStream>
00027 #include <QtCore/QLocale>
00028 #include <QtCore/QFlags>
00029
00030 #include "soprano_export.h"
00031
00032 namespace Soprano
00033 {
00043 class SOPRANO_EXPORT LanguageTag
00044 {
00045 public:
00046 enum MatchFilter {
00054 MatchFilterBasic = 0,
00055
00061 MatchFilterExtended = 1
00062 };
00063
00069 enum LookupFlag {
00070 LookupFlagNone = 0,
00072 LookupFlagNoFallback = 1
00073 };
00074 Q_DECLARE_FLAGS(LookupFlags, LookupFlag)
00075
00076 public:
00085 LanguageTag();
00086
00092 LanguageTag( const LanguageTag &other );
00093
00099 LanguageTag( const char * tag );
00100
00106 LanguageTag( const QLatin1String &tag );
00107
00113 LanguageTag( const QString &tag );
00114
00121 explicit LanguageTag( const QLocale &locale );
00122
00130 LanguageTag( QLocale::Language lang, QLocale::Country country = QLocale::AnyCountry );
00131
00135 ~LanguageTag();
00137
00145 LanguageTag& operator=( const LanguageTag& other );
00146
00153 bool operator==( const LanguageTag& other ) const;
00154
00160 bool operator!=( const LanguageTag& other ) const;
00161
00166 bool operator<( const LanguageTag& other ) const;
00167
00172 bool operator<=( const LanguageTag& other ) const;
00173
00178 bool operator>( const LanguageTag& other ) const;
00179
00184 bool operator>=( const LanguageTag& other ) const;
00185
00195 bool matches( const LanguageTag& range, MatchFilter scheme = MatchFilterBasic ) const;
00197
00202
00206 bool isEmpty() const;
00207
00223 bool isValid() const;
00224
00228 QStringList subTags() const;
00229
00231
00241 QString toString() const;
00242
00249 QString toPrettyString() const;
00250
00267 QLocale toLocale() const;
00268
00276 inline operator QString() const { return toString(); }
00278
00279
00320 static int lookup(
00321 const QList<LanguageTag> & choices,
00322 const QList<LanguageTag> & priority,
00323 LookupFlags flags = LookupFlagNone,
00324 MatchFilter scheme = MatchFilterBasic
00325 );
00326
00343 static int lookup(
00344 const QList<LanguageTag> & choices,
00345 const LanguageTag & priority,
00346 LookupFlags flags = LookupFlagNone,
00347 MatchFilter scheme = MatchFilterBasic
00348 );
00349
00350 private:
00351 class Private;
00352 QSharedDataPointer<Private> d;
00353 };
00354
00355 SOPRANO_EXPORT uint qHash( const LanguageTag& node );
00356 }
00357
00358 Q_DECLARE_TYPEINFO( Soprano::LanguageTag, Q_MOVABLE_TYPE );
00359
00360 Q_DECLARE_OPERATORS_FOR_FLAGS(Soprano::LanguageTag::LookupFlags)
00361
00362 SOPRANO_EXPORT QDebug operator<<( QDebug s, const Soprano::LanguageTag& );
00363 SOPRANO_EXPORT QTextStream& operator<<( QTextStream& s, const Soprano::LanguageTag& );
00364
00365 #endif // SOPRANO_LANGUAGETAG_H