20 #include <QTextStream>
28 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
33 for (
int i = 0; i < columnsSize.
size(); ++i) {
52 for (
const QString &header : headers) {
57 if (columnsSize.
empty()) {
58 for (
const QString &row : rows) {
61 }
else if (rows.size() != columnsSize.
size()) {
62 qFatal(
"Incomplete table");
68 if (row.size() > columnsSize.
size()) {
69 qFatal(
"Incomplete table");
73 for (
int i = 0; i < row.size(); ++i) {
74 columnsSize[i] = qMax(columnsSize[i], row[i].size());
79 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
86 QByteArray div = buildTableDivision(columnsSize);
95 if (!headers.isEmpty()) {
97 for (
int i = 0; i < headers.size(); ++i) {
100 out.setFieldWidth(columnsSize[i]);
103 out.setFieldWidth(0);
114 for (
int i = 0; i < row.size(); ++i) {
117 out.setFieldWidth(columnsSize[i]);
120 out.setFieldWidth(0);
140 char *data = ba.
data();
141 const char *inputPtr = data;
143 const int len = ba.
count();
144 bool skipUtf8 =
true;
146 for (
int i = 0 ; i < len; ++i, ++outlen) {
147 const char c = inputPtr[i];
148 if (c ==
'%' && i + 2 < len) {
149 int a = inputPtr[++i];
150 int b = inputPtr[++i];
152 if (a >=
'0' && a <=
'9') a -=
'0';
153 else if (a >=
'a' && a <=
'f') a = a -
'a' + 10;
154 else if (a >=
'A' && a <=
'F') a = a -
'A' + 10;
156 if (b >=
'0' && b <=
'9') b -=
'0';
157 else if (b >=
'a' && b <=
'f') b = b -
'a' + 10;
158 else if (b >=
'A' && b <=
'F') b = b -
'A' + 10;
160 *data++ = (char)((a << 4) | b);
162 }
else if (c ==
'+') {
185 const char *inputPtr = data;
188 bool skipUtf8 =
true;
192 auto processKeyPair = [&] {
194 if ((data - from) == 0) {
201 }
else if ((data - from) > 0) {
206 for (
int i = 0; i < len; ++i, ++outlen) {
207 const char c = inputPtr[i];
208 if (c ==
'%' && i + 2 < len) {
209 int a = inputPtr[++i];
210 int b = inputPtr[++i];
212 if (a >=
'0' && a <=
'9') a -=
'0';
213 else if (a >=
'a' && a <=
'f') a = a -
'a' + 10;
214 else if (a >=
'A' && a <=
'F') a = a -
'A' + 10;
216 if (b >=
'0' && b <=
'9') b -=
'0';
217 else if (b >=
'a' && b <=
'f') b = b -
'a' + 10;
218 else if (b >=
'A' && b <=
'F') b = b -
'A' + 10;
220 *data++ = (char)((a << 4) | b);
222 }
else if (c ==
'+') {
224 }
else if (c ==
'=') {
229 }
else if (c ==
'&') {
251 char *data = ba->
data();
252 const char *inputPtr = data;
254 int len = ba->
count();
255 bool skipUtf8 =
true;
257 for (
int i = 0; i < len; ++i, ++outlen) {
258 const char c = inputPtr[i];
259 if (c ==
'%' && i + 2 < len) {
260 int a = inputPtr[++i];
261 int b = inputPtr[++i];
263 if (a >=
'0' && a <=
'9') a -=
'0';
264 else if (a >=
'a' && a <=
'f') a = a -
'a' + 10;
265 else if (a >=
'A' && a <=
'F') a = a -
'A' + 10;
267 if (b >=
'0' && b <=
'9') b -=
'0';
268 else if (b >=
'a' && b <=
'f') b = b -
'a' + 10;
269 else if (b >=
'A' && b <=
'F') b = b -
'A' + 10;
271 *data++ = (char)((a << 4) | b);
273 }
else if (c ==
'+') {
The Cutelyst namespace holds all public Cutelyst API.
int count(char ch) const const
QByteArray & fill(char ch, int size)
bool isEmpty() const const
bool isEmpty() const const
QMap::iterator insertMulti(const Key &key, const T &value)
QString fromLatin1(const char *str, int size)
QString fromUtf8(const char *str, int size)
bool isEmpty() const const
QByteArray toLatin1() const const
void push_back(const T &value)