10#include <QVariantList>
95 if (
escaped.keys().contains(c2)) {
100 for (
int i=0; i<3; i++) {
103 if (c2 >=
'0' && c2 <=
'9') {
109 int val = octal.toInt(&ok, 8);
111 qWarning() <<
"escaped octal" << val;
127 QTextCodec *Utf16Codec = QTextCodec::codecForName(
"UTF-16BE");
128 val = Utf16Codec->toUnicode(text);
130 val = QString::fromLatin1(text);
146 val = QString(
"<"+QString::fromLatin1(hex)+
">");
152 bool isDouble =
false;
155 if (c ==
'-' || c ==
'+') {
159 while (c >=
'0' && c <=
'9') {
167 while (c >=
'0' && c <=
'9') {
175 val = number.toDouble(&ok);
177 val = number.toInt(&ok);
188 object.insert(key.toString(), QVariant());
189 if (key.type() == QVariant::String &&
parseValue(dev, val)) {
190 object.insert(key.toString(), val);
200 }
else if (checkEnd) {
236 QVariantHash
object = QVariantHash();
248 QVariantList array = QVariantList();
264 }
else if (c ==
't') {
266 dev.read(t.data(), 3);
267 if (t[0] ==
'r' && t[1] ==
'u' && t[2] ==
'e') {
273 }
else if (c ==
'f') {
275 dev.read(t.data(), 4);
276 if (t[0] ==
'a' && t[1] ==
'l' && t[2] ==
's' && t[3] ==
'e') {
281 }
else if (c ==
'n') {
283 dev.read(t.data(), 3);
284 if (t[0] ==
'u' && t[1] ==
'l' && t[2] ==
'l') {
303 if (dev.open(QIODevice::ReadOnly)) {
310 qWarning() <<
"dev not at end";
315 qWarning() <<
"txt2 dev not at end";
321 return root.toHash();
bool parseArray(QIODevice &dev, QVariantList &array)
QVariantHash parseCosToJson(QByteArray *ba)
bool parseValue(QIODevice &dev, QVariant &val)
bool parseObject(QIODevice &dev, QVariantHash &object, bool checkEnd=true)
bool parseName(QIODevice &dev, QVariant &val)
bool parseString(QIODevice &dev, QVariant &val)
bool parseHexString(QIODevice &dev, QVariant &val)
const QMap< char, char > escaped
void eatSpace(QIODevice &dev)
bool isWhiteSpace(char c)
bool parseNumber(QIODevice &dev, QVariant &val)