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 #include <QtCore/QMetaType>
00030
00031 #include "soprano_export.h"
00032
00033 namespace Soprano
00034 {
00044 class SOPRANO_EXPORT LanguageTag
00045 {
00046 public:
00047 enum MatchFilter {
00055 MatchFilterBasic = 0,
00056
00062 MatchFilterExtended = 1
00063 };
00064
00070 enum LookupFlag {
00071 LookupFlagNone = 0,
00073 LookupFlagNoFallback = 1
00074 };
00075 Q_DECLARE_FLAGS(LookupFlags, LookupFlag)
00076
00077 public:
00086 LanguageTag();
00087
00093 LanguageTag( const LanguageTag &other );
00094
00100 LanguageTag( const char * tag );
00101
00107 LanguageTag( const QLatin1String &tag );
00108
00114 LanguageTag( const QString &tag );
00115
00122 explicit LanguageTag( const QLocale &locale );
00123
00131 LanguageTag( QLocale::Language lang, QLocale::Country country = QLocale::AnyCountry );
00132
00136 ~LanguageTag();
00138
00146 LanguageTag& operator=( const LanguageTag& other );
00147
00154 bool operator==( const LanguageTag& other ) const;
00155
00161 bool operator!=( const LanguageTag& other ) const;
00162
00167 bool operator<( const LanguageTag& other ) const;
00168
00173 bool operator<=( const LanguageTag& other ) const;
00174
00179 bool operator>( const LanguageTag& other ) const;
00180
00185 bool operator>=( const LanguageTag& other ) const;
00186
00196 bool matches( const LanguageTag& range, MatchFilter scheme = MatchFilterBasic ) const;
00198
00203
00207 bool isEmpty() const;
00208
00224 bool isValid() const;
00225
00229 QStringList subTags() const;
00230
00232
00242 QString toString() const;
00243
00250 QString toPrettyString() const;
00251
00268 QLocale toLocale() const;
00269
00277 inline operator QString() const { return toString(); }
00279
00280
00321 static int lookup(
00322 const QList<LanguageTag> & choices,
00323 const QList<LanguageTag> & priority,
00324 LookupFlags flags = LookupFlagNone,
00325 MatchFilter scheme = MatchFilterBasic
00326 );
00327
00344 static int lookup(
00345 const QList<LanguageTag> & choices,
00346 const LanguageTag & priority,
00347 LookupFlags flags = LookupFlagNone,
00348 MatchFilter scheme = MatchFilterBasic
00349 );
00350
00351 private:
00352 class Private;
00353 QSharedDataPointer<Private> d;
00354 };
00355
00356 SOPRANO_EXPORT uint qHash( const LanguageTag& node );
00357 }
00358
00359 Q_DECLARE_METATYPE( Soprano::LanguageTag )
00360 Q_DECLARE_TYPEINFO( Soprano::LanguageTag, Q_MOVABLE_TYPE );
00361
00362 Q_DECLARE_OPERATORS_FOR_FLAGS(Soprano::LanguageTag::LookupFlags)
00363
00364 SOPRANO_EXPORT QDebug operator<<( QDebug s, const Soprano::LanguageTag& );
00365 SOPRANO_EXPORT QTextStream& operator<<( QTextStream& s, const Soprano::LanguageTag& );
00366
00367 #endif // SOPRANO_LANGUAGETAG_H