qchar.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:12k
- /****************************************************************************
- **
- ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
- ** Contact: Qt Software Information (qt-info@nokia.com)
- **
- ** This file is part of the QtCore module of the Qt Toolkit.
- **
- ** Commercial Usage
- ** Licensees holding valid Qt Commercial licenses may use this file in
- ** accordance with the Qt Commercial License Agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and Nokia.
- **
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU
- ** General Public License versions 2.0 or 3.0 as published by the Free
- ** Software Foundation and appearing in the file LICENSE.GPL included in
- ** the packaging of this file. Please review the following information
- ** to ensure GNU General Public Licensing requirements will be met:
- ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
- ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
- ** exception, Nokia gives you certain additional rights. These rights
- ** are described in the Nokia Qt GPL Exception version 1.3, included in
- ** the file GPL_EXCEPTION.txt in this package.
- **
- ** Qt for Windows(R) Licensees
- ** As a special exception, Nokia, as the sole copyright holder for Qt
- ** Designer, grants users of the Qt/Eclipse Integration plug-in the
- ** right for the Qt/Eclipse Integration to link to functionality
- ** provided by Qt Designer and its related libraries.
- **
- ** If you are unsure which license is appropriate for your use, please
- ** contact the sales department at qt-sales@nokia.com.
- **
- ****************************************************************************/
- #ifndef QCHAR_H
- #define QCHAR_H
- #include <QtCore/qglobal.h>
- QT_BEGIN_HEADER
- QT_BEGIN_NAMESPACE
- QT_MODULE(Core)
- class QString;
- struct QLatin1Char
- {
- public:
- inline explicit QLatin1Char(char c) : ch(c) {}
- #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
- inline const char toLatin1() const { return ch; }
- inline const ushort unicode() const { return ushort(uchar(ch)); }
- #else
- inline char toLatin1() const { return ch; }
- inline ushort unicode() const { return ushort(uchar(ch)); }
- #endif
- private:
- char ch;
- };
- class Q_CORE_EXPORT QChar {
- public:
- QChar();
- #ifndef QT_NO_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN_CONSTRUCTOR QChar(char c);
- QT_ASCII_CAST_WARN_CONSTRUCTOR QChar(uchar c);
- #endif
- QChar(QLatin1Char ch);
- QChar(uchar c, uchar r);
- inline QChar(ushort rc) : ucs(rc){}
- QChar(short rc);
- QChar(uint rc);
- QChar(int rc);
- enum SpecialCharacter {
- Null = 0x0000,
- Nbsp = 0x00a0,
- ReplacementCharacter = 0xfffd,
- ObjectReplacementCharacter = 0xfffc,
- ByteOrderMark = 0xfeff,
- ByteOrderSwapped = 0xfffe,
- #ifdef QT3_SUPPORT
- null = Null,
- replacement = ReplacementCharacter,
- byteOrderMark = ByteOrderMark,
- byteOrderSwapped = ByteOrderSwapped,
- nbsp = Nbsp,
- #endif
- ParagraphSeparator = 0x2029,
- LineSeparator = 0x2028
- };
- QChar(SpecialCharacter sc);
- // Unicode information
- enum Category
- {
- NoCategory,
- Mark_NonSpacing, // Mn
- Mark_SpacingCombining, // Mc
- Mark_Enclosing, // Me
- Number_DecimalDigit, // Nd
- Number_Letter, // Nl
- Number_Other, // No
- Separator_Space, // Zs
- Separator_Line, // Zl
- Separator_Paragraph, // Zp
- Other_Control, // Cc
- Other_Format, // Cf
- Other_Surrogate, // Cs
- Other_PrivateUse, // Co
- Other_NotAssigned, // Cn
- Letter_Uppercase, // Lu
- Letter_Lowercase, // Ll
- Letter_Titlecase, // Lt
- Letter_Modifier, // Lm
- Letter_Other, // Lo
- Punctuation_Connector, // Pc
- Punctuation_Dash, // Pd
- Punctuation_Open, // Ps
- Punctuation_Close, // Pe
- Punctuation_InitialQuote, // Pi
- Punctuation_FinalQuote, // Pf
- Punctuation_Other, // Po
- Symbol_Math, // Sm
- Symbol_Currency, // Sc
- Symbol_Modifier, // Sk
- Symbol_Other, // So
- Punctuation_Dask = Punctuation_Dash // oops
- };
- enum Direction
- {
- DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON,
- DirLRE, DirLRO, DirAL, DirRLE, DirRLO, DirPDF, DirNSM, DirBN
- };
- enum Decomposition
- {
- NoDecomposition,
- Canonical,
- Font,
- NoBreak,
- Initial,
- Medial,
- Final,
- Isolated,
- Circle,
- Super,
- Sub,
- Vertical,
- Wide,
- Narrow,
- Small,
- Square,
- Compat,
- Fraction
- #ifdef QT3_SUPPORT
- , Single = NoDecomposition
- #endif
- };
- enum Joining
- {
- OtherJoining, Dual, Right, Center
- };
- enum CombiningClass
- {
- Combining_BelowLeftAttached = 200,
- Combining_BelowAttached = 202,
- Combining_BelowRightAttached = 204,
- Combining_LeftAttached = 208,
- Combining_RightAttached = 210,
- Combining_AboveLeftAttached = 212,
- Combining_AboveAttached = 214,
- Combining_AboveRightAttached = 216,
- Combining_BelowLeft = 218,
- Combining_Below = 220,
- Combining_BelowRight = 222,
- Combining_Left = 224,
- Combining_Right = 226,
- Combining_AboveLeft = 228,
- Combining_Above = 230,
- Combining_AboveRight = 232,
- Combining_DoubleBelow = 233,
- Combining_DoubleAbove = 234,
- Combining_IotaSubscript = 240
- };
- enum UnicodeVersion {
- Unicode_Unassigned,
- Unicode_1_1,
- Unicode_2_0,
- Unicode_2_1_2,
- Unicode_3_0,
- Unicode_3_1,
- Unicode_3_2,
- Unicode_4_0,
- Unicode_4_1,
- Unicode_5_0
- };
- // ****** WHEN ADDING FUNCTIONS, CONSIDER ADDING TO QCharRef TOO
- Category category() const;
- Direction direction() const;
- Joining joining() const;
- bool hasMirrored() const;
- unsigned char combiningClass() const;
- QChar mirroredChar() const;
- QString decomposition() const;
- Decomposition decompositionTag() const;
- int digitValue() const;
- QChar toLower() const;
- QChar toUpper() const;
- QChar toTitleCase() const;
- QChar toCaseFolded() const;
- UnicodeVersion unicodeVersion() const;
- #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
- const char toAscii() const;
- inline const char toLatin1() const;
- inline const ushort unicode() const { return ucs; }
- #else
- char toAscii() const;
- inline char toLatin1() const;
- inline ushort unicode() const { return ucs; }
- #endif
- #ifdef Q_NO_PACKED_REFERENCE
- inline ushort &unicode() { return const_cast<ushort&>(ucs); }
- #else
- inline ushort &unicode() { return ucs; }
- #endif
- static QChar fromAscii(char c);
- static QChar fromLatin1(char c);
- inline bool isNull() const { return ucs == 0; }
- bool isPrint() const;
- bool isPunct() const;
- bool isSpace() const;
- bool isMark() const;
- bool isLetter() const;
- bool isNumber() const;
- bool isLetterOrNumber() const;
- bool isDigit() const;
- bool isSymbol() const;
- inline bool isLower() const { return category() == Letter_Lowercase; }
- inline bool isUpper() const { return category() == Letter_Uppercase; }
- inline bool isTitleCase() const { return category() == Letter_Titlecase; }
- inline bool isHighSurrogate() const {
- return ((ucs & 0xfc00) == 0xd800);
- }
- inline bool isLowSurrogate() const {
- return ((ucs & 0xfc00) == 0xdc00);
- }
- inline uchar cell() const { return uchar(ucs & 0xff); }
- inline uchar row() const { return uchar((ucs>>8)&0xff); }
- inline void setCell(uchar cell);
- inline void setRow(uchar row);
- static inline uint surrogateToUcs4(ushort high, ushort low) {
- return (uint(high)<<10) + low - 0x35fdc00;
- }
- static inline uint surrogateToUcs4(QChar high, QChar low) {
- return (uint(high.ucs)<<10) + low.ucs - 0x35fdc00;
- }
- static inline ushort highSurrogate(uint ucs4) {
- return (ucs4>>10) + 0xd7c0;
- }
- static inline ushort lowSurrogate(uint ucs4) {
- return ucs4%0x400 + 0xdc00;
- }
- static Category QT_FASTCALL category(uint ucs4);
- static Category QT_FASTCALL category(ushort ucs2);
- static Direction QT_FASTCALL direction(uint ucs4);
- static Direction QT_FASTCALL direction(ushort ucs2);
- static Joining QT_FASTCALL joining(uint ucs4);
- static Joining QT_FASTCALL joining(ushort ucs2);
- static unsigned char QT_FASTCALL combiningClass(uint ucs4);
- static unsigned char QT_FASTCALL combiningClass(ushort ucs2);
- static uint QT_FASTCALL mirroredChar(uint ucs4);
- static ushort QT_FASTCALL mirroredChar(ushort ucs2);
- static Decomposition QT_FASTCALL decompositionTag(uint ucs4);
- static int QT_FASTCALL digitValue(uint ucs4);
- static int QT_FASTCALL digitValue(ushort ucs2);
- static uint QT_FASTCALL toLower(uint ucs4);
- static ushort QT_FASTCALL toLower(ushort ucs2);
- static uint QT_FASTCALL toUpper(uint ucs4);
- static ushort QT_FASTCALL toUpper(ushort ucs2);
- static uint QT_FASTCALL toTitleCase(uint ucs4);
- static ushort QT_FASTCALL toTitleCase(ushort ucs2);
- static uint QT_FASTCALL toCaseFolded(uint ucs4);
- static ushort QT_FASTCALL toCaseFolded(ushort ucs2);
- static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4);
- static UnicodeVersion QT_FASTCALL unicodeVersion(ushort ucs2);
- static QString QT_FASTCALL decomposition(uint ucs4);
- #ifdef QT3_SUPPORT
- inline QT3_SUPPORT bool mirrored() const { return hasMirrored(); }
- inline QT3_SUPPORT QChar lower() const { return toLower(); }
- inline QT3_SUPPORT QChar upper() const { return toUpper(); }
- static inline QT3_SUPPORT bool networkOrdered() {
- return QSysInfo::ByteOrder == QSysInfo::BigEndian;
- }
- #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
- inline QT3_SUPPORT const char latin1() const { return toLatin1(); }
- inline QT3_SUPPORT const char ascii() const { return toAscii(); }
- #else
- inline QT3_SUPPORT char latin1() const { return toLatin1(); }
- inline QT3_SUPPORT char ascii() const { return toAscii(); }
- #endif
- #endif
- private:
- #ifdef QT_NO_CAST_FROM_ASCII
- QChar(char c);
- QChar(uchar c);
- #endif
- ushort ucs;
- }
- #if (defined(__arm__) || defined(__ARMEL__))
- Q_PACKED
- #endif
- ;
- Q_DECLARE_TYPEINFO(QChar, Q_MOVABLE_TYPE);
- inline QChar::QChar() : ucs(0) {}
- #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
- inline const char QChar::toLatin1() const { return ucs > 0xff ? ' ' : char(ucs); }
- #else
- inline char QChar::toLatin1() const { return ucs > 0xff ? ' ' : char(ucs); }
- #endif
- inline QChar QChar::fromLatin1(char c) { return QChar(ushort(uchar(c))); }
- inline QChar::QChar(uchar c, uchar r) : ucs((r << 8) | c){}
- inline QChar::QChar(short rc) : ucs(ushort(rc)){}
- inline QChar::QChar(uint rc) : ucs(ushort(rc & 0xffff)){}
- inline QChar::QChar(int rc) : ucs(ushort(rc & 0xffff)){}
- inline QChar::QChar(SpecialCharacter s) : ucs(ushort(s)) {}
- inline QChar::QChar(QLatin1Char ch) : ucs(ch.unicode()) {}
- inline void QChar::setCell(uchar acell)
- { ucs = (ucs & 0xff00) + acell; }
- inline void QChar::setRow(uchar arow)
- { ucs = (ushort(arow)<<8) + (ucs&0xff); }
- inline bool operator==(QChar c1, QChar c2) { return c1.unicode() == c2.unicode(); }
- inline bool operator!=(QChar c1, QChar c2) { return c1.unicode() != c2.unicode(); }
- inline bool operator<=(QChar c1, QChar c2) { return c1.unicode() <= c2.unicode(); }
- inline bool operator>=(QChar c1, QChar c2) { return c1.unicode() >= c2.unicode(); }
- inline bool operator<(QChar c1, QChar c2) { return c1.unicode() < c2.unicode(); }
- inline bool operator>(QChar c1, QChar c2) { return c1.unicode() > c2.unicode(); }
- #ifndef QT_NO_DATASTREAM
- Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QChar &);
- Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QChar &);
- #endif
- QT_END_NAMESPACE
- QT_END_HEADER
- #endif // QCHAR_H