5#ifndef QSTRINGCONVERTER_P_H
6#define QSTRINGCONVERTER_P_H
19#include <QtCore/qstring.h>
20#include <QtCore/qendian.h>
21#include <QtCore/qstringconverter.h>
22#include <QtCore/private/qglobal_p.h>
39 char16_t *
dst =
reinterpret_cast<char16_t *
>(
buffer);
41 return reinterpret_cast<QChar *
>(
dst);
91 { *
ptr++ = char16_t(uc); }
107 { *
ptr++ = char32_t(uc); }
124 template <
typename Traits,
typename OutputPtr,
typename InputPtr>
inline
127 if (!Traits::skipAsciiHandling && u < 0x80) {
131 }
else if (u < 0x0800) {
134 Traits::appendByte(
dst, 0xc0 |
uchar(u >> 6));
139 return Traits::Error;
142 Traits::appendByte(
dst, 0xe0 |
uchar(u >> 12));
146 if (Traits::availableUtf16(
src,
end) == 0)
147 return Traits::EndOfString;
149 char16_t low = Traits::peekUtf16(
src);
151 return Traits::Error;
153 return Traits::Error;
155 Traits::advanceUtf16(
src);
159 return Traits::Error;
162 Traits::appendByte(
dst, 0xf0 | (
uchar(ucs4 >> 18) & 0xf));
165 Traits::appendByte(
dst, 0x80 | (
uchar(ucs4 >> 12) & 0x3f));
172 Traits::appendByte(
dst, 0x80 | (
uchar(u >> 6) & 0x3f));
176 Traits::appendByte(
dst, 0x80 | (u & 0x3f));
182 return (
b & 0xc0) == 0x80;
187 template <
typename Traits,
typename OutputPtr,
typename InputPtr>
inline
194 if (!Traits::skipAsciiHandling &&
b < 0x80) {
196 Traits::appendUtf16(
dst,
b);
203 return Traits::Error;
204 }
else if (
b < 0xe0) {
208 }
else if (
b < 0xf0) {
212 }
else if (
b < 0xf5) {
220 return Traits::Error;
224 if (
Q_UNLIKELY(bytesAvailable < charsNeeded - 1)) {
227 return Traits::Error;
229 return Traits::Error;
230 return Traits::EndOfString;
234 b = Traits::peekByte(
src, 0);
236 return Traits::Error;
240 if (charsNeeded > 2) {
242 b = Traits::peekByte(
src, 1);
244 return Traits::Error;
248 if (charsNeeded > 3) {
250 b = Traits::peekByte(
src, 2);
252 return Traits::Error;
259 if (!Traits::isTrusted) {
261 return Traits::Error;
263 return Traits::Error;
265 return Traits::Error;
272 Traits::appendUtf16(
dst,
char16_t(uc));
275 Traits::appendUcs4(
dst, uc);
278 Traits::advanceByte(
src, charsNeeded - 1);
294 char16_t *
dst =
reinterpret_cast<char16_t *
>(
buffer);
296 return reinterpret_cast<QChar *
>(
dst);
305 char16_t *
buffer =
reinterpret_cast<char16_t *
>(
out);
347#if !defined(Q_OS_WIN) || defined(QT_BOOTSTRAPPED)
353 static int checkUtf8();
370 return convertToUnicode_sys(
in,
state);
377 return convertFromUnicode_sys(
in,
state);
T loadRelaxed() const noexcept
constexpr bool isNonCharacter() const noexcept
static constexpr char32_t surrogateToUcs4(char16_t high, char16_t low) noexcept
Converts a UTF16 surrogate pair with the given high and low values to it's UCS-4-encoded code point.
static constexpr bool requiresSurrogates(char32_t ucs4) noexcept
Returns true if the UCS-4-encoded character specified by ucs4 can be split into the high and low part...
static constexpr char16_t highSurrogate(char32_t ucs4) noexcept
Returns the high surrogate part of a UCS-4-encoded code point.
constexpr bool isLowSurrogate() const noexcept
Returns true if the QChar is the low part of a UTF16 surrogate (for example if its code point is in r...
constexpr bool isSurrogate() const noexcept
static constexpr char16_t lowSurrogate(char32_t ucs4) noexcept
Returns the low surrogate part of a UCS-4-encoded code point.
constexpr bool isHighSurrogate() const noexcept
Returns true if the QChar is the high part of a UTF16 surrogate (for example if its code point is in ...
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
bool isContinuationByte(uchar b)
static ControlElement< T > * ptr(QWidget *widget)
GLboolean GLboolean GLboolean b
static QString convertToUnicode(const QString &asciiDomain, QUrl::AceProcessingOptions options)
QTextStream out(stdout)
[7]
static char16_t * convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept
static QChar * convertToUnicode(QChar *dst, QByteArrayView in, QStringConverterBase::State *state) noexcept
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept
static QChar * convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
static QString convertToUnicode(QByteArrayView in, QStringConverter::State *state)
static QByteArray convertFromUnicode(QStringView in, QStringConverter::State *state)
static Q_CORE_EXPORT QString convertToUnicode(QByteArrayView, QStringConverter::State *, DataEndianness=DetectEndianness)
static Q_CORE_EXPORT QByteArray convertFromUnicode(QStringView, QStringConverter::State *, DataEndianness=DetectEndianness)
static Q_CORE_EXPORT QByteArray convertFromUnicode(QStringView, QStringConverter::State *, DataEndianness=DetectEndianness)
static QChar * convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian)
static const bool skipAsciiHandling
static void appendByte(qchar8_t *&ptr, qchar8_t b)
static uchar peekByte(const uchar *ptr, qsizetype n=0)
static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
static void appendByte(uchar *&ptr, uchar b)
static void advanceByte(const uchar *&ptr, qsizetype n=1)
static const bool isTrusted
static void appendUtf16(char32_t *&ptr, char16_t uc)
static const bool skipAsciiHandling
static char16_t peekUtf16(const char16_t *ptr, qsizetype n=0)
static void appendUcs4(char16_t *&ptr, char32_t uc)
static const int EndOfString
static void advanceUtf16(const char16_t *&ptr, qsizetype n=1)
static uchar peekByte(const qchar8_t *ptr, qsizetype n=0)
static void appendUtf16(char16_t *&ptr, char16_t uc)
static const bool allowNonCharacters
static qptrdiff availableUtf16(const char16_t *ptr, const char16_t *end)
static void appendUcs4(char32_t *&ptr, char32_t uc)
static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
static void advanceByte(const qchar8_t *&ptr, qsizetype n=1)
static Q_CORE_EXPORT QByteArray convertFromUnicode(QStringView in)
static int compareUtf8(QByteArrayView utf8, QStringView utf16, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
static QChar * convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
static ValidUtf8Result isValidUtf8(QByteArrayView in)
static Q_CORE_EXPORT char * convertFromLatin1(char *out, QLatin1StringView in)
static QChar * convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)