21 constexpr inline char toLatin1() const noexcept {
return ch; }
22 constexpr inline char16_t unicode() const noexcept {
return char16_t(
uchar(ch)); }
26 {
return lhs.ch == rhs.ch; }
33 {
return lhs.toLatin1() == rhs; }
43#define QT_CHAR_FASTCALL QT7_ONLY(Q_CORE_EXPORT) QT_FASTCALL
44class QT6_ONLY(Q_CORE_EXPORT)
QChar {
46 enum SpecialCharacter {
51 CarriageReturn = 0x000d,
55 ReplacementCharacter = 0xfffd,
56 ObjectReplacementCharacter = 0xfffc,
57 ByteOrderMark = 0xfeff,
58 ByteOrderSwapped = 0xfffe,
59 ParagraphSeparator = 0x2029,
60 LineSeparator = 0x2028,
61 VisualTabCharacter = 0x2192,
62 LastValidCodePoint = 0x10ffff
65#ifdef QT_IMPLICIT_QCHAR_CONSTRUCTION
66#define QCHAR_MAYBE_IMPLICIT Q_IMPLICIT
68#define QCHAR_MAYBE_IMPLICIT explicit
80#if defined(Q_OS_WIN) || defined(Q_QDOC)
84#ifndef QT_NO_CAST_FROM_ASCII
87#ifndef QT_RESTRICTED_CAST_FROM_ASCII
92#undef QCHAR_MAYBE_IMPLICIT
94 static constexpr QChar fromUcs2(
char16_t c)
noexcept {
return QChar{
c}; }
95 static constexpr inline auto fromUcs4(
char32_t c)
noexcept;
102 Mark_SpacingCombining,
125 Punctuation_Connector,
129 Punctuation_InitialQuote,
130 Punctuation_FinalQuote,
171 Script_CanadianAboriginal,
233 Script_EgyptianHieroglyphs,
239 Script_ImperialAramaic,
240 Script_OldSouthArabian,
241 Script_InscriptionalParthian,
242 Script_InscriptionalPahlavi,
253 Script_MeroiticCursive,
254 Script_MeroiticHieroglyphs,
261 Script_CaucasianAlbanian,
274 Script_OldNorthArabian,
279 Script_PsalterPahlavi,
287 Script_AnatolianHieroglyphs,
305 Script_ZanabazarSquare,
310 Script_HanifiRohingya,
317 Script_NyiakengPuachueHmong,
323 Script_KhitanSmallScript,
342 DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON,
343 DirLRE, DirLRO, DirAL, DirRLE, DirRLO, DirPDF, DirNSM, DirBN,
344 DirLRI, DirRLI, DirFSI, DirPDI
380 Combining_BelowLeftAttached = 200,
381 Combining_BelowAttached = 202,
382 Combining_BelowRightAttached = 204,
383 Combining_LeftAttached = 208,
384 Combining_RightAttached = 210,
385 Combining_AboveLeftAttached = 212,
386 Combining_AboveAttached = 214,
387 Combining_AboveRightAttached = 216,
389 Combining_BelowLeft = 218,
390 Combining_Below = 220,
391 Combining_BelowRight = 222,
392 Combining_Left = 224,
393 Combining_Right = 226,
394 Combining_AboveLeft = 228,
395 Combining_Above = 230,
396 Combining_AboveRight = 232,
398 Combining_DoubleBelow = 233,
399 Combining_DoubleAbove = 234,
400 Combining_IotaSubscript = 240
403 enum UnicodeVersion {
433 inline Category
category()
const noexcept {
return QChar::category(ucs); }
434 inline Direction
direction()
const noexcept {
return QChar::direction(ucs); }
435 inline JoiningType joiningType()
const noexcept {
return QChar::joiningType(ucs); }
436 inline unsigned char combiningClass()
const noexcept {
return QChar::combiningClass(ucs); }
438 inline QChar mirroredChar()
const noexcept {
return QChar(QChar::mirroredChar(ucs)); }
439 inline bool hasMirrored()
const noexcept {
return QChar::hasMirrored(ucs); }
442 inline Decomposition decompositionTag()
const noexcept {
return QChar::decompositionTag(ucs); }
444 inline int digitValue()
const noexcept {
return QChar::digitValue(ucs); }
445 inline QChar toLower()
const noexcept {
return QChar(QChar::toLower(ucs)); }
446 inline QChar toUpper()
const noexcept {
return QChar(QChar::toUpper(ucs)); }
447 inline QChar toTitleCase()
const noexcept {
return QChar(QChar::toTitleCase(ucs)); }
448 inline QChar toCaseFolded()
const noexcept {
return QChar(QChar::toCaseFolded(ucs)); }
450 inline Script script()
const noexcept {
return QChar::script(ucs); }
452 inline UnicodeVersion unicodeVersion()
const noexcept {
return QChar::unicodeVersion(ucs); }
454 constexpr inline char toLatin1()
const noexcept {
return ucs > 0xff ?
'\0' : char(ucs); }
455 constexpr inline char16_t unicode()
const noexcept {
return ucs; }
456 constexpr inline char16_t &unicode()
noexcept {
return ucs; }
460 constexpr inline bool isNull()
const noexcept {
return ucs == 0; }
462 inline bool isPrint()
const noexcept {
return QChar::isPrint(ucs); }
463 constexpr inline bool isSpace()
const noexcept {
return QChar::isSpace(ucs); }
464 inline bool isMark()
const noexcept {
return QChar::isMark(ucs); }
465 inline bool isPunct()
const noexcept {
return QChar::isPunct(ucs); }
466 inline bool isSymbol()
const noexcept {
return QChar::isSymbol(ucs); }
467 constexpr inline bool isLetter()
const noexcept {
return QChar::isLetter(ucs); }
468 constexpr inline bool isNumber()
const noexcept {
return QChar::isNumber(ucs); }
469 constexpr inline bool isLetterOrNumber()
const noexcept {
return QChar::isLetterOrNumber(ucs); }
470 constexpr inline bool isDigit()
const noexcept {
return QChar::isDigit(ucs); }
471 constexpr inline bool isLower()
const noexcept {
return QChar::isLower(ucs); }
472 constexpr inline bool isUpper()
const noexcept {
return QChar::isUpper(ucs); }
473 constexpr inline bool isTitleCase()
const noexcept {
return QChar::isTitleCase(ucs); }
475 constexpr inline bool isNonCharacter()
const noexcept {
return QChar::isNonCharacter(ucs); }
476 constexpr inline bool isHighSurrogate()
const noexcept {
return QChar::isHighSurrogate(ucs); }
477 constexpr inline bool isLowSurrogate()
const noexcept {
return QChar::isLowSurrogate(ucs); }
478 constexpr inline bool isSurrogate()
const noexcept {
return QChar::isSurrogate(ucs); }
480 constexpr inline uchar cell()
const noexcept {
return uchar(ucs & 0xff); }
481 constexpr inline uchar row()
const noexcept {
return uchar((ucs>>8)&0xff); }
482 constexpr inline void setCell(
uchar acell)
noexcept { ucs = char16_t((ucs & 0xff00) + acell); }
483 constexpr inline void setRow(
uchar arow)
noexcept { ucs = char16_t((
char16_t(arow)<<8) + (ucs&0xff)); }
485 static constexpr inline bool isNonCharacter(
char32_t ucs4)
noexcept
487 return ucs4 >= 0xfdd0 && (ucs4 <= 0xfdef || (ucs4 & 0xfffe) == 0xfffe);
489 static constexpr inline bool isHighSurrogate(
char32_t ucs4)
noexcept
491 return (ucs4 & 0xfffffc00) == 0xd800;
493 static constexpr inline bool isLowSurrogate(
char32_t ucs4)
noexcept
495 return (ucs4 & 0xfffffc00) == 0xdc00;
497 static constexpr inline bool isSurrogate(
char32_t ucs4)
noexcept
499 return (ucs4 - 0xd800u < 2048u);
501 static constexpr inline bool requiresSurrogates(
char32_t ucs4)
noexcept
503 return (ucs4 >= 0x10000);
505 static constexpr inline char32_t surrogateToUcs4(
char16_t high,
char16_t low)
noexcept
509 return (
char32_t(high)<<10) + low - 0x35fdc00;
511 static constexpr inline char32_t surrogateToUcs4(
QChar high,
QChar low)
noexcept
513 return surrogateToUcs4(high.ucs, low.ucs);
515 static constexpr inline char16_t highSurrogate(
char32_t ucs4)
noexcept
517 return char16_t((ucs4>>10) + 0xd7c0);
519 static constexpr inline char16_t lowSurrogate(
char32_t ucs4)
noexcept
521 return char16_t(ucs4%0x400 + 0xdc00);
551 return ucs4 == 0x20 || (ucs4 <= 0x0d && ucs4 >= 0x09)
552 || (ucs4 > 127 && (ucs4 == 0x85 || ucs4 == 0xa0 || QChar::isSpace_helper(ucs4)));
559 return (ucs4 >=
'A' && ucs4 <=
'z' && (ucs4 >=
'a' || ucs4 <=
'Z'))
560 || (ucs4 > 127 && QChar::isLetter_helper(ucs4));
563 {
return (ucs4 <=
'9' && ucs4 >=
'0') || (ucs4 > 127 && QChar::isNumber_helper(ucs4)); }
566 return (ucs4 >=
'A' && ucs4 <=
'z' && (ucs4 >=
'a' || ucs4 <=
'Z'))
567 || (ucs4 >=
'0' && ucs4 <=
'9')
568 || (ucs4 > 127 && QChar::isLetterOrNumber_helper(ucs4));
571 {
return (ucs4 <=
'9' && ucs4 >=
'0') || (ucs4 > 127 && QChar::category(ucs4) == Number_DecimalDigit); }
573 {
return (ucs4 <=
'z' && ucs4 >=
'a') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Lowercase); }
575 {
return (ucs4 <=
'Z' && ucs4 >=
'A') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Uppercase); }
577 {
return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
580 {
return lhs.ucs == rhs.ucs; }
587 {
return lhs.isNull(); }
605#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
608 {
return equal_helper(lhs, rhs); }
612 const int res = compare_helper(lhs, rhs);
618#ifdef QT_NO_CAST_FROM_ASCII