Skip to content

Commit 3d8a3e5

Browse files
committed
Begin to make xml builder more tolerant for unexpected attributes and tags errors
1 parent 6df1210 commit 3d8a3e5

File tree

6 files changed

+165
-132
lines changed

6 files changed

+165
-132
lines changed

src/core/project/core_builder.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -446,12 +446,12 @@ bool mbCoreBuilder::loadXml(const QString &file, mbCoreDom *dom)
446446

447447
bool mbCoreBuilder::loadXml(QIODevice *io, mbCoreDom *dom)
448448
{
449-
QXmlStreamReader reader(io);
449+
mbCoreXmlStreamReader reader(io);
450450
for (bool finished = false; !finished && !reader.hasError();)
451451
{
452452
switch (reader.readNext())
453453
{
454-
case QXmlStreamReader::StartElement:
454+
case mbCoreXmlStreamReader::StartElement:
455455
{
456456
const QString tag = reader.name().toString().toLower();
457457
if (tag == dom->tagName())
@@ -461,7 +461,7 @@ bool mbCoreBuilder::loadXml(QIODevice *io, mbCoreDom *dom)
461461
finished = true;
462462
}
463463
break;
464-
case QXmlStreamReader::EndDocument:
464+
case mbCoreXmlStreamReader::EndDocument:
465465
reader.raiseError(QString("<%1>-tag not found").arg(dom->tagName()));
466466
finished = true;
467467
break;
@@ -474,6 +474,11 @@ bool mbCoreBuilder::loadXml(QIODevice *io, mbCoreDom *dom)
474474
setError(reader.errorString());
475475
return false;
476476
}
477+
if (reader.hasWarning())
478+
{
479+
Q_FOREACH(const QString text, reader.warnings())
480+
mbCore::LogWarning(QStringLiteral("Builder"), text);
481+
}
477482
return true;
478483
}
479484

@@ -493,7 +498,7 @@ bool mbCoreBuilder::saveXml(const QString &file, const mbCoreDom *dom)
493498

494499
bool mbCoreBuilder::saveXml(QIODevice *io, const mbCoreDom *dom)
495500
{
496-
QXmlStreamWriter writer(io);
501+
mbCoreXmlStreamWriter writer(io);
497502
writer.setAutoFormatting(true);
498503
writer.writeStartDocument();
499504
dom->write(writer);

src/core/project/core_dom.cpp

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,15 @@ mbCoreDom::~mbCoreDom()
2828
{
2929
}
3030

31+
void mbCoreXmlStreamReader::raiseWarning(const QString &text)
32+
{
33+
m_warnings.append(QString("Warning (row=%1, column=%2): '%3'").arg(QString::number(this->lineNumber()),
34+
QString::number(this->columnNumber()),
35+
text));
36+
}
37+
3138
// -----------------------------------------------------------------------------------------------------------------------
32-
// --------------------------------------------------- WATCH LIST ITEM ---------------------------------------------------
39+
// ---------------------------------------------------- DATA VIEW ITEM ---------------------------------------------------
3340
// -----------------------------------------------------------------------------------------------------------------------
3441

3542
mbCoreDomDataViewItem::Strings::Strings() :
@@ -52,7 +59,7 @@ mbCoreDomDataViewItem::~mbCoreDomDataViewItem()
5259
{
5360
}
5461

55-
void mbCoreDomDataViewItem::read(QXmlStreamReader &reader)
62+
void mbCoreDomDataViewItem::read(mbCoreXmlStreamReader &reader)
5663
{
5764
const Strings &s = Strings::instance();
5865

@@ -66,7 +73,7 @@ void mbCoreDomDataViewItem::read(QXmlStreamReader &reader)
6673
{
6774
switch (reader.readNext())
6875
{
69-
case QXmlStreamReader::StartElement :
76+
case mbCoreXmlStreamReader::StartElement :
7077
{
7178
const QString tag = reader.name().toString();
7279
if (tag == s.device)
@@ -77,10 +84,10 @@ void mbCoreDomDataViewItem::read(QXmlStreamReader &reader)
7784
m_settings.insert(tag, reader.readElementText());
7885
}
7986
break;
80-
case QXmlStreamReader::EndElement :
87+
case mbCoreXmlStreamReader::EndElement :
8188
finished = true;
8289
break;
83-
case QXmlStreamReader::Characters :
90+
case mbCoreXmlStreamReader::Characters :
8491
if (!reader.isWhitespace())
8592
m_text.append(reader.text().toString());
8693
break;
@@ -90,7 +97,7 @@ void mbCoreDomDataViewItem::read(QXmlStreamReader &reader)
9097
}
9198
}
9299

93-
void mbCoreDomDataViewItem::write(QXmlStreamWriter &writer, const QString &tagName) const
100+
void mbCoreDomDataViewItem::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
94101
{
95102
const Strings &s = Strings::instance();
96103

@@ -138,7 +145,7 @@ mbCoreDomDataView::~mbCoreDomDataView()
138145
qDeleteAll(m_items);
139146
}
140147

141-
void mbCoreDomDataView::read(QXmlStreamReader &reader)
148+
void mbCoreDomDataView::read(mbCoreXmlStreamReader &reader)
142149
{
143150
const Strings &s = Strings::instance();
144151
const mbCoreDomDataViewItem::Strings &sItem = mbCoreDomDataViewItem::Strings::instance();
@@ -163,7 +170,7 @@ void mbCoreDomDataView::read(QXmlStreamReader &reader)
163170
{
164171
switch (reader.readNext())
165172
{
166-
case QXmlStreamReader::StartElement :
173+
case mbCoreXmlStreamReader::StartElement :
167174
{
168175
const QString tag = reader.name().toString();
169176
if (tag == sItem.tagName)
@@ -176,10 +183,10 @@ void mbCoreDomDataView::read(QXmlStreamReader &reader)
176183
reader.raiseError(QStringLiteral("Unexpected element ") + tag);
177184
}
178185
break;
179-
case QXmlStreamReader::EndElement :
186+
case mbCoreXmlStreamReader::EndElement :
180187
finished = true;
181188
break;
182-
case QXmlStreamReader::Characters :
189+
case mbCoreXmlStreamReader::Characters :
183190
if (!reader.isWhitespace())
184191
m_text.append(reader.text().toString());
185192
break;
@@ -189,7 +196,7 @@ void mbCoreDomDataView::read(QXmlStreamReader &reader)
189196
}
190197
}
191198

192-
void mbCoreDomDataView::write(QXmlStreamWriter &writer, const QString &tagName) const
199+
void mbCoreDomDataView::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
193200
{
194201
const Strings &s = Strings::instance();
195202

@@ -231,7 +238,7 @@ mbCoreDomDevice::~mbCoreDomDevice()
231238
{
232239
}
233240

234-
void mbCoreDomDevice::read(QXmlStreamReader &reader)
241+
void mbCoreDomDevice::read(mbCoreXmlStreamReader &reader)
235242
{
236243
Q_FOREACH (const QXmlStreamAttribute &attribute, reader.attributes())
237244
{
@@ -245,18 +252,18 @@ void mbCoreDomDevice::read(QXmlStreamReader &reader)
245252
{
246253
switch (reader.readNext())
247254
{
248-
case QXmlStreamReader::StartElement :
255+
case mbCoreXmlStreamReader::StartElement :
249256
{
250257
const QString tag = reader.name().toString();
251258
if (readElement(reader, tag))
252259
continue;
253260
m_settings.insert(tag, reader.readElementText());
254261
}
255262
break;
256-
case QXmlStreamReader::EndElement :
263+
case mbCoreXmlStreamReader::EndElement :
257264
finished = true;
258265
break;
259-
case QXmlStreamReader::Characters :
266+
case mbCoreXmlStreamReader::Characters :
260267
if (!reader.isWhitespace())
261268
m_text.append(reader.text().toString());
262269
break;
@@ -266,7 +273,7 @@ void mbCoreDomDevice::read(QXmlStreamReader &reader)
266273
}
267274
}
268275

269-
void mbCoreDomDevice::write(QXmlStreamWriter &writer, const QString &tagName) const
276+
void mbCoreDomDevice::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
270277
{
271278
const Strings &s = Strings::instance();
272279

@@ -282,21 +289,21 @@ void mbCoreDomDevice::write(QXmlStreamWriter &writer, const QString &tagName) co
282289
writer.writeEndElement();
283290
}
284291

285-
bool mbCoreDomDevice::readAttribute(QXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
292+
bool mbCoreDomDevice::readAttribute(mbCoreXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
286293
{
287294
return false;
288295
}
289296

290-
void mbCoreDomDevice::writeAttributes(QXmlStreamWriter &/*writer*/) const
297+
void mbCoreDomDevice::writeAttributes(mbCoreXmlStreamWriter &/*writer*/) const
291298
{
292299
}
293300

294-
bool mbCoreDomDevice::readElement(QXmlStreamReader &/*reader*/, const QString &/*tag*/)
301+
bool mbCoreDomDevice::readElement(mbCoreXmlStreamReader &/*reader*/, const QString &/*tag*/)
295302
{
296303
return false;
297304
}
298305

299-
void mbCoreDomDevice::writeElements(QXmlStreamWriter &/*writer*/) const
306+
void mbCoreDomDevice::writeElements(mbCoreXmlStreamWriter &/*writer*/) const
300307
{
301308
}
302309

@@ -325,7 +332,7 @@ mbCoreDomPort::~mbCoreDomPort()
325332
{
326333
}
327334

328-
void mbCoreDomPort::read(QXmlStreamReader &reader)
335+
void mbCoreDomPort::read(mbCoreXmlStreamReader &reader)
329336
{
330337
mbCoreDomPort::Strings s = mbCoreDomPort::Strings::instance();
331338

@@ -341,18 +348,18 @@ void mbCoreDomPort::read(QXmlStreamReader &reader)
341348
{
342349
switch (reader.readNext())
343350
{
344-
case QXmlStreamReader::StartElement :
351+
case mbCoreXmlStreamReader::StartElement :
345352
{
346353
const QString tag = reader.name().toString();
347354
if (readElement(reader, tag))
348355
continue;
349356
m_settings.insert(tag, reader.readElementText());
350357
}
351358
break;
352-
case QXmlStreamReader::EndElement :
359+
case mbCoreXmlStreamReader::EndElement :
353360
finished = true;
354361
break;
355-
case QXmlStreamReader::Characters :
362+
case mbCoreXmlStreamReader::Characters :
356363
if (!reader.isWhitespace())
357364
m_text.append(reader.text().toString());
358365
break;
@@ -362,7 +369,7 @@ void mbCoreDomPort::read(QXmlStreamReader &reader)
362369
}
363370
}
364371

365-
void mbCoreDomPort::write(QXmlStreamWriter &writer, const QString &tagName) const
372+
void mbCoreDomPort::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
366373
{
367374
const Strings &s = Strings::instance();
368375

@@ -378,21 +385,21 @@ void mbCoreDomPort::write(QXmlStreamWriter &writer, const QString &tagName) cons
378385
writer.writeEndElement();
379386
}
380387

381-
bool mbCoreDomPort::readAttribute(QXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
388+
bool mbCoreDomPort::readAttribute(mbCoreXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
382389
{
383390
return false;
384391
}
385392

386-
void mbCoreDomPort::writeAttributes(QXmlStreamWriter &/*writer*/) const
393+
void mbCoreDomPort::writeAttributes(mbCoreXmlStreamWriter &/*writer*/) const
387394
{
388395
}
389396

390-
bool mbCoreDomPort::readElement(QXmlStreamReader &/*reader*/, const QString &/*tag*/)
397+
bool mbCoreDomPort::readElement(mbCoreXmlStreamReader &/*reader*/, const QString &/*tag*/)
391398
{
392399
return false;
393400
}
394401

395-
void mbCoreDomPort::writeElements(QXmlStreamWriter &/*writer*/) const
402+
void mbCoreDomPort::writeElements(mbCoreXmlStreamWriter &/*writer*/) const
396403
{
397404
}
398405

@@ -423,7 +430,7 @@ mbCoreDomTaskInfo::~mbCoreDomTaskInfo()
423430
{
424431
}
425432

426-
void mbCoreDomTaskInfo::read(QXmlStreamReader &reader)
433+
void mbCoreDomTaskInfo::read(mbCoreXmlStreamReader &reader)
427434
{
428435
mbCoreDomTaskInfo::Strings s = mbCoreDomTaskInfo::Strings::instance();
429436

@@ -447,16 +454,16 @@ void mbCoreDomTaskInfo::read(QXmlStreamReader &reader)
447454
{
448455
switch (reader.readNext())
449456
{
450-
case QXmlStreamReader::StartElement :
457+
case mbCoreXmlStreamReader::StartElement :
451458
{
452459
const QString tag = reader.name().toString();
453460
m_settings.insert(tag, reader.readElementText());
454461
}
455462
break;
456-
case QXmlStreamReader::EndElement :
463+
case mbCoreXmlStreamReader::EndElement :
457464
finished = true;
458465
break;
459-
case QXmlStreamReader::Characters :
466+
case mbCoreXmlStreamReader::Characters :
460467
if (!reader.isWhitespace())
461468
m_text.append(reader.text().toString());
462469
break;
@@ -466,7 +473,7 @@ void mbCoreDomTaskInfo::read(QXmlStreamReader &reader)
466473
}
467474
}
468475

469-
void mbCoreDomTaskInfo::write(QXmlStreamWriter &writer, const QString &tagName) const
476+
void mbCoreDomTaskInfo::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
470477
{
471478
mbCoreDomTaskInfo::Strings s = mbCoreDomTaskInfo::Strings::instance();
472479

@@ -522,7 +529,7 @@ mbCoreDomProject::~mbCoreDomProject()
522529
delete m_tasks;
523530
}
524531

525-
void mbCoreDomProject::read(QXmlStreamReader &reader)
532+
void mbCoreDomProject::read(mbCoreXmlStreamReader &reader)
526533
{
527534
mbCoreDomProject::Strings s = mbCoreDomProject::Strings::instance();
528535

@@ -536,14 +543,14 @@ void mbCoreDomProject::read(QXmlStreamReader &reader)
536543
}
537544
if (readAttribute(reader, attribute))
538545
continue;
539-
reader.raiseError(QStringLiteral("Unexpected attribute ") + name.toString());
546+
reader.raiseWarning(QStringLiteral("Unexpected attribute ") + name.toString());
540547
}
541548

542549
for (bool finished = false; !finished && !reader.hasError();)
543550
{
544551
switch (reader.readNext())
545552
{
546-
case QXmlStreamReader::StartElement :
553+
case mbCoreXmlStreamReader::StartElement :
547554
{
548555
const QString tag = reader.name().toString();
549556
if (tag == s.name)
@@ -583,13 +590,14 @@ void mbCoreDomProject::read(QXmlStreamReader &reader)
583590
}
584591
if (readElement(reader, tag))
585592
continue;
586-
reader.raiseError(QStringLiteral("Unexpected element ") + tag);
593+
reader.skipCurrentElement();
594+
reader.raiseWarning(QStringLiteral("Unexpected element ") + tag);
587595
}
588596
break;
589-
case QXmlStreamReader::EndElement :
597+
case mbCoreXmlStreamReader::EndElement :
590598
finished = true;
591599
break;
592-
case QXmlStreamReader::Characters :
600+
case mbCoreXmlStreamReader::Characters :
593601
if (!reader.isWhitespace())
594602
m_text.append(reader.text().toString());
595603
break;
@@ -599,7 +607,7 @@ void mbCoreDomProject::read(QXmlStreamReader &reader)
599607
}
600608
}
601609

602-
void mbCoreDomProject::write(QXmlStreamWriter &writer, const QString &tagName) const
610+
void mbCoreDomProject::write(mbCoreXmlStreamWriter &writer, const QString &tagName) const
603611
{
604612
mbCoreDomProject::Strings s = mbCoreDomProject::Strings::instance();
605613

@@ -659,20 +667,20 @@ void mbCoreDomProject::setVersionStr(const QString &versionStr)
659667
m_version.patch = patch;
660668
}
661669

662-
bool mbCoreDomProject::readAttribute(QXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
670+
bool mbCoreDomProject::readAttribute(mbCoreXmlStreamReader &/*reader*/, const QXmlStreamAttribute &/*attribute*/)
663671
{
664672
return false;
665673
}
666674

667-
void mbCoreDomProject::writeAttributes(QXmlStreamWriter &/*writer*/) const
675+
void mbCoreDomProject::writeAttributes(mbCoreXmlStreamWriter &/*writer*/) const
668676
{
669677
}
670678

671-
bool mbCoreDomProject::readElement(QXmlStreamReader &/*reader*/, const QString &/*tag*/)
679+
bool mbCoreDomProject::readElement(mbCoreXmlStreamReader &/*reader*/, const QString &/*tag*/)
672680
{
673681
return false;
674682
}
675683

676-
void mbCoreDomProject::writeElements(QXmlStreamWriter &/*writer*/) const
684+
void mbCoreDomProject::writeElements(mbCoreXmlStreamWriter &/*writer*/) const
677685
{
678686
}

0 commit comments

Comments
 (0)