summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-09-07 14:01:20 +0200
committerLars Knoll <lars.knoll@qt.io>2020-09-15 08:12:20 +0200
commit79e0374143ab385cb12a17443e91c8eb9d2f3a4b (patch)
tree821f3b5d1111b4f6b2de72e6f94995c67d0635d0
parent0aaebc3378c9264e5b5ac0facbd0d8961fd57a9f (diff)
Remove the SAX parser from QtXml
It has been deprecated and will live in qt5compat from now on. Fixes: QTBUG-86480 Change-Id: I3744c7cee058d51d0fce633a174ab1a0f9235d2c Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--src/tools/bootstrap/CMakeLists.txt1
-rw-r--r--src/tools/bootstrap/bootstrap.pro3
-rw-r--r--src/tools/uic/qclass_lib_map.h14
-rw-r--r--src/xml/CMakeLists.txt1
-rw-r--r--src/xml/doc/snippets/simpleparse/main.cpp97
-rw-r--r--src/xml/dom/qdom.cpp111
-rw-r--r--src/xml/dom/qdom_p.h10
-rw-r--r--src/xml/dom/qdomhelpers.cpp194
-rw-r--r--src/xml/dom/qdomhelpers_p.h92
-rw-r--r--src/xml/sax/qxml.cpp7999
-rw-r--r--src/xml/sax/qxml.h469
-rw-r--r--src/xml/sax/qxml_p.h328
-rw-r--r--src/xml/sax/sax.pri3
-rw-r--r--src/xml/xml.pro1
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp1
-rw-r--r--tests/auto/xml/CMakeLists.txt1
-rw-r--r--tests/auto/xml/sax/CMakeLists.txt7
-rw-r--r--tests/auto/xml/sax/qxml/.gitignore1
-rw-r--r--tests/auto/xml/sax/qxml/0x010D.xml1
-rw-r--r--tests/auto/xml/sax/qxml/CMakeLists.txt16
-rw-r--r--tests/auto/xml/sax/qxml/qxml.pro7
-rw-r--r--tests/auto/xml/sax/qxml/tst_qxml.cpp236
-rw-r--r--tests/auto/xml/sax/qxmlinputsource/.gitignore1
-rw-r--r--tests/auto/xml/sax/qxmlinputsource/CMakeLists.txt13
-rw-r--r--tests/auto/xml/sax/qxmlinputsource/qxmlinputsource.pro4
-rw-r--r--tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp304
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/.gitattributes8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/.gitignore1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/CMakeLists.txt27
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/encodings/doc_little-endian.xmlbin3186 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-16.xmlbin3186 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-8.xml77
-rwxr-xr-xtests/auto/xml/sax/qxmlsimplereader/generate_ref_files.sh30
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/parser/CMakeLists.txt19
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp103
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp449
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/parser/parser.h59
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/parser/parser.pro4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/qxmlsimplereader.pro11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp824
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/1-levels-nested-dtd.xml12
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/2-levels-nested-dtd.xml13
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/internal-entity-polynomial-attribute.xml13
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/001.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/001.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/002.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/002.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/003.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/003.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/004.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/004.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/005.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/005.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/006.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/006.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/007.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/007.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/008.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/008.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/009.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/009.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/010.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/010.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/011.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/011.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/012.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/012.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/013.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/013.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/014.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/014.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/015.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/015.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/016.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/016.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/017.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/017.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/018.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/018.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/019.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/019.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/020.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/020.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/021.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/021.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/022.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/022.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/023.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/023.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/024.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/024.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/025.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/025.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/026.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/026.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/027.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/027.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/028.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/028.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/029.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/029.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/030.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/030.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/031.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/031.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/032.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/032.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/033.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/033.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/034.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/034.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/035.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/035.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/036.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/036.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/037.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/037.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/038.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/038.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/039.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/039.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/040.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/040.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/041.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/041.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/042.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/042.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/043.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/043.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/044.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/044.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/045.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/045.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/046.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/046.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/047.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/047.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/048.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/048.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/049.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/049.xml.ref14
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/050.xml0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/050.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/051.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/051.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/052.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/052.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/053.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/053.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/054.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/054.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/055.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/055.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/056.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/056.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/057.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/057.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/058.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/058.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/059.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/059.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/060.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/060.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/061.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/061.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/062.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/062.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/063.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/063.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/064.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/064.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/065.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/065.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/066.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/066.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/067.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/067.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/068.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/068.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/069.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/069.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/070.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/070.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/071.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/071.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/072.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/072.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/073.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/073.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/074.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/074.xml.ref14
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/075.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/075.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/076.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/076.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/077.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/077.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/078.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/078.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/079.xml8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/079.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/080.xml8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/080.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/081.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/081.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/082.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/082.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/083.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/083.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/084.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/084.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/085.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/085.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/086.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/086.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/087.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/087.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/088.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/088.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/089.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/089.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/090.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/090.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/091.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/091.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/092.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/092.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/093.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/093.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/094.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/094.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/095.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/095.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/096.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/096.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/097.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/097.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/098.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/098.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/099.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/099.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/100.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/100.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/101.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/101.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/102.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/102.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/103.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/103.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/104.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/104.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/105.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/105.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/106.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/106.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/107.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/107.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/108.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/108.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/109.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/109.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/110.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/110.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/111.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/111.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/112.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/112.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/113.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/113.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/114.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/114.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/115.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/115.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/116.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/116.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/117.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/117.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/118.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/118.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/119.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/119.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/120.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/120.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/121.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/121.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/122.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/122.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/123.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/123.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/124.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/124.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/125.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/125.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/126.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/126.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/127.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/127.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/128.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/128.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/129.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/129.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/130.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/130.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/131.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/131.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/132.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/132.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/133.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/133.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/134.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/134.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/135.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/135.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/136.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/136.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/137.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/137.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/138.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/138.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/139.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/139.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/140.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/140.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/141.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/141.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/143.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/143.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/144.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/144.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/145.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/145.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/146.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/146.xml.refbin309 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/147.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/147.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/148.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/148.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/149.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/149.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/150.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/150.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/151.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/151.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/152.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/152.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/153.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/153.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/154.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/154.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/155.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/155.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/156.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/156.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/157.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/157.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/158.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/158.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/159.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/159.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/160.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/160.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/161.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/161.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/162.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/162.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/163.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/163.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/164.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/164.xml.ref5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/165.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/165.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/166.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/166.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/167.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/167.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/168.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/168.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/169.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/169.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/171.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/171.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/172.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/172.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/173.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/173.xml.ref3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/174.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/174.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/175.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/175.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/176.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/176.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/177.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/177.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/178.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/178.xml.ref6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/179.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/179.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/180.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/180.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/181.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/181.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/182.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/182.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/183.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/183.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/184.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/184.xml.ref4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/185.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/185.xml3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/185.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/186.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/186.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/null.ent0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/001.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/001.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/001.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/002.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/002.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/002.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/003.ent0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/003.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/003.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/004.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/004.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/004.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/005.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/005.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/005.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/006.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/006.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/006.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/007.entbin4 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/007.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/007.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/008.entbin54 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/008.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/008.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/009.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/009.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/009.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/010.ent0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/010.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/010.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/011.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/011.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/011.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/012.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/012.xml9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/012.xml.ref14
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/013.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/013.xml10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/013.xml.ref12
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/014.entbin12 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/014.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/014.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_1.xml13
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_1.xml.ref47
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_2.xml14
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_2.xml.ref47
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_3.xml9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/ext-sa/undef_entity_3.xml.ref16
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/001.ent0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/001.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/001.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/002.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/002.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/002.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/003-1.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/003-2.ent0
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/003.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/003.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/004-1.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/004-2.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/004.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/004.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/005-1.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/005-2.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/005.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/005.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/006.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/006.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/006.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/007.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/007.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/007.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/008.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/008.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/008.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/009.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/009.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/009.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/010.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/010.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/010.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/011.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/011.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/011.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/012.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/012.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/012.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/013.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/013.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/013.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/014.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/014.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/014.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/015.ent5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/015.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/015.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/016.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/016.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/016.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/017.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/017.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/017.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/018.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/018.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/018.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/019.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/019.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/019.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/020.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/020.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/020.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/021.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/021.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/021.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/022.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/022.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/022.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/023.ent5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/023.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/023.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/024.ent4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/024.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/024.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/025.ent5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/025.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/025.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/026.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/026.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/026.xml.ref12
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/027.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/027.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/027.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/028.ent2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/028.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/028.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/029.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/029.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/029.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/030.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/030.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/030.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/031-1.ent3
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/031-2.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/031.xml2
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/not-sa/031.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/001.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/001.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/002.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/002.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/003.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/003.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/004.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/004.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/005.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/005.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/006.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/006.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/007.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/007.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/008.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/008.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/009.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/009.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/010.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/010.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/011.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/011.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/012.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/012.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/013.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/013.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/014.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/014.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/015.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/015.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/016.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/016.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/017.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/017.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/018.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/018.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/019.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/019.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/020.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/020.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/021.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/021.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/022.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/022.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/023.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/023.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/024.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/024.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/025.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/025.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/026.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/026.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/027.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/027.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/028.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/028.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/029.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/029.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/030.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/030.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/031.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/031.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/032.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/032.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/033.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/033.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/034.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/034.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/035.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/035.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/036.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/036.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/037.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/037.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/038.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/038.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/039.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/039.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/040.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/040.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/041.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/041.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/042.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/042.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/043.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/043.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/044.xml10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/044.xml.ref20
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/045.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/045.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/046.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/046.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/047.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/047.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/048.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/048.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/049.xmlbin124 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/049.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/050.xmlbin132 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/050.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/051.xmlbin140 -> 0 bytes
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/051.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/052.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/052.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/053.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/053.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/054.xml10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/054.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/055.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/055.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/056.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/056.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/057.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/057.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/058.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/058.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/059.xml10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/059.xml.ref20
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/060.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/060.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/061.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/061.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/062.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/062.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/063.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/063.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/065.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/065.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/066.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/066.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/067.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/067.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/068.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/068.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/069.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/069.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/070.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/070.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/071.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/071.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/072.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/072.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/073.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/073.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/074.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/074.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/075.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/075.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/076.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/076.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/077.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/077.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/078.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/078.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/079.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/079.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/080.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/080.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/081.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/081.xml.ref15
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/082.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/082.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/083.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/083.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/084.xml1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/084.xml.ref7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/085.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/085.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/086.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/086.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/087.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/087.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/088.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/088.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/090.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/090.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/091.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/091.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/092.xml10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/092.xml.ref17
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/093.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/093.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/094.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/094.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/095.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/095.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/096.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/096.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/097.ent1
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/097.xml8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/097.xml.ref12
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/098.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/098.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/099.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/099.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/100.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/100.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/101.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/101.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/102.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/102.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/103.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/103.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/104.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/104.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/105.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/105.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/106.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/106.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/107.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/107.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/108.xml7
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/108.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/109.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/109.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/110.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/110.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/111.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/111.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/112.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/112.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/113.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/113.xml.ref8
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/114.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/114.xml.ref11
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/115.xml6
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/115.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/116.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/116.xml.ref10
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/117.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/117.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/118.xml5
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/118.xml.ref9
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/119.xml4
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/119.xml.ref8
-rw-r--r--tests/auto/xml/sax/sax.pro8
-rw-r--r--tests/auto/xml/xml.pro1
803 files changed, 3 insertions, 15583 deletions
diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt
index 272cd92128..fe69c371cb 100644
--- a/src/tools/bootstrap/CMakeLists.txt
+++ b/src/tools/bootstrap/CMakeLists.txt
@@ -127,7 +127,6 @@ qt_extend_target(Bootstrap
../../corelib/tools/qsize.cpp
../../corelib/tools/qversionnumber.cpp
../../xml/dom/qdom.cpp
- ../../xml/sax/qxml.cpp
DEFINES
HAVE_CONFIG_H
PCRE2_CODE_UNIT_WIDTH=16
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index c9277735c8..d2a780593e 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -112,8 +112,7 @@ SOURCES += \
../../corelib/tools/qsize.cpp \
../../corelib/tools/qline.cpp \
../../corelib/tools/qversionnumber.cpp \
- ../../xml/dom/qdom.cpp \
- ../../xml/sax/qxml.cpp
+ ../../xml/dom/qdom.cpp
unix:SOURCES += ../../corelib/kernel/qcore_unix.cpp \
../../corelib/kernel/qsharedmemory_posix.cpp \
diff --git a/src/tools/uic/qclass_lib_map.h b/src/tools/uic/qclass_lib_map.h
index 4bd3051cf2..5e11d61089 100644
--- a/src/tools/uic/qclass_lib_map.h
+++ b/src/tools/uic/qclass_lib_map.h
@@ -313,20 +313,6 @@ QT_CLASS_LIB(QDomNotation, QtXml, qdom.h)
QT_CLASS_LIB(QDomEntity, QtXml, qdom.h)
QT_CLASS_LIB(QDomEntityReference, QtXml, qdom.h)
QT_CLASS_LIB(QDomProcessingInstruction, QtXml, qdom.h)
-QT_CLASS_LIB(QXmlNamespaceSupport, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlAttributes, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlInputSource, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlParseException, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlReader, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlSimpleReader, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlLocator, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlContentHandler, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlErrorHandler, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlDTDHandler, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlEntityResolver, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlLexicalHandler, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlDeclHandler, QtXml, qxml.h)
-QT_CLASS_LIB(QXmlDefaultHandler, QtXml, qxml.h)
QT_CLASS_LIB(QXmlStreamAttribute, QtXml, qxmlstream.h)
QT_CLASS_LIB(QXmlStreamAttributes, QtXml, qxmlstream.h)
QT_CLASS_LIB(QXmlStreamEntityDeclaration, QtXml, qxmlstream.h)
diff --git a/src/xml/CMakeLists.txt b/src/xml/CMakeLists.txt
index 8b79b9df45..53cbeeaddc 100644
--- a/src/xml/CMakeLists.txt
+++ b/src/xml/CMakeLists.txt
@@ -9,7 +9,6 @@ qt_add_module(Xml
dom/qdom.cpp dom/qdom.h dom/qdom_p.h
dom/qdomhelpers.cpp dom/qdomhelpers_p.h
qtxmlglobal.h
- sax/qxml.cpp sax/qxml.h sax/qxml_p.h
DEFINES
QT_NO_FOREACH
QT_NO_USING_NAMESPACE
diff --git a/src/xml/doc/snippets/simpleparse/main.cpp b/src/xml/doc/snippets/simpleparse/main.cpp
deleted file mode 100644
index 57aeb82457..0000000000
--- a/src/xml/doc/snippets/simpleparse/main.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <qfile.h>
-#include <qxml.h>
-#include "handler.h"
-
-#include <iostream>
-
-int main(int argc, char **argv)
-{
- if (argc != 2) {
- std::cout << "Usage: " << argv[0] << " <filename>" << std::endl;
- return 1;
- }
-
- QFile *file = new QFile(argv[1]);
-
-//! [0]
- QXmlSimpleReader xmlReader;
- QXmlInputSource *source = new QXmlInputSource(file);
-//! [0]
-
-//! [1]
- Handler *handler = new Handler;
- xmlReader.setContentHandler(handler);
- xmlReader.setErrorHandler(handler);
-//! [1]
-
-//! [2]
- bool ok = xmlReader.parse(source);
-
- if (!ok)
- std::cout << "Parsing failed." << std::endl;
-//! [2]
- else {
- QStringList names = handler->names();
- QList<int> indentations = handler->indentations();
-
- int items = names.count();
-
- for (int i = 0; i < items; ++i) {
- for (int j = 0; j < indentations[i]; ++j)
- std::cout << ' ';
- std::cout << names[i].toLocal8Bit().constData() << std::endl;
- }
- }
-
- return 0;
-}
diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
index 0856a83a52..571e7fb0ac 100644
--- a/src/xml/dom/qdom.cpp
+++ b/src/xml/dom/qdom.cpp
@@ -53,7 +53,6 @@
#include <qregularexpression.h>
#endif
#include <qtextstream.h>
-#include <qxml.h>
#include <qvariant.h>
#include <qshareddata.h>
#include <qdebug.h>
@@ -5683,57 +5682,6 @@ void QDomDocumentPrivate::clear()
QDomNodePrivate::clear();
}
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-static void initializeReader(QXmlSimpleReader &reader, bool namespaceProcessing)
-{
- reader.setFeature(QLatin1String("http://xml.org/sax/features/namespaces"), namespaceProcessing);
- reader.setFeature(QLatin1String("http://xml.org/sax/features/namespace-prefixes"), !namespaceProcessing);
- reader.setFeature(QLatin1String("http://trolltech.com/xml/features/report-whitespace-only-CharData"), false); // Shouldn't change in Qt 4
-}
-
-bool QDomDocumentPrivate::setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn)
-{
- QXmlSimpleReader reader;
- initializeReader(reader, namespaceProcessing);
- return setContent(source, &reader, &reader, errorMsg, errorLine, errorColumn);
-}
-
-bool QDomDocumentPrivate::setContent(QXmlInputSource *source, QXmlReader *reader, QXmlSimpleReader *simpleReader, QString *errorMsg, int *errorLine, int *errorColumn)
-{
- clear();
- impl = new QDomImplementationPrivate;
- type = new QDomDocumentTypePrivate(this, this);
- type->ref.deref();
-
- bool namespaceProcessing = reader->feature(QLatin1String("http://xml.org/sax/features/namespaces"))
- && !reader->feature(QLatin1String("http://xml.org/sax/features/namespace-prefixes"));
-
- QDomHandler hnd(this, simpleReader, namespaceProcessing);
- reader->setContentHandler(&hnd);
- reader->setErrorHandler(&hnd);
- reader->setLexicalHandler(&hnd);
- reader->setDeclHandler(&hnd);
- reader->setDTDHandler(&hnd);
-
- if (!reader->parse(source)) {
- if (errorMsg)
- *errorMsg = std::get<0>(hnd.errorInfo());
- if (errorLine)
- *errorLine = std::get<1>(hnd.errorInfo());
- if (errorColumn)
- *errorColumn = std::get<2>(hnd.errorInfo());
- return false;
- }
-
- return true;
-}
-QT_WARNING_POP
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
bool QDomDocumentPrivate::setContent(QXmlStreamReader *reader, bool namespaceProcessing,
QString *errorMsg, int *errorLine, int *errorColumn)
{
@@ -6273,43 +6221,11 @@ bool QDomDocument::setContent(QIODevice* dev, bool namespaceProcessing, QString
if (!impl)
impl = new QDomDocumentPrivate();
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT_DEPRECATED_SINCE(5, 15)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QXmlInputSource source(dev);
-QT_WARNING_POP
- return IMPL->setContent(&source, namespaceProcessing, errorMsg, errorLine, errorColumn);
-#else
QXmlStreamReader streamReader(dev);
streamReader.setNamespaceProcessing(namespaceProcessing);
return IMPL->setContent(&streamReader, namespaceProcessing, errorMsg, errorLine, errorColumn);
-#endif
}
-#if QT_DEPRECATED_SINCE(5, 15)
-/*!
- \overload
- \obsolete
- \since 4.5
-
- This function reads the XML document from the QXmlInputSource \a source,
- returning true if the content was successfully parsed; otherwise returns \c false.
-
-*/
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-bool QDomDocument::setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn )
-{
- if (!impl)
- impl = new QDomDocumentPrivate();
- QXmlSimpleReader reader;
- initializeReader(reader, namespaceProcessing);
- return IMPL->setContent(source, &reader, &reader, errorMsg, errorLine, errorColumn);
-}
-QT_WARNING_POP
-
-#endif
-
/*!
\overload
@@ -6353,33 +6269,6 @@ bool QDomDocument::setContent(QIODevice* dev, QString *errorMsg, int *errorLine,
return setContent(dev, false, errorMsg, errorLine, errorColumn);
}
-#if QT_DEPRECATED_SINCE(5, 15)
-/*!
- \overload
- \obsolete
-
- This function reads the XML document from the QXmlInputSource \a source and
- parses it with the QXmlReader \a reader, returning true if the content was
- successfully parsed; otherwise returns \c false.
-
- This function doesn't change the features of the \a reader. If you want to
- use certain features for parsing you can use this function to set up the
- reader appropriately.
-
- \sa QXmlSimpleReader
-*/
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-bool QDomDocument::setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg, int *errorLine, int *errorColumn )
-{
- if (!impl)
- impl = new QDomDocumentPrivate();
- return IMPL->setContent(source, reader, nullptr, errorMsg, errorLine, errorColumn);
-}
-QT_WARNING_POP
-
-#endif
-
/*!
\overload
\since 5.15
diff --git a/src/xml/dom/qdom_p.h b/src/xml/dom/qdom_p.h
index 8ab81aa083..82c533b141 100644
--- a/src/xml/dom/qdom_p.h
+++ b/src/xml/dom/qdom_p.h
@@ -45,7 +45,6 @@
#include <qhash.h>
#include <qstring.h>
#include <qlist.h>
-#include <qxml.h>
#include <qshareddata.h>
QT_BEGIN_NAMESPACE
@@ -462,15 +461,6 @@ public:
QDomDocumentPrivate(QDomDocumentPrivate *n, bool deep);
~QDomDocumentPrivate();
-#if QT_DEPRECATED_SINCE(5, 15)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg,
- int *errorLine, int *errorColumn);
- bool setContent(QXmlInputSource *source, QXmlReader *reader, QXmlSimpleReader *simpleReader,
- QString *errorMsg, int *errorLine, int *errorColumn);
-QT_WARNING_POP
-#endif
bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg,
int *errorLine, int *errorColumn);
diff --git a/src/xml/dom/qdomhelpers.cpp b/src/xml/dom/qdomhelpers.cpp
index 69fb99715d..75d4c2c2b7 100644
--- a/src/xml/dom/qdomhelpers.cpp
+++ b/src/xml/dom/qdomhelpers.cpp
@@ -44,132 +44,10 @@
#include "qdomhelpers_p.h"
#include "qdom_p.h"
#include "qxmlstream.h"
-#include "private/qxml_p.h"
-QT_BEGIN_NAMESPACE
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-/**************************************************************
- *
- * QDomHandler
- *
- **************************************************************/
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-QDomHandler::QDomHandler(QDomDocumentPrivate *adoc, QXmlSimpleReader *areader,
- bool namespaceProcessing)
- : cdata(false), reader(areader), domBuilder(adoc, &locator, namespaceProcessing)
-{
-}
-
-QDomHandler::~QDomHandler() {}
-
-bool QDomHandler::endDocument()
-{
- return domBuilder.endDocument();
-}
-
-bool QDomHandler::startDTD(const QString &name, const QString &publicId, const QString &systemId)
-{
- return domBuilder.startDTD(name, publicId, systemId);
-}
-
-bool QDomHandler::startElement(const QString &nsURI, const QString &, const QString &qName,
- const QXmlAttributes &atts)
-{
- return domBuilder.startElement(nsURI, qName, atts);
-}
-
-bool QDomHandler::endElement(const QString &, const QString &, const QString &)
-{
- return domBuilder.endElement();
-}
-
-bool QDomHandler::characters(const QString &ch)
-{
- return domBuilder.characters(ch, cdata);
-}
-
-bool QDomHandler::processingInstruction(const QString &target, const QString &data)
-{
- return domBuilder.processingInstruction(target, data);
-}
-
-bool QDomHandler::skippedEntity(const QString &name)
-{
- // we can only handle inserting entity references into content
- if (reader && !reader->d_ptr->skipped_entity_in_content)
- return true;
-
- return domBuilder.skippedEntity(name);
-}
-
-bool QDomHandler::fatalError(const QXmlParseException &exception)
-{
- domBuilder.errorMsg = exception.message();
- domBuilder.errorLine = exception.lineNumber();
- domBuilder.errorColumn = exception.columnNumber();
- return QXmlDefaultHandler::fatalError(exception);
-}
-
-bool QDomHandler::startCDATA()
-{
- cdata = true;
- return true;
-}
-
-bool QDomHandler::endCDATA()
-{
- cdata = false;
- return true;
-}
-
-bool QDomHandler::startEntity(const QString &name)
-{
- return domBuilder.startEntity(name);
-}
-
-bool QDomHandler::endEntity(const QString &)
-{
- return domBuilder.endEntity();
-}
-
-bool QDomHandler::comment(const QString &ch)
-{
- return domBuilder.comment(ch);
-}
-
-bool QDomHandler::unparsedEntityDecl(const QString &name, const QString &publicId,
- const QString &systemId, const QString &notationName)
-{
- return domBuilder.unparsedEntityDecl(name, publicId, systemId, notationName);
-}
-
-bool QDomHandler::externalEntityDecl(const QString &name, const QString &publicId,
- const QString &systemId)
-{
- return unparsedEntityDecl(name, publicId, systemId, QString());
-}
-
-bool QDomHandler::notationDecl(const QString &name, const QString &publicId,
- const QString &systemId)
-{
- return domBuilder.notationDecl(name, publicId, systemId);
-}
-
-void QDomHandler::setDocumentLocator(QXmlLocator *locator)
-{
- this->locator.setLocator(locator);
-}
-
-QDomBuilder::ErrorInfo QDomHandler::errorInfo() const
-{
- return domBuilder.error();
-}
-QT_WARNING_POP
+#include <stack>
-#endif // QT_DEPRECATED_SINCE(5, 15)
+QT_BEGIN_NAMESPACE
/**************************************************************
*
@@ -189,36 +67,6 @@ int QDomDocumentLocator::line() const
return static_cast<int>(reader->lineNumber());
}
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-void QSAXDocumentLocator::setLocator(QXmlLocator *l)
-{
- locator = l;
-}
-
-int QSAXDocumentLocator::column() const
-{
- if (!locator)
- return 0;
-
- return static_cast<int>(locator->columnNumber());
-}
-
-int QSAXDocumentLocator::line() const
-{
- if (!locator)
- return 0;
-
- return static_cast<int>(locator->lineNumber());
-}
-
-QT_WARNING_POP
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
/**************************************************************
*
* QDomBuilder
@@ -253,44 +101,6 @@ bool QDomBuilder::startDTD(const QString &name, const QString &publicId, const Q
return true;
}
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-bool QDomBuilder::startElement(const QString &nsURI, const QString &qName,
- const QXmlAttributes &atts)
-{
- // tag name
- QDomNodePrivate *n;
- if (nsProcessing) {
- n = doc->createElementNS(nsURI, qName);
- } else {
- n = doc->createElement(qName);
- }
-
- if (!n)
- return false;
-
- n->setLocation(locator->line(), locator->column());
-
- node->appendChild(n);
- node = n;
-
- // attributes
- for (int i = 0; i < atts.length(); i++) {
- auto domElement = static_cast<QDomElementPrivate *>(node);
- if (nsProcessing)
- domElement->setAttributeNS(atts.uri(i), atts.qName(i), atts.value(i));
- else
- domElement->setAttribute(atts.qName(i), atts.value(i));
- }
-
- return true;
-}
-QT_WARNING_POP
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
bool QDomBuilder::startElement(const QString &nsURI, const QString &qName,
const QXmlStreamAttributes &atts)
{
diff --git a/src/xml/dom/qdomhelpers_p.h b/src/xml/dom/qdomhelpers_p.h
index 4de18f7d4d..f7264daf4b 100644
--- a/src/xml/dom/qdomhelpers_p.h
+++ b/src/xml/dom/qdomhelpers_p.h
@@ -41,7 +41,6 @@
#include <qcoreapplication.h>
#include <qglobal.h>
-#include <qxml.h>
QT_BEGIN_NAMESPACE
@@ -93,29 +92,6 @@ private:
QXmlStreamReader *reader;
};
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-class QSAXDocumentLocator : public QXmlDocumentLocator
-{
-public:
- ~QSAXDocumentLocator() override = default;
-
- int column() const override;
- int line() const override;
-
- void setLocator(QXmlLocator *l);
-
-private:
- QXmlLocator *locator = nullptr;
-};
-
-QT_WARNING_POP
-
-#endif
-
/**************************************************************
*
* QDomBuilder
@@ -129,12 +105,6 @@ public:
~QDomBuilder();
bool endDocument();
-#if QT_DEPRECATED_SINCE(5, 15)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- bool startElement(const QString &nsURI, const QString &qName, const QXmlAttributes &atts);
-QT_WARNING_POP
-#endif
bool startElement(const QString &nsURI, const QString &qName, const QXmlStreamAttributes &atts);
bool endElement();
bool characters(const QString &characters, bool cdata = false);
@@ -166,68 +136,6 @@ private:
bool nsProcessing;
};
-#if QT_DEPRECATED_SINCE(5, 15)
-
-/**************************************************************
- *
- * QDomHandler
- *
- **************************************************************/
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-class QDomHandler : public QXmlDefaultHandler
-{
-public:
- QDomHandler(QDomDocumentPrivate *d, QXmlSimpleReader *reader, bool namespaceProcessing);
- ~QDomHandler() override;
-
- // content handler
- bool endDocument() override;
- bool startElement(const QString &nsURI, const QString &localName, const QString &qName,
- const QXmlAttributes &atts) override;
- bool endElement(const QString &nsURI, const QString &localName, const QString &qName) override;
- bool characters(const QString &ch) override;
- bool processingInstruction(const QString &target, const QString &data) override;
- bool skippedEntity(const QString &name) override;
-
- // error handler
- bool fatalError(const QXmlParseException &exception) override;
-
- // lexical handler
- bool startCDATA() override;
- bool endCDATA() override;
- bool startEntity(const QString &) override;
- bool endEntity(const QString &) override;
- bool startDTD(const QString &name, const QString &publicId, const QString &systemId) override;
- bool comment(const QString &ch) override;
-
- // decl handler
- bool externalEntityDecl(const QString &name, const QString &publicId,
- const QString &systemId) override;
-
- // DTD handler
- bool notationDecl(const QString &name, const QString &publicId,
- const QString &systemId) override;
- bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId,
- const QString &notationName) override;
-
- void setDocumentLocator(QXmlLocator *locator) override;
-
- QDomBuilder::ErrorInfo errorInfo() const;
-
-private:
- bool cdata;
- QXmlSimpleReader *reader;
- QSAXDocumentLocator locator;
- QDomBuilder domBuilder;
-};
-
-QT_WARNING_POP
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
/**************************************************************
*
* QDomParser
diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
deleted file mode 100644
index f1f485b9bb..0000000000
--- a/src/xml/sax/qxml.cpp
+++ /dev/null
@@ -1,7999 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtXml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qglobal.h"
-
-// Disable warning about use of deprecated QXmlStreamLocator in QScopedPointer<>
-QT_WARNING_DISABLE_MSVC(4996)
-
-#include "qxml.h"
-#include "qxml_p.h"
-#include "qbuffer.h"
-#include "qstringconverter.h"
-#if QT_CONFIG(regularexpression)
-#include "qregularexpression.h"
-#endif
-#include "qmap.h"
-#include "qhash.h"
-#include "qstack.h"
-#include <qdebug.h>
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-#ifdef Q_CC_BOR // borland 6 finds bogus warnings when building this file in uic3
-# pragma warn -8080
-#endif
-
-//#define QT_QXML_DEBUG
-
-// Error strings for the XML reader
-#define XMLERR_OK QT_TRANSLATE_NOOP("QXml", "no error occurred")
-#define XMLERR_ERRORBYCONSUMER QT_TRANSLATE_NOOP("QXml", "error triggered by consumer")
-#define XMLERR_UNEXPECTEDEOF QT_TRANSLATE_NOOP("QXml", "unexpected end of file")
-#define XMLERR_MORETHANONEDOCTYPE QT_TRANSLATE_NOOP("QXml", "more than one document type definition")
-#define XMLERR_ERRORPARSINGELEMENT QT_TRANSLATE_NOOP("QXml", "error occurred while parsing element")
-#define XMLERR_TAGMISMATCH QT_TRANSLATE_NOOP("QXml", "tag mismatch")
-#define XMLERR_ERRORPARSINGCONTENT QT_TRANSLATE_NOOP("QXml", "error occurred while parsing content")
-#define XMLERR_UNEXPECTEDCHARACTER QT_TRANSLATE_NOOP("QXml", "unexpected character")
-#define XMLERR_INVALIDNAMEFORPI QT_TRANSLATE_NOOP("QXml", "invalid name for processing instruction")
-#define XMLERR_VERSIONEXPECTED QT_TRANSLATE_NOOP("QXml", "version expected while reading the XML declaration")
-#define XMLERR_WRONGVALUEFORSDECL QT_TRANSLATE_NOOP("QXml", "wrong value for standalone declaration")
-#define XMLERR_EDECLORSDDECLEXPECTED QT_TRANSLATE_NOOP("QXml", "encoding declaration or standalone declaration expected while reading the XML declaration")
-#define XMLERR_SDDECLEXPECTED QT_TRANSLATE_NOOP("QXml", "standalone declaration expected while reading the XML declaration")
-#define XMLERR_ERRORPARSINGDOCTYPE QT_TRANSLATE_NOOP("QXml", "error occurred while parsing document type definition")
-#define XMLERR_LETTEREXPECTED QT_TRANSLATE_NOOP("QXml", "letter is expected")
-#define XMLERR_ERRORPARSINGCOMMENT QT_TRANSLATE_NOOP("QXml", "error occurred while parsing comment")
-#define XMLERR_ERRORPARSINGREFERENCE QT_TRANSLATE_NOOP("QXml", "error occurred while parsing reference")
-#define XMLERR_INTERNALGENERALENTITYINDTD QT_TRANSLATE_NOOP("QXml", "internal general entity reference not allowed in DTD")
-#define XMLERR_EXTERNALGENERALENTITYINAV QT_TRANSLATE_NOOP("QXml", "external parsed general entity reference not allowed in attribute value")
-#define XMLERR_EXTERNALGENERALENTITYINDTD QT_TRANSLATE_NOOP("QXml", "external parsed general entity reference not allowed in DTD")
-#define XMLERR_UNPARSEDENTITYREFERENCE QT_TRANSLATE_NOOP("QXml", "unparsed entity reference in wrong context")
-#define XMLERR_RECURSIVEENTITIES QT_TRANSLATE_NOOP("QXml", "recursive entities")
-#define XMLERR_ERRORINTEXTDECL QT_TRANSLATE_NOOP("QXml", "error in the text declaration of an external entity")
-
-QT_BEGIN_NAMESPACE
-
-namespace {
-
-// work around missing std::stack::clear()
-template <typename Container>
-void clear(Container &c) { c = Container(); }
-
-}
-
-// the constants for the lookup table
-static const signed char cltWS = 0; // white space
-static const signed char cltPer = 1; // %
-static const signed char cltAmp = 2; // &
-static const signed char cltGt = 3; // >
-static const signed char cltLt = 4; // <
-static const signed char cltSlash = 5; // /
-static const signed char cltQm = 6; // ?
-static const signed char cltEm = 7; // !
-static const signed char cltDash = 8; // -
-static const signed char cltCB = 9; // ]
-static const signed char cltOB = 10; // [
-static const signed char cltEq = 11; // =
-static const signed char cltDq = 12; // "
-static const signed char cltSq = 13; // '
-static const signed char cltUnknown = 14;
-
-// character lookup table
-static const signed char charLookupTable[256]={
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x00 - 0x07
- cltUnknown, // 0x08
- cltWS, // 0x09 \t
- cltWS, // 0x0A \n
- cltUnknown, // 0x0B
- cltUnknown, // 0x0C
- cltWS, // 0x0D \r
- cltUnknown, // 0x0E
- cltUnknown, // 0x0F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x17 - 0x16
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x18 - 0x1F
- cltWS, // 0x20 Space
- cltEm, // 0x21 !
- cltDq, // 0x22 "
- cltUnknown, // 0x23
- cltUnknown, // 0x24
- cltPer, // 0x25 %
- cltAmp, // 0x26 &
- cltSq, // 0x27 '
- cltUnknown, // 0x28
- cltUnknown, // 0x29
- cltUnknown, // 0x2A
- cltUnknown, // 0x2B
- cltUnknown, // 0x2C
- cltDash, // 0x2D -
- cltUnknown, // 0x2E
- cltSlash, // 0x2F /
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x30 - 0x37
- cltUnknown, // 0x38
- cltUnknown, // 0x39
- cltUnknown, // 0x3A
- cltUnknown, // 0x3B
- cltLt, // 0x3C <
- cltEq, // 0x3D =
- cltGt, // 0x3E >
- cltQm, // 0x3F ?
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x40 - 0x47
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x48 - 0x4F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x50 - 0x57
- cltUnknown, // 0x58
- cltUnknown, // 0x59
- cltUnknown, // 0x5A
- cltOB, // 0x5B [
- cltUnknown, // 0x5C
- cltCB, // 0x5D]
- cltUnknown, // 0x5E
- cltUnknown, // 0x5F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x60 - 0x67
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x68 - 0x6F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x70 - 0x77
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x78 - 0x7F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x80 - 0x87
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x88 - 0x8F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x90 - 0x97
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x98 - 0x9F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA0 - 0xA7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA8 - 0xAF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB0 - 0xB7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB8 - 0xBF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC0 - 0xC7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC8 - 0xCF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD0 - 0xD7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD8 - 0xDF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE0 - 0xE7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE8 - 0xEF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xF0 - 0xF7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown // 0xF8 - 0xFF
-};
-
-//
-// local helper functions
-//
-
-/*
- This function strips the TextDecl [77] ("<?xml ...?>") from the string \a
- str. The stripped version is stored in \a str. If this function finds an
- invalid TextDecl, it returns \c false, otherwise true.
-
- This function is used for external entities since those can include an
- TextDecl that must be stripped before inserting the entity.
-*/
-static bool stripTextDecl(QString& str)
-{
- QLatin1String textDeclStart("<?xml");
- if (str.startsWith(textDeclStart)) {
-#if QT_CONFIG(regularexpression)
- QRegularExpression textDecl(QString::fromLatin1(
- "^<\\?xml\\s+"
- "(version\\s*=\\s*((['\"])[-a-zA-Z0-9_.:]+\\3))?"
- "\\s*"
- "(encoding\\s*=\\s*((['\"])[A-Za-z][-a-zA-Z0-9_.]*\\6))?"
- "\\s*\\?>"
- ));
- QString strTmp = str.replace(textDecl, QLatin1String(""));
- if (strTmp.length() != str.length())
- return false; // external entity has wrong TextDecl
- str = strTmp;
-#else
- return false;
-#endif
- }
- return true;
-}
-
-
-class QXmlAttributesPrivate
-{
-};
-
-/* \class QXmlInputSourcePrivate
- \internal
-
- There's a slight misdesign in this class that can
- be worth to keep in mind: the `str' member is
- a buffer which QXmlInputSource::next() returns from,
- and which is populated from the input device or input
- stream. However, when the input is a QString(the user called
- QXmlInputSource::setData()), `str' has two roles: it's the
- buffer, but also the source. This /seems/ to be no problem
- because in the case of having no device or stream, the QString
- is read in one go.
- */
-class QXmlInputSourcePrivate
-{
-public:
- QIODevice *inputDevice;
- QTextStream *inputStream;
-
- QString str;
- const QChar *unicode;
- int pos;
- int length;
- bool nextReturnedEndOfData;
- QStringDecoder toUnicode;
-
- QByteArray encodingDeclBytes;
- QString encodingDeclChars;
- bool lookingForEncodingDecl;
-};
-class QXmlParseExceptionPrivate
-{
-public:
- QXmlParseExceptionPrivate()
- : column(-1), line(-1)
- {
- }
- QXmlParseExceptionPrivate(const QXmlParseExceptionPrivate &other)
- : msg(other.msg), column(other.column), line(other.line),
- pub(other.pub), sys(other.sys)
- {
- }
-
- QString msg;
- int column;
- int line;
- QString pub;
- QString sys;
-
-};
-
-class QXmlLocatorPrivate
-{
-};
-
-class QXmlDefaultHandlerPrivate
-{
-};
-
-/*!
- \class QXmlParseException
- \obsolete
- \reentrant
- \brief The QXmlParseException class is used to report errors with
- the QXmlErrorHandler interface.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- The XML subsystem constructs an instance of this class when it
- detects an error. You can retrieve the place where the error
- occurred using systemId(), publicId(), lineNumber() and
- columnNumber(), along with the error message(). The possible error
- messages are:
-
-
- \list
- \li "no error occurred"
- \li "error triggered by consumer"
- \li "unexpected end of file"
- \li "more than one document type definition"
- \li "error occurred while parsing element"
- \li "tag mismatch"
- \li "error occurred while parsing content"
- \li "unexpected character"
- \li "invalid name for processing instruction"
- \li "version expected while reading the XML declaration"
- \li "wrong value for standalone declaration"
- \li "encoding declaration or standalone declaration expected while reading the XML declaration"
- \li "standalone declaration expected while reading the XML declaration"
- \li "error occurred while parsing document type definition"
- \li "letter is expected"
- \li "error occurred while parsing comment"
- \li "error occurred while parsing reference"
- \li "internal general entity reference not allowed in DTD"
- \li "external parsed general entity reference not allowed in attribute value"
- \li "external parsed general entity reference not allowed in DTD"
- \li "unparsed entity reference n wrong context"
- \li "recursive entities"
- \li "error in the text declaration of an external entity"
- \endlist
-
- Note that, if you want to display these error messages to your
- application's users, they will be displayed in English unless
- they are explicitly translated.
-
- \sa QXmlErrorHandler, QXmlReader
-*/
-
-/*!
- Constructs a parse exception with the error string \a name for
- column \a c and line \a l for the public identifier \a p and the
- system identifier \a s.
-*/
-
-QXmlParseException::QXmlParseException(const QString& name, int c, int l,
- const QString& p, const QString& s)
- : d(new QXmlParseExceptionPrivate)
-{
- d->msg = name;
- d->column = c;
- d->line = l;
- d->pub = p;
- d->sys = s;
-}
-
-/*!
- Creates a copy of \a other.
-*/
-QXmlParseException::QXmlParseException(const QXmlParseException& other) :
- d(new QXmlParseExceptionPrivate(*other.d))
-{
-
-}
-
-/*!
- Destroys the QXmlParseException.
-*/
-QXmlParseException::~QXmlParseException()
-{
-}
-
-/*!
- Returns the error message.
-*/
-QString QXmlParseException::message() const
-{
- return d->msg;
-}
-/*!
- Returns the column number where the error occurred.
-*/
-int QXmlParseException::columnNumber() const
-{
- return d->column;
-}
-/*!
- Returns the line number where the error occurred.
-*/
-int QXmlParseException::lineNumber() const
-{
- return d->line;
-}
-/*!
- Returns the public identifier where the error occurred.
-*/
-QString QXmlParseException::publicId() const
-{
- return d->pub;
-}
-/*!
- Returns the system identifier where the error occurred.
-*/
-QString QXmlParseException::systemId() const
-{
- return d->sys;
-}
-
-
-/*!
- \class QXmlLocator
- \obsolete
- \reentrant
- \brief The QXmlLocator class provides the XML handler classes with
- information about the parsing position within a file.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- The reader reports a QXmlLocator to the content handler before it
- starts to parse the document. This is done with the
- QXmlContentHandler::setDocumentLocator() function. The handler
- classes can now use this locator to get the position (lineNumber()
- and columnNumber()) that the reader has reached.
-*/
-
-/*!
- Constructor.
-*/
-QXmlLocator::QXmlLocator()
-{
-}
-
-/*!
- Destructor.
-*/
-QXmlLocator::~QXmlLocator()
-{
-}
-
-/*!
- \fn int QXmlLocator::columnNumber() const
-
- Returns the column number (starting at 1) or -1 if there is no
- column number available.
-*/
-
-/*!
- \fn int QXmlLocator::lineNumber() const
-
- Returns the line number (starting at 1) or -1 if there is no line
- number available.
-*/
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-class QXmlSimpleReaderLocator : public QXmlLocator
-{
-public:
- QXmlSimpleReaderLocator(QXmlSimpleReader* parent)
- {
- reader = parent;
- }
- ~QXmlSimpleReaderLocator()
- {
- }
-
- int columnNumber() const override
- {
- return (reader->d_ptr->columnNr == -1 ? -1 : reader->d_ptr->columnNr + 1);
- }
- int lineNumber() const override
- {
- return (reader->d_ptr->lineNr == -1 ? -1 : reader->d_ptr->lineNr + 1);
- }
-// QString getPublicId()
-// QString getSystemId()
-
-private:
- QXmlSimpleReader *reader;
-};
-
-/*********************************************
- *
- * QXmlNamespaceSupport
- *
- *********************************************/
-
-typedef QMap<QString, QString> NamespaceMap;
-
-class QXmlNamespaceSupportPrivate
-{
-public:
- QXmlNamespaceSupportPrivate()
- {
- ns.insert(QLatin1String("xml"), QLatin1String("http://www.w3.org/XML/1998/namespace")); // the XML namespace
- }
-
- ~QXmlNamespaceSupportPrivate()
- {
- }
-
- QStack<NamespaceMap> nsStack;
- NamespaceMap ns;
-};
-
-/*!
- \class QXmlNamespaceSupport
- \obsolete
- \since 4.4
- \reentrant
- \brief The QXmlNamespaceSupport class is a helper class for XML
- readers which want to include namespace support.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- You can set the prefix for the current namespace with setPrefix(),
- and get the list of current prefixes (or those for a given URI)
- with prefixes(). The namespace URI is available from uri(). Use
- pushContext() to start a new namespace context, and popContext()
- to return to the previous namespace context. Use splitName() or
- processName() to split a name into its prefix and local name.
-*/
-
-/*!
- Constructs a QXmlNamespaceSupport.
-*/
-QXmlNamespaceSupport::QXmlNamespaceSupport()
-{
- d = new QXmlNamespaceSupportPrivate;
-}
-
-/*!
- Destroys a QXmlNamespaceSupport.
-*/
-QXmlNamespaceSupport::~QXmlNamespaceSupport()
-{
- delete d;
-}
-
-/*!
- This function declares a prefix \a pre in the current namespace
- context to be the namespace URI \a uri. The prefix remains in
- force until this context is popped, unless it is shadowed in a
- descendant context.
-
- Note that there is an asymmetry in this library. prefix() does not
- return the default "" prefix, even if you have declared one; to
- check for a default prefix, you must look it up explicitly using
- uri(). This asymmetry exists to make it easier to look up prefixes
- for attribute names, where the default prefix is not allowed.
-*/
-void QXmlNamespaceSupport::setPrefix(const QString& pre, const QString& uri)
-{
- if(pre.isNull()) {
- d->ns.insert(QLatin1String(""), uri);
- } else {
- d->ns.insert(pre, uri);
- }
-}
-
-/*!
- Returns one of the prefixes mapped to the namespace URI \a uri.
-
- If more than one prefix is currently mapped to the same URI, this
- function makes an arbitrary selection; if you want all of the
- prefixes, use prefixes() instead.
-
- Note: to check for a default prefix, use the uri() function with
- an argument of "".
-*/
-QString QXmlNamespaceSupport::prefix(const QString& uri) const
-{
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ((itc=it) != d->ns.constEnd()) {
- ++it;
- if (*itc == uri && !itc.key().isEmpty())
- return itc.key();
- }
- return QLatin1String("");
-}
-
-/*!
- Looks up the prefix \a prefix in the current context and returns
- the currently-mapped namespace URI. Use the empty string ("") for
- the default namespace.
-*/
-QString QXmlNamespaceSupport::uri(const QString& prefix) const
-{
- return d->ns[prefix];
-}
-
-/*!
- Splits the name \a qname at the ':' and returns the prefix in \a
- prefix and the local name in \a localname.
-
- \sa processName()
-*/
-void QXmlNamespaceSupport::splitName(const QString& qname, QString& prefix,
- QString& localname) const
-{
- int pos = qname.indexOf(QLatin1Char(':'));
- if (pos == -1)
- pos = qname.size();
-
- prefix = qname.left(pos);
- localname = qname.mid(pos+1);
-}
-
-/*!
- Processes a raw XML 1.0 name in the current context by removing
- the prefix and looking it up among the prefixes currently
- declared.
-
- \a qname is the raw XML 1.0 name to be processed. \a isAttribute
- is true if the name is an attribute name.
-
- This function stores the namespace URI in \a nsuri (which will be
- set to an empty string if the raw name has an undeclared prefix),
- and stores the local name (without prefix) in \a localname (which
- will be set to an empty string if no namespace is in use).
-
- Note that attribute names are processed differently than element
- names: an unprefixed element name gets the default namespace (if
- any), while an unprefixed attribute name does not.
-*/
-void QXmlNamespaceSupport::processName(const QString& qname,
- bool isAttribute,
- QString& nsuri, QString& localname) const
-{
- int len = qname.size();
- const QChar *data = qname.constData();
- for (int pos = 0; pos < len; ++pos) {
- if (data[pos] == QLatin1Char(':')) {
- nsuri = uri(qname.left(pos));
- localname = qname.mid(pos + 1);
- return;
- }
- }
-
- // there was no ':'
- nsuri.clear();
- // attributes don't take default namespace
- if (!isAttribute && !d->ns.isEmpty()) {
- /*
- We want to access d->ns.value(""), but as an optimization
- we use the fact that "" compares less than any other
- string, so it's either first in the map or not there.
- */
- NamespaceMap::const_iterator first = d->ns.constBegin();
- if (first.key().isEmpty())
- nsuri = first.value(); // get default namespace
- }
- localname = qname;
-}
-
-/*!
- Returns a list of all the prefixes currently declared.
-
- If there is a default prefix, this function does not return it in
- the list; check for the default prefix using uri() with an
- argument of "".
-*/
-QStringList QXmlNamespaceSupport::prefixes() const
-{
- QStringList list;
-
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ((itc=it) != d->ns.constEnd()) {
- ++it;
- if (!itc.key().isEmpty())
- list.append(itc.key());
- }
- return list;
-}
-
-/*!
- \overload
-
- Returns a list of all prefixes currently declared for the
- namespace URI \a uri.
-
- The "xml:" prefix is included. If you only want one prefix that is
- mapped to the namespace URI, and you don't care which one you get,
- use the prefix() function instead.
-
- Note: The empty (default) prefix is never included in this list;
- to check for the presence of a default namespace, call uri() with
- "" as the argument.
-*/
-QStringList QXmlNamespaceSupport::prefixes(const QString& uri) const
-{
- QStringList list;
-
- NamespaceMap::const_iterator itc, it = d->ns.constBegin();
- while ((itc=it) != d->ns.constEnd()) {
- ++it;
- if (*itc == uri && !itc.key().isEmpty())
- list.append(itc.key());
- }
- return list;
-}
-
-/*!
- Starts a new namespace context.
-
- Normally, you should push a new context at the beginning of each
- XML element: the new context automatically inherits the
- declarations of its parent context, and it also keeps track of
- which declarations were made within this context.
-
- \sa popContext()
-*/
-void QXmlNamespaceSupport::pushContext()
-{
- d->nsStack.push(d->ns);
-}
-
-/*!
- Reverts to the previous namespace context.
-
- Normally, you should pop the context at the end of each XML
- element. After popping the context, all namespace prefix mappings
- that were previously in force are restored.
-
- \sa pushContext()
-*/
-void QXmlNamespaceSupport::popContext()
-{
- d->ns.clear();
- if(!d->nsStack.isEmpty())
- d->ns = d->nsStack.pop();
-}
-
-/*!
- Resets this namespace support object ready for reuse.
-*/
-void QXmlNamespaceSupport::reset()
-{
- QXmlNamespaceSupportPrivate *newD = new QXmlNamespaceSupportPrivate;
- delete d;
- d = newD;
-}
-
-
-
-/*********************************************
- *
- * QXmlAttributes
- *
- *********************************************/
-
-/*!
- \class QXmlAttributes
- \obsolete
- \reentrant
- \brief The QXmlAttributes class provides XML attributes.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- If attributes are reported by QXmlContentHandler::startElement()
- this class is used to pass the attribute values.
-
- Use index() to locate the position of an attribute in the list,
- count() to retrieve the number of attributes, and clear() to
- remove the attributes. New attributes can be added with append().
- Use type() to get an attribute's type and value() to get its
- value. The attribute's name is available from localName() or
- qName(), and its namespace URI from uri().
-
-*/
-
-/*!
- \fn QXmlAttributes::QXmlAttributes()
-
- Constructs an empty attribute list.
-*/
-QXmlAttributes::QXmlAttributes()
-{
- // ### In Qt 5.0, this function was inlined and d was not initialized
- // The member cannot be used until Qt 6.0
- Q_UNUSED(d);
-}
-
-/*!
- \fn QXmlAttributes::~QXmlAttributes()
-
- Destroys the attributes object.
-*/
-QXmlAttributes::~QXmlAttributes()
-{
-}
-
-/*!
- \fn void QXmlAttributes::swap(QXmlAttributes &other)
-
- Swaps \c this with \a other.
- */
-
-/*!
- Looks up the index of an attribute by the qualified name \a qName.
-
- Returns the index of the attribute or -1 if it wasn't found.
-*/
-int QXmlAttributes::index(const QString& qName) const
-{
- for (int i = 0; i < attList.size(); ++i) {
- if (attList.at(i).qname == qName)
- return i;
- }
- return -1;
-}
-
-/*! \overload
- */
-int QXmlAttributes::index(QLatin1String qName) const
-{
- for (int i = 0; i < attList.size(); ++i) {
- if (attList.at(i).qname == qName)
- return i;
- }
- return -1;
-}
-
-/*!
- \overload
-
- Looks up the index of an attribute by a namespace name.
-
- \a uri specifies the namespace URI, or an empty string if the name
- has no namespace URI. \a localPart specifies the attribute's local
- name.
-
- Returns the index of the attribute, or -1 if it wasn't found.
-*/
-int QXmlAttributes::index(const QString& uri, const QString& localPart) const
-{
- for (int i = 0; i < attList.size(); ++i) {
- const Attribute &att = attList.at(i);
- if (att.uri == uri && att.localname == localPart)
- return i;
- }
- return -1;
-}
-
-/*!
- Returns the number of attributes in the list.
-
- \sa count()
-*/
-int QXmlAttributes::length() const
-{
- return attList.count();
-}
-
-/*!
- \fn int QXmlAttributes::count() const
-
- Returns the number of attributes in the list. This function is
- equivalent to length().
-*/
-
-/*!
- Looks up an attribute's local name for the attribute at position
- \a index. If no namespace processing is done, the local name is
- an empty string.
-*/
-QString QXmlAttributes::localName(int index) const
-{
- return attList.at(index).localname;
-}
-
-/*!
- Looks up an attribute's XML 1.0 qualified name for the attribute
- at position \a index.
-*/
-QString QXmlAttributes::qName(int index) const
-{
- return attList.at(index).qname;
-}
-
-/*!
- Looks up an attribute's namespace URI for the attribute at
- position \a index. If no namespace processing is done or if the
- attribute has no namespace, the namespace URI is an empty string.
-*/
-QString QXmlAttributes::uri(int index) const
-{
- return attList.at(index).uri;
-}
-
-/*!
- Looks up an attribute's type for the attribute at position \a
- index.
-
- Currently only "CDATA" is returned.
-*/
-QString QXmlAttributes::type(int) const
-{
- return QLatin1String("CDATA");
-}
-
-/*!
- \overload
-
- Looks up an attribute's type for the qualified name \a qName.
-
- Currently only "CDATA" is returned.
-*/
-QString QXmlAttributes::type(const QString&) const
-{
- return QLatin1String("CDATA");
-}
-
-/*!
- \overload
-
- Looks up an attribute's type by namespace name.
-
- \a uri specifies the namespace URI and \a localName specifies the
- local name. If the name has no namespace URI, use an empty string
- for \a uri.
-
- Currently only "CDATA" is returned.
-*/
-QString QXmlAttributes::type(const QString&, const QString&) const
-{
- return QLatin1String("CDATA");
-}
-
-/*!
- Returns an attribute's value for the attribute at position \a
- index. The index must be a valid position
- (i.e., 0 <= \a index < count()).
-*/
-QString QXmlAttributes::value(int index) const
-{
- return attList.at(index).value;
-}
-
-/*!
- \overload
-
- Returns an attribute's value for the qualified name \a qName, or an
- empty string if no attribute exists for the name given.
-*/
-QString QXmlAttributes::value(const QString& qName) const
-{
- int i = index(qName);
- if (i == -1)
- return QString();
- return attList.at(i).value;
-}
-
-/*!
- \overload
-
- Returns an attribute's value for the qualified name \a qName, or an
- empty string if no attribute exists for the name given.
-*/
-QString QXmlAttributes::value(QLatin1String qName) const
-{
- int i = index(qName);
- if (i == -1)
- return QString();
- return attList.at(i).value;
-}
-
-/*!
- \overload
-
- Returns an attribute's value by namespace name.
-
- \a uri specifies the namespace URI, or an empty string if the name
- has no namespace URI. \a localName specifies the attribute's local
- name.
-*/
-QString QXmlAttributes::value(const QString& uri, const QString& localName) const
-{
- int i = index(uri, localName);
- if (i == -1)
- return QString();
- return attList.at(i).value;
-}
-
-/*!
- Clears the list of attributes.
-
- \sa append()
-*/
-void QXmlAttributes::clear()
-{
- attList.clear();
-}
-
-/*!
- Appends a new attribute entry to the list of attributes. The
- qualified name of the attribute is \a qName, the namespace URI is
- \a uri and the local name is \a localPart. The value of the
- attribute is \a value.
-
- \sa qName(), uri(), localName(), value()
-*/
-void QXmlAttributes::append(const QString &qName, const QString &uri, const QString &localPart, const QString &value)
-{
- Attribute att;
- att.qname = qName;
- att.uri = uri;
- att.localname = localPart;
- att.value = value;
-
- attList.append(att);
-}
-
-
-/*********************************************
- *
- * QXmlInputSource
- *
- *********************************************/
-
-/*!
- \class QXmlInputSource
- \obsolete
- \reentrant
- \brief The QXmlInputSource class provides the input data for the
- QXmlReader subclasses.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- All subclasses of QXmlReader read the input XML document from this
- class.
-
- This class recognizes the encoding of the data by reading the
- encoding declaration in the XML file if it finds one, and reading
- the data using the corresponding encoding. If it does not find an
- encoding declaration, then it assumes that the data is either in
- UTF-8 or UTF-16, depending on whether it can find a byte-order
- mark.
-
- There are two ways to populate the input source with data: you can
- construct it with a QIODevice* so that the input source reads the
- data from that device. Or you can set the data explicitly with one
- of the setData() functions.
-
- Usually you either construct a QXmlInputSource that works on a
- QIODevice* or you construct an empty QXmlInputSource and set the
- data with setData(). There are only rare occasions where you would
- want to mix both methods.
-
- The QXmlReader subclasses use the next() function to read the
- input character by character. If you want to start from the
- beginning again, use reset().
-
- The functions data() and fetchData() are useful if you want to do
- something with the data other than parsing, e.g. displaying the
- raw XML file. The benefit of using the QXmlInputClass in such
- cases is that it tries to use the correct encoding.
-
- \sa QXmlReader, QXmlSimpleReader
-*/
-
-// the following two are guaranteed not to be a character
-const char16_t QXmlInputSource::EndOfData = 0xfffe;
-const char16_t QXmlInputSource::EndOfDocument = 0xffff;
-
-/*
- Common part of the constructors.
-*/
-void QXmlInputSource::init()
-{
- d = new QXmlInputSourcePrivate;
-
- QT_TRY {
- d->inputDevice = nullptr;
- d->inputStream = nullptr;
-
- setData(QString());
- d->nextReturnedEndOfData = true; // first call to next() will call fetchData()
-
- d->encodingDeclBytes.clear();
- d->encodingDeclChars.clear();
- d->lookingForEncodingDecl = true;
- } QT_CATCH(...) {
- delete(d);
- QT_RETHROW;
- }
-}
-
-/*!
- Constructs an input source which contains no data.
-
- \sa setData()
-*/
-QXmlInputSource::QXmlInputSource()
-{
- init();
-}
-
-/*!
- Constructs an input source and gets the data from device \a dev.
- If \a dev is not open, it is opened in read-only mode. If \a dev
- is 0 or it is not possible to read from the device, the input
- source will contain no data.
-
- \sa setData(), fetchData(), QIODevice
-*/
-QXmlInputSource::QXmlInputSource(QIODevice *dev)
-{
- init();
- d->inputDevice = dev;
- if (dev->isOpen())
- d->inputDevice->setTextModeEnabled(false);
-}
-
-/*!
- Destructor.
-*/
-QXmlInputSource::~QXmlInputSource()
-{
- // ### close the input device.
- delete d;
-}
-
-/*!
-Returns the next character of the input source. If this function
-reaches the end of available data, it returns
-QXmlInputSource::EndOfData. If you call next() after that, it
-tries to fetch more data by calling fetchData(). If the
-fetchData() call results in new data, this function returns the
-first character of that data; otherwise it returns
-QXmlInputSource::EndOfDocument.
-
-Readers, such as QXmlSimpleReader, will assume that the end of
-the XML document has been reached if the this function returns
-QXmlInputSource::EndOfDocument, and will check that the
-supplied input is well-formed. Therefore, when reimplementing
-this function, it is important to ensure that this behavior is
-duplicated.
-
-\sa reset(), fetchData(), QXmlSimpleReader::parse(),
- QXmlSimpleReader::parseContinue()
-*/
-QChar QXmlInputSource::next()
-{
- if (d->pos >= d->length) {
- if (d->nextReturnedEndOfData) {
- d->nextReturnedEndOfData = false;
- fetchData();
- if (d->pos >= d->length) {
- return EndOfDocument;
- }
- return next();
- }
- d->nextReturnedEndOfData = true;
- return EndOfData;
- }
-
- // QXmlInputSource has no way to signal encoding errors. The best we can do
- // is return EndOfDocument. We do *not* return EndOfData, because the reader
- // will then just call this function again to get the next char.
- QChar c = d->unicode[d->pos++];
- if (c == EndOfData)
- c = EndOfDocument;
- return c;
-}
-
-/*!
- This function sets the position used by next() to the beginning of
- the data returned by data(). This is useful if you want to use the
- input source for more than one parse.
-
- \note In the case that the underlying data source is a QIODevice,
- the current position in the device is not automatically set to the
- start of input. Call QIODevice::seek(0) on the device to do this.
-
- \sa next()
-*/
-void QXmlInputSource::reset()
-{
- d->nextReturnedEndOfData = false;
- d->pos = 0;
-}
-
-/*!
- Returns the data the input source contains or an empty string if the
- input source does not contain any data.
-
- \sa setData(), QXmlInputSource(), fetchData()
-*/
-QString QXmlInputSource::data() const
-{
- if (d->nextReturnedEndOfData) {
- QXmlInputSource *that = const_cast<QXmlInputSource*>(this);
- that->d->nextReturnedEndOfData = false;
- that->fetchData();
- }
- return d->str;
-}
-
-/*!
- Sets the data of the input source to \a dat.
-
- If the input source already contains data, this function deletes
- that data first.
-
- \sa data()
-*/
-void QXmlInputSource::setData(const QString& dat)
-{
- d->str = dat;
- d->unicode = dat.unicode();
- d->pos = 0;
- d->length = d->str.length();
- d->nextReturnedEndOfData = false;
-}
-
-/*!
- \overload
-
- The data \a dat is passed through the correct text-codec, before
- it is set.
-*/
-void QXmlInputSource::setData(const QByteArray& dat)
-{
- setData(fromRawData(dat));
-}
-
-/*!
- This function reads more data from the device that was set during
- construction. If the input source already contained data, this
- function deletes that data first.
-
- This object contains no data after a call to this function if the
- object was constructed without a device to read data from or if
- this function was not able to get more data from the device.
-
- There are two occasions where a fetch is done implicitly by
- another function call: during construction (so that the object
- starts out with some initial data where available), and during a
- call to next() (if the data had run out).
-
- You don't normally need to use this function if you use next().
-
- \sa data(), next(), QXmlInputSource()
-*/
-
-void QXmlInputSource::fetchData()
-{
- enum
- {
- BufferSize = 1024
- };
-
- QByteArray rawData;
-
- if (d->inputDevice || d->inputStream) {
- QIODevice *device = d->inputDevice ? d->inputDevice : d->inputStream->device();
-
- if (!device) {
- if (d->inputStream && d->inputStream->string()) {
- QString *s = d->inputStream->string();
- rawData = QByteArray(reinterpret_cast<const char *>(s->constData()),
- int(s->size() * sizeof(QChar)));
- }
- } else if (device->isOpen() || device->open(QIODevice::ReadOnly)) {
- rawData.resize(BufferSize);
- qint64 size = device->read(rawData.data(), BufferSize);
- if (size == 0 && device->waitForReadyRead(-1))
- size = device->read(rawData.data(), BufferSize);
-
- rawData.resize(qMax(qint64(0), size));
- }
-
- /* We do this inside the "if (d->inputDevice ..." scope
- * because if we're not using a stream or device, that is,
- * the user set a QString manually, we don't want to set
- * d->str. */
- setData(fromRawData(rawData));
- }
-}
-
-static QString extractEncodingDecl(const QString &text, bool *needMoreText)
-{
- *needMoreText = false;
-
- int l = text.length();
- const QLatin1String snip("<?xml", std::min(l, 5));
- if (l > 0 && !text.startsWith(snip))
- return QString();
-
- int endPos = text.indexOf(QLatin1Char('>'));
- if (endPos == -1) {
- *needMoreText = l < 255; // we won't look forever
- return QString();
- }
-
- int pos = text.indexOf(QLatin1String("encoding"));
- if (pos == -1 || pos >= endPos)
- return QString();
-
- while (pos < endPos) {
- QChar uc = text.at(pos);
- if (uc == u'\'' || uc == u'"')
- break;
- ++pos;
- }
-
- if (pos == endPos)
- return QString();
-
- QString encoding;
- ++pos;
- while (pos < endPos) {
- QChar uc = text.at(pos);
- if (uc == u'\'' || uc == u'"')
- break;
- encoding.append(uc);
- ++pos;
- }
-
- return encoding;
-}
-
-/*!
- This function reads the XML file from \a data and tries to
- recognize the encoding. It converts the raw data \a data into a
- QString and returns it. It tries its best to get the correct
- encoding for the XML file.
-
- If \a beginning is true, this function assumes that the data
- starts at the beginning of a new XML document and looks for an
- encoding declaration. If \a beginning is false, it converts the
- raw data using the encoding determined from prior calls.
-*/
-QString QXmlInputSource::fromRawData(const QByteArray &data, bool beginning)
-{
- if (data.size() == 0)
- return QString();
-
- if (beginning)
- d->toUnicode = QStringDecoder();
-
- // This is the initial UTF codec we will read the encoding declaration with
- if (!d->toUnicode.isValid()) {
- d->encodingDeclBytes.clear();
- d->encodingDeclChars.clear();
- d->lookingForEncodingDecl = true;
-
- auto encoding = QStringConverter::encodingForData(data.constData(), data.size(), char16_t('<'));
- if (encoding) {
- d->lookingForEncodingDecl = false;
- d->toUnicode = QStringDecoder(*encoding);
- } else {
- d->toUnicode = QStringDecoder(QStringDecoder::Utf8);
- }
- }
-
- QString input = d->toUnicode(data.constData(), data.size());
-
- if (d->lookingForEncodingDecl) {
- d->encodingDeclChars += input;
-
- bool needMoreText;
- QByteArray encoding = extractEncodingDecl(d->encodingDeclChars, &needMoreText).toLatin1();
-
- if (!encoding.isEmpty()) {
- auto e = QStringDecoder::encodingForData(encoding.constData(), encoding.size());
- if (e && *e != QStringDecoder::Utf8) {
- d->toUnicode = QStringDecoder(*e);
-
- /* The variable input can potentially be large, so we deallocate
- * it before calling toUnicode() in order to avoid having two
- * large QStrings in memory simultaneously. */
- input.clear();
-
- // prime the decoder with the data so far
- d->toUnicode(d->encodingDeclBytes.constData(), d->encodingDeclBytes.size());
- // now feed it the new data
- input = d->toUnicode(data.constData(), data.size());
- }
- }
-
- d->encodingDeclBytes += data;
- d->lookingForEncodingDecl = needMoreText;
- }
-
- return input;
-}
-
-
-/*********************************************
- *
- * QXmlDefaultHandler
- *
- *********************************************/
-
-/*!
- \class QXmlContentHandler
- \obsolete
- \reentrant
- \brief The QXmlContentHandler class provides an interface to
- report the logical content of XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- If the application needs to be informed of basic parsing events,
- it can implement this interface and activate it using
- QXmlReader::setContentHandler(). The reader can then report basic
- document-related events like the start and end of elements and
- character data through this interface.
-
- The order of events in this interface is very important, and
- mirrors the order of information in the document itself. For
- example, all of an element's content (character data, processing
- instructions, and sub-elements) appears, in order, between the
- startElement() event and the corresponding endElement() event.
-
- The class QXmlDefaultHandler provides a default implementation for
- this interface; subclassing from the QXmlDefaultHandler class is
- very convenient if you only want to be informed of some parsing
- events.
-
- The startDocument() function is called at the start of the
- document, and endDocument() is called at the end. Before parsing
- begins setDocumentLocator() is called. For each element
- startElement() is called, with endElement() being called at the
- end of each element. The characters() function is called with
- chunks of character data; ignorableWhitespace() is called with
- chunks of whitespace and processingInstruction() is called with
- processing instructions. If an entity is skipped skippedEntity()
- is called. At the beginning of prefix-URI scopes
- startPrefixMapping() is called.
-
- \sa QXmlDTDHandler, QXmlDeclHandler, QXmlEntityResolver, QXmlErrorHandler,
- QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlContentHandler::~QXmlContentHandler()
-
- Destroys the content handler.
-*/
-
-/*!
- \fn void QXmlContentHandler::setDocumentLocator(QXmlLocator* locator)
-
- The reader calls this function before it starts parsing the
- document. The argument \a locator is a pointer to a QXmlLocator
- which allows the application to get the parsing position within
- the document.
-
- Do not destroy the \a locator; it is destroyed when the reader is
- destroyed. (Do not use the \a locator after the reader is
- destroyed).
-*/
-
-/*!
- \fn bool QXmlContentHandler::startDocument()
-
- The reader calls this function when it starts parsing the
- document. The reader calls this function just once, after the call
- to setDocumentLocator(), and before any other functions in this
- class or in the QXmlDTDHandler class are called.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endDocument()
-*/
-
-/*!
- \fn bool QXmlContentHandler::endDocument()
-
- The reader calls this function after it has finished parsing. It
- is called just once, and is the last handler function called. It
- is called after the reader has read all input or has abandoned
- parsing because of a fatal error.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startDocument()
-*/
-
-/*!
- \fn bool QXmlContentHandler::startPrefixMapping(const QString& prefix, const QString& uri)
-
- The reader calls this function to signal the begin of a prefix-URI
- namespace mapping scope. This information is not necessary for
- normal namespace processing since the reader automatically
- replaces prefixes for element and attribute names.
-
- Note that startPrefixMapping() and endPrefixMapping() calls are
- not guaranteed to be properly nested relative to each other: all
- startPrefixMapping() events occur before the corresponding
- startElement() event, and all endPrefixMapping() events occur
- after the corresponding endElement() event, but their order is not
- otherwise guaranteed.
-
- The argument \a prefix is the namespace prefix being declared and
- the argument \a uri is the namespace URI the prefix is mapped to.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endPrefixMapping()
-*/
-
-/*!
- \fn bool QXmlContentHandler::endPrefixMapping(const QString& prefix)
-
- The reader calls this function to signal the end of a prefix
- mapping for the prefix \a prefix.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startPrefixMapping()
-*/
-
-/*!
- \fn bool QXmlContentHandler::startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts)
-
- The reader calls this function when it has parsed a start element
- tag.
-
- There is a corresponding endElement() call when the corresponding
- end element tag is read. The startElement() and endElement() calls
- are always nested correctly. Empty element tags (e.g. \c{<x/>})
- cause a startElement() call to be immediately followed by an
- endElement() call.
-
- The attribute list provided only contains attributes with explicit
- values. The attribute list contains attributes used for namespace
- declaration (i.e. attributes starting with xmlns) only if the
- namespace-prefix property of the reader is true.
-
- The argument \a namespaceURI is the namespace URI, or
- an empty string if the element has no namespace URI or if no
- namespace processing is done. \a localName is the local name
- (without prefix), or an empty string if no namespace processing is
- done, \a qName is the qualified name (with prefix) and \a atts are
- the attributes attached to the element. If there are no
- attributes, \a atts is an empty attributes object.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endElement()
-*/
-
-/*!
- \fn bool QXmlContentHandler::endElement(const QString& namespaceURI, const QString& localName, const QString& qName)
-
- The reader calls this function when it has parsed an end element
- tag with the qualified name \a qName, the local name \a localName
- and the namespace URI \a namespaceURI.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startElement()
-*/
-
-/*!
- \fn bool QXmlContentHandler::characters(const QString& ch)
-
- The reader calls this function when it has parsed a chunk of
- character data (either normal character data or character data
- inside a CDATA section; if you need to distinguish between those
- two types you must use QXmlLexicalHandler::startCDATA() and
- QXmlLexicalHandler::endCDATA()). The character data is reported in
- \a ch.
-
- Some readers report whitespace in element content using the
- ignorableWhitespace() function rather than using this one.
-
- A reader may report the character data of an element in more than
- one chunk; e.g. a reader might want to report "a\<b" in three
- characters() events ("a ", "\<" and " b").
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlContentHandler::ignorableWhitespace(const QString& ch)
-
- Some readers may use this function to report each chunk of
- whitespace in element content. The whitespace is reported in \a ch.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlContentHandler::processingInstruction(const QString& target, const QString& data)
-
- The reader calls this function when it has parsed a processing
- instruction.
-
- \a target is the target name of the processing instruction and \a
- data is the data in the processing instruction.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlContentHandler::skippedEntity(const QString& name)
-
- Some readers may skip entities if they have not seen the
- declarations (e.g. because they are in an external DTD). If they
- do so they report that they skipped the entity called \a name by
- calling this function.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn QString QXmlContentHandler::errorString() const
-
- The reader calls this function to get an error string, e.g. if any
- of the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlErrorHandler
- \obsolete
- \reentrant
- \brief The QXmlErrorHandler class provides an interface to report
- errors in XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- If you want your application to report errors to the user or to
- perform customized error handling, you should subclass this class.
-
- You can set the error handler with QXmlReader::setErrorHandler().
-
- Errors can be reported using warning(), error() and fatalError(),
- with the error text being reported with errorString().
-
- \sa QXmlDTDHandler, QXmlDeclHandler, QXmlContentHandler, QXmlEntityResolver,
- QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlErrorHandler::~QXmlErrorHandler()
-
- Destroys the error handler.
-*/
-
-/*!
- \fn bool QXmlErrorHandler::warning(const QXmlParseException& exception)
-
- A reader might use this function to report a warning. Warnings are
- conditions that are not errors or fatal errors as defined by the
- XML 1.0 specification. Details of the warning are stored in \a
- exception.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlErrorHandler::error(const QXmlParseException& exception)
-
- A reader might use this function to report a recoverable error. A
- recoverable error corresponds to the definiton of "error" in
- section 1.2 of the XML 1.0 specification. Details of the error are
- stored in \a exception.
-
- The reader must continue to provide normal parsing events after
- invoking this function.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
-\fn bool QXmlErrorHandler::fatalError(const QXmlParseException& exception)
-
-A reader must use this function to report a non-recoverable error.
-Details of the error are stored in \a exception.
-
-If this function returns \c true the reader might try to go on
-parsing and reporting further errors, but no regular parsing
-events are reported.
-*/
-
-/*!
- \fn QString QXmlErrorHandler::errorString() const
-
- The reader calls this function to get an error string if any of
- the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlDTDHandler
- \obsolete
- \reentrant
- \brief The QXmlDTDHandler class provides an interface to report
- DTD content of XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- If an application needs information about notations and unparsed
- entities, it can implement this interface and register an instance
- with QXmlReader::setDTDHandler().
-
- Note that this interface includes only those DTD events that the
- XML recommendation requires processors to report, i.e. notation
- and unparsed entity declarations using notationDecl() and
- unparsedEntityDecl() respectively.
-
- \sa QXmlDeclHandler, QXmlContentHandler, QXmlEntityResolver, QXmlErrorHandler,
- QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlDTDHandler::~QXmlDTDHandler()
-
- Destroys the DTD handler.
-*/
-
-/*!
- \fn bool QXmlDTDHandler::notationDecl(const QString& name, const QString& publicId, const QString& systemId)
-
- The reader calls this function when it has parsed a notation
- declaration.
-
- The argument \a name is the notation name, \a publicId is the
- notation's public identifier and \a systemId is the notation's
- system identifier.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlDTDHandler::unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName)
-
- The reader calls this function when it finds an unparsed entity
- declaration.
-
- The argument \a name is the unparsed entity's name, \a publicId is
- the entity's public identifier, \a systemId is the entity's system
- identifier and \a notationName is the name of the associated
- notation.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn QString QXmlDTDHandler::errorString() const
-
- The reader calls this function to get an error string if any of
- the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlEntityResolver
- \obsolete
- \reentrant
- \brief The QXmlEntityResolver class provides an interface to
- resolve external entities contained in XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- If an application needs to implement customized handling for
- external entities, it must implement this interface, i.e.
- resolveEntity(), and register it with
- QXmlReader::setEntityResolver().
-
- \sa QXmlDTDHandler, QXmlDeclHandler, QXmlContentHandler, QXmlErrorHandler,
- QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlEntityResolver::~QXmlEntityResolver()
-
- Destroys the entity resolver.
-*/
-
-/*!
- \fn bool QXmlEntityResolver::resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret)
-
- The reader calls this function before it opens any external
- entity, except the top-level document entity. The application may
- request the reader to resolve the entity itself (\a ret is 0) or
- to use an entirely different input source (\a ret points to the
- input source).
-
- The reader deletes the input source \a ret when it no longer needs
- it, so you should allocate it on the heap with \c new.
-
- The argument \a publicId is the public identifier of the external
- entity, \a systemId is the system identifier of the external
- entity and \a ret is the return value of this function. If \a ret
- is 0 the reader should resolve the entity itself, if it is
- non-zero it must point to an input source which the reader uses
- instead.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn QString QXmlEntityResolver::errorString() const
-
- The reader calls this function to get an error string if any of
- the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlLexicalHandler
- \obsolete
- \reentrant
- \brief The QXmlLexicalHandler class provides an interface to
- report the lexical content of XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- The events in the lexical handler apply to the entire document,
- not just to the document element, and all lexical handler events
- appear between the content handler's startDocument and endDocument
- events.
-
- You can set the lexical handler with
- QXmlReader::setLexicalHandler().
-
- This interface's design is based on the SAX2 extension
- LexicalHandler.
-
- The interface provides the startDTD(), endDTD(), startEntity(),
- endEntity(), startCDATA(), endCDATA() and comment() functions.
-
- \sa QXmlDTDHandler, QXmlDeclHandler, QXmlContentHandler, QXmlEntityResolver,
- QXmlErrorHandler
-*/
-
-/*!
- \fn QXmlLexicalHandler::~QXmlLexicalHandler()
-
- Destroys the lexical handler.
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::startDTD(const QString& name, const QString& publicId, const QString& systemId)
-
- The reader calls this function to report the start of a DTD
- declaration, if any. It reports the name of the document type in
- \a name, the public identifier in \a publicId and the system
- identifier in \a systemId.
-
- If the public identifier is missing, \a publicId is set to
- an empty string. If the system identifier is missing, \a systemId is
- set to an empty string. Note that it is not valid XML to have a
- public identifier but no system identifier; in such cases a parse
- error will occur.
-
- All declarations reported through QXmlDTDHandler or
- QXmlDeclHandler appear between the startDTD() and endDTD() calls.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endDTD()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::endDTD()
-
- The reader calls this function to report the end of a DTD
- declaration, if any.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startDTD()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::startEntity(const QString& name)
-
- The reader calls this function to report the start of an entity
- called \a name.
-
- Note that if the entity is unknown, the reader reports it through
- QXmlContentHandler::skippedEntity() and not through this
- function.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endEntity(), QXmlSimpleReader::setFeature()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::endEntity(const QString& name)
-
- The reader calls this function to report the end of an entity
- called \a name.
-
- For every startEntity() call, there is a corresponding endEntity()
- call. The calls to startEntity() and endEntity() are properly
- nested.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa startEntity(), QXmlContentHandler::skippedEntity(), QXmlSimpleReader::setFeature()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::startCDATA()
-
- The reader calls this function to report the start of a CDATA
- section. The content of the CDATA section is reported through the
- QXmlContentHandler::characters() function. This function is
- intended only to report the boundary.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-
- \sa endCDATA()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::endCDATA()
-
- The reader calls this function to report the end of a CDATA
- section.
-
- If this function returns \c false the reader stops parsing and reports
- an error. The reader uses the function errorString() to get the error
- message.
-
- \sa startCDATA(), QXmlContentHandler::characters()
-*/
-
-/*!
- \fn bool QXmlLexicalHandler::comment(const QString& ch)
-
- The reader calls this function to report an XML comment anywhere
- in the document. It reports the text of the comment in \a ch.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn QString QXmlLexicalHandler::errorString() const
-
- The reader calls this function to get an error string if any of
- the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlDeclHandler
- \obsolete
- \reentrant
- \brief The QXmlDeclHandler class provides an interface to report declaration
- content of XML data.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- You can set the declaration handler with
- QXmlReader::setDeclHandler().
-
- This interface is based on the SAX2 extension DeclHandler.
-
- The interface provides attributeDecl(), internalEntityDecl() and
- externalEntityDecl() functions.
-
- \sa QXmlDTDHandler, QXmlContentHandler, QXmlEntityResolver, QXmlErrorHandler,
- QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlDeclHandler::~QXmlDeclHandler()
-
- Destroys the declaration handler.
-*/
-
-/*!
- \fn bool QXmlDeclHandler::attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value)
-
- The reader calls this function to report an attribute type
- declaration. Only the effective (first) declaration for an
- attribute is reported.
-
- The reader passes the name of the associated element in \a eName
- and the name of the attribute in \a aName. It passes a string that
- represents the attribute type in \a type and a string that
- represents the attribute default in \a valueDefault. This string
- is one of "#IMPLIED", "#REQUIRED", "#FIXED" or an empty string (if
- none of the others applies). The reader passes the attribute's
- default value in \a value. If no default value is specified in the
- XML file, \a value is an empty string.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlDeclHandler::internalEntityDecl(const QString& name, const QString& value)
-
- The reader calls this function to report an internal entity
- declaration. Only the effective (first) declaration is reported.
-
- The reader passes the name of the entity in \a name and the value
- of the entity in \a value.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn bool QXmlDeclHandler::externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId)
-
- The reader calls this function to report a parsed external entity
- declaration. Only the effective (first) declaration for each
- entity is reported.
-
- The reader passes the name of the entity in \a name, the public
- identifier in \a publicId and the system identifier in \a
- systemId. If there is no public identifier specified, it passes
- an empty string in \a publicId.
-
- If this function returns \c false the reader stops parsing and
- reports an error. The reader uses the function errorString() to
- get the error message.
-*/
-
-/*!
- \fn QString QXmlDeclHandler::errorString() const
-
- The reader calls this function to get an error string if any of
- the handler functions returns \c false.
-*/
-
-
-/*!
- \class QXmlDefaultHandler
- \obsolete
- \reentrant
- \brief The QXmlDefaultHandler class provides a default implementation of all
- the XML handler classes.
-
- \inmodule QtXml
- \ingroup xml-tools
-
- This class gathers together the features of
- the specialized handler classes, making it a convenient
- starting point when implementing custom handlers for
- subclasses of QXmlReader, particularly QXmlSimpleReader.
- The virtual functions from each of the base classes are
- reimplemented in this class, providing sensible default behavior
- for many common cases. By subclassing this class, and
- overriding these functions, you can concentrate
- on implementing the parts of the handler relevant to your
- application.
-
- The XML reader must be told which handler to use for different
- kinds of events during parsing. This means that, although
- QXmlDefaultHandler provides default implementations of functions
- inherited from all its base classes, we can still use specialized
- handlers for particular kinds of events.
-
- For example, QXmlDefaultHandler subclasses both
- QXmlContentHandler and QXmlErrorHandler, so by subclassing
- it we can use the same handler for both of the following
- reader functions:
-
- \snippet rsslisting/listing.cpp 0
-
- Since the reader will inform the handler of parsing errors, it is
- necessary to reimplement QXmlErrorHandler::fatalError() if, for
- example, we want to stop parsing when such an error occurs:
-
- \snippet rsslisting/handler.cpp 0
-
- The above function returns \c false, which tells the reader to stop
- parsing. To continue to use the same reader,
- it is necessary to create a new handler instance, and set up the
- reader to use it in the manner described above.
-
- It is useful to examine some of the functions inherited by
- QXmlDefaultHandler, and consider why they might be
- reimplemented in a custom handler.
- Custom handlers will typically reimplement
- QXmlContentHandler::startDocument() to prepare the handler for
- new content. Document elements and the text within them can be
- processed by reimplementing QXmlContentHandler::startElement(),
- QXmlContentHandler::endElement(), and
- QXmlContentHandler::characters().
- You may want to reimplement QXmlContentHandler::endDocument()
- to perform some finalization or validation on the content once the
- document has been read completely.
-
- \sa QXmlDTDHandler, QXmlDeclHandler, QXmlContentHandler, QXmlEntityResolver,
- QXmlErrorHandler, QXmlLexicalHandler
-*/
-
-/*!
- \fn QXmlDefaultHandler::QXmlDefaultHandler()
-
- Constructs a handler for use with subclasses of QXmlReader.
-*/
-QXmlDefaultHandler::QXmlDefaultHandler()
-{
- // ### In Qt 5.0, this function was inlined and d was not initialized
- // The member cannot be used until Qt 6.0
- Q_UNUSED(d);
-}
-
-/*!
- \fn QXmlDefaultHandler::~QXmlDefaultHandler()
-
- Destroys the handler.
-*/
-QXmlDefaultHandler::~QXmlDefaultHandler()
-{
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-void QXmlDefaultHandler::setDocumentLocator(QXmlLocator*)
-{
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startDocument()
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endDocument()
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startPrefixMapping(const QString&, const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endPrefixMapping(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startElement(const QString&, const QString&,
- const QString&, const QXmlAttributes&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endElement(const QString&, const QString&,
- const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::characters(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::ignorableWhitespace(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::processingInstruction(const QString&,
- const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::skippedEntity(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::warning(const QXmlParseException&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::error(const QXmlParseException&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::fatalError(const QXmlParseException&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::notationDecl(const QString&, const QString&,
- const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::unparsedEntityDecl(const QString&, const QString&,
- const QString&, const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- Sets \a ret to \nullptr, so that the reader uses the system identifier
- provided in the XML document.
-*/
-bool QXmlDefaultHandler::resolveEntity(const QString&, const QString&,
- QXmlInputSource*& ret)
-{
- ret = nullptr;
- return true;
-}
-
-/*!
- \reimp
-
- Returns the default error string.
-*/
-QString QXmlDefaultHandler::errorString() const
-{
- return QString::fromLatin1(XMLERR_ERRORBYCONSUMER);
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startDTD(const QString&, const QString&, const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endDTD()
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startEntity(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endEntity(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::startCDATA()
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::endCDATA()
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::comment(const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::attributeDecl(const QString&, const QString&, const QString&, const QString&, const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::internalEntityDecl(const QString&, const QString&)
-{
- return true;
-}
-
-/*!
- \reimp
-
- This reimplementation does nothing.
-*/
-bool QXmlDefaultHandler::externalEntityDecl(const QString&, const QString&, const QString&)
-{
- return true;
-}
-
-
-/*********************************************
- *
- * QXmlSimpleReaderPrivate
- *
- *********************************************/
-
-inline bool QXmlSimpleReaderPrivate::atEnd()
-{
- return (c.unicode()|0x0001) == 0xffff;
-}
-
-inline void QXmlSimpleReaderPrivate::stringClear()
-{
- stringValueLen = 0; stringArrayPos = 0;
-}
-inline void QXmlSimpleReaderPrivate::nameClear()
-{
- nameValueLen = 0; nameArrayPos = 0;
-}
-
-inline void QXmlSimpleReaderPrivate::refClear()
-{
- refValueLen = 0; refArrayPos = 0;
-}
-
-QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
-{
- q_ptr = reader;
- parseStack = nullptr;
-
- locator.reset(new QXmlSimpleReaderLocator(reader));
- entityRes = nullptr;
- dtdHnd = nullptr;
- contentHnd = nullptr;
- errorHnd = nullptr;
- lexicalHnd = nullptr;
- declHnd = nullptr;
-
- // default feature settings
- useNamespaces = true;
- useNamespacePrefixes = false;
- reportWhitespaceCharData = true;
- reportEntities = false;
-}
-
-QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
-{
- delete parseStack;
-}
-
-void QXmlSimpleReaderPrivate::initIncrementalParsing()
-{
- if(parseStack)
- parseStack->clear();
- else
- parseStack = new QStack<ParseState>;
-}
-
-/*********************************************
- *
- * QXmlSimpleReader
- *
- *********************************************/
-
-/*!
- \class QXmlReader
- \obsolete
- \reentrant
- \brief The QXmlReader class provides an interface for XML readers (i.e.
- parsers).
-
- \inmodule QtXml
- \ingroup xml-tools
-
- This abstract class provides an interface for all of Qt's XML
- readers. Currently there is only one implementation of a reader
- included in Qt's XML module: QXmlSimpleReader. In future releases
- there might be more readers with different properties available
- (e.g. a validating parser).
-
- The design of the XML classes follows the \l{SAX2 Java interface}, with
- the names adapted to fit Qt naming conventions. It should be very
- easy for anybody who has worked with SAX2 to get started with the
- Qt XML classes.
-
- All readers use the class QXmlInputSource to read the input
- document. Since you are normally interested in particular content
- in the XML document, the reader reports the content through
- special handler classes (QXmlDTDHandler, QXmlDeclHandler,
- QXmlContentHandler, QXmlEntityResolver, QXmlErrorHandler and
- QXmlLexicalHandler), which you must subclass, if you want to
- process the contents.
-
- Since the handler classes only describe interfaces you must
- implement all the functions. We provide the QXmlDefaultHandler
- class to make this easier: it implements a default behavior (do
- nothing) for all functions, so you can subclass it and just
- implement the functions you are interested in.
-
- Features and properties of the reader can be set with setFeature()
- and setProperty() respectively. You can set the reader to use your
- own subclasses with setEntityResolver(), setDTDHandler(),
- setContentHandler(), setErrorHandler(), setLexicalHandler() and
- setDeclHandler(). The parse itself is started with a call to
- parse().
-
- Note that this class is now deprecated, please use QXmlStreamReader or
- QDomDocument for reading XML files.
-
- \sa QXmlSimpleReader
-*/
-
-/*!
- \fn QXmlReader::~QXmlReader()
-
- Destroys the reader.
-*/
-
-/*!
- \fn bool QXmlReader::feature(const QString& name, bool *ok) const
-
- If the reader has the feature called \a name, the feature's value
- is returned. If no such feature exists the return value is
- undefined.
-
- If \a ok is not \nullptr: \c{*}\a{ok} is set to true if the
- reader has the feature called \a name; otherwise \c{*}\a{ok} is
- set to false.
-
- \sa setFeature(), hasFeature()
-*/
-
-/*!
- \fn void QXmlReader::setFeature(const QString& name, bool value)
-
- Sets the feature called \a name to the given \a value. If the
- reader doesn't have the feature nothing happens.
-
- \sa feature(), hasFeature()
-*/
-
-/*!
- \fn bool QXmlReader::hasFeature(const QString& name) const
-
- Returns \c true if the reader has the feature called \a name;
- otherwise returns \c false.
-
- \sa feature(), setFeature()
-*/
-
-/*!
- \fn void* QXmlReader::property(const QString& name, bool *ok) const
-
- If the reader has the property \a name, this function returns the
- value of the property; otherwise the return value is undefined.
-
- If \a ok is not \nullptr: if the reader has the \a name property
- \c{*}\a{ok} is set to true; otherwise \c{*}\a{ok} is set to false.
-
- \sa setProperty(), hasProperty()
-*/
-
-/*!
- \fn void QXmlReader::setProperty(const QString& name, void* value)
-
- Sets the property \a name to \a value. If the reader doesn't have
- the property nothing happens.
-
- \sa property(), hasProperty()
-*/
-
-/*!
- \fn bool QXmlReader::hasProperty(const QString& name) const
-
- Returns \c true if the reader has the property \a name; otherwise
- returns \c false.
-
- \sa property(), setProperty()
-*/
-
-/*!
- \fn void QXmlReader::setEntityResolver(QXmlEntityResolver* handler)
-
- Sets the entity resolver to \a handler.
-
- \sa entityResolver()
-*/
-
-/*!
- \fn QXmlEntityResolver *QXmlReader::entityResolver() const
-
- Returns the entity resolver or \nullptr if none was set.
-
- \sa setEntityResolver()
-*/
-
-/*!
- \fn void QXmlReader::setDTDHandler(QXmlDTDHandler* handler)
-
- Sets the DTD handler to \a handler.
-
- \sa DTDHandler()
-*/
-
-/*!
- \fn QXmlDTDHandler *QXmlReader::DTDHandler() const
-
- Returns the DTD handler or \nullptr if none was set.
-
- \sa setDTDHandler()
-*/
-
-/*!
- \fn void QXmlReader::setContentHandler(QXmlContentHandler* handler)
-
- Sets the content handler to \a handler.
-
- \sa contentHandler()
-*/
-
-/*!
- \fn QXmlContentHandler *QXmlReader::contentHandler() const
-
- Returns the content handler or \nullptr if none was set.
-
- \sa setContentHandler()
-*/
-
-/*!
- \fn void QXmlReader::setErrorHandler(QXmlErrorHandler* handler)
-
- Sets the error handler to \a handler. Clears the error handler if
- \a handler is 0.
-
- \sa errorHandler()
-*/
-
-/*!
- \fn QXmlErrorHandler *QXmlReader::errorHandler() const
-
- Returns the error handler or \nullptr if none is set.
-
- \sa setErrorHandler()
-*/
-
-/*!
- \fn void QXmlReader::setLexicalHandler(QXmlLexicalHandler* handler)
-
- Sets the lexical handler to \a handler.
-
- \sa lexicalHandler()
-*/
-
-/*!
- \fn QXmlLexicalHandler *QXmlReader::lexicalHandler() const
-
- Returns the lexical handler or \nullptr if none was set.
-
- \sa setLexicalHandler()
-*/
-
-/*!
- \fn void QXmlReader::setDeclHandler(QXmlDeclHandler* handler)
-
- Sets the declaration handler to \a handler.
-
- \sa declHandler()
-*/
-
-/*!
- \fn QXmlDeclHandler *QXmlReader::declHandler() const
-
- Returns the declaration handler or \nullptr if none was set.
-
- \sa setDeclHandler()
-*/
-
-/*!
- \fn bool QXmlReader::parse(const QXmlInputSource &input)
-
- \obsolete
-
- Parses the given \a input.
-*/
-
-/*!
- \fn bool QXmlReader::parse(const QXmlInputSource *input)
-
- Reads an XML document from \a input and parses it. Returns \c true if
- the parsing was successful; otherwise returns \c false.
-*/
-
-
-/*!
- \class QXmlSimpleReader
- \obsolete
- \nonreentrant
- \brief The QXmlSimpleReader class provides an implementation of a
- simple XML parser.
-
- \inmodule QtXml
- \ingroup xml-tools
-
-
- This XML reader is suitable for a wide range of applications. It
- is able to parse well-formed XML and can report the namespaces of
- elements to a content handler; however, it does not parse any
- external entities. For historical reasons, Attribute Value
- Normalization and End-of-Line Handling as described in the XML 1.0
- specification is not performed.
-
- The easiest pattern of use for this class is to create a reader
- instance, define an input source, specify the handlers to be used
- by the reader, and parse the data.
-
- For example, we could use a QFile to supply the input. Here, we
- create a reader, and define an input source to be used by the
- reader:
-
- \snippet simpleparse/main.cpp 0
-
- A handler lets us perform actions when the reader encounters
- certain types of content, or if errors in the input are found. The
- reader must be told which handler to use for each type of
- event. For many common applications, we can create a custom
- handler by subclassing QXmlDefaultHandler, and use this to handle
- both error and content events:
-
- \snippet simpleparse/main.cpp 1
-
- If you don't set at least the content and error handlers, the
- parser will fall back on its default behavior---and will do
- nothing.
-
- The most convenient way to handle the input is to read it in a
- single pass using the parse() function with an argument that
- specifies the input source:
-
- \snippet simpleparse/main.cpp 2
-
- If you can't parse the entire input in one go (for example, it is
- huge, or is being delivered over a network connection), data can
- be fed to the parser in pieces. This is achieved by telling
- parse() to work incrementally, and making subsequent calls to the
- parseContinue() function, until all the data has been processed.
-
- A common way to perform incremental parsing is to connect the \c
- readyRead() signal of a \l{QNetworkReply} {network reply} a slot,
- and handle the incoming data there. See QNetworkAccessManager.
-
- Aspects of the parsing behavior can be adapted using setFeature()
- and setProperty().
-
- \snippet code/src_xml_sax_qxml.cpp 0
-
- QXmlSimpleReader is not reentrant. If you want to use the class
- in threaded code, lock the code using QXmlSimpleReader with a
- locking mechanism, such as a QMutex.
-
- Note that this class is now deprecated, please use QXmlStreamReader or
- QDomDocument for reading XML files.
-*/
-
-static inline bool is_S(QChar ch)
-{
- ushort uc = ch.unicode();
- return (uc == ' ' || uc == '\t' || uc == '\n' || uc == '\r');
-}
-
-enum NameChar { NameBeginning, NameNotBeginning, NotName };
-
-static const char Begi = (char)NameBeginning;
-static const char NtBg = (char)NameNotBeginning;
-static const char NotN = (char)NotName;
-
-static const char nameCharTable[128] =
-{
-// 0x00
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x10
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x20 (0x2D is '-', 0x2E is '.')
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NtBg, NtBg, NotN,
-// 0x30 (0x30..0x39 are '0'..'9', 0x3A is ':')
- NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg,
- NtBg, NtBg, Begi, NotN, NotN, NotN, NotN, NotN,
-// 0x40 (0x41..0x5A are 'A'..'Z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x50 (0x5F is '_')
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, Begi,
-// 0x60 (0x61..0x7A are 'a'..'z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x70
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, NotN
-};
-
-static inline NameChar fastDetermineNameChar(QChar ch)
-{
- ushort uc = ch.unicode();
- if (!(uc & ~0x7f)) // uc < 128
- return (NameChar)nameCharTable[uc];
-
- QChar::Category cat = ch.category();
- // ### some these categories might be slightly wrong
- if ((cat >= QChar::Letter_Uppercase && cat <= QChar::Letter_Other)
- || cat == QChar::Number_Letter)
- return NameBeginning;
- if ((cat >= QChar::Number_DecimalDigit && cat <= QChar::Number_Other)
- || (cat >= QChar::Mark_NonSpacing && cat <= QChar::Mark_Enclosing))
- return NameNotBeginning;
- return NotName;
-}
-
-static NameChar determineNameChar(QChar ch)
-{
- return fastDetermineNameChar(ch);
-}
-
-/*!
- Constructs a simple XML reader.
-
-*/
-QXmlSimpleReader::QXmlSimpleReader()
- : d_ptr(new QXmlSimpleReaderPrivate(this))
-{
-}
-
-/*!
- Destroys the simple XML reader.
-*/
-QXmlSimpleReader::~QXmlSimpleReader()
-{
-}
-
-/*!
- \reimp
-*/
-bool QXmlSimpleReader::feature(const QString& name, bool *ok) const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
-
- if (ok)
- *ok = true;
- if (name == QLatin1String("http://xml.org/sax/features/namespaces")) {
- return d->useNamespaces;
- } else if (name == QLatin1String("http://xml.org/sax/features/namespace-prefixes")) {
- return d->useNamespacePrefixes;
- } else if (name == QLatin1String("http://trolltech.com/xml/features/report-whitespace-only-CharData") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-whitespace-only-CharData")) {
- return d->reportWhitespaceCharData;
- } else if (name == QLatin1String("http://trolltech.com/xml/features/report-start-end-entity") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-start-end-entity")) {
- return d->reportEntities;
- } else {
- qWarning("Unknown feature %s", name.toLatin1().data());
- if (ok)
- *ok = false;
- }
- return false;
-}
-
-/*!
- Turns on the feature \a name if \a enable is true; otherwise turns it off.
-
- The \a name parameter must be one of the following strings:
- \table
- \header \li Feature \li Default \li Notes
- \row \li \e http://xml.org/sax/features/namespaces
- \li true
- \li If enabled, namespaces are reported to the content handler.
- \row \li \e http://xml.org/sax/features/namespace-prefixes
- \li false
- \li If enabled, the original prefixed names
- and attributes used for namespace declarations are
- reported.
- \row \li \e http://qt-project.org/xml/features/report-whitespace-only-CharData
- \li true
- \li If enabled, CharData that consist of
- only whitespace characters are reported
- using QXmlContentHandler::characters(). If disabled, whitespace is silently
- discarded.
- \row \li \e http://qt-project.org/xml/features/report-start-end-entity
- \li false
- \li If enabled, the parser reports
- QXmlContentHandler::startEntity() and
- QXmlContentHandler::endEntity() events, so character data
- might be reported in chunks.
- If disabled, the parser does not report these events, but
- silently substitutes the entities, and reports the character
- data in one chunk.
- \endtable
-
- \sa feature(), hasFeature()
-*/
-void QXmlSimpleReader::setFeature(const QString& name, bool enable)
-{
- Q_D(QXmlSimpleReader);
- if (name == QLatin1String("http://xml.org/sax/features/namespaces")) {
- d->useNamespaces = enable;
- } else if (name == QLatin1String("http://xml.org/sax/features/namespace-prefixes")) {
- d->useNamespacePrefixes = enable;
- } else if (name == QLatin1String("http://trolltech.com/xml/features/report-whitespace-only-CharData") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-whitespace-only-CharData")) {
- d->reportWhitespaceCharData = enable;
- } else if (name == QLatin1String("http://trolltech.com/xml/features/report-start-end-entity") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-start-end-entity")) {
- d->reportEntities = enable;
- } else {
- qWarning("Unknown feature %s", name.toLatin1().data());
- }
-}
-
-/*! \reimp
-*/
-bool QXmlSimpleReader::hasFeature(const QString& name) const
-{
- if (name == QLatin1String("http://xml.org/sax/features/namespaces")
- || name == QLatin1String("http://xml.org/sax/features/namespace-prefixes")
- || name == QLatin1String("http://trolltech.com/xml/features/report-whitespace-only-CharData") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-whitespace-only-CharData")
- || name == QLatin1String("http://trolltech.com/xml/features/report-start-end-entity") // For compat with Qt 4
- || name == QLatin1String("http://qt-project.org/xml/features/report-start-end-entity")) {
- return true;
- } else {
- return false;
- }
-}
-
-/*! \reimp
-*/
-void* QXmlSimpleReader::property(const QString&, bool *ok) const
-{
- if (ok)
- *ok = false;
- return nullptr;
-}
-
-/*! \reimp
-*/
-void QXmlSimpleReader::setProperty(const QString&, void*)
-{
-}
-
-/*!
- \reimp
-*/
-bool QXmlSimpleReader::hasProperty(const QString&) const
-{
- return false;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver* handler)
-{
- Q_D(QXmlSimpleReader);
- d->entityRes = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlEntityResolver* QXmlSimpleReader::entityResolver() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->entityRes;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler* handler)
-{
- Q_D(QXmlSimpleReader);
- d->dtdHnd = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlDTDHandler* QXmlSimpleReader::DTDHandler() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->dtdHnd;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setContentHandler(QXmlContentHandler* handler)
-{
- Q_D(QXmlSimpleReader);
- d->contentHnd = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlContentHandler* QXmlSimpleReader::contentHandler() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->contentHnd;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler* handler)
-{
- Q_D(QXmlSimpleReader);
- d->errorHnd = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlErrorHandler* QXmlSimpleReader::errorHandler() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->errorHnd;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler* handler)
-{
- Q_D(QXmlSimpleReader);
- d->lexicalHnd = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlLexicalHandler* QXmlSimpleReader::lexicalHandler() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->lexicalHnd;
-}
-
-/*!
- \reimp
-*/
-void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler* handler)
-{
- Q_D(QXmlSimpleReader);
- d->declHnd = handler;
-}
-
-/*!
- \reimp
-*/
-QXmlDeclHandler* QXmlSimpleReader::declHandler() const
-{
- const QXmlSimpleReaderPrivate *d = d_func();
- return d->declHnd;
-}
-
-
-
-/*!
- \reimp
-*/
-bool QXmlSimpleReader::parse(const QXmlInputSource& input)
-{
- return parse(&input, false);
-}
-
-/*!
- Reads an XML document from \a input and parses it in one pass (non-incrementally).
- Returns \c true if the parsing was successful; otherwise returns \c false.
-*/
-bool QXmlSimpleReader::parse(const QXmlInputSource* input)
-{
- return parse(input, false);
-}
-
-/*!
- Reads an XML document from \a input and parses it. Returns \c true
- if the parsing is completed successfully; otherwise returns \c false,
- indicating that an error occurred.
-
- If \a incremental is false, this function will return false if the XML
- file is not read completely. The parsing cannot be continued in this
- case.
-
- If \a incremental is true, the parser does not return false if
- it reaches the end of the \a input before reaching the end
- of the XML file. Instead, it stores the state of the parser so that
- parsing can be continued later when more data is available.
- In such a case, you can use the function parseContinue() to
- continue with parsing. This class stores a pointer to the input
- source \a input and the parseContinue() function tries to read from
- that input source. Therefore, you should not delete the input
- source \a input until you no longer need to call parseContinue().
-
- If this function is called with \a incremental set to true
- while an incremental parse is in progress, a new parsing
- session will be started, and the previous session will be lost.
-
- \sa parseContinue(), QTcpSocket
-*/
-bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
-{
- Q_D(QXmlSimpleReader);
-
- d->literalEntitySizes.clear();
- d->referencesToOtherEntities.clear();
- d->expandedSizes.clear();
-
- if (incremental) {
- d->initIncrementalParsing();
- } else {
- delete d->parseStack;
- d->parseStack = nullptr;
- }
- d->init(input);
-
- // call the handler
- if (d->contentHnd) {
- d->contentHnd->setDocumentLocator(d->locator.data());
- if (!d->contentHnd->startDocument()) {
- d->reportParseError(d->contentHnd->errorString());
- clear(d->tags);
- return false;
- }
- }
- d->skipped_entity_in_content = false;
- return d->parseBeginOrContinue(0, incremental);
-}
-
-/*!
- Continues incremental parsing, taking input from the
- QXmlInputSource that was specified with the most recent
- call to parse(). To use this function, you \e must have called
- parse() with the incremental argument set to true.
-
- Returns \c false if a parsing error occurs; otherwise returns \c true,
- even if the end of the XML file has not been reached. You can
- continue parsing at a later stage by calling this function again
- when there is more data available to parse.
-
- Calling this function when there is no data available in the input
- source indicates to the reader that the end of the XML file has
- been reached. If the input supplied up to this point was
- not well-formed then a parsing error occurs, and false is returned.
- If the input supplied was well-formed, true is returned.
- It is important to end the input in this way because it allows you
- to reuse the reader to parse other XML files.
-
- Calling this function after the end of file has been reached, but
- without available data will cause false to be returned whether the
- previous input was well-formed or not.
-
- \sa parse(), QXmlInputSource::data(), QXmlInputSource::next()
-*/
-bool QXmlSimpleReader::parseContinue()
-{
- Q_D(QXmlSimpleReader);
- if (d->parseStack == nullptr || d->parseStack->isEmpty())
- return false;
- d->initData();
- int state = d->parseStack->pop().state;
- return d->parseBeginOrContinue(state, true);
-}
-
-/*
- Common part of parse() and parseContinue()
-*/
-bool QXmlSimpleReaderPrivate::parseBeginOrContinue(int state, bool incremental)
-{
- bool atEndOrig = atEnd();
-
- if (state==0) {
- if (!parseProlog()) {
- if (incremental && error.isNull()) {
- pushParseState(nullptr, 0);
- return true;
- } else {
- clear(tags);
- return false;
- }
- }
- state = 1;
- }
- if (state==1) {
- if (!parseElement()) {
- if (incremental && error.isNull()) {
- pushParseState(nullptr, 1);
- return true;
- } else {
- clear(tags);
- return false;
- }
- }
- state = 2;
- }
- // parse Misc*
- while (!atEnd()) {
- if (!parseMisc()) {
- if (incremental && error.isNull()) {
- pushParseState(nullptr, 2);
- return true;
- } else {
- clear(tags);
- return false;
- }
- }
- }
- if (!atEndOrig && incremental) {
- // we parsed something at all, so be prepared to come back later
- pushParseState(nullptr, 2);
- return true;
- }
- // is stack empty?
- if (!tags.empty() && !error.isNull()) {
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDEOF));
- clear(tags);
- return false;
- }
- // call the handler
- if (contentHnd) {
- delete parseStack;
- parseStack = nullptr;
- if (!contentHnd->endDocument()) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- return true;
-}
-
-//
-// The following private parse functions have another semantics for the return
-// value: They return true iff parsing has finished successfully (i.e. the end
-// of the XML file must be reached!). If one of these functions return false,
-// there is only an error when d->error.isNULL() is also false.
-//
-
-/*
- For the incremental parsing, it is very important that the parse...()
- functions have a certain structure. Since it might be hard to understand how
- they work, here is a description of the layout of these functions:
-
- bool QXmlSimpleReader::parse...()
- {
-(1) const signed char Init = 0;
- ...
-
-(2) const signed char Inp... = 0;
- ...
-
-(3) static const signed char table[3][2] = {
- ...
- };
- signed char state;
- signed char input;
-
-(4) if (d->parseStack == nullptr || d->parseStack->isEmpty()) {
-(4a) ...
- } else {
-(4b) ...
- }
-
- for (; ;) {
-(5) switch (state) {
- ...
- }
-
-(6)
-(6a) if (atEnd()) {
- unexpectedEof(&QXmlSimpleReader::parseNmtoken, state);
- return false;
- }
-(6b) if (determineNameChar(c) != NotName) {
- ...
- }
-(7) state = table[state][input];
-
-(8) switch (state) {
- ...
- }
- }
- }
-
- Explanation:
- ad 1: constants for the states (used in the transition table)
- ad 2: constants for the input (used in the transition table)
- ad 3: the transition table for the state machine
- ad 4: test if we are in a parseContinue() step
- a) if no, do inititalizations
- b) if yes, restore the state and call parse functions recursively
- ad 5: Do some actions according to the state; from the logical execution
- order, this code belongs after 8 (see there for an explanation)
- ad 6: Check the character that is at the actual "cursor" position:
- a) If we reached the EOF, report either error or push the state (in the
- case of incremental parsing).
- b) Otherwise, set the input character constant for the transition
- table.
- ad 7: Get the new state according to the input that was read.
- ad 8: Do some actions according to the state. The last line in every case
- statement reads new data (i.e. it move the cursor). This can also be
- done by calling another parse...() function. If you need processing for
- this state after that, you have to put it into the switch statement 5.
- This ensures that you have a well defined re-entry point, when you ran
- out of data.
-*/
-
-/*
- Parses the prolog [22].
-*/
-
-bool QXmlSimpleReaderPrivate::parseProlog()
-{
- const signed char Init = 0;
- const signed char EatWS = 1; // eat white spaces
- const signed char Lt = 2; // '<' read
- const signed char Em = 3; // '!' read
- const signed char DocType = 4; // read doctype
- const signed char Comment = 5; // read comment
- const signed char CommentR = 6; // same as Comment, but already reported
- const signed char PInstr = 7; // read PI
- const signed char PInstrR = 8; // same as PInstr, but already reported
- const signed char Done = 9;
-
- const signed char InpWs = 0;
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpD = 4; // D
- const signed char InpDash = 5; // -
- const signed char InpUnknown = 6;
-
- static const signed char table[9][7] = {
- /* InpWs InpLt InpQm InpEm InpD InpDash InpUnknown */
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Init
- { -1, Lt, -1, -1, -1, -1, -1 }, // EatWS
- { -1, -1, PInstr,Em, Done, -1, Done }, // Lt
- { -1, -1, -1, -1, DocType, Comment, -1 }, // Em
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // DocType
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Comment
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // CommentR
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // PInstr
- { EatWS, Lt, -1, -1, -1, -1, -1 } // PInstrR
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr|| parseStack->isEmpty()) {
- xmldecl_possible = true;
- doctype_read = false;
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseProlog (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case DocType:
- if (doctype_read) {
- reportParseError(QLatin1String(XMLERR_MORETHANONEDOCTYPE));
- return false;
- } else {
- doctype_read = false;
- }
- break;
- case Comment:
- if (lexicalHnd) {
- if (!lexicalHnd->comment(string())) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- state = CommentR;
- break;
- case PInstr:
- // call the handler
- if (contentHnd) {
- if (xmldecl_possible && !xmlVersion.isEmpty()) {
- QString value(QLatin1String("version='"));
- value += xmlVersion;
- value += QLatin1Char('\'');
- if (!encoding.isEmpty()) {
- value += QLatin1String(" encoding='");
- value += encoding;
- value += QLatin1Char('\'');
- }
- if (standalone == QXmlSimpleReaderPrivate::Yes) {
- value += QLatin1String(" standalone='yes'");
- } else if (standalone == QXmlSimpleReaderPrivate::No) {
- value += QLatin1String(" standalone='no'");
- }
- if (!contentHnd->processingInstruction(QLatin1String("xml"), value)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- } else {
- if (!contentHnd->processingInstruction(name(), string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- // XML declaration only on first position possible
- xmldecl_possible = false;
- state = PInstrR;
- break;
- case Done:
- return true;
- case -1:
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGELEMENT));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('<')) {
- input = InpLt;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else if (c == QLatin1Char('!')) {
- input = InpEm;
- } else if (c == QLatin1Char('D')) {
- input = InpD;
- } else if (c == QLatin1Char('-')) {
- input = InpDash;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case EatWS:
- // XML declaration only on first position possible
- xmldecl_possible = false;
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- break;
- case Lt:
- next();
- break;
- case Em:
- // XML declaration only on first position possible
- xmldecl_possible = false;
- next();
- break;
- case DocType:
- if (!parseDoctype()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- break;
- case Comment:
- case CommentR:
- if (!parseComment()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- break;
- case PInstr:
- case PInstrR:
- parsePI_xmldecl = xmldecl_possible;
- if (!parsePI()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseProlog, state);
- return false;
- }
- break;
- }
- }
- return false;
-}
-
-/*
- Parse an element [39].
-
- Precondition: the opening '<' is already read.
-*/
-bool QXmlSimpleReaderPrivate::parseElement()
-{
- const int Init = 0;
- const int ReadName = 1;
- const int Ws1 = 2;
- const int STagEnd = 3;
- const int STagEnd2 = 4;
- const int ETagBegin = 5;
- const int ETagBegin2 = 6;
- const int Ws2 = 7;
- const int EmptyTag = 8;
- const int Attrib = 9;
- const int AttribPro = 10; // like Attrib, but processAttribute was already called
- const int Ws3 = 11;
- const int Done = 12;
-
- const int InpWs = 0; // whitespace
- const int InpNameBe = 1; // NameBeginning
- const int InpGt = 2; // >
- const int InpSlash = 3; // /
- const int InpUnknown = 4;
-
- static const int table[12][5] = {
- /* InpWs InpNameBe InpGt InpSlash InpUnknown */
- { -1, ReadName, -1, -1, -1 }, // Init
- { Ws1, Attrib, STagEnd, EmptyTag, -1 }, // ReadName
- { -1, Attrib, STagEnd, EmptyTag, -1 }, // Ws1
- { STagEnd2, STagEnd2, STagEnd2, STagEnd2, STagEnd2 }, // STagEnd
- { -1, -1, -1, ETagBegin, -1 }, // STagEnd2
- { -1, ETagBegin2, -1, -1, -1 }, // ETagBegin
- { Ws2, -1, Done, -1, -1 }, // ETagBegin2
- { -1, -1, Done, -1, -1 }, // Ws2
- { -1, -1, Done, -1, -1 }, // EmptyTag
- { Ws3, Attrib, STagEnd, EmptyTag, -1 }, // Attrib
- { Ws3, Attrib, STagEnd, EmptyTag, -1 }, // AttribPro
- { -1, Attrib, STagEnd, EmptyTag, -1 } // Ws3
- };
- int state;
- int input;
-
- if (parseStack == nullptr|| parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseElement (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case ReadName:
- // store it on the stack
- tags.push(name());
- // empty the attributes
- attList.clear();
- if (useNamespaces)
- namespaceSupport.pushContext();
- break;
- case ETagBegin2:
- if (!processElementETagBegin2())
- return false;
- break;
- case Attrib:
- if (!processElementAttribute())
- return false;
- state = AttribPro;
- break;
- case Done:
- return true;
- case -1:
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGELEMENT));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- if (fastDetermineNameChar(c) == NameBeginning) {
- input = InpNameBe;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('/')) {
- input = InpSlash;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case ReadName:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- break;
- case STagEnd:
- // call the handler
- if (contentHnd) {
- if (useNamespaces) {
- QString uri, lname;
- namespaceSupport.processName(tags.top(), false, uri, lname);
- if (!contentHnd->startElement(uri, lname, tags.top(), attList)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- } else {
- if (!contentHnd->startElement(QString(), QString(), tags.top(), attList)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- next();
- break;
- case STagEnd2:
- if (!parseContent()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- break;
- case ETagBegin:
- next();
- break;
- case ETagBegin2:
- // get the name of the tag
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- break;
- case EmptyTag:
- if (tags.empty()) {
- reportParseError(QLatin1String(XMLERR_TAGMISMATCH));
- return false;
- }
- if (!processElementEmptyTag())
- return false;
- next();
- break;
- case Attrib:
- case AttribPro:
- // get name and value of attribute
- if (!parseAttribute()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElement, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Helper to break down the size of the code in the case statement.
- Return false on error, otherwise true.
-*/
-bool QXmlSimpleReaderPrivate::processElementEmptyTag()
-{
- QString uri, lname;
- // pop the stack and call the handler
- if (contentHnd) {
- if (useNamespaces) {
- // report startElement first...
- namespaceSupport.processName(tags.top(), false, uri, lname);
- if (!contentHnd->startElement(uri, lname, tags.top(), attList)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- // ... followed by endElement...
- const bool endElementReturnedFalse = !contentHnd->endElement(uri, lname, tags.top());
- tags.pop();
- if (endElementReturnedFalse) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- // ... followed by endPrefixMapping
- QStringList prefixesBefore, prefixesAfter;
- if (contentHnd) {
- prefixesBefore = namespaceSupport.prefixes();
- }
- namespaceSupport.popContext();
- // call the handler for prefix mapping
- prefixesAfter = namespaceSupport.prefixes();
- for (QStringList::Iterator it = prefixesBefore.begin(); it != prefixesBefore.end(); ++it) {
- if (!prefixesAfter.contains(*it)) {
- if (!contentHnd->endPrefixMapping(*it)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- } else {
- // report startElement first...
- if (!contentHnd->startElement(QString(), QString(), tags.top(), attList)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- // ... followed by endElement
- const bool endElementReturnedFalse = !contentHnd->endElement(QString(), QString(), tags.top());
- tags.pop();
- if (endElementReturnedFalse) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- } else {
- tags.pop();
- namespaceSupport.popContext();
- }
- return true;
-}
-/*
- Helper to break down the size of the code in the case statement.
- Return false on error, otherwise true.
-*/
-bool QXmlSimpleReaderPrivate::processElementETagBegin2()
-{
- const QString &name = QXmlSimpleReaderPrivate::name();
-
- // pop the stack and compare it with the name
- const bool nameIsTagsTop = tags.top() == name;
- tags.pop();
- if (!nameIsTagsTop) {
- reportParseError(QLatin1String(XMLERR_TAGMISMATCH));
- return false;
- }
- // call the handler
- if (contentHnd) {
- QString uri, lname;
-
- if (useNamespaces)
- namespaceSupport.processName(name, false, uri, lname);
- if (!contentHnd->endElement(uri, lname, name)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- if (useNamespaces) {
- NamespaceMap prefixesBefore, prefixesAfter;
- if (contentHnd)
- prefixesBefore = namespaceSupport.d->ns;
-
- namespaceSupport.popContext();
- // call the handler for prefix mapping
- if (contentHnd) {
- prefixesAfter = namespaceSupport.d->ns;
- if (prefixesBefore.size() != prefixesAfter.size()) {
- for (NamespaceMap::const_iterator it = prefixesBefore.constBegin(); it != prefixesBefore.constEnd(); ++it) {
- if (!it.key().isEmpty() && !prefixesAfter.contains(it.key())) {
- if (!contentHnd->endPrefixMapping(it.key())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- }
- }
- }
- return true;
-}
-/*
- Helper to break down the size of the code in the case statement.
- Return false on error, otherwise true.
-*/
-bool QXmlSimpleReaderPrivate::processElementAttribute()
-{
- QString uri, lname, prefix;
- const QString &name = QXmlSimpleReaderPrivate::name();
- const QString &string = QXmlSimpleReaderPrivate::string();
-
- // add the attribute to the list
- if (useNamespaces) {
- // is it a namespace declaration?
- namespaceSupport.splitName(name, prefix, lname);
- if (prefix == QLatin1String("xmlns")) {
- // namespace declaration
- namespaceSupport.setPrefix(lname, string);
- if (useNamespacePrefixes) {
- // according to http://www.w3.org/2000/xmlns/, the "prefix"
- // xmlns maps to the namespace name
- // http://www.w3.org/2000/xmlns/
- attList.append(name, QLatin1String("http://www.w3.org/2000/xmlns/"), lname, string);
- }
- // call the handler for prefix mapping
- if (contentHnd) {
- if (!contentHnd->startPrefixMapping(lname, string)) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- } else {
- // no namespace delcaration
- namespaceSupport.processName(name, true, uri, lname);
- attList.append(name, uri, lname, string);
- }
- } else {
- // no namespace support
- attList.append(name, uri, lname, string);
- }
- return true;
-}
-
-/*
- Parse a content [43].
-
- A content is only used between tags. If a end tag is found the < is already
- read and the head stand on the '/' of the end tag '</name>'.
-*/
-bool QXmlSimpleReaderPrivate::parseContent()
-{
- const signed char Init = 0;
- const signed char ChD = 1; // CharData
- const signed char ChD1 = 2; // CharData help state
- const signed char ChD2 = 3; // CharData help state
- const signed char Ref = 4; // Reference
- const signed char Lt = 5; // '<' read
- const signed char PInstr = 6; // PI
- const signed char PInstrR = 7; // same as PInstr, but already reported
- const signed char Elem = 8; // Element
- const signed char Em = 9; // '!' read
- const signed char Com = 10; // Comment
- const signed char ComR = 11; // same as Com, but already reported
- const signed char CDS = 12; // CDSect
- const signed char CDS1 = 13; // read a CDSect
- const signed char CDS2 = 14; // read a CDSect (help state)
- const signed char CDS3 = 15; // read a CDSect (help state)
- const signed char Done = 16; // finished reading content
-
- const signed char InpLt = 0; // <
- const signed char InpGt = 1; // >
- const signed char InpSlash = 2; // /
- const signed char InpQMark = 3; // ?
- const signed char InpEMark = 4; // !
- const signed char InpAmp = 5; // &
- const signed char InpDash = 6; // -
- const signed char InpOpenB = 7; // [
- const signed char InpCloseB = 8; //]
- const signed char InpUnknown = 9;
-
- static const signed char mapCLT2FSMChar[] = {
- InpUnknown, // white space
- InpUnknown, // %
- InpAmp, // &
- InpGt, // >
- InpLt, // <
- InpSlash, // /
- InpQMark, // ?
- InpEMark, // !
- InpDash, // -
- InpCloseB, //]
- InpOpenB, // [
- InpUnknown, // =
- InpUnknown, // "
- InpUnknown, // '
- InpUnknown // unknown
- };
-
- static const signed char table[16][10] = {
- /* InpLt InpGt InpSlash InpQMark InpEMark InpAmp InpDash InpOpenB InpCloseB InpUnknown */
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // Init
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // ChD
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD1
- { Lt, -1, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD2
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Ref (same as Init)
- { -1, -1, Done, PInstr, Em, -1, -1, -1, -1, Elem }, // Lt
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // PInstr (same as Init)
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // PInstrR
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Elem (same as Init)
- { -1, -1, -1, -1, -1, -1, Com, CDS, -1, -1 }, // Em
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Com (same as Init)
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // ComR
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS1
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 }, // CDS2
- { CDS1, Init, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 } // CDS3
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- contentCharDataRead = false;
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseContent (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Ref:
- if (!contentCharDataRead)
- contentCharDataRead = parseReference_charDataRead;
- break;
- case PInstr:
- if (contentHnd) {
- if (!contentHnd->processingInstruction(name(),string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- state = PInstrR;
- break;
- case Com:
- if (lexicalHnd) {
- if (!lexicalHnd->comment(string())) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- state = ComR;
- break;
- case CDS:
- stringClear();
- break;
- case CDS2:
- if (!atEnd() && c != QLatin1Char(']'))
- stringAddC(QLatin1Char(']'));
- break;
- case CDS3:
- // test if this skipping was legal
- if (!atEnd()) {
- if (c == QLatin1Char('>')) {
- // the end of the CDSect
- if (lexicalHnd) {
- if (!lexicalHnd->startCDATA()) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- if (contentHnd) {
- if (!contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- if (lexicalHnd) {
- if (!lexicalHnd->endCDATA()) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- } else if (c == QLatin1Char(']')) {
- // three or more ']'
- stringAddC(QLatin1Char(']'));
- } else {
- // after ']]' comes another character
- stringAddC(QLatin1Char(']'));
- stringAddC(QLatin1Char(']'));
- }
- }
- break;
- case Done:
- // call the handler for CharData
- if (contentHnd) {
- if (contentCharDataRead) {
- if (reportWhitespaceCharData || !string().simplified().isEmpty()) {
- if (!contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- }
- // Done
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGCONTENT));
- return false;
- }
-
- // get input (use lookup-table instead of nested ifs for performance
- // reasons)
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- if (c.row()) {
- input = InpUnknown;
- } else {
- input = mapCLT2FSMChar[charLookupTable[c.cell()]];
- }
- state = table[state][input];
-
- switch (state) {
- case Init:
- // skip the ending '>' of a CDATASection
- next();
- break;
- case ChD:
- // on first call: clear string
- if (!contentCharDataRead) {
- contentCharDataRead = true;
- stringClear();
- }
- stringAddC();
- if (reportEntities) {
- if (!reportEndEntities())
- return false;
- }
- next();
- break;
- case ChD1:
- // on first call: clear string
- if (!contentCharDataRead) {
- contentCharDataRead = true;
- stringClear();
- }
- stringAddC();
- if (reportEntities) {
- if (!reportEndEntities())
- return false;
- }
- next();
- break;
- case ChD2:
- stringAddC();
- if (reportEntities) {
- if (!reportEndEntities())
- return false;
- }
- next();
- break;
- case Ref:
- if (!contentCharDataRead) {
- // reference may be CharData; so clear string to be safe
- stringClear();
- parseReference_context = InContent;
- if (!parseReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- } else {
- if (reportEntities) {
- // report character data in chunks
- if (contentHnd) {
- if (reportWhitespaceCharData || !string().simplified().isEmpty()) {
- if (!contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- stringClear();
- }
- parseReference_context = InContent;
- if (!parseReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- }
- break;
- case Lt:
- // call the handler for CharData
- if (contentHnd) {
- if (contentCharDataRead) {
- if (reportWhitespaceCharData || !string().simplified().isEmpty()) {
- if (!contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- }
- contentCharDataRead = false;
- next();
- break;
- case PInstr:
- case PInstrR:
- parsePI_xmldecl = false;
- if (!parsePI()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- break;
- case Elem:
- if (!parseElement()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- break;
- case Em:
- next();
- break;
- case Com:
- case ComR:
- if (!parseComment()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- break;
- case CDS:
- parseString_s = QLatin1String("[CDATA[");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseContent, state);
- return false;
- }
- break;
- case CDS1:
- stringAddC();
- next();
- break;
- case CDS2:
- // skip ']'
- next();
- break;
- case CDS3:
- // skip ']'...
- next();
- break;
- }
- }
- return false;
-}
-
-bool QXmlSimpleReaderPrivate::reportEndEntities()
-{
- int count = (int)xmlRefStack.count();
- while (count != 0 && xmlRefStack.top().isEmpty()) {
- if (contentHnd) {
- if (reportWhitespaceCharData || !string().simplified().isEmpty()) {
- if (!contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- }
- stringClear();
- if (lexicalHnd) {
- if (!lexicalHnd->endEntity(xmlRefStack.top().name)) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- xmlRefStack.pop_back();
- count--;
- }
- return true;
-}
-
-/*
- Parse Misc [27].
-*/
-bool QXmlSimpleReaderPrivate::parseMisc()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // '<' was read
- const signed char Comment = 2; // read comment
- const signed char eatWS = 3; // eat whitespaces
- const signed char PInstr = 4; // read PI
- const signed char Comment2 = 5; // read comment
-
- const signed char InpWs = 0; // S
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpUnknown = 4;
-
- static const signed char table[3][5] = {
- /* InpWs InpLt InpQm InpEm InpUnknown */
- { eatWS, Lt, -1, -1, -1 }, // Init
- { -1, -1, PInstr,Comment, -1 }, // Lt
- { -1, -1, -1, -1, Comment2 } // Comment
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseMisc (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMisc, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case eatWS:
- return true;
- case PInstr:
- if (contentHnd) {
- if (!contentHnd->processingInstruction(name(),string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- return true;
- case Comment2:
- if (lexicalHnd) {
- if (!lexicalHnd->comment(string())) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseMisc, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('<')) {
- input = InpLt;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else if (c == QLatin1Char('!')) {
- input = InpEm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case eatWS:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMisc, state);
- return false;
- }
- break;
- case Lt:
- next();
- break;
- case PInstr:
- parsePI_xmldecl = false;
- if (!parsePI()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMisc, state);
- return false;
- }
- break;
- case Comment:
- next();
- break;
- case Comment2:
- if (!parseComment()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMisc, state);
- return false;
- }
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a processing instruction [16].
-
- If xmldec is true, it tries to parse a PI or a XML declaration [23].
-
- Precondition: the beginning '<' of the PI is already read and the head stand
- on the '?' of '<?'.
-
- If this funktion was successful, the head-position is on the first
- character after the PI.
-*/
-bool QXmlSimpleReaderPrivate::parsePI()
-{
- const signed char Init = 0;
- const signed char QmI = 1; // ? was read
- const signed char Name = 2; // read Name
- const signed char XMLDecl = 3; // read XMLDecl
- const signed char Ws1 = 4; // eat ws after "xml" of XMLDecl
- const signed char PInstr = 5; // read PI
- const signed char Ws2 = 6; // eat ws after Name of PI
- const signed char Version = 7; // read versionInfo
- const signed char Ws3 = 8; // eat ws after versionInfo
- const signed char EorSD = 9; // read EDecl or SDDecl
- const signed char Ws4 = 10; // eat ws after EDecl or SDDecl
- const signed char SD = 11; // read SDDecl
- const signed char Ws5 = 12; // eat ws after SDDecl
- const signed char ADone = 13; // almost done
- const signed char Char = 14; // Char was read
- const signed char Qm = 15; // Qm was read
- const signed char Done = 16; // finished reading content
-
- const signed char InpWs = 0; // whitespace
- const signed char InpNameBe = 1; // NameBeginning
- const signed char InpGt = 2; // >
- const signed char InpQm = 3; // ?
- const signed char InpUnknown = 4;
-
- static const signed char table[16][5] = {
- /* InpWs, InpNameBe InpGt InpQm InpUnknown */
- { -1, -1, -1, QmI, -1 }, // Init
- { -1, Name, -1, -1, -1 }, // QmI
- { -1, -1, -1, -1, -1 }, // Name (this state is left not through input)
- { Ws1, -1, -1, -1, -1 }, // XMLDecl
- { -1, Version, -1, -1, -1 }, // Ws1
- { Ws2, -1, -1, Qm, -1 }, // PInstr
- { Char, Char, Char, Qm, Char }, // Ws2
- { Ws3, -1, -1, ADone, -1 }, // Version
- { -1, EorSD, -1, ADone, -1 }, // Ws3
- { Ws4, -1, -1, ADone, -1 }, // EorSD
- { -1, SD, -1, ADone, -1 }, // Ws4
- { Ws5, -1, -1, ADone, -1 }, // SD
- { -1, -1, -1, ADone, -1 }, // Ws5
- { -1, -1, Done, -1, -1 }, // ADone
- { Char, Char, Char, Qm, Char }, // Char
- { Char, Char, Done, Qm, Char }, // Qm
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parsePI (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Name:
- // test what name was read and determine the next state
- // (not very beautiful, I admit)
- if (name().toLower() == QLatin1String("xml")) {
- if (parsePI_xmldecl && name() == QLatin1String("xml")) {
- state = XMLDecl;
- } else {
- reportParseError(QLatin1String(XMLERR_INVALIDNAMEFORPI));
- return false;
- }
- } else {
- state = PInstr;
- stringClear();
- }
- break;
- case Version:
- // get version (syntax like an attribute)
- if (name() != QLatin1String("version")) {
- reportParseError(QLatin1String(XMLERR_VERSIONEXPECTED));
- return false;
- }
- xmlVersion = string();
- break;
- case EorSD:
- // get the EDecl or SDDecl (syntax like an attribute)
- if (name() == QLatin1String("standalone")) {
- if (string()== QLatin1String("yes")) {
- standalone = QXmlSimpleReaderPrivate::Yes;
- } else if (string() == QLatin1String("no")) {
- standalone = QXmlSimpleReaderPrivate::No;
- } else {
- reportParseError(QLatin1String(XMLERR_WRONGVALUEFORSDECL));
- return false;
- }
- } else if (name() == QLatin1String("encoding")) {
- encoding = string();
- } else {
- reportParseError(QLatin1String(XMLERR_EDECLORSDDECLEXPECTED));
- return false;
- }
- break;
- case SD:
- if (name() != QLatin1String("standalone")) {
- reportParseError(QLatin1String(XMLERR_SDDECLEXPECTED));
- return false;
- }
- if (string() == QLatin1String("yes")) {
- standalone = QXmlSimpleReaderPrivate::Yes;
- } else if (string() == QLatin1String("no")) {
- standalone = QXmlSimpleReaderPrivate::No;
- } else {
- reportParseError(QLatin1String(XMLERR_WRONGVALUEFORSDECL));
- return false;
- }
- break;
- case Qm:
- // test if the skipping was legal
- if (!atEnd() && c != QLatin1Char('>'))
- stringAddC(QLatin1Char('?'));
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (determineNameChar(c) == NameBeginning) {
- input = InpNameBe;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case QmI:
- next();
- break;
- case Name:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- case Ws5:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- break;
- case Version:
- if (!parseAttribute()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- break;
- case EorSD:
- if (!parseAttribute()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- break;
- case SD:
- // get the SDDecl (syntax like an attribute)
- if (standalone != QXmlSimpleReaderPrivate::Unknown) {
- // already parsed the standalone declaration
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
- if (!parseAttribute()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePI, state);
- return false;
- }
- break;
- case ADone:
- next();
- break;
- case Char:
- stringAddC();
- next();
- break;
- case Qm:
- // skip the '?'
- next();
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a document type definition (doctypedecl [28]).
-
- Precondition: the beginning '<!' of the doctype is already read the head
- stands on the 'D' of '<!DOCTYPE'.
-
- If this function was successful, the head-position is on the first
- character after the document type definition.
-*/
-bool QXmlSimpleReaderPrivate::parseDoctype()
-{
- const signed char Init = 0;
- const signed char Doctype = 1; // read the doctype
- const signed char Ws1 = 2; // eat_ws
- const signed char Doctype2 = 3; // read the doctype, part 2
- const signed char Ws2 = 4; // eat_ws
- const signed char Sys = 5; // read SYSTEM or PUBLIC
- const signed char Ws3 = 6; // eat_ws
- const signed char MP = 7; // markupdecl or PEReference
- const signed char MPR = 8; // same as MP, but already reported
- const signed char PER = 9; // PERReference
- const signed char Mup = 10; // markupdecl
- const signed char Ws4 = 11; // eat_ws
- const signed char MPE = 12; // end of markupdecl or PEReference
- const signed char Done = 13;
-
- const signed char InpWs = 0;
- const signed char InpD = 1; // 'D'
- const signed char InpS = 2; // 'S' or 'P'
- const signed char InpOB = 3; // [
- const signed char InpCB = 4; //]
- const signed char InpPer = 5; // %
- const signed char InpGt = 6; // >
- const signed char InpUnknown = 7;
-
- static const signed char table[13][8] = {
- /* InpWs, InpD InpS InpOB InpCB InpPer InpGt InpUnknown */
- { -1, Doctype, -1, -1, -1, -1, -1, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1, -1, -1 }, // Doctype
- { -1, Doctype2, Doctype2, -1, -1, -1, -1, Doctype2 }, // Ws1
- { Ws2, -1, Sys, MP, -1, -1, Done, -1 }, // Doctype2
- { -1, -1, Sys, MP, -1, -1, Done, -1 }, // Ws2
- { Ws3, -1, -1, MP, -1, -1, Done, -1 }, // Sys
- { -1, -1, -1, MP, -1, -1, Done, -1 }, // Ws3
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // MP
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // MPR
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // PER
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // Mup
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // Ws4
- { -1, -1, -1, -1, -1, -1, Done, -1 } // MPE
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- startDTDwasReported = false;
- systemId.clear();
- publicId.clear();
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseDoctype (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Doctype2:
- doctype = name();
- break;
- case MP:
- if (!startDTDwasReported && lexicalHnd ) {
- startDTDwasReported = true;
- if (!lexicalHnd->startDTD(doctype, publicId, systemId)) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- state = MPR;
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGDOCTYPE));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('D')) {
- input = InpD;
- } else if (c == QLatin1Char('S')) {
- input = InpS;
- } else if (c == QLatin1Char('P')) {
- input = InpS;
- } else if (c == QLatin1Char('[')) {
- input = InpOB;
- } else if (c == QLatin1Char(']')) {
- input = InpCB;
- } else if (c == QLatin1Char('%')) {
- input = InpPer;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Doctype:
- parseString_s = QLatin1String("DOCTYPE");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case Doctype2:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case Sys:
- parseExternalID_allowPublicID = false;
- if (!parseExternalID()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- thisPublicId = publicId;
- thisSystemId = systemId;
- break;
- case MP:
- case MPR:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case PER:
- parsePEReference_context = InDTD;
- if (!parsePEReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case Mup:
- if (dtdRecursionLimit > 0 && parameterEntities.size() > dtdRecursionLimit) {
- reportParseError(QString::fromLatin1(
- "DTD parsing exceeded recursion limit of %1.").arg(dtdRecursionLimit));
- return false;
- }
- if (!parseMarkupdecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case MPE:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
- }
- break;
- case Done:
- if (lexicalHnd) {
- if (!startDTDwasReported) {
- startDTDwasReported = true;
- if (!lexicalHnd->startDTD(doctype, publicId, systemId)) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- if (!lexicalHnd->endDTD()) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a ExternalID [75].
-
- If allowPublicID is true parse ExternalID [75] or PublicID [83].
-*/
-bool QXmlSimpleReaderPrivate::parseExternalID()
-{
- const signed char Init = 0;
- const signed char Sys = 1; // parse 'SYSTEM'
- const signed char SysWS = 2; // parse the whitespace after 'SYSTEM'
- const signed char SysSQ = 3; // parse SystemLiteral with '
- const signed char SysSQ2 = 4; // parse SystemLiteral with '
- const signed char SysDQ = 5; // parse SystemLiteral with "
- const signed char SysDQ2 = 6; // parse SystemLiteral with "
- const signed char Pub = 7; // parse 'PUBLIC'
- const signed char PubWS = 8; // parse the whitespace after 'PUBLIC'
- const signed char PubSQ = 9; // parse PubidLiteral with '
- const signed char PubSQ2 = 10; // parse PubidLiteral with '
- const signed char PubDQ = 11; // parse PubidLiteral with "
- const signed char PubDQ2 = 12; // parse PubidLiteral with "
- const signed char PubE = 13; // finished parsing the PubidLiteral
- const signed char PubWS2 = 14; // parse the whitespace after the PubidLiteral
- const signed char PDone = 15; // done if allowPublicID is true
- const signed char Done = 16;
-
- const signed char InpSQ = 0; // '
- const signed char InpDQ = 1; // "
- const signed char InpS = 2; // S
- const signed char InpP = 3; // P
- const signed char InpWs = 4; // white space
- const signed char InpUnknown = 5;
-
- static const signed char table[15][6] = {
- /* InpSQ InpDQ InpS InpP InpWs InpUnknown */
- { -1, -1, Sys, Pub, -1, -1 }, // Init
- { -1, -1, -1, -1, SysWS, -1 }, // Sys
- { SysSQ, SysDQ, -1, -1, -1, -1 }, // SysWS
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ2
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ2
- { -1, -1, -1, -1, PubWS, -1 }, // Pub
- { PubSQ, PubDQ, -1, -1, -1, -1 }, // PubWS
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ2
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ2
- { PDone, PDone, PDone, PDone, PubWS2, PDone }, // PubE
- { SysSQ, SysDQ, PDone, PDone, PDone, PDone } // PubWS2
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- systemId.clear();
- publicId.clear();
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseExternalID (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case PDone:
- if (parseExternalID_allowPublicID) {
- publicId = string();
- return true;
- } else {
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('\'')) {
- input = InpSQ;
- } else if (c == QLatin1Char('"')) {
- input = InpDQ;
- } else if (c == QLatin1Char('S')) {
- input = InpS;
- } else if (c == QLatin1Char('P')) {
- input = InpP;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Sys:
- parseString_s = QLatin1String("SYSTEM");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- break;
- case SysWS:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- break;
- case SysSQ:
- case SysDQ:
- stringClear();
- next();
- break;
- case SysSQ2:
- case SysDQ2:
- stringAddC();
- next();
- break;
- case Pub:
- parseString_s = QLatin1String("PUBLIC");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- break;
- case PubWS:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- break;
- case PubSQ:
- case PubDQ:
- stringClear();
- next();
- break;
- case PubSQ2:
- case PubDQ2:
- stringAddC();
- next();
- break;
- case PubE:
- next();
- break;
- case PubWS2:
- publicId = string();
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseExternalID, state);
- return false;
- }
- break;
- case Done:
- systemId = string();
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a markupdecl [29].
-*/
-bool QXmlSimpleReaderPrivate::parseMarkupdecl()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // < was read
- const signed char Em = 2; // ! was read
- const signed char CE = 3; // E was read
- const signed char Qm = 4; // ? was read
- const signed char Dash = 5; // - was read
- const signed char CA = 6; // A was read
- const signed char CEL = 7; // EL was read
- const signed char CEN = 8; // EN was read
- const signed char CN = 9; // N was read
- const signed char Done = 10;
-
- const signed char InpLt = 0; // <
- const signed char InpQm = 1; // ?
- const signed char InpEm = 2; // !
- const signed char InpDash = 3; // -
- const signed char InpA = 4; // A
- const signed char InpE = 5; // E
- const signed char InpL = 6; // L
- const signed char InpN = 7; // N
- const signed char InpUnknown = 8;
-
- static const signed char table[4][9] = {
- /* InpLt InpQm InpEm InpDash InpA InpE InpL InpN InpUnknown */
- { Lt, -1, -1, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, Qm, Em, -1, -1, -1, -1, -1, -1 }, // Lt
- { -1, -1, -1, Dash, CA, CE, -1, CN, -1 }, // Em
- { -1, -1, -1, -1, -1, -1, CEL, CEN, -1 } // CE
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseMarkupdecl (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Qm:
- if (contentHnd) {
- if (!contentHnd->processingInstruction(name(),string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- return true;
- case Dash:
- if (lexicalHnd) {
- if (!lexicalHnd->comment(string())) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- return true;
- case CA:
- return true;
- case CEL:
- return true;
- case CEN:
- return true;
- case CN:
- return true;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- if (c == QLatin1Char('<')) {
- input = InpLt;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else if (c == QLatin1Char('!')) {
- input = InpEm;
- } else if (c == QLatin1Char('-')) {
- input = InpDash;
- } else if (c == QLatin1Char('A')) {
- input = InpA;
- } else if (c == QLatin1Char('E')) {
- input = InpE;
- } else if (c == QLatin1Char('L')) {
- input = InpL;
- } else if (c == QLatin1Char('N')) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Lt:
- next();
- break;
- case Em:
- next();
- break;
- case CE:
- next();
- break;
- case Qm:
- parsePI_xmldecl = false;
- if (!parsePI()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- case Dash:
- if (!parseComment()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- case CA:
- if (!parseAttlistDecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- case CEL:
- if (!parseElementDecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- case CEN:
- if (!parseEntityDecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- case CN:
- if (!parseNotationDecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseMarkupdecl, state);
- return false;
- }
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a PEReference [69]
-*/
-bool QXmlSimpleReaderPrivate::parsePEReference()
-{
- const signed char Init = 0;
- const signed char Next = 1;
- const signed char Name = 2;
- const signed char NameR = 3; // same as Name, but already reported
- const signed char Done = 4;
-
- const signed char InpSemi = 0; // ;
- const signed char InpPer = 1; // %
- const signed char InpUnknown = 2;
-
- static const signed char table[4][3] = {
- /* InpSemi InpPer InpUnknown */
- { -1, Next, -1 }, // Init
- { -1, -1, Name }, // Next
- { Done, -1, -1 }, // Name
- { Done, -1, -1 } // NameR
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parsePEReference (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePEReference, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Name:
- {
- bool skipIt = true;
- QString xmlRefString;
-
- QMap<QString,QString>::Iterator it;
- it = parameterEntities.find(ref());
- if (it != parameterEntities.end()) {
- skipIt = false;
- xmlRefString = *it;
- } else if (entityRes) {
- QMap<QString,QXmlSimpleReaderPrivate::ExternParameterEntity>::Iterator it2;
- it2 = externParameterEntities.find(ref());
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QXmlInputSource *ret = nullptr;
-QT_WARNING_POP
- if (it2 != externParameterEntities.end()) {
- if (!entityRes->resolveEntity((*it2).publicId, (*it2).systemId, ret)) {
- delete ret;
- reportParseError(entityRes->errorString());
- return false;
- }
- if (ret) {
- QString buffer = ret->data();
- while (!buffer.isEmpty()) {
- xmlRefString += buffer;
- ret->fetchData();
- buffer = ret->data();
- }
- delete ret;
- if (!stripTextDecl(xmlRefString)) {
- reportParseError(QLatin1String(XMLERR_ERRORINTEXTDECL));
- return false;
- }
- skipIt = false;
- }
- }
- }
-
- if (skipIt) {
- if (contentHnd) {
- if (!contentHnd->skippedEntity(QLatin1Char('%') + ref())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- } else {
- if (parsePEReference_context == InEntityValue) {
- // Included in literal
- if (!insertXmlRef(xmlRefString, ref(), true))
- return false;
- } else if (parsePEReference_context == InDTD) {
- // Included as PE
- if (!insertXmlRef(QLatin1Char(' ') + xmlRefString + QLatin1Char(' '), ref(), false))
- return false;
- }
- }
- }
- state = NameR;
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parsePEReference, state);
- return false;
- }
- if (c == QLatin1Char(';')) {
- input = InpSemi;
- } else if (c == QLatin1Char('%')) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Next:
- next();
- break;
- case Name:
- case NameR:
- parseName_useRef = true;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parsePEReference, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a AttlistDecl [52].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'A' of '<!ATTLIST'
-*/
-bool QXmlSimpleReaderPrivate::parseAttlistDecl()
-{
- const signed char Init = 0;
- const signed char Attlist = 1; // parse the string "ATTLIST"
- const signed char Ws = 2; // whitespace read
- const signed char Name = 3; // parse name
- const signed char Ws1 = 4; // whitespace read
- const signed char Attdef = 5; // parse the AttDef
- const signed char Ws2 = 6; // whitespace read
- const signed char Atttype = 7; // parse the AttType
- const signed char Ws3 = 8; // whitespace read
- const signed char DDecH = 9; // DefaultDecl with #
- const signed char DefReq = 10; // parse the string "REQUIRED"
- const signed char DefImp = 11; // parse the string "IMPLIED"
- const signed char DefFix = 12; // parse the string "FIXED"
- const signed char Attval = 13; // parse the AttValue
- const signed char Ws4 = 14; // whitespace read
- const signed char Done = 15;
-
- const signed char InpWs = 0; // white space
- const signed char InpGt = 1; // >
- const signed char InpHash = 2; // #
- const signed char InpA = 3; // A
- const signed char InpI = 4; // I
- const signed char InpF = 5; // F
- const signed char InpR = 6; // R
- const signed char InpUnknown = 7;
-
- static const signed char table[15][8] = {
- /* InpWs InpGt InpHash InpA InpI InpF InpR InpUnknown */
- { -1, -1, -1, Attlist, -1, -1, -1, -1 }, // Init
- { Ws, -1, -1, -1, -1, -1, -1, -1 }, // Attlist
- { -1, -1, -1, Name, Name, Name, Name, Name }, // Ws
- { Ws1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Name
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1 }, // Attdef
- { -1, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype }, // Ws2
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // Attype
- { -1, Attval, DDecH, Attval, Attval, Attval, Attval, Attval }, // Ws3
- { -1, -1, -1, -1, DefImp, DefFix, DefReq, -1 }, // DDecH
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefReq
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefImp
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // DefFix
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // Attval
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef } // Ws4
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseAttlistDecl (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Name:
- attDeclEName = name();
- break;
- case Attdef:
- attDeclAName = name();
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (c == QLatin1Char('#')) {
- input = InpHash;
- } else if (c == QLatin1Char('A')) {
- input = InpA;
- } else if (c == QLatin1Char('I')) {
- input = InpI;
- } else if (c == QLatin1Char('F')) {
- input = InpF;
- } else if (c == QLatin1Char('R')) {
- input = InpR;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Attlist:
- parseString_s = QLatin1String("ATTLIST");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Ws:
- case Ws1:
- case Ws2:
- case Ws3:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Name:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Attdef:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Atttype:
- if (!parseAttType()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case DDecH:
- next();
- break;
- case DefReq:
- parseString_s = QLatin1String("REQUIRED");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case DefImp:
- parseString_s = QLatin1String("IMPLIED");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case DefFix:
- parseString_s = QLatin1String("FIXED");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Attval:
- if (!parseAttValue()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Ws4:
- if (declHnd) {
- // ### not all values are computed yet...
- if (!declHnd->attributeDecl(attDeclEName, attDeclAName, QLatin1String(""), QLatin1String(""), QLatin1String(""))) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttlistDecl, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a AttType [54]
-*/
-bool QXmlSimpleReaderPrivate::parseAttType()
-{
- const signed char Init = 0;
- const signed char ST = 1; // StringType
- const signed char TTI = 2; // TokenizedType starting with 'I'
- const signed char TTI2 = 3; // TokenizedType helpstate
- const signed char TTI3 = 4; // TokenizedType helpstate
- const signed char TTE = 5; // TokenizedType starting with 'E'
- const signed char TTEY = 6; // TokenizedType starting with 'ENTITY'
- const signed char TTEI = 7; // TokenizedType starting with 'ENTITI'
- const signed char N = 8; // N read (TokenizedType or Notation)
- const signed char TTNM = 9; // TokenizedType starting with 'NM'
- const signed char TTNM2 = 10; // TokenizedType helpstate
- const signed char NO = 11; // Notation
- const signed char NO2 = 12; // Notation helpstate
- const signed char NO3 = 13; // Notation helpstate
- const signed char NOName = 14; // Notation, read name
- const signed char NO4 = 15; // Notation helpstate
- const signed char EN = 16; // Enumeration
- const signed char ENNmt = 17; // Enumeration, read Nmtoken
- const signed char EN2 = 18; // Enumeration helpstate
- const signed char ADone = 19; // almost done (make next and accept)
- const signed char Done = 20;
-
- const signed char InpWs = 0; // whitespace
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; //)
- const signed char InpPipe = 3; // |
- const signed char InpC = 4; // C
- const signed char InpE = 5; // E
- const signed char InpI = 6; // I
- const signed char InpM = 7; // M
- const signed char InpN = 8; // N
- const signed char InpO = 9; // O
- const signed char InpR = 10; // R
- const signed char InpS = 11; // S
- const signed char InpY = 12; // Y
- const signed char InpUnknown = 13;
-
- static const signed char table[19][14] = {
- /* InpWs InpOp InpCp InpPipe InpC InpE InpI InpM InpN InpO InpR InpS InpY InpUnknown */
- { -1, EN, -1, -1, ST, TTE, TTI, -1, N, -1, -1, -1, -1, -1 }, // Init
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // ST
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI2, Done, Done, Done }, // TTI
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI3, Done, Done }, // TTI2
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTI3
- { -1, -1, -1, -1, -1, -1, TTEI, -1, -1, -1, -1, -1, TTEY, -1 }, // TTE
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEY
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEI
- { -1, -1, -1, -1, -1, -1, -1, TTNM, -1, NO, -1, -1, -1, -1 }, // N
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTNM2, Done, Done }, // TTNM
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTNM2
- { NO2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO
- { -1, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO2
- { NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName }, // NO3
- { NO4, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NOName
- { -1, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO4
- { -1, -1, ENNmt, -1, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt }, // EN
- { EN2, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // ENNmt
- { -1, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // EN2
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseAttType (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case ADone:
- return true;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('(')) {
- input = InpOp;
- } else if (c == QLatin1Char(')')) {
- input = InpCp;
- } else if (c == QLatin1Char('|')) {
- input = InpPipe;
- } else if (c == QLatin1Char('C')) {
- input = InpC;
- } else if (c == QLatin1Char('E')) {
- input = InpE;
- } else if (c == QLatin1Char('I')) {
- input = InpI;
- } else if (c == QLatin1Char('M')) {
- input = InpM;
- } else if (c == QLatin1Char('N')) {
- input = InpN;
- } else if (c == QLatin1Char('O')) {
- input = InpO;
- } else if (c == QLatin1Char('R')) {
- input = InpR;
- } else if (c == QLatin1Char('S')) {
- input = InpS;
- } else if (c == QLatin1Char('Y')) {
- input = InpY;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case ST:
- parseString_s = QLatin1String("CDATA");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case TTI:
- parseString_s = QLatin1String("ID");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case TTI2:
- parseString_s = QLatin1String("REF");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case TTI3:
- next(); // S
- break;
- case TTE:
- parseString_s = QLatin1String("ENTIT");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case TTEY:
- next(); // Y
- break;
- case TTEI:
- parseString_s = QLatin1String("IES");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case N:
- next(); // N
- break;
- case TTNM:
- parseString_s = QLatin1String("MTOKEN");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case TTNM2:
- next(); // S
- break;
- case NO:
- parseString_s = QLatin1String("OTATION");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case NO2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case NO3:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case NOName:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case NO4:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case EN:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case ENNmt:
- if (!parseNmtoken()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case EN2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttType, state);
- return false;
- }
- break;
- case ADone:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a AttValue [10]
-
- Precondition: the head stands on the beginning " or '
-
- If this function was successful, the head stands on the first
- character after the closing " or ' and the value of the attribute
- is in string().
-*/
-bool QXmlSimpleReaderPrivate::parseAttValue()
-{
- const signed char Init = 0;
- const signed char Dq = 1; // double quotes were read
- const signed char DqRef = 2; // read references in double quotes
- const signed char DqC = 3; // signed character read in double quotes
- const signed char Sq = 4; // single quotes were read
- const signed char SqRef = 5; // read references in single quotes
- const signed char SqC = 6; // signed character read in single quotes
- const signed char Done = 7;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpLt = 3; // <
- const signed char InpUnknown = 4;
-
- static const signed char table[7][5] = {
- /* InpDq InpSq InpAmp InpLt InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, -1, DqC }, // Dq
- { Done, DqC, DqRef, -1, DqC }, // DqRef
- { Done, DqC, DqRef, -1, DqC }, // DqC
- { SqC, Done, SqRef, -1, SqC }, // Sq
- { SqC, Done, SqRef, -1, SqC }, // SqRef
- { SqC, Done, SqRef, -1, SqC } // SqRef
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseAttValue (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttValue, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseAttValue, state);
- return false;
- }
- if (c == QLatin1Char('"')) {
- input = InpDq;
- } else if (c == QLatin1Char('\'')) {
- input = InpSq;
- } else if (c == QLatin1Char('&')) {
- input = InpAmp;
- } else if (c == QLatin1Char('<')) {
- input = InpLt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqRef:
- case SqRef:
- parseReference_context = InAttributeValue;
- if (!parseReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttValue, state);
- return false;
- }
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a elementdecl [45].
-
- Precondition: the beginning '<!E' is already read and the head
- stands on the 'L' of '<!ELEMENT'
-*/
-bool QXmlSimpleReaderPrivate::parseElementDecl()
-{
- const signed char Init = 0;
- const signed char Elem = 1; // parse the beginning string
- const signed char Ws1 = 2; // whitespace required
- const signed char Nam = 3; // parse Name
- const signed char Ws2 = 4; // whitespace required
- const signed char Empty = 5; // read EMPTY
- const signed char Any = 6; // read ANY
- const signed char Cont = 7; // read contentspec (except ANY or EMPTY)
- const signed char Mix = 8; // read Mixed
- const signed char Mix2 = 9; //
- const signed char Mix3 = 10; //
- const signed char MixN1 = 11; //
- const signed char MixN2 = 12; //
- const signed char MixN3 = 13; //
- const signed char MixN4 = 14; //
- const signed char Cp = 15; // parse cp
- const signed char Cp2 = 16; //
- const signed char WsD = 17; // eat whitespace before Done
- const signed char Done = 18;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpPipe = 2; // |
- const signed char InpOp = 3; // (
- const signed char InpCp = 4; //)
- const signed char InpHash = 5; // #
- const signed char InpQm = 6; // ?
- const signed char InpAst = 7; // *
- const signed char InpPlus = 8; // +
- const signed char InpA = 9; // A
- const signed char InpE = 10; // E
- const signed char InpL = 11; // L
- const signed char InpUnknown = 12;
-
- static const signed char table[18][13] = {
- /* InpWs InpGt InpPipe InpOp InpCp InpHash InpQm InpAst InpPlus InpA InpE InpL InpUnknown */
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, Elem, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Elem
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, Nam, Nam, Nam, Nam }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Nam
- { -1, -1, -1, Cont, -1, -1, -1, -1, -1, Any, Empty, -1, -1 }, // Ws2
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Empty
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Any
- { -1, -1, -1, Cp, Cp, Mix, -1, -1, -1, Cp, Cp, Cp, Cp }, // Cont
- { Mix2, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix
- { -1, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix2
- { WsD, Done, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // Mix3
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, MixN2, MixN2, MixN2, MixN2 }, // MixN1
- { MixN3, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN2
- { -1, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN3
- { -1, -1, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // MixN4
- { WsD, Done, -1, -1, -1, -1, Cp2, Cp2, Cp2, -1, -1, -1, -1 }, // Cp
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Cp2
- { -1, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // WsD
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseElementDecl (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (c == QLatin1Char('|')) {
- input = InpPipe;
- } else if (c == QLatin1Char('(')) {
- input = InpOp;
- } else if (c == QLatin1Char(')')) {
- input = InpCp;
- } else if (c == QLatin1Char('#')) {
- input = InpHash;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else if (c == QLatin1Char('*')) {
- input = InpAst;
- } else if (c == QLatin1Char('+')) {
- input = InpPlus;
- } else if (c == QLatin1Char('A')) {
- input = InpA;
- } else if (c == QLatin1Char('E')) {
- input = InpE;
- } else if (c == QLatin1Char('L')) {
- input = InpL;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Elem:
- parseString_s = QLatin1String("LEMENT");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Ws1:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Nam:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Ws2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Empty:
- parseString_s = QLatin1String("EMPTY");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Any:
- parseString_s = QLatin1String("ANY");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Cont:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Mix:
- parseString_s = QLatin1String("#PCDATA");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Mix2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Mix3:
- next();
- break;
- case MixN1:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case MixN2:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case MixN3:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case MixN4:
- next();
- break;
- case Cp:
- if (!parseChoiceSeq()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Cp2:
- next();
- break;
- case WsD:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseElementDecl, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a NotationDecl [82].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'N' of '<!NOTATION'
-*/
-bool QXmlSimpleReaderPrivate::parseNotationDecl()
-{
- const signed char Init = 0;
- const signed char Not = 1; // read NOTATION
- const signed char Ws1 = 2; // eat whitespaces
- const signed char Nam = 3; // read Name
- const signed char Ws2 = 4; // eat whitespaces
- const signed char ExtID = 5; // parse ExternalID
- const signed char ExtIDR = 6; // same as ExtID, but already reported
- const signed char Ws3 = 7; // eat whitespaces
- const signed char Done = 8;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpN = 2; // N
- const signed char InpUnknown = 3;
-
- static const signed char table[8][4] = {
- /* InpWs InpGt InpN InpUnknown */
- { -1, -1, Not, -1 }, // Init
- { Ws1, -1, -1, -1 }, // Not
- { -1, -1, Nam, Nam }, // Ws1
- { Ws2, Done, -1, -1 }, // Nam
- { -1, Done, ExtID, ExtID }, // Ws2
- { Ws3, Done, -1, -1 }, // ExtID
- { Ws3, Done, -1, -1 }, // ExtIDR
- { -1, Done, -1, -1 } // Ws3
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseNotationDecl (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case ExtID:
- // call the handler
- if (dtdHnd) {
- if (!dtdHnd->notationDecl(name(), publicId, systemId)) {
- reportParseError(dtdHnd->errorString());
- return false;
- }
- }
- state = ExtIDR;
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (c == QLatin1Char('N')) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Not:
- parseString_s = QLatin1String("NOTATION");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case Ws1:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case Nam:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case Ws2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case ExtID:
- case ExtIDR:
- parseExternalID_allowPublicID = true;
- if (!parseExternalID()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case Ws3:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNotationDecl, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse choice [49] or seq [50].
-
- Precondition: the beginning '('S? is already read and the head
- stands on the first non-whitespace character after it.
-*/
-bool QXmlSimpleReaderPrivate::parseChoiceSeq()
-{
- const signed char Init = 0;
- const signed char Ws1 = 1; // eat whitespace
- const signed char CoS = 2; // choice or set
- const signed char Ws2 = 3; // eat whitespace
- const signed char More = 4; // more cp to read
- const signed char Name = 5; // read name
- const signed char Done = 6; //
-
- const signed char InpWs = 0; // S
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; //)
- const signed char InpQm = 3; // ?
- const signed char InpAst = 4; // *
- const signed char InpPlus = 5; // +
- const signed char InpPipe = 6; // |
- const signed char InpComm = 7; // ,
- const signed char InpUnknown = 8;
-
- static const signed char table[6][9] = {
- /* InpWs InpOp InpCp InpQm InpAst InpPlus InpPipe InpComm InpUnknown */
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // Init
- { -1, CoS, -1, -1, -1, -1, -1, -1, CoS }, // Ws1
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 }, // CS
- { -1, -1, Done, -1, -1, -1, More, More, -1 }, // Ws2
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // More (same as Init)
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 } // Name (same as CS)
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseChoiceSeq (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('(')) {
- input = InpOp;
- } else if (c == QLatin1Char(')')) {
- input = InpCp;
- } else if (c == QLatin1Char('?')) {
- input = InpQm;
- } else if (c == QLatin1Char('*')) {
- input = InpAst;
- } else if (c == QLatin1Char('+')) {
- input = InpPlus;
- } else if (c == QLatin1Char('|')) {
- input = InpPipe;
- } else if (c == QLatin1Char(',')) {
- input = InpComm;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Ws1:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- break;
- case CoS:
- if (!parseChoiceSeq()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- break;
- case Ws2:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- break;
- case More:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- break;
- case Name:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseChoiceSeq, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-bool QXmlSimpleReaderPrivate::isExpandedEntityValueTooLarge(QString *errorMessage)
-{
- QString entityNameBuffer;
-
- // For every entity, check how many times all entity names were referenced in its value.
- for (QMap<QString,QString>::const_iterator toSearchIt = entities.constBegin();
- toSearchIt != entities.constEnd();
- ++toSearchIt) {
- const QString &toSearch = toSearchIt.key();
-
- // Don't check the same entities twice.
- if (!literalEntitySizes.contains(toSearch)) {
- // The amount of characters that weren't entity names, but literals, like 'X'.
- QString leftOvers = entities.value(toSearch);
- // How many times was entityName referenced by toSearch?
- for (QMap<QString,QString>::const_iterator referencedIt = entities.constBegin();
- referencedIt != entities.constEnd();
- ++referencedIt) {
- const QString &entityName = referencedIt.key();
-
- for (int i = 0; i < leftOvers.size() && i != -1; ) {
- entityNameBuffer = QLatin1Char('&') + entityName + QLatin1Char(';');
-
- i = leftOvers.indexOf(entityNameBuffer, i);
- if (i != -1) {
- leftOvers.remove(i, entityName.size() + 2);
- // The entityName we're currently trying to find was matched in this string; increase our count.
- ++referencesToOtherEntities[toSearch][entityName];
- }
- }
- }
- literalEntitySizes[toSearch] = leftOvers.size();
- }
- }
-
- for (QHash<QString, QHash<QString, int> >::const_iterator entityIt = referencesToOtherEntities.constBegin();
- entityIt != referencesToOtherEntities.constEnd();
- ++entityIt) {
- const QString &entity = entityIt.key();
-
- QHash<QString, int>::iterator expandedIt = expandedSizes.find(entity);
- if (expandedIt == expandedSizes.end()) {
- expandedIt = expandedSizes.insert(entity, literalEntitySizes.value(entity));
- for (QHash<QString, int>::const_iterator referenceIt = entityIt->constBegin();
- referenceIt != entityIt->constEnd();
- ++referenceIt) {
- const QString &referenceTo = referenceIt.key();
- const int references = referencesToOtherEntities.value(entity).value(referenceTo);
- // The total size of an entity's value is the expanded size of all of its referenced entities, plus its literal size.
- *expandedIt += expandedSizes.value(referenceTo) * references + literalEntitySizes.value(referenceTo) * references;
- }
-
- if (*expandedIt > entityCharacterLimit) {
- if (errorMessage) {
- *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands to a string that is too large to process (%2 characters > %3).")
- .arg(entity, QString::number(*expandedIt), QString::number(entityCharacterLimit));
- }
- return true;
- }
- }
- }
- return false;
-}
-
-/*
- Parse a EntityDecl [70].
-
- Precondition: the beginning '<!E' is already read and the head
- stand on the 'N' of '<!ENTITY'
-*/
-bool QXmlSimpleReaderPrivate::parseEntityDecl()
-{
- const signed char Init = 0;
- const signed char Ent = 1; // parse "ENTITY"
- const signed char Ws1 = 2; // white space read
- const signed char Name = 3; // parse name
- const signed char Ws2 = 4; // white space read
- const signed char EValue = 5; // parse entity value
- const signed char EValueR = 6; // same as EValue, but already reported
- const signed char ExtID = 7; // parse ExternalID
- const signed char Ws3 = 8; // white space read
- const signed char Ndata = 9; // parse "NDATA"
- const signed char Ws4 = 10; // white space read
- const signed char NNam = 11; // parse name
- const signed char NNamR = 12; // same as NNam, but already reported
- const signed char PEDec = 13; // parse PEDecl
- const signed char Ws6 = 14; // white space read
- const signed char PENam = 15; // parse name
- const signed char Ws7 = 16; // white space read
- const signed char PEVal = 17; // parse entity value
- const signed char PEValR = 18; // same as PEVal, but already reported
- const signed char PEEID = 19; // parse ExternalID
- const signed char PEEIDR = 20; // same as PEEID, but already reported
- const signed char WsE = 21; // white space read
- const signed char Done = 22;
- const signed char EDDone = 23; // done, but also report an external, unparsed entity decl
-
- const signed char InpWs = 0; // white space
- const signed char InpPer = 1; // %
- const signed char InpQuot = 2; // " or '
- const signed char InpGt = 3; // >
- const signed char InpN = 4; // N
- const signed char InpUnknown = 5;
-
- static const signed char table[22][6] = {
- /* InpWs InpPer InpQuot InpGt InpN InpUnknown */
- { -1, -1, -1, -1, Ent, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1 }, // Ent
- { -1, PEDec, -1, -1, Name, Name }, // Ws1
- { Ws2, -1, -1, -1, -1, -1 }, // Name
- { -1, -1, EValue, -1, -1, ExtID }, // Ws2
- { WsE, -1, -1, Done, -1, -1 }, // EValue
- { WsE, -1, -1, Done, -1, -1 }, // EValueR
- { Ws3, -1, -1, EDDone,-1, -1 }, // ExtID
- { -1, -1, -1, EDDone,Ndata, -1 }, // Ws3
- { Ws4, -1, -1, -1, -1, -1 }, // Ndata
- { -1, -1, -1, -1, NNam, NNam }, // Ws4
- { WsE, -1, -1, Done, -1, -1 }, // NNam
- { WsE, -1, -1, Done, -1, -1 }, // NNamR
- { Ws6, -1, -1, -1, -1, -1 }, // PEDec
- { -1, -1, -1, -1, PENam, PENam }, // Ws6
- { Ws7, -1, -1, -1, -1, -1 }, // PENam
- { -1, -1, PEVal, -1, -1, PEEID }, // Ws7
- { WsE, -1, -1, Done, -1, -1 }, // PEVal
- { WsE, -1, -1, Done, -1, -1 }, // PEValR
- { WsE, -1, -1, Done, -1, -1 }, // PEEID
- { WsE, -1, -1, Done, -1, -1 }, // PEEIDR
- { -1, -1, -1, Done, -1, -1 } // WsE
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseEntityDecl (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case EValue:
- if ( !entityExist(name())) {
- QString errorMessage;
- if (isExpandedEntityValueTooLarge(&errorMessage)) {
- reportParseError(errorMessage);
- return false;
- }
-
- entities.insert(name(), string());
- if (declHnd) {
- if (!declHnd->internalEntityDecl(name(), string())) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- }
- state = EValueR;
- break;
- case NNam:
- if ( !entityExist(name())) {
- externEntities.insert(name(), QXmlSimpleReaderPrivate::ExternEntity(publicId, systemId, ref()));
- if (dtdHnd) {
- if (!dtdHnd->unparsedEntityDecl(name(), publicId, systemId, ref())) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- }
- state = NNamR;
- break;
- case PEVal:
- if ( !entityExist(name())) {
- parameterEntities.insert(name(), string());
- if (declHnd) {
- if (!declHnd->internalEntityDecl(QLatin1Char('%') + name(), string())) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- }
- state = PEValR;
- break;
- case PEEID:
- if ( !entityExist(name())) {
- externParameterEntities.insert(name(), QXmlSimpleReaderPrivate::ExternParameterEntity(publicId, systemId));
- if (declHnd) {
- if (!declHnd->externalEntityDecl(QLatin1Char('%') + name(), publicId, systemId)) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- }
- state = PEEIDR;
- break;
- case EDDone:
- if ( !entityExist(name())) {
- externEntities.insert(name(), QXmlSimpleReaderPrivate::ExternEntity(publicId, systemId, QString()));
- if (declHnd) {
- if (!declHnd->externalEntityDecl(name(), publicId, systemId)) {
- reportParseError(declHnd->errorString());
- return false;
- }
- }
- }
- return true;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- if (is_S(c)) {
- input = InpWs;
- } else if (c == QLatin1Char('%')) {
- input = InpPer;
- } else if (c == QLatin1Char('"') || c == QLatin1Char('\'')) {
- input = InpQuot;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else if (c == QLatin1Char('N')) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Ent:
- parseString_s = QLatin1String("NTITY");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ws1:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Name:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ws2:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case EValue:
- case EValueR:
- if (!parseEntityValue()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case ExtID:
- parseExternalID_allowPublicID = false;
- if (!parseExternalID()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ws3:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ndata:
- parseString_s = QLatin1String("NDATA");
- if (!parseString()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ws4:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case NNam:
- case NNamR:
- parseName_useRef = true;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case PEDec:
- next();
- break;
- case Ws6:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case PENam:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case Ws7:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case PEVal:
- case PEValR:
- if (!parseEntityValue()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case PEEID:
- case PEEIDR:
- parseExternalID_allowPublicID = false;
- if (!parseExternalID()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case WsE:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityDecl, state);
- return false;
- }
- break;
- case EDDone:
- next();
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a EntityValue [9]
-*/
-bool QXmlSimpleReaderPrivate::parseEntityValue()
-{
- const signed char Init = 0;
- const signed char Dq = 1; // EntityValue is double quoted
- const signed char DqC = 2; // signed character
- const signed char DqPER = 3; // PERefence
- const signed char DqRef = 4; // Reference
- const signed char Sq = 5; // EntityValue is double quoted
- const signed char SqC = 6; // signed character
- const signed char SqPER = 7; // PERefence
- const signed char SqRef = 8; // Reference
- const signed char Done = 9;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpPer = 3; // %
- const signed char InpUnknown = 4;
-
- static const signed char table[9][5] = {
- /* InpDq InpSq InpAmp InpPer InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, DqPER, DqC }, // Dq
- { Done, DqC, DqRef, DqPER, DqC }, // DqC
- { Done, DqC, DqRef, DqPER, DqC }, // DqPER
- { Done, DqC, DqRef, DqPER, DqC }, // DqRef
- { SqC, Done, SqRef, SqPER, SqC }, // Sq
- { SqC, Done, SqRef, SqPER, SqC }, // SqC
- { SqC, Done, SqRef, SqPER, SqC }, // SqPER
- { SqC, Done, SqRef, SqPER, SqC } // SqRef
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseEntityValue (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityValue, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseEntityValue, state);
- return false;
- }
- if (c == QLatin1Char('"')) {
- input = InpDq;
- } else if (c == QLatin1Char('\'')) {
- input = InpSq;
- } else if (c == QLatin1Char('&')) {
- input = InpAmp;
- } else if (c == QLatin1Char('%')) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case DqPER:
- case SqPER:
- parsePEReference_context = InEntityValue;
- if (!parsePEReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityValue, state);
- return false;
- }
- break;
- case DqRef:
- case SqRef:
- parseReference_context = InEntityValue;
- if (!parseReference()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseEntityValue, state);
- return false;
- }
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a comment [15].
-
- Precondition: the beginning '<!' of the comment is already read and the head
- stands on the first '-' of '<!--'.
-
- If this funktion was successful, the head-position is on the first
- character after the comment.
-*/
-bool QXmlSimpleReaderPrivate::parseComment()
-{
- const signed char Init = 0;
- const signed char Dash1 = 1; // the first dash was read
- const signed char Dash2 = 2; // the second dash was read
- const signed char Com = 3; // read comment
- const signed char Com2 = 4; // read comment (help state)
- const signed char ComE = 5; // finished reading comment
- const signed char Done = 6;
-
- const signed char InpDash = 0; // -
- const signed char InpGt = 1; // >
- const signed char InpUnknown = 2;
-
- static const signed char table[6][3] = {
- /* InpDash InpGt InpUnknown */
- { Dash1, -1, -1 }, // Init
- { Dash2, -1, -1 }, // Dash1
- { Com2, Com, Com }, // Dash2
- { Com2, Com, Com }, // Com
- { ComE, Com, Com }, // Com2
- { -1, Done, -1 } // ComE
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseComment (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseComment, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Dash2:
- stringClear();
- break;
- case Com2:
- // if next character is not a dash than don't skip it
- if (!atEnd() && c != QLatin1Char('-'))
- stringAddC(QLatin1Char('-'));
- break;
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGCOMMENT));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseComment, state);
- return false;
- }
- if (c == QLatin1Char('-')) {
- input = InpDash;
- } else if (c == QLatin1Char('>')) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case Dash1:
- next();
- break;
- case Dash2:
- next();
- break;
- case Com:
- stringAddC();
- next();
- break;
- case Com2:
- next();
- break;
- case ComE:
- next();
- break;
- case Done:
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse an Attribute [41].
-
- Precondition: the head stands on the first character of the name
- of the attribute (i.e. all whitespaces are already parsed).
-
- The head stand on the next character after the end quotes. The
- variable name contains the name of the attribute and the variable
- string contains the value of the attribute.
-*/
-bool QXmlSimpleReaderPrivate::parseAttribute()
-{
- const int Init = 0;
- const int PName = 1; // parse name
- const int Ws = 2; // eat ws
- const int Eq = 3; // the '=' was read
- const int Quotes = 4; // " or ' were read
-
- const int InpNameBe = 0;
- const int InpEq = 1; // =
- const int InpDq = 2; // "
- const int InpSq = 3; // '
- const int InpUnknown = 4;
-
- static const int table[4][5] = {
- /* InpNameBe InpEq InpDq InpSq InpUnknown */
- { PName, -1, -1, -1, -1 }, // Init
- { -1, Eq, -1, -1, Ws }, // PName
- { -1, Eq, -1, -1, -1 }, // Ws
- { -1, -1, Quotes, Quotes, -1 } // Eq
- };
- int state;
- int input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseAttribute (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Quotes:
- // Done
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- if (determineNameChar(c) == NameBeginning) {
- input = InpNameBe;
- } else if (c == QLatin1Char('=')) {
- input = InpEq;
- } else if (c == QLatin1Char('"')) {
- input = InpDq;
- } else if (c == QLatin1Char('\'')) {
- input = InpSq;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case PName:
- parseName_useRef = false;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- break;
- case Ws:
- if (!eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- break;
- case Eq:
- if (!next_eat_ws()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- break;
- case Quotes:
- if (!parseAttValue()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseAttribute, state);
- return false;
- }
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a Name [5] and store the name in name or ref (if useRef is true).
-*/
-bool QXmlSimpleReaderPrivate::parseName()
-{
- const int Init = 0;
- const int Name1 = 1; // parse first character of the name
- const int Name = 2; // parse name
- const int Done = 3;
-
- static const int table[3][3] = {
- /* InpNameBe InpNameCh InpUnknown */
- { Name1, -1, -1 }, // Init
- { Name, Name, Done }, // Name1
- { Name, Name, Done } // Name
- };
- int state;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseName (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseName, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseName, state);
- return false;
- }
-
- // we can safely do the (int) cast thanks to the Q_ASSERTs earlier in this function
- state = table[state][(int)fastDetermineNameChar(c)];
-
- switch (state) {
- case Name1:
- if (parseName_useRef) {
- refClear();
- refAddC();
- } else {
- nameClear();
- nameAddC();
- }
- next();
- break;
- case Name:
- if (parseName_useRef) {
- refAddC();
- } else {
- nameAddC();
- }
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a Nmtoken [7] and store the name in name.
-*/
-bool QXmlSimpleReaderPrivate::parseNmtoken()
-{
- const signed char Init = 0;
- const signed char NameF = 1;
- const signed char Name = 2;
- const signed char Done = 3;
-
- const signed char InpNameCh = 0; // NameChar without InpNameBe
- const signed char InpUnknown = 1;
-
- static const signed char table[3][2] = {
- /* InpNameCh InpUnknown */
- { NameF, -1 }, // Init
- { Name, Done }, // NameF
- { Name, Done } // Name
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseNmtoken (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseNmtoken, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case Done:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_LETTEREXPECTED));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseNmtoken, state);
- return false;
- }
- if (determineNameChar(c) == NotName) {
- input = InpUnknown;
- } else {
- input = InpNameCh;
- }
- state = table[state][input];
-
- switch (state) {
- case NameF:
- nameClear();
- nameAddC();
- next();
- break;
- case Name:
- nameAddC();
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Parse a Reference [67].
-
- parseReference_charDataRead is set to true if the reference must not be
- parsed. The character(s) which the reference mapped to are appended to
- string. The head stands on the first character after the reference.
-
- parseReference_charDataRead is set to false if the reference must be parsed.
- The charachter(s) which the reference mapped to are inserted at the reference
- position. The head stands on the first character of the replacement).
-*/
-bool QXmlSimpleReaderPrivate::parseReference()
-{
- // temporary variables (only used in very local context, so they don't
- // interfere with incremental parsing)
- uint tmp;
- bool ok;
-
- const signed char Init = 0;
- const signed char SRef = 1; // start of a reference
- const signed char ChRef = 2; // parse CharRef
- const signed char ChDec = 3; // parse CharRef decimal
- const signed char ChHexS = 4; // start CharRef hexadecimal
- const signed char ChHex = 5; // parse CharRef hexadecimal
- const signed char Name = 6; // parse name
- const signed char DoneD = 7; // done CharRef decimal
- const signed char DoneH = 8; // done CharRef hexadecimal
- const signed char DoneN = 9; // done EntityRef
-
- const signed char InpAmp = 0; // &
- const signed char InpSemi = 1; // ;
- const signed char InpHash = 2; // #
- const signed char InpX = 3; // x
- const signed char InpNum = 4; // 0-9
- const signed char InpHex = 5; // a-f A-F
- const signed char InpUnknown = 6;
-
- static const signed char table[8][7] = {
- /* InpAmp InpSemi InpHash InpX InpNum InpHex InpUnknown */
- { SRef, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, -1, ChRef, Name, Name, Name, Name }, // SRef
- { -1, -1, -1, ChHexS, ChDec, -1, -1 }, // ChRef
- { -1, DoneD, -1, -1, ChDec, -1, -1 }, // ChDec
- { -1, -1, -1, -1, ChHex, ChHex, -1 }, // ChHexS
- { -1, DoneH, -1, -1, ChHex, ChHex, -1 }, // ChHex
- { -1, DoneN, -1, -1, -1, -1, -1 } // Name
- };
- signed char state;
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- parseReference_charDataRead = false;
- state = Init;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseReference (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseReference, state);
- return false;
- }
- }
- }
-
- for (;;) {
- switch (state) {
- case DoneD:
- return true;
- case DoneH:
- return true;
- case DoneN:
- return true;
- case -1:
- // Error
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGREFERENCE));
- return false;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseReference, state);
- return false;
- }
- if (c.row()) {
- input = InpUnknown;
- } else if (c.cell() == '&') {
- input = InpAmp;
- } else if (c.cell() == ';') {
- input = InpSemi;
- } else if (c.cell() == '#') {
- input = InpHash;
- } else if (c.cell() == 'x') {
- input = InpX;
- } else if ('0' <= c.cell() && c.cell() <= '9') {
- input = InpNum;
- } else if ('a' <= c.cell() && c.cell() <= 'f') {
- input = InpHex;
- } else if ('A' <= c.cell() && c.cell() <= 'F') {
- input = InpHex;
- } else {
- input = InpUnknown;
- }
- state = table[state][input];
-
- switch (state) {
- case SRef:
- refClear();
- next();
- break;
- case ChRef:
- next();
- break;
- case ChDec:
- refAddC();
- next();
- break;
- case ChHexS:
- next();
- break;
- case ChHex:
- refAddC();
- next();
- break;
- case Name:
- // read the name into the ref
- parseName_useRef = true;
- if (!parseName()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseReference, state);
- return false;
- }
- break;
- case DoneD:
- tmp = ref().toUInt(&ok, 10);
- if (ok) {
- if (tmp > 0xffff) {
- stringAddC(QChar::highSurrogate(tmp));
- stringAddC(QChar::lowSurrogate(tmp));
- } else {
- stringAddC(QChar(tmp));
- }
- } else {
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGREFERENCE));
- return false;
- }
- parseReference_charDataRead = true;
- next();
- break;
- case DoneH:
- tmp = ref().toUInt(&ok, 16);
- if (ok) {
- if (tmp > 0xffff) {
- stringAddC(QChar::highSurrogate(tmp));
- stringAddC(QChar::lowSurrogate(tmp));
- } else {
- stringAddC(QChar(tmp));
- }
- } else {
- reportParseError(QLatin1String(XMLERR_ERRORPARSINGREFERENCE));
- return false;
- }
- parseReference_charDataRead = true;
- next();
- break;
- case DoneN:
- if (!processReference())
- return false;
- next();
- break;
- }
- }
- return false;
-}
-
-/*
- Helper function for parseReference()
-*/
-bool QXmlSimpleReaderPrivate::processReference()
-{
- QString reference = ref();
- if (reference == QLatin1String("amp")) {
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&')); stringAddC(QLatin1Char('a')); stringAddC(QLatin1Char('m')); stringAddC(QLatin1Char('p')); stringAddC(QLatin1Char(';'));
- } else {
- // Included or Included in literal
- stringAddC(QLatin1Char('&'));
- }
- parseReference_charDataRead = true;
- } else if (reference == QLatin1String("lt")) {
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&')); stringAddC(QLatin1Char('l')); stringAddC(QLatin1Char('t')); stringAddC(QLatin1Char(';'));
- } else {
- // Included or Included in literal
- stringAddC(QLatin1Char('<'));
- }
- parseReference_charDataRead = true;
- } else if (reference == QLatin1String("gt")) {
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&')); stringAddC(QLatin1Char('g')); stringAddC(QLatin1Char('t')); stringAddC(QLatin1Char(';'));
- } else {
- // Included or Included in literal
- stringAddC(QLatin1Char('>'));
- }
- parseReference_charDataRead = true;
- } else if (reference == QLatin1String("apos")) {
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&')); stringAddC(QLatin1Char('a')); stringAddC(QLatin1Char('p')); stringAddC(QLatin1Char('o')); stringAddC(QLatin1Char('s')); stringAddC(QLatin1Char(';'));
- } else {
- // Included or Included in literal
- stringAddC(QLatin1Char('\''));
- }
- parseReference_charDataRead = true;
- } else if (reference == QLatin1String("quot")) {
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&')); stringAddC(QLatin1Char('q')); stringAddC(QLatin1Char('u')); stringAddC(QLatin1Char('o')); stringAddC(QLatin1Char('t')); stringAddC(QLatin1Char(';'));
- } else {
- // Included or Included in literal
- stringAddC(QLatin1Char('"'));
- }
- parseReference_charDataRead = true;
- } else {
- QMap<QString,QString>::Iterator it;
- it = entities.find(reference);
- if (it != entities.end()) {
- // "Internal General"
- switch (parseReference_context) {
- case InContent:
- // Included
- if (!insertXmlRef(*it, reference, false))
- return false;
- parseReference_charDataRead = false;
- break;
- case InAttributeValue:
- // Included in literal
- if (!insertXmlRef(*it, reference, true))
- return false;
- parseReference_charDataRead = false;
- break;
- case InEntityValue:
- {
- // Bypassed
- stringAddC(QLatin1Char('&'));
- for (int i=0; i<(int)reference.length(); i++) {
- stringAddC(reference[i]);
- }
- stringAddC(QLatin1Char(';'));
- parseReference_charDataRead = true;
- }
- break;
- case InDTD:
- // Forbidden
- parseReference_charDataRead = false;
- reportParseError(QLatin1String(XMLERR_INTERNALGENERALENTITYINDTD));
- return false;
- }
- } else {
- QMap<QString,QXmlSimpleReaderPrivate::ExternEntity>::Iterator itExtern;
- itExtern = externEntities.find(reference);
- if (itExtern == externEntities.end()) {
- // entity not declared
- // ### check this case for conformance
- if (parseReference_context == InEntityValue) {
- // Bypassed
- stringAddC(QLatin1Char('&'));
- for (int i=0; i<(int)reference.length(); i++) {
- stringAddC(reference[i]);
- }
- stringAddC(QLatin1Char(';'));
- parseReference_charDataRead = true;
- } else {
- // if we have some char data read, report it now
- if (parseReference_context == InContent) {
- if (contentCharDataRead) {
- if (reportWhitespaceCharData || !string().simplified().isEmpty()) {
- if (contentHnd != nullptr && !contentHnd->characters(string())) {
- reportParseError(contentHnd->errorString());
- return false;
- }
- }
- stringClear();
- contentCharDataRead = false;
- }
- }
-
- if (contentHnd) {
- skipped_entity_in_content = parseReference_context == InContent;
- if (!contentHnd->skippedEntity(reference)) {
- skipped_entity_in_content = false;
- reportParseError(contentHnd->errorString());
- return false; // error
- }
- skipped_entity_in_content = false;
- }
- }
- } else if ((*itExtern).notation.isNull()) {
- // "External Parsed General"
- switch (parseReference_context) {
- case InContent:
- {
- // Included if validating
- bool skipIt = true;
- if (entityRes) {
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QXmlInputSource *ret = nullptr;
-QT_WARNING_POP
- if (!entityRes->resolveEntity((*itExtern).publicId, (*itExtern).systemId, ret)) {
- delete ret;
- reportParseError(entityRes->errorString());
- return false;
- }
- if (ret) {
- QString xmlRefString;
- QString buffer = ret->data();
- while (!buffer.isEmpty()) {
- xmlRefString += buffer;
- ret->fetchData();
- buffer = ret->data();
- }
-
- delete ret;
- if (!stripTextDecl(xmlRefString)) {
- reportParseError(QLatin1String(XMLERR_ERRORINTEXTDECL));
- return false;
- }
- if (!insertXmlRef(xmlRefString, reference, false))
- return false;
- skipIt = false;
- }
- }
- if (skipIt && contentHnd) {
- skipped_entity_in_content = true;
- if (!contentHnd->skippedEntity(reference)) {
- skipped_entity_in_content = false;
- reportParseError(contentHnd->errorString());
- return false; // error
- }
- skipped_entity_in_content = false;
- }
- parseReference_charDataRead = false;
- } break;
- case InAttributeValue:
- // Forbidden
- parseReference_charDataRead = false;
- reportParseError(QLatin1String(XMLERR_EXTERNALGENERALENTITYINAV));
- return false;
- case InEntityValue:
- {
- // Bypassed
- stringAddC(QLatin1Char('&'));
- for (int i=0; i<(int)reference.length(); i++) {
- stringAddC(reference[i]);
- }
- stringAddC(QLatin1Char(';'));
- parseReference_charDataRead = true;
- }
- break;
- case InDTD:
- // Forbidden
- parseReference_charDataRead = false;
- reportParseError(QLatin1String(XMLERR_EXTERNALGENERALENTITYINDTD));
- return false;
- }
- } else {
- // "Unparsed"
- // ### notify for "Occurs as Attribute Value" missing (but this is no refence, anyway)
- // Forbidden
- parseReference_charDataRead = false;
- reportParseError(QLatin1String(XMLERR_UNPARSEDENTITYREFERENCE));
- return false; // error
- }
- }
- }
- return true; // no error
-}
-
-
-/*
- Parses over a simple string.
-
- After the string was successfully parsed, the head is on the first
- character after the string.
-*/
-bool QXmlSimpleReaderPrivate::parseString()
-{
- const signed char InpCharExpected = 0; // the character that was expected
- const signed char InpUnknown = 1;
-
- signed char state; // state in this function is the position in the string s
- signed char input;
-
- if (parseStack == nullptr || parseStack->isEmpty()) {
- Done = parseString_s.length();
- state = 0;
- } else {
- state = parseStack->pop().state;
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: parseString (cont) in state %d", state);
-#endif
- if (!parseStack->isEmpty()) {
- ParseFunction function = parseStack->top().function;
- if (function == &QXmlSimpleReaderPrivate::eat_ws) {
- parseStack->pop();
-#if defined(QT_QXML_DEBUG)
- qDebug("QXmlSimpleReader: eat_ws (cont)");
-#endif
- }
- if (!(this->*function)()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseString, state);
- return false;
- }
- }
- }
-
- for (;;) {
- if (state == Done) {
- return true;
- }
-
- if (atEnd()) {
- unexpectedEof(&QXmlSimpleReaderPrivate::parseString, state);
- return false;
- }
- if (c == parseString_s[(int)state]) {
- input = InpCharExpected;
- } else {
- input = InpUnknown;
- }
- if (input == InpCharExpected) {
- state++;
- } else {
- // Error
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDCHARACTER));
- return false;
- }
-
- next();
- }
- return false;
-}
-
-/*
- This private function inserts and reports an entity substitution. The
- substituted string is \a data and the name of the entity reference is \a
- name. If \a inLiteral is true, the entity is IncludedInLiteral (i.e., " and '
- must be quoted. Otherwise they are not quoted.
-
- This function returns \c false on error.
-*/
-bool QXmlSimpleReaderPrivate::insertXmlRef(const QString &data, const QString &name, bool inLiteral)
-{
- if (inLiteral) {
- QString tmp = data;
- xmlRefStack.push(XmlRef(name, tmp.replace(QLatin1Char('\"'),
- QLatin1String("&quot;")).replace(QLatin1Char('\''), QLatin1String("&apos;"))));
- } else {
- xmlRefStack.push(XmlRef(name, data));
- }
- int n = qMax(parameterEntities.count(), entities.count());
- if (xmlRefStack.count() > n+1) {
- // recursive entities
- reportParseError(QLatin1String(XMLERR_RECURSIVEENTITIES));
- return false;
- }
- if (reportEntities && lexicalHnd) {
- if (!lexicalHnd->startEntity(name)) {
- reportParseError(lexicalHnd->errorString());
- return false;
- }
- }
- return true;
-}
-
-/*
- This private function moves the cursor to the next character.
-*/
-void QXmlSimpleReaderPrivate::next()
-{
- int count = xmlRefStack.size();
- while (count != 0) {
- if (xmlRefStack.top().isEmpty()) {
- xmlRefStack.pop_back();
- count--;
- } else {
- c = xmlRefStack.top().next();
- return;
- }
- }
-
- // the following could be written nicer, but since it is a time-critical
- // function, rather optimize for speed
- ushort uc = c.unicode();
- c = inputSource->next();
- // If we are not incremental parsing, we just skip over EndOfData chars to give the
- // parser an uninterrupted stream of document chars.
- if (c == QXmlInputSource::EndOfData && parseStack == nullptr)
- c = inputSource->next();
- if (uc == '\n') {
- lineNr++;
- columnNr = -1;
- } else if (uc == '\r') {
- if (c != QLatin1Char('\n')) {
- lineNr++;
- columnNr = -1;
- }
- }
- ++columnNr;
-}
-
-/*
- This private function moves the cursor to the next non-whitespace character.
- This function does not move the cursor if the actual cursor position is a
- non-whitespace charcter.
-
- Returns \c false when you use incremental parsing and this function reaches EOF
- with reading only whitespace characters. In this case it also poplulates the
- parseStack with useful information. In all other cases, this function returns
- true.
-*/
-bool QXmlSimpleReaderPrivate::eat_ws()
-{
- while (!atEnd()) {
- if (!is_S(c)) {
- return true;
- }
- next();
- }
- if (parseStack != nullptr) {
- unexpectedEof(&QXmlSimpleReaderPrivate::eat_ws, 0);
- return false;
- }
- return true;
-}
-
-bool QXmlSimpleReaderPrivate::next_eat_ws()
-{
- next();
- return eat_ws();
-}
-
-
-/*
- This private function initializes the reader. \a i is the input source to
- read the data from.
-*/
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-void QXmlSimpleReaderPrivate::init(const QXmlInputSource *i)
-{
- lineNr = 0;
- columnNr = -1;
- inputSource = const_cast<QXmlInputSource *>(i);
- initData();
-
- externParameterEntities.clear();
- parameterEntities.clear();
- externEntities.clear();
- entities.clear();
-
- clear(tags);
-
- doctype.clear();
- xmlVersion.clear();
- encoding.clear();
- standalone = QXmlSimpleReaderPrivate::Unknown;
- error.clear();
-}
-QT_WARNING_POP
-
-/*
- This private function initializes the XML data related variables. Especially,
- it reads the data from the input source.
-*/
-void QXmlSimpleReaderPrivate::initData()
-{
- c = QXmlInputSource::EndOfData;
- xmlRefStack.clear();
- next();
-}
-
-/*
- Returns \c true if a entity with the name \a e exists,
- otherwise returns \c false.
-*/
-bool QXmlSimpleReaderPrivate::entityExist(const QString& e) const
-{
- if ( parameterEntities.find(e) == parameterEntities.end() &&
- externParameterEntities.find(e) == externParameterEntities.end() &&
- externEntities.find(e) == externEntities.end() &&
- entities.find(e) == entities.end()) {
- return false;
- } else {
- return true;
- }
-}
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-void QXmlSimpleReaderPrivate::reportParseError(const QString& error)
-{
- this->error = error;
- if (errorHnd) {
- if (this->error.isNull()) {
- const QXmlParseException ex(QLatin1String(XMLERR_OK), columnNr+1, lineNr+1,
- thisPublicId, thisSystemId);
- errorHnd->fatalError(ex);
- } else {
- const QXmlParseException ex(this->error, columnNr+1, lineNr+1,
- thisPublicId, thisSystemId);
- errorHnd->fatalError(ex);
- }
- }
-}
-QT_WARNING_POP
-
-/*
- This private function is called when a parsing function encounters an
- unexpected EOF. It decides what to do (depending on incremental parsing or
- not). \a where is a pointer to the function where the error occurred and \a
- state is the parsing state in this function.
-*/
-void QXmlSimpleReaderPrivate::unexpectedEof(ParseFunction where, int state)
-{
- if (parseStack == nullptr) {
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDEOF));
- } else {
- if (c == QXmlInputSource::EndOfDocument) {
- reportParseError(QLatin1String(XMLERR_UNEXPECTEDEOF));
- } else {
- pushParseState(where, state);
- }
- }
-}
-
-/*
- This private function is called when a parse...() function returned false. It
- determines if there was an error or if incremental parsing simply went out of
- data and does the right thing for the case. \a where is a pointer to the
- function where the error occurred and \a state is the parsing state in this
- function.
-*/
-void QXmlSimpleReaderPrivate::parseFailed(ParseFunction where, int state)
-{
- if (parseStack != nullptr && error.isNull()) {
- pushParseState(where, state);
- }
-}
-
-/*
- This private function pushes the function pointer \a function and state \a
- state to the parse stack. This is used when you are doing an incremental
- parsing and reach the end of file too early.
-
- Only call this function when d->parseStack!=0.
-*/
-void QXmlSimpleReaderPrivate::pushParseState(ParseFunction function, int state)
-{
- QXmlSimpleReaderPrivate::ParseState ps;
- ps.function = function;
- ps.state = state;
- parseStack->push(ps);
-}
-
-inline static void updateValue(QString &value, const QChar *array, int &arrayPos, int &valueLen)
-{
- value.resize(valueLen + arrayPos);
- memcpy(value.data() + valueLen, array, arrayPos * sizeof(QChar));
- valueLen += arrayPos;
- arrayPos = 0;
-}
-
-// use buffers instead of QString::operator+= when single characters are read
-const QString& QXmlSimpleReaderPrivate::string()
-{
- updateValue(stringValue, stringArray, stringArrayPos, stringValueLen);
- return stringValue;
-}
-const QString& QXmlSimpleReaderPrivate::name()
-{
- updateValue(nameValue, nameArray, nameArrayPos, nameValueLen);
- return nameValue;
-}
-const QString& QXmlSimpleReaderPrivate::ref()
-{
- updateValue(refValue, refArray, refArrayPos, refValueLen);
- return refValue;
-}
-
-void QXmlSimpleReaderPrivate::stringAddC(QChar ch)
-{
- if (stringArrayPos == 256)
- updateValue(stringValue, stringArray, stringArrayPos, stringValueLen);
- stringArray[stringArrayPos++] = ch;
-}
-void QXmlSimpleReaderPrivate::nameAddC(QChar ch)
-{
- if (nameArrayPos == 256)
- updateValue(nameValue, nameArray, nameArrayPos, nameValueLen);
- nameArray[nameArrayPos++] = ch;
-}
-void QXmlSimpleReaderPrivate::refAddC(QChar ch)
-{
- if (refArrayPos == 256)
- updateValue(refValue, refArray, refArrayPos, refValueLen);
- refArray[refArrayPos++] = ch;
-}
-QT_END_NAMESPACE
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
diff --git a/src/xml/sax/qxml.h b/src/xml/sax/qxml.h
deleted file mode 100644
index 6e19be193f..0000000000
--- a/src/xml/sax/qxml.h
+++ /dev/null
@@ -1,469 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtXml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QXML_H
-#define QXML_H
-
-#if 0
-// This is needed because of QTBUG-80347
-#pragma qt_class(QXmlNamespaceSupport)
-#pragma qt_class(QXmlAttributes)
-#pragma qt_class(QXmlInputSource)
-#pragma qt_class(QXmlParseException)
-#pragma qt_class(QXmlReader)
-#pragma qt_class(QXmlSimpleReader)
-#pragma qt_class(QXmlLocator)
-#pragma qt_class(QXmlContentHandler)
-#pragma qt_class(QXmlErrorHandler)
-#pragma qt_class(QXmlDTDHandler)
-#pragma qt_class(QXmlEntityResolver)
-#pragma qt_class(QXmlLexicalHandler)
-#pragma qt_class(QXmlDeclHandler)
-#pragma qt_class(QXmlDefaultHandler)
-#endif
-
-#include <QtCore/qglobal.h>
-
-#include <QtXml/qtxmlglobal.h>
-#include <QtCore/qtextstream.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qscopedpointer.h>
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_BEGIN_NAMESPACE
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-class QXmlNamespaceSupport;
-class QXmlAttributes;
-class QXmlContentHandler;
-class QXmlDefaultHandler;
-class QXmlDTDHandler;
-class QXmlEntityResolver;
-class QXmlErrorHandler;
-class QXmlLexicalHandler;
-class QXmlDeclHandler;
-class QXmlInputSource;
-class QXmlLocator;
-class QXmlNamespaceSupport;
-class QXmlParseException;
-
-class QXmlReader;
-class QXmlSimpleReader;
-
-class QXmlSimpleReaderPrivate;
-class QXmlNamespaceSupportPrivate;
-class QXmlAttributesPrivate;
-class QXmlInputSourcePrivate;
-class QXmlParseExceptionPrivate;
-class QXmlLocatorPrivate;
-class QXmlDefaultHandlerPrivate;
-
-//
-// SAX Namespace Support
-//
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlNamespaceSupport
-{
-public:
- QXmlNamespaceSupport();
- ~QXmlNamespaceSupport();
-
- void setPrefix(const QString&, const QString&);
-
- QString prefix(const QString&) const;
- QString uri(const QString&) const;
- void splitName(const QString&, QString&, QString&) const;
- void processName(const QString&, bool, QString&, QString&) const;
- QStringList prefixes() const;
- QStringList prefixes(const QString&) const;
-
- void pushContext();
- void popContext();
- void reset();
-
-private:
- QXmlNamespaceSupportPrivate *d;
-
- friend class QXmlSimpleReaderPrivate;
- Q_DISABLE_COPY(QXmlNamespaceSupport)
-};
-
-
-//
-// SAX Attributes
-//
-
-// Although deprecated warnings are disabled, the intel icc 18 compiler
-// still complains during the instantiation of the templated qSwap() call below
-// (with the parameter QXmlAttributes::AttributeList) when QXmlAttributes is
-// deprecated. This makes the build fail when warnings are treated as errors.
-// To workaround this, deprecated only the constructor.
-class Q_XML_EXPORT QXmlAttributes
-{
-public:
- QT_DEPRECATED_VERSION(5, 15) QXmlAttributes();
- QXmlAttributes(const QXmlAttributes &) = default;
- QXmlAttributes(QXmlAttributes &&) noexcept = default;
- QXmlAttributes &operator=(const QXmlAttributes &) = default;
- QXmlAttributes &operator=(QXmlAttributes &&) noexcept = default;
-
- ~QXmlAttributes();
-
- void swap(QXmlAttributes &other) noexcept
- {
- qSwap(attList, other.attList);
- qSwap(d, other.d);
- }
-
- int index(const QString& qName) const;
- int index(QLatin1String qName) const;
- int index(const QString& uri, const QString& localPart) const;
- int length() const;
- int count() const;
- QString localName(int index) const;
- QString qName(int index) const;
- QString uri(int index) const;
- QString type(int index) const;
- QString type(const QString& qName) const;
- QString type(const QString& uri, const QString& localName) const;
- QString value(int index) const;
- QString value(const QString& qName) const;
- QString value(QLatin1String qName) const;
- QString value(const QString& uri, const QString& localName) const;
-
- void clear();
- void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value);
-
-private:
- struct Attribute {
- QString qname, uri, localname, value;
- };
- friend class QTypeInfo<Attribute>;
- typedef QList<Attribute> AttributeList;
- AttributeList attList;
-
- QXmlAttributesPrivate *d;
-};
-
-Q_DECLARE_TYPEINFO(QXmlAttributes::Attribute, Q_MOVABLE_TYPE);
-Q_DECLARE_SHARED(QXmlAttributes)
-
-//
-// SAX Input Source
-//
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlInputSource
-{
-public:
- QXmlInputSource();
- explicit QXmlInputSource(QIODevice *dev);
- virtual ~QXmlInputSource();
-
- virtual void setData(const QString& dat);
- virtual void setData(const QByteArray& dat);
- virtual void fetchData();
- virtual QString data() const;
- virtual QChar next();
- virtual void reset();
-
- static const char16_t EndOfData;
- static const char16_t EndOfDocument;
-
-protected:
- virtual QString fromRawData(const QByteArray &data, bool beginning = false);
-
-private:
- void init();
- QXmlInputSourcePrivate *d;
-};
-
-//
-// SAX Exception Classes
-//
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlParseException
-{
-public:
- explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1,
- const QString &p = QString(), const QString &s = QString());
- QXmlParseException(const QXmlParseException &other);
- ~QXmlParseException();
-
- int columnNumber() const;
- int lineNumber() const;
- QString publicId() const;
- QString systemId() const;
- QString message() const;
-
-private:
- QScopedPointer<QXmlParseExceptionPrivate> d;
-};
-
-
-//
-// XML Reader
-//
-
-class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlReader
-{
-public:
- virtual ~QXmlReader() {}
- virtual bool feature(const QString& name, bool *ok = nullptr) const = 0;
- virtual void setFeature(const QString& name, bool value) = 0;
- virtual bool hasFeature(const QString& name) const = 0;
- virtual void* property(const QString& name, bool *ok = nullptr) const = 0;
- virtual void setProperty(const QString& name, void* value) = 0;
- virtual bool hasProperty(const QString& name) const = 0;
- virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
- virtual QXmlEntityResolver* entityResolver() const = 0;
- virtual void setDTDHandler(QXmlDTDHandler* handler) = 0;
- virtual QXmlDTDHandler* DTDHandler() const = 0;
- virtual void setContentHandler(QXmlContentHandler* handler) = 0;
- virtual QXmlContentHandler* contentHandler() const = 0;
- virtual void setErrorHandler(QXmlErrorHandler* handler) = 0;
- virtual QXmlErrorHandler* errorHandler() const = 0;
- virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0;
- virtual QXmlLexicalHandler* lexicalHandler() const = 0;
- virtual void setDeclHandler(QXmlDeclHandler* handler) = 0;
- virtual QXmlDeclHandler* declHandler() const = 0;
- virtual bool parse(const QXmlInputSource& input) = 0;
- virtual bool parse(const QXmlInputSource* input) = 0;
-};
-
-class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlSimpleReader
- : public QXmlReader
-{
-public:
- QXmlSimpleReader();
- virtual ~QXmlSimpleReader();
-
- bool feature(const QString& name, bool *ok = nullptr) const override;
- void setFeature(const QString& name, bool value) override;
- bool hasFeature(const QString& name) const override;
-
- void* property(const QString& name, bool *ok = nullptr) const override;
- void setProperty(const QString& name, void* value) override;
- bool hasProperty(const QString& name) const override;
-
- void setEntityResolver(QXmlEntityResolver* handler) override;
- QXmlEntityResolver* entityResolver() const override;
- void setDTDHandler(QXmlDTDHandler* handler) override;
- QXmlDTDHandler* DTDHandler() const override;
- void setContentHandler(QXmlContentHandler* handler) override;
- QXmlContentHandler* contentHandler() const override;
- void setErrorHandler(QXmlErrorHandler* handler) override;
- QXmlErrorHandler* errorHandler() const override;
- void setLexicalHandler(QXmlLexicalHandler* handler) override;
- QXmlLexicalHandler* lexicalHandler() const override;
- void setDeclHandler(QXmlDeclHandler* handler) override;
- QXmlDeclHandler* declHandler() const override;
-
- bool parse(const QXmlInputSource& input) override;
- bool parse(const QXmlInputSource* input) override;
- virtual bool parse(const QXmlInputSource* input, bool incremental);
- virtual bool parseContinue();
-
-private:
- Q_DISABLE_COPY(QXmlSimpleReader)
- Q_DECLARE_PRIVATE(QXmlSimpleReader)
- QScopedPointer<QXmlSimpleReaderPrivate> d_ptr;
-
- friend class QXmlSimpleReaderLocator;
- friend class QDomHandler;
-};
-
-//
-// SAX Locator
-//
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLocator
-{
-public:
- QXmlLocator();
- virtual ~QXmlLocator();
-
- virtual int columnNumber() const = 0;
- virtual int lineNumber() const = 0;
-// QString getPublicId() const
-// QString getSystemId() const
-};
-
-//
-// SAX handler classes
-//
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlContentHandler
-{
-public:
- virtual ~QXmlContentHandler() {}
- virtual void setDocumentLocator(QXmlLocator* locator) = 0;
- virtual bool startDocument() = 0;
- virtual bool endDocument() = 0;
- virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0;
- virtual bool endPrefixMapping(const QString& prefix) = 0;
- virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0;
- virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0;
- virtual bool characters(const QString& ch) = 0;
- virtual bool ignorableWhitespace(const QString& ch) = 0;
- virtual bool processingInstruction(const QString& target, const QString& data) = 0;
- virtual bool skippedEntity(const QString& name) = 0;
- virtual QString errorString() const = 0;
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlErrorHandler
-{
-public:
- virtual ~QXmlErrorHandler() {}
- virtual bool warning(const QXmlParseException& exception) = 0;
- virtual bool error(const QXmlParseException& exception) = 0;
- virtual bool fatalError(const QXmlParseException& exception) = 0;
- virtual QString errorString() const = 0;
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDTDHandler
-{
-public:
- virtual ~QXmlDTDHandler() {}
- virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
- virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0;
- virtual QString errorString() const = 0;
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlEntityResolver
-{
-public:
- virtual ~QXmlEntityResolver() {}
- virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
- virtual QString errorString() const = 0;
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLexicalHandler
-{
-public:
- virtual ~QXmlLexicalHandler() {}
- virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0;
- virtual bool endDTD() = 0;
- virtual bool startEntity(const QString& name) = 0;
- virtual bool endEntity(const QString& name) = 0;
- virtual bool startCDATA() = 0;
- virtual bool endCDATA() = 0;
- virtual bool comment(const QString& ch) = 0;
- virtual QString errorString() const = 0;
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDeclHandler
-{
-public:
- virtual ~QXmlDeclHandler() {}
- virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0;
- virtual bool internalEntityDecl(const QString& name, const QString& value) = 0;
- virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
- virtual QString errorString() const = 0;
- // ### Conform to SAX by adding elementDecl
-};
-
-class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler,
- public QXmlErrorHandler,
- public QXmlDTDHandler,
- public QXmlEntityResolver,
- public QXmlLexicalHandler,
- public QXmlDeclHandler
-{
-public:
- QXmlDefaultHandler();
- virtual ~QXmlDefaultHandler();
-
- void setDocumentLocator(QXmlLocator* locator) override;
- bool startDocument() override;
- bool endDocument() override;
- bool startPrefixMapping(const QString& prefix, const QString& uri) override;
- bool endPrefixMapping(const QString& prefix) override;
- bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) override;
- bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) override;
- bool characters(const QString& ch) override;
- bool ignorableWhitespace(const QString& ch) override;
- bool processingInstruction(const QString& target, const QString& data) override;
- bool skippedEntity(const QString& name) override;
-
- bool warning(const QXmlParseException& exception) override;
- bool error(const QXmlParseException& exception) override;
- bool fatalError(const QXmlParseException& exception) override;
-
- bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) override;
- bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) override;
-
- bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) override;
-
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId) override;
- bool endDTD() override;
- bool startEntity(const QString& name) override;
- bool endEntity(const QString& name) override;
- bool startCDATA() override;
- bool endCDATA() override;
- bool comment(const QString& ch) override;
-
- bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) override;
- bool internalEntityDecl(const QString& name, const QString& value) override;
- bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) override;
-
- QString errorString() const override;
-
-private:
- QXmlDefaultHandlerPrivate *d;
- Q_DISABLE_COPY(QXmlDefaultHandler)
-};
-
-// inlines
-
-inline int QXmlAttributes::count() const
-{ return length(); }
-
-QT_WARNING_POP
-
-QT_END_NAMESPACE
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
-#endif // QXML_H
diff --git a/src/xml/sax/qxml_p.h b/src/xml/sax/qxml_p.h
deleted file mode 100644
index 4f5568f214..0000000000
--- a/src/xml/sax/qxml_p.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtXml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QXML_P_H
-#define QXML_P_H
-
-#include <qstack.h>
-#include <qmap.h>
-#include <qhash.h>
-#include <qxml.h>
-
-#include <stack>
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-QT_BEGIN_NAMESPACE
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience of
-// qxml.cpp and qdom.cpp. This header file may change from version to version without
-// notice, or even be removed.
-//
-// We mean it.
-//
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-
-class QXmlSimpleReaderPrivate
-{
-public:
- ~QXmlSimpleReaderPrivate();
-private:
- // functions
- QXmlSimpleReaderPrivate(QXmlSimpleReader *reader);
- void initIncrementalParsing();
-
- // used to determine if elements are correctly nested
- std::stack<QString, QStringList> tags;
-
- // used by parseReference() and parsePEReference()
- enum EntityRecognitionContext { InContent, InAttributeValue, InEntityValue, InDTD };
-
- // used for entity declarations
- struct ExternParameterEntity
- {
- ExternParameterEntity() {}
- ExternParameterEntity(const QString &p, const QString &s)
- : publicId(p), systemId(s) {}
- QString publicId;
- QString systemId;
-
- Q_DUMMY_COMPARISON_OPERATOR(ExternParameterEntity)
- };
- friend class QTypeInfo<ExternParameterEntity>;
-
- struct ExternEntity
- {
- ExternEntity() {}
- ExternEntity(const QString &p, const QString &s, const QString &n)
- : publicId(p), systemId(s), notation(n) {}
- QString publicId;
- QString systemId;
- QString notation;
- Q_DUMMY_COMPARISON_OPERATOR(ExternEntity)
- };
- friend class QTypeInfo<ExternEntity>;
-
- QMap<QString,ExternParameterEntity> externParameterEntities;
- QMap<QString,QString> parameterEntities;
- QMap<QString,ExternEntity> externEntities;
- QMap<QString,QString> entities;
-
- // used for parsing of entity references
- struct XmlRef {
- XmlRef()
- : index(0) {}
- XmlRef(const QString &_name, const QString &_value)
- : name(_name), value(_value), index(0) {}
- bool isEmpty() const { return index == value.length(); }
- QChar next() { return value.at(index++); }
- QString name;
- QString value;
- int index;
- };
- friend class QTypeInfo<XmlRef>;
- QStack<XmlRef> xmlRefStack;
-
- // used for standalone declaration
- enum Standalone { Yes, No, Unknown };
-
- QString doctype; // only used for the doctype
- QString xmlVersion; // only used to store the version information
- QString encoding; // only used to store the encoding
- Standalone standalone; // used to store the value of the standalone declaration
-
- QString publicId; // used by parseExternalID() to store the public ID
- QString systemId; // used by parseExternalID() to store the system ID
-
- // Since publicId/systemId is used as temporary variables by parseExternalID(), it
- // might overwrite the PUBLIC/SYSTEM for the document we're parsing. In effect, we would
- // possibly send off an QXmlParseException that has the PUBLIC/SYSTEM of a entity declaration
- // instead of those of the current document.
- // Hence we have these two variables for storing the document's data.
- QString thisPublicId;
- QString thisSystemId;
-
- QString attDeclEName; // use by parseAttlistDecl()
- QString attDeclAName; // use by parseAttlistDecl()
-
- // flags for some features support
- bool useNamespaces;
- bool useNamespacePrefixes;
- bool reportWhitespaceCharData;
- bool reportEntities;
-
- // used to build the attribute list
- QXmlAttributes attList;
-
- // used in QXmlSimpleReader::parseContent() to decide whether character
- // data was read
- bool contentCharDataRead;
- // Hack for letting QDom know where the skipped entity occurred
- bool skipped_entity_in_content;
-
- // helper classes
- QScopedPointer<QXmlLocator> locator;
- QXmlNamespaceSupport namespaceSupport;
-
- // error string
- QString error;
-
- // arguments for parse functions (this is needed to allow incremental
- // parsing)
- bool parsePI_xmldecl;
- bool parseName_useRef;
- bool parseReference_charDataRead;
- EntityRecognitionContext parseReference_context;
- bool parseExternalID_allowPublicID;
- EntityRecognitionContext parsePEReference_context;
- QString parseString_s;
-
- // for incremental parsing
- struct ParseState {
- typedef bool (QXmlSimpleReaderPrivate::*ParseFunction)();
- ParseFunction function;
- int state;
- };
- friend class QTypeInfo<ParseState>;
- QStack<ParseState> *parseStack;
-
- // used in parseProlog()
- bool xmldecl_possible;
- bool doctype_read;
-
- // used in parseDoctype()
- bool startDTDwasReported;
-
- // used in parseString()
- signed char Done;
-
-
- // variables
- QXmlContentHandler *contentHnd;
- QXmlErrorHandler *errorHnd;
- QXmlDTDHandler *dtdHnd;
- QXmlEntityResolver *entityRes;
- QXmlLexicalHandler *lexicalHnd;
- QXmlDeclHandler *declHnd;
-
- QXmlInputSource *inputSource;
-
- QChar c; // the character at reading position
- int lineNr; // number of line
- int columnNr; // position in line
-
- QChar nameArray[256]; // only used for names
- QString nameValue; // only used for names
- int nameArrayPos;
- int nameValueLen;
- QChar refArray[256]; // only used for references
- QString refValue; // only used for references
- int refArrayPos;
- int refValueLen;
- QChar stringArray[256]; // used for any other strings that are parsed
- QString stringValue; // used for any other strings that are parsed
- int stringArrayPos;
- int stringValueLen;
- QString emptyStr;
-
- QHash<QString, int> literalEntitySizes;
- // The entity at (QMap<QString,) referenced the entities at (QMap<QString,) (int>) times.
- QHash<QString, QHash<QString, int> > referencesToOtherEntities;
- QHash<QString, int> expandedSizes;
- // The limit to the amount of times the DTD parsing functions can be called
- // for the DTD currently being parsed.
- static const int dtdRecursionLimit = 2;
- // The maximum amount of characters an entity value may contain, after expansion.
- static const int entityCharacterLimit = 4096;
-
- const QString &string();
- void stringClear();
- void stringAddC(QChar);
- inline void stringAddC() { stringAddC(c); }
- const QString &name();
- void nameClear();
- void nameAddC(QChar);
- inline void nameAddC() { nameAddC(c); }
- const QString &ref();
- void refClear();
- void refAddC(QChar);
- inline void refAddC() { refAddC(c); }
-
- // private functions
- bool eat_ws();
- bool next_eat_ws();
-
- void QT_FASTCALL next();
- bool atEnd();
-
- void init(const QXmlInputSource* i);
- void initData();
-
- bool entityExist(const QString&) const;
-
- bool parseBeginOrContinue(int state, bool incremental);
-
- bool parseProlog();
- bool parseElement();
- bool processElementEmptyTag();
- bool processElementETagBegin2();
- bool processElementAttribute();
- bool parseMisc();
- bool parseContent();
-
- bool parsePI();
- bool parseDoctype();
- bool parseComment();
-
- bool parseName();
- bool parseNmtoken();
- bool parseAttribute();
- bool parseReference();
- bool processReference();
-
- bool parseExternalID();
- bool parsePEReference();
- bool parseMarkupdecl();
- bool parseAttlistDecl();
- bool parseAttType();
- bool parseAttValue();
- bool parseElementDecl();
- bool parseNotationDecl();
- bool parseChoiceSeq();
- bool parseEntityDecl();
- bool parseEntityValue();
-
- bool parseString();
-
- bool insertXmlRef(const QString&, const QString&, bool);
-
- bool reportEndEntities();
- void reportParseError(const QString& error);
-
- typedef bool (QXmlSimpleReaderPrivate::*ParseFunction) ();
- void unexpectedEof(ParseFunction where, int state);
- void parseFailed(ParseFunction where, int state);
- void pushParseState(ParseFunction function, int state);
-
- bool isExpandedEntityValueTooLarge(QString *errorMessage);
-
- Q_DECLARE_PUBLIC(QXmlSimpleReader)
- QXmlSimpleReader *q_ptr;
-
- friend class QXmlSimpleReaderLocator;
- friend class QDomHandler;
-};
-Q_DECLARE_TYPEINFO(QXmlSimpleReaderPrivate::ParseState, Q_PRIMITIVE_TYPE);
-Q_DECLARE_TYPEINFO(QXmlSimpleReaderPrivate::XmlRef, Q_MOVABLE_TYPE);
-Q_DECLARE_TYPEINFO(QXmlSimpleReaderPrivate::ExternParameterEntity, Q_MOVABLE_TYPE);
-Q_DECLARE_TYPEINFO(QXmlSimpleReaderPrivate::ExternEntity, Q_MOVABLE_TYPE);
-
-QT_WARNING_POP
-
-QT_END_NAMESPACE
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
-#endif // QXML_P_H
diff --git a/src/xml/sax/sax.pri b/src/xml/sax/sax.pri
deleted file mode 100644
index 5793996898..0000000000
--- a/src/xml/sax/sax.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-SOURCES += $$PWD/qxml.cpp
-HEADERS += $$PWD/qxml_p.h \
- $$PWD/qxml.h
diff --git a/src/xml/xml.pro b/src/xml/xml.pro
index 31d742d6ea..5474d477e4 100644
--- a/src/xml/xml.pro
+++ b/src/xml/xml.pro
@@ -12,6 +12,5 @@ HEADERS += qtxmlglobal.h
PRECOMPILED_HEADER =
include(dom/dom.pri)
-include(sax/sax.pri)
load(qt_module)
diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
index 7046fe33a6..56b6a91e9b 100644
--- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
+++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
@@ -34,7 +34,6 @@
#include <QNetworkRequest>
#include <QtTest/QtTest>
#include <QUrl>
-#include <QXmlDefaultHandler>
#include <QXmlStreamReader>
#include "qc14n.h"
diff --git a/tests/auto/xml/CMakeLists.txt b/tests/auto/xml/CMakeLists.txt
index 703cba344d..fe747649a7 100644
--- a/tests/auto/xml/CMakeLists.txt
+++ b/tests/auto/xml/CMakeLists.txt
@@ -1,4 +1,3 @@
# Generated from xml.pro.
add_subdirectory(dom)
-add_subdirectory(sax)
diff --git a/tests/auto/xml/sax/CMakeLists.txt b/tests/auto/xml/sax/CMakeLists.txt
deleted file mode 100644
index dd826d5e4f..0000000000
--- a/tests/auto/xml/sax/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated from sax.pro.
-
-add_subdirectory(qxml)
-if(TARGET Qt::Network)
- add_subdirectory(qxmlinputsource)
- add_subdirectory(qxmlsimplereader)
-endif()
diff --git a/tests/auto/xml/sax/qxml/.gitignore b/tests/auto/xml/sax/qxml/.gitignore
deleted file mode 100644
index 6506151df0..0000000000
--- a/tests/auto/xml/sax/qxml/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qxml
diff --git a/tests/auto/xml/sax/qxml/0x010D.xml b/tests/auto/xml/sax/qxml/0x010D.xml
deleted file mode 100644
index 5f2fe4d940..0000000000
--- a/tests/auto/xml/sax/qxml/0x010D.xml
+++ /dev/null
@@ -1 +0,0 @@
-<project čreated-by="{{build_number}}"/> \ No newline at end of file
diff --git a/tests/auto/xml/sax/qxml/CMakeLists.txt b/tests/auto/xml/sax/qxml/CMakeLists.txt
deleted file mode 100644
index cca9b95a2f..0000000000
--- a/tests/auto/xml/sax/qxml/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated from qxml.pro.
-
-#####################################################################
-## tst_qxml Test:
-#####################################################################
-
-# Collect test data
-list(APPEND test_data "0x010D.xml")
-
-qt_add_test(tst_qxml
- SOURCES
- tst_qxml.cpp
- PUBLIC_LIBRARIES
- Qt::Xml
- TESTDATA ${test_data}
-)
diff --git a/tests/auto/xml/sax/qxml/qxml.pro b/tests/auto/xml/sax/qxml/qxml.pro
deleted file mode 100644
index e0b48ad9f5..0000000000
--- a/tests/auto/xml/sax/qxml/qxml.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qxml
-
-SOURCES += tst_qxml.cpp
-QT = core xml testlib
-
-TESTDATA += 0x010D.xml
diff --git a/tests/auto/xml/sax/qxml/tst_qxml.cpp b/tests/auto/xml/sax/qxml/tst_qxml.cpp
deleted file mode 100644
index 2f00a08fef..0000000000
--- a/tests/auto/xml/sax/qxml/tst_qxml.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-
-QT_WARNING_DISABLE_DEPRECATED
-
-#include <qcoreapplication.h>
-#include <qdebug.h>
-#include <qxml.h>
-
-class tst_QXml : public QObject
-{
-Q_OBJECT
-
-private slots:
-#if QT_DEPRECATED_SINCE(5, 15)
- void getSetCheck();
- void interpretedAs0D() const;
-#ifndef QT_NO_EXCEPTIONS
- void exception();
-#endif
-#endif // QT_DEPRECATED_SINCE(5, 15)
-};
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-class MyXmlEntityResolver : public QXmlEntityResolver
-{
-public:
- MyXmlEntityResolver() : QXmlEntityResolver() {}
- QString errorString() const { return QString(); }
- bool resolveEntity(const QString &, const QString &, QXmlInputSource *&) { return false; }
-};
-
-class MyXmlContentHandler : public QXmlContentHandler
-{
-public:
- MyXmlContentHandler() : QXmlContentHandler() {}
- bool characters(const QString &) { return false; }
- bool endDocument() { return false; }
- bool endElement(const QString &, const QString &, const QString &) { return false; }
- bool endPrefixMapping(const QString &) { return false; }
- QString errorString() const { return QString(); }
- bool ignorableWhitespace(const QString &) { return false; }
- bool processingInstruction(const QString &, const QString &) { return false; }
- void setDocumentLocator(QXmlLocator *) { }
- bool skippedEntity(const QString &) { return false; }
- bool startDocument() { return false; }
- bool startElement(const QString &, const QString &, const QString &, const QXmlAttributes &) { return false; }
- bool startPrefixMapping(const QString &, const QString &) { return false; }
-};
-
-class MyXmlErrorHandler : public QXmlErrorHandler
-{
-public:
- MyXmlErrorHandler() : QXmlErrorHandler() {}
- QString errorString() const { return QString(); }
- bool error(const QXmlParseException &) { return false; }
- bool fatalError(const QXmlParseException &) { return false; }
- bool warning(const QXmlParseException &) { return false; }
-};
-
-class MyXmlLexicalHandler : public QXmlLexicalHandler
-{
-public:
- MyXmlLexicalHandler() : QXmlLexicalHandler() {}
- bool comment(const QString &) { return false; }
- bool endCDATA() { return false; }
- bool endDTD() { return false; }
- bool endEntity(const QString &) { return false; }
- QString errorString() const { return QString(); }
- bool startCDATA() { return false; }
- bool startDTD(const QString &, const QString &, const QString &) { return false; }
- bool startEntity(const QString &) { return false; }
-};
-
-class MyXmlDeclHandler : public QXmlDeclHandler
-{
-public:
- MyXmlDeclHandler() : QXmlDeclHandler() {}
- bool attributeDecl(const QString &, const QString &, const QString &, const QString &, const QString &) { return false; }
- QString errorString() const { return QString(); }
- bool externalEntityDecl(const QString &, const QString &, const QString &) { return false; }
- bool internalEntityDecl(const QString &, const QString &) { return false; }
-};
-
-// Testing get/set functions
-void tst_QXml::getSetCheck()
-{
- QXmlSimpleReader obj1;
- // QXmlEntityResolver* QXmlSimpleReader::entityResolver()
- // void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver*)
- MyXmlEntityResolver *var1 = new MyXmlEntityResolver;
- obj1.setEntityResolver(var1);
- QCOMPARE(static_cast<QXmlEntityResolver *>(var1), obj1.entityResolver());
- obj1.setEntityResolver((QXmlEntityResolver *)0);
- QCOMPARE((QXmlEntityResolver *)0, obj1.entityResolver());
- delete var1;
-
- // QXmlContentHandler* QXmlSimpleReader::contentHandler()
- // void QXmlSimpleReader::setContentHandler(QXmlContentHandler*)
- MyXmlContentHandler *var2 = new MyXmlContentHandler;
- obj1.setContentHandler(var2);
- QCOMPARE(static_cast<QXmlContentHandler *>(var2), obj1.contentHandler());
- obj1.setContentHandler((QXmlContentHandler *)0);
- QCOMPARE((QXmlContentHandler *)0, obj1.contentHandler());
- delete var2;
-
- // QXmlErrorHandler* QXmlSimpleReader::errorHandler()
- // void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler*)
- MyXmlErrorHandler *var3 = new MyXmlErrorHandler;
- obj1.setErrorHandler(var3);
- QCOMPARE(static_cast<QXmlErrorHandler *>(var3), obj1.errorHandler());
- obj1.setErrorHandler((QXmlErrorHandler *)0);
- QCOMPARE((QXmlErrorHandler *)0, obj1.errorHandler());
- delete var3;
-
- // QXmlLexicalHandler* QXmlSimpleReader::lexicalHandler()
- // void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler*)
- MyXmlLexicalHandler *var4 = new MyXmlLexicalHandler;
- obj1.setLexicalHandler(var4);
- QCOMPARE(static_cast<QXmlLexicalHandler *>(var4), obj1.lexicalHandler());
- obj1.setLexicalHandler((QXmlLexicalHandler *)0);
- QCOMPARE((QXmlLexicalHandler *)0, obj1.lexicalHandler());
- delete var4;
-
- // QXmlDeclHandler* QXmlSimpleReader::declHandler()
- // void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler*)
- MyXmlDeclHandler *var5 = new MyXmlDeclHandler;
- obj1.setDeclHandler(var5);
- QCOMPARE(static_cast<QXmlDeclHandler *>(var5), obj1.declHandler());
- obj1.setDeclHandler((QXmlDeclHandler *)0);
- QCOMPARE((QXmlDeclHandler *)0, obj1.declHandler());
- delete var5;
-}
-
-void tst_QXml::interpretedAs0D() const
-{
- /* See task 172632. */
-
- class MyHandler : public QXmlDefaultHandler
- {
- public:
- virtual bool startElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName,
- const QXmlAttributes &atts)
- {
- Q_UNUSED(namespaceURI);
- Q_UNUSED(localName);
- Q_UNUSED(qName);
- attrName = atts.qName(0);
- attrCount = atts.count();
- return true;
- }
-
- QString attrName;
- int attrCount;
- };
-
- const QString document(QLatin1String("<element ") +
- QChar(0x010D) +
- QLatin1String("reated-by=\"an attr value\"/>"));
-
- QString testFile = QFINDTESTDATA("0x010D.xml");
- if (testFile.isEmpty())
- QFAIL("Cannot find test file 0x010D.xml!");
- QFile f(testFile);
- QVERIFY(f.open(QIODevice::ReadOnly));
- QXmlInputSource data(&f);
-
- QXmlSimpleReader reader;
-
- MyHandler myHandler;
- reader.setContentHandler(&myHandler);
- reader.setErrorHandler(&myHandler);
-
- QVERIFY(reader.parse(&data));
-
- QCOMPARE(myHandler.attrCount, 1);
- QCOMPARE(myHandler.attrName, QChar(0x010D) + QString::fromLatin1("reated-by"));
-}
-
-#ifndef QT_NO_EXCEPTIONS
-void tst_QXml::exception()
-{
- QString message = QString::fromLatin1("message");
- int column = 3;
- int line = 2;
- QString publicId = QString::fromLatin1("publicId");
- QString systemId = QString::fromLatin1("systemId");
-
- try {
- QXmlParseException e(message, column, line, publicId, systemId);
- throw e;
- }
- catch (QXmlParseException e) {
- QCOMPARE(e.message(), message);
- QCOMPARE(e.columnNumber(), column);
- QCOMPARE(e.lineNumber(), line);
- QCOMPARE(e.publicId(), publicId);
- QCOMPARE(e.systemId(), systemId);
- }
-}
-#endif
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
-QTEST_MAIN(tst_QXml)
-#include "tst_qxml.moc"
diff --git a/tests/auto/xml/sax/qxmlinputsource/.gitignore b/tests/auto/xml/sax/qxmlinputsource/.gitignore
deleted file mode 100644
index 09ea68aa90..0000000000
--- a/tests/auto/xml/sax/qxmlinputsource/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qxmlinputsource
diff --git a/tests/auto/xml/sax/qxmlinputsource/CMakeLists.txt b/tests/auto/xml/sax/qxmlinputsource/CMakeLists.txt
deleted file mode 100644
index 5da96c6863..0000000000
--- a/tests/auto/xml/sax/qxmlinputsource/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from qxmlinputsource.pro.
-
-#####################################################################
-## tst_qxmlinputsource Test:
-#####################################################################
-
-qt_add_test(tst_qxmlinputsource
- SOURCES
- tst_qxmlinputsource.cpp
- PUBLIC_LIBRARIES
- Qt::Network
- Qt::Xml
-)
diff --git a/tests/auto/xml/sax/qxmlinputsource/qxmlinputsource.pro b/tests/auto/xml/sax/qxmlinputsource/qxmlinputsource.pro
deleted file mode 100644
index 8846ae5e4a..0000000000
--- a/tests/auto/xml/sax/qxmlinputsource/qxmlinputsource.pro
+++ /dev/null
@@ -1,4 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qxmlinputsource
-SOURCES += tst_qxmlinputsource.cpp
-QT = core xml network testlib
diff --git a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp
deleted file mode 100644
index 8b437103de..0000000000
--- a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QDomDocument>
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QNetworkRequest>
-#include <QTcpServer>
-#include <QTcpSocket>
-#include <QTimer>
-#include <QElapsedTimer>
-#include <QtDebug>
-#include <QtTest/QtTest>
-#include <QXmlDefaultHandler>
-#include <QXmlInputSource>
-#include <QXmlSimpleReader>
-
-class tst_QXmlInputSource : public QObject
-{
- Q_OBJECT
-
-#if QT_DEPRECATED_SINCE(5, 15)
-private slots:
- void reset() const;
- void resetSimplified() const;
- void waitForReadyIODevice() const;
- void inputFromSlowDevice() const;
-#endif // QT_DEPRECATED_SINCE(5, 15)
-};
-
-#if QT_DEPRECATED_SINCE(5, 15)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-/*!
- \internal
- \since 4.4
-
- See task 166278.
- */
-void tst_QXmlInputSource::reset() const
-{
- const QString input(QString::fromLatin1("<element attribute1='value1' attribute2='value2'/>"));
-
- QXmlSimpleReader reader;
- QXmlDefaultHandler handler;
- reader.setContentHandler(&handler);
-
- QXmlInputSource source;
- source.setData(input);
-
- QCOMPARE(source.data(), input);
-
- source.reset();
- QCOMPARE(source.data(), input);
-
- source.reset();
- QVERIFY(reader.parse(source));
- source.reset();
- QCOMPARE(source.data(), input);
-}
-
-/*!
- \internal
- \since 4.4
-
- See task 166278.
- */
-void tst_QXmlInputSource::resetSimplified() const
-{
- const QString input(QString::fromLatin1("<element/>"));
-
- QXmlSimpleReader reader;
-
- QXmlInputSource source;
- source.setData(input);
-
- QVERIFY(reader.parse(source));
- source.reset();
- QCOMPARE(source.data(), input);
-}
-
-class ServerAndClient : public QObject
-{
- Q_OBJECT
-
-public:
- ServerAndClient(QEventLoop &ev) : success(false)
- , eventLoop(ev)
- , bodyBytesRead(0)
- , bodyLength(-1)
- , isBody(false)
- {
- setObjectName("serverAndClient");
- tcpServer = new QTcpServer(this);
- connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
- tcpServer->listen(QHostAddress::LocalHost, 1088);
- httpClient = new QNetworkAccessManager(this);
- connect(httpClient, SIGNAL(finished(QNetworkReply*)), SLOT(requestFinished(QNetworkReply*)));
- }
-
- bool success;
- QEventLoop &eventLoop;
-
-public slots:
- void doIt()
- {
- QUrl url("http://127.0.0.1:1088");
- QNetworkRequest req(url);
- req.setRawHeader("POST", url.path().toLatin1());
- req.setRawHeader("user-agent", "xml-test");
- req.setRawHeader("keep-alive", "false");
- req.setRawHeader("host", url.host().toLatin1());
-
- QByteArray xmlrpc("<methodCall>\r\n\
- <methodName>SFD.GetVersion</methodName>\r\n\
- <params/>\r\n\
- </methodCall>");
- req.setHeader(QNetworkRequest::ContentLengthHeader, xmlrpc.size());
- req.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml");
-
- httpClient->post(req, xmlrpc);
- }
-
- void requestFinished(QNetworkReply *reply)
- {
- QCOMPARE(reply->error(), QNetworkReply::NoError);
- reply->deleteLater();
- }
-
-private slots:
- void newConnection()
- {
- QTcpSocket *const s = tcpServer->nextPendingConnection();
-
- if(s)
- connect(s, SIGNAL(readyRead()), this, SLOT(readyRead()));
- }
-
- void readyRead()
- {
- QTcpSocket *const s = static_cast<QTcpSocket *>(sender());
-
- while (s->bytesAvailable())
- {
- const QString line(s->readLine());
-
- if (line.startsWith("Content-Length:"))
- bodyLength = line.mid(15).toInt();
-
- if (isBody)
- {
- body.append(line.toUtf8());
- bodyBytesRead += line.length();
- }
- else if (line == "\r\n")
- {
- isBody = true;
- if (bodyLength == -1)
- {
- qFatal("No length was specified in the header.");
- }
- }
- }
-
- if (bodyBytesRead == bodyLength)
- {
- QDomDocument domDoc;
- success = domDoc.setContent(body);
- eventLoop.exit();
- }
- }
-
-private:
- QByteArray body;
- int bodyBytesRead, bodyLength;
- bool isBody;
- QTcpServer *tcpServer;
- QNetworkAccessManager* httpClient;
-};
-
-void tst_QXmlInputSource::waitForReadyIODevice() const
-{
- QEventLoop el;
- ServerAndClient sv(el);
- QTimer::singleShot(1, &sv, SLOT(doIt()));
-
- el.exec();
- QVERIFY(sv.success);
-}
-
-// This class is used to emulate a case where less than 4 bytes are sent in
-// a single packet to ensure it is still parsed correctly
-class SlowIODevice : public QIODevice
-{
-public:
- SlowIODevice(const QString &expectedData, QObject *parent = 0)
- : QIODevice(parent), currentPos(0), readyToSend(true)
- {
- stringData = expectedData.toUtf8();
- dataTimer = new QTimer(this);
- connect(dataTimer, &QTimer::timeout, [=]() {
- readyToSend = true;
- emit readyRead();
- dataTimer->stop();
- });
- dataTimer->start(1000);
- }
- bool open(SlowIODevice::OpenMode) override
- {
- setOpenMode(ReadOnly);
- return true;
- }
- bool isSequential() const override
- {
- return true;
- }
- qint64 bytesAvailable() const override
- {
- if (readyToSend && stringData.size() != currentPos)
- return qMax(3, stringData.size() - currentPos);
- return 0;
- }
- qint64 readData(char *data, qint64 maxSize) override
- {
- if (!readyToSend)
- return 0;
- const qint64 readSize = qMin(qMin((qint64)3, maxSize), (qint64)(stringData.size() - currentPos));
- if (readSize > 0)
- memcpy(data, &stringData.constData()[currentPos], readSize);
- currentPos += readSize;
- readyToSend = false;
- if (currentPos != stringData.size())
- dataTimer->start(1000);
- return readSize;
- }
- qint64 writeData(const char *, qint64) override { return 0; }
- bool waitForReadyRead(int msecs) override
- {
- // Delibrately wait a maximum of 10 seconds for the sake
- // of the test, so it doesn't unduly hang
- const int waitTime = qMax(10000, msecs);
- QElapsedTimer t;
- t.start();
- while (t.elapsed() < waitTime) {
- QCoreApplication::processEvents();
- if (readyToSend)
- return true;
- }
- return false;
- }
-private:
- QByteArray stringData;
- int currentPos;
- bool readyToSend;
- QTimer *dataTimer;
-};
-
-void tst_QXmlInputSource::inputFromSlowDevice() const
-{
- QString expectedData = QStringLiteral("<foo><bar>kake</bar><bar>ja</bar></foo>");
- SlowIODevice slowDevice(expectedData);
- QXmlInputSource source(&slowDevice);
- QString data;
- while (true) {
- const QChar nextChar = source.next();
- if (nextChar == QXmlInputSource::EndOfDocument)
- break;
- else if (nextChar != QXmlInputSource::EndOfData)
- data += nextChar;
- }
- QCOMPARE(data, expectedData);
-}
-
-QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
-QTEST_MAIN(tst_QXmlInputSource)
-#include "tst_qxmlinputsource.moc"
diff --git a/tests/auto/xml/sax/qxmlsimplereader/.gitattributes b/tests/auto/xml/sax/qxmlsimplereader/.gitattributes
deleted file mode 100644
index 5521239fbe..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/.gitattributes
+++ /dev/null
@@ -1,8 +0,0 @@
-encodings/doc_euc-jp.xml -crlf
-encodings/doc_utf-8.xml -crlf
-xmldocs/* -crlf
-xmldocs/*/* -crlf
-xmldocs/*/*/* -crlf
-xmldocs/*/*/*/* -crlf
-xmldocs/*/*/*/*/* -crlf
-xmldocs/*/*/*/*/*/* -crlf
diff --git a/tests/auto/xml/sax/qxmlsimplereader/.gitignore b/tests/auto/xml/sax/qxmlsimplereader/.gitignore
deleted file mode 100644
index 31b604faaf..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qxmlsimplereader
diff --git a/tests/auto/xml/sax/qxmlsimplereader/CMakeLists.txt b/tests/auto/xml/sax/qxmlsimplereader/CMakeLists.txt
deleted file mode 100644
index 504dc67ecd..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/CMakeLists.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated from qxmlsimplereader.pro.
-
-#####################################################################
-## tst_qxmlsimplereader Test:
-#####################################################################
-
-# Collect test data
-file(GLOB_RECURSE test_data_glob
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- encodings/*)
-list(APPEND test_data ${test_data_glob})
-file(GLOB_RECURSE test_data_glob
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- xmldocs/*)
-list(APPEND test_data ${test_data_glob})
-
-qt_add_test(tst_qxmlsimplereader
- SOURCES
- parser/parser.cpp parser/parser.h
- tst_qxmlsimplereader.cpp
- INCLUDE_DIRECTORIES
- parser
- PUBLIC_LIBRARIES
- Qt::Network
- Qt::Xml
- TESTDATA ${test_data}
-)
diff --git a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_little-endian.xml b/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_little-endian.xml
deleted file mode 100644
index 81f72e59e8..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_little-endian.xml
+++ /dev/null
Binary files differ
diff --git a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-16.xml b/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-16.xml
deleted file mode 100644
index 6c8622aa43..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-16.xml
+++ /dev/null
Binary files differ
diff --git a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-8.xml b/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-8.xml
deleted file mode 100644
index 402c163c5f..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/encodings/doc_utf-8.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!-- 週報サンプル -->
-<週報>
- <年月週>
- <年度>1997</年度>
- <月度>1</月度>
- <週>1</週>
- </年月週>
-
- <氏名>
- <氏>山田</氏>
- <名>太郎</名>
- </氏名>
-
- <業務報告リスト>
- <業務報告>
- <業務名>XMLエディターの作成</業務名>
- <業務コード>X3355-23</業務コード>
- <工数管理>
- <見積もり工数>1600</見積もり工数>
- <実績工数>320</実績工数>
- <当月見積もり工数>160</当月見積もり工数>
- <当月実績工数>24</当月実績工数>
- </工数管理>
- <予定項目リスト>
- <予定項目>
- <P>XMLエディターの基本仕様の作成</P>
- </予定項目>
- </予定項目リスト>
- <実施事項リスト>
- <実施事項>
- <P>XMLエディターの基本仕様の作成</P>
- </実施事項>
- <実施事項>
- <P>競合他社製品の機能調査</P>
- </実施事項>
- </実施事項リスト>
- <上長への要請事項リスト>
- <上長への要請事項>
- <P>特になし</P>
- </上長への要請事項>
- </上長への要請事項リスト>
- <問題点対策>
- <P>XMLとは何かわからない。</P>
- </問題点対策>
- </業務報告>
-
- <業務報告>
- <業務名>検索エンジンの開発</業務名>
- <業務コード>S8821-76</業務コード>
- <工数管理>
- <見積もり工数>120</見積もり工数>
- <実績工数>6</実績工数>
- <当月見積もり工数>32</当月見積もり工数>
- <当月実績工数>2</当月実績工数>
- </工数管理>
- <予定項目リスト>
- <予定項目>
- <P><A href="http://www.goo.ne.jp">goo</A>の機能を調べてみる</P>
- </予定項目>
- </予定項目リスト>
- <実施事項リスト>
- <実施事項>
- <P>更に、どういう検索エンジンがあるか調査する</P>
- </実施事項>
- </実施事項リスト>
- <上長への要請事項リスト>
- <上長への要請事項>
- <P>開発をするのはめんどうなので、Yahoo!を買収して下さい。</P>
- </上長への要請事項>
- </上長への要請事項リスト>
- <問題点対策>
- <P>検索エンジンで車を走らせることができない。(要調査)</P>
- </問題点対策>
- </業務報告>
- </業務報告リスト>
-</週報>
diff --git a/tests/auto/xml/sax/qxmlsimplereader/generate_ref_files.sh b/tests/auto/xml/sax/qxmlsimplereader/generate_ref_files.sh
deleted file mode 100755
index 9e7ca0a659..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/generate_ref_files.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-for k in `find xmldocs -name \*.xml`; do echo $k...; ./parser/parser $k; done
diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/CMakeLists.txt b/tests/auto/xml/sax/qxmlsimplereader/parser/CMakeLists.txt
deleted file mode 100644
index 6ffb17ac0f..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/parser/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# special case skip regeneration
-
-cmake_minimum_required(VERSION 3.14.0)
-
-project(Parser CXX)
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Xml)
-
-add_executable(parser)
-
-target_sources(parser PRIVATE
- main.cpp
- parser.cpp
- parser.h
-)
-
-target_link_libraries(parser PRIVATE
- Qt::Gui
- Qt::Xml
-)
diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp b/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp
deleted file mode 100644
index c5597c6f8e..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include <qfile.h>
-#include <qstring.h>
-#include <qtextstream.h>
-
-#include "parser.h"
-
-static QTextStream qerr(stderr, QIODevice::WriteOnly);
-
-static void usage()
-{
- qerr << "Usage: parse [-report-whitespace-only-chardata] [-report-start-end-entity] <in-file> [<out-file>]\n";
- exit(1);
-}
-
-int main(int argc, const char *argv[])
-{
- QString file_name;
- QString out_file_name;
- bool report_start_end_entity = false;
- bool report_whitespace_only_chardata = false;
-
- for (int i = 1 ; i < argc; ++i) {
- QString arg = QString::fromLocal8Bit(argv[i]);
- if (arg == QLatin1String("-report-whitespace-only-chardata"))
- report_whitespace_only_chardata = true;
- else if (arg == QLatin1String("-report-start-end-entity"))
- report_start_end_entity = true;
- else if (file_name.isEmpty())
- file_name = arg;
- else if (out_file_name.isEmpty())
- out_file_name = arg;
- else
- usage();
- }
-
- if (file_name.isEmpty())
- usage();
-
- QFile in_file(file_name);
- if (!in_file.open(QIODevice::ReadOnly)) {
- qerr << "Could not open " << file_name << ": " << strerror(errno) << Qt::endl;
- return 1;
- }
-
- if (out_file_name.isEmpty())
- out_file_name = file_name + ".ref";
-
- QFile out_file;
- if (out_file_name == "-") {
- out_file.open(stdout, QFile::WriteOnly);
- } else {
- out_file.setFileName(out_file_name);
- if (!out_file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
- qerr << "Could not open " << out_file_name << ": " << strerror(errno) << Qt::endl;
- return 1;
- }
- }
-
- Parser parser;
- if (report_start_end_entity)
- parser.setFeature("http://trolltech.com/xml/features/report-start-end-entity", true);
- if (report_whitespace_only_chardata)
- parser.setFeature("http://trolltech.com/xml/features/report-whitespace-only-CharData", true);
-
- parser.parseFile(&in_file);
-
- out_file.write(parser.result().toUtf8());
-
- return 0;
-}
diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp
deleted file mode 100644
index 24aa9376da..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp
+++ /dev/null
@@ -1,449 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "parser.h"
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-#include <qxml.h>
-#include <qregularexpression.h>
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-class ContentHandler : public QXmlDefaultHandler
-{
-public:
- ContentHandler();
-
- // QXmlContentHandler methods
- bool startDocument();
- bool endDocument();
- bool startElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName,
- const QXmlAttributes &atts);
- bool endElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName);
- bool characters(const QString &ch);
- void setDocumentLocator(QXmlLocator *locator);
- bool startPrefixMapping(const QString &prefix, const QString &uri);
- bool endPrefixMapping(const QString &prefix);
- bool ignorableWhitespace(const QString &ch);
- bool processingInstruction(const QString &target, const QString &data);
- bool skippedEntity(const QString &name);
-
- // QXmlErrorHandler methods
- bool warning(const QXmlParseException &exception);
- bool error(const QXmlParseException &exception);
- bool fatalError(const QXmlParseException &exception);
-
- // QXmlDTDHandler methods
- bool notationDecl(const QString &name, const QString &publicId,
- const QString &systemId);
- bool unparsedEntityDecl(const QString &name,
- const QString &publicId,
- const QString &systemId,
- const QString &notationName);
-
- // QXmlEntityResolver methods
- bool resolveEntity(const QString &publicId,
- const QString &systemId,
- QXmlInputSource *&);
-
- // QXmlLexicalHandler methods
- bool startDTD (const QString &name, const QString &publicId, const QString &systemId);
- bool endDTD();
- bool startEntity(const QString &name);
- bool endEntity(const QString &name);
- bool startCDATA();
- bool endCDATA();
- bool comment(const QString &ch);
-
- // QXmlDeclHandler methods
- bool attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value);
- bool internalEntityDecl(const QString &name, const QString &value);
- bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId);
-
-
- const QString &result() const { return m_result; }
- const QString &errorMsg() const { return m_error_msg; }
-
-private:
- QString nestPrefix() const { return QString().fill(' ', 3*m_nest); }
- QString formatAttributes(const QXmlAttributes & atts);
- QString escapeStr(const QString &s);
-
- unsigned m_nest;
- QString m_result, m_error_msg;
-};
-
-ContentHandler::ContentHandler()
-{
- m_nest = 0;
-}
-
-
-bool ContentHandler::startDocument()
-{
- m_result += nestPrefix();
- m_result += "startDocument()\n";
- ++m_nest;
- return true;
-}
-
-bool ContentHandler::endDocument()
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endDocument()\n";
- return true;
-}
-
-bool ContentHandler::startElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName,
- const QXmlAttributes &atts)
-{
- m_result += nestPrefix();
- m_result += "startElement(namespaceURI=\"" + escapeStr(namespaceURI)
- + "\", localName=\"" + escapeStr(localName)
- + "\", qName=\"" + escapeStr(qName)
- + "\", atts=[" + formatAttributes(atts) + "])\n";
- ++m_nest;
- return true;
-}
-
-QString ContentHandler::escapeStr(const QString &s)
-{
- QString result = s;
- result.replace(QChar(0), "\\0");
- result.replace("\\", "\\\\");
- result.replace("\"", "\\\"");
- result.replace("\n", "\\n");
- result.replace("\r", "\\r");
- result.replace("\t", "\\t");
- return result;
-}
-
-QString ContentHandler::formatAttributes(const QXmlAttributes &atts)
-{
- QString result;
- for (int i = 0, cnt = atts.count(); i < cnt; ++i) {
- if (i != 0) result += ", ";
- result += "{localName=\"" + escapeStr(atts.localName(i))
- + "\", qName=\"" + escapeStr(atts.qName(i))
- + "\", uri=\"" + escapeStr(atts.uri(i))
- + "\", type=\"" + escapeStr(atts.type(i))
- + "\", value=\"" + escapeStr(atts.value(i)) + "\"}";
- }
- return result;
-}
-
-bool ContentHandler::endElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName)
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endElement(namespaceURI=\"" + escapeStr(namespaceURI)
- + "\", localName=\"" + escapeStr(localName)
- + "\", qName=\"" + escapeStr(qName) + "\")\n";
- return true;
-}
-
-bool ContentHandler::characters(const QString &ch)
-{
- m_result += nestPrefix();
- m_result += "characters(ch=\"" + escapeStr(ch) + "\")\n";
- return true;
-}
-
-void ContentHandler::setDocumentLocator(QXmlLocator *locator)
-{
- m_result += nestPrefix();
- m_result += "setDocumentLocator(locator={columnNumber="
- + QString::number(locator->columnNumber())
- + ", lineNumber=" + QString::number(locator->lineNumber())
- + "})\n";
-}
-
-bool ContentHandler::startPrefixMapping (const QString &prefix, const QString & uri)
-{
- m_result += nestPrefix();
- m_result += "startPrefixMapping(prefix=\"" + escapeStr(prefix)
- + "\", uri=\"" + escapeStr(uri) + "\")\n";
- ++m_nest;
- return true;
-}
-
-bool ContentHandler::endPrefixMapping(const QString &prefix)
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endPrefixMapping(prefix=\"" + escapeStr(prefix) + "\")\n";
- return true;
-}
-
-bool ContentHandler::ignorableWhitespace(const QString & ch)
-{
- m_result += nestPrefix();
- m_result += "ignorableWhitespace(ch=\"" + escapeStr(ch) + "\")\n";
- return true;
-}
-
-bool ContentHandler::processingInstruction(const QString &target, const QString &data)
-{
- m_result += nestPrefix();
- m_result += "processingInstruction(target=\"" + escapeStr(target)
- + "\", data=\"" + escapeStr(data) + "\")\n";
- return true;
-}
-
-bool ContentHandler::skippedEntity (const QString & name)
-{
- m_result += nestPrefix();
- m_result += "skippedEntity(name=\"" + escapeStr(name) + "\")\n";
- return true;
-}
-
-bool ContentHandler::warning(const QXmlParseException & exception)
-{
- m_error_msg = QString("Warning %1:%2: %3")
- .arg(exception.columnNumber())
- .arg(exception.lineNumber())
- .arg(exception.message());
- m_result += nestPrefix();
- m_result += "warning(exception={columnNumber="
- + QString::number(exception.columnNumber())
- + ", lineNumber="
- + QString::number(exception.lineNumber())
- + ", publicId=\"" + escapeStr(exception.publicId())
- + "\", systemId=\"" + escapeStr(exception.systemId())
- + "\", message=\"" + escapeStr(exception.message())
- + "\"})\n";
- return true;
-}
-
-bool ContentHandler::error(const QXmlParseException & exception)
-{
- m_error_msg = QString("Error %1:%2: %3")
- .arg(exception.columnNumber())
- .arg(exception.lineNumber())
- .arg(exception.message());
- m_result += nestPrefix();
- m_result += "error(exception={columnNumber="
- + QString::number(exception.columnNumber())
- + ", lineNumber="
- + QString::number(exception.lineNumber())
- + ", publicId=\"" + escapeStr(exception.publicId())
- + "\", systemId=\"" + escapeStr(exception.systemId())
- + "\", message=\"" + escapeStr(exception.message())
- + "\"})\n";
- return true;
-}
-
-bool ContentHandler::fatalError(const QXmlParseException & exception)
-{
- m_error_msg = QString("Fatal error %1:%2: %3")
- .arg(exception.columnNumber())
- .arg(exception.lineNumber())
- .arg(exception.message());
- m_result += nestPrefix();
- m_result += "fatalError(exception={columnNumber="
- + QString::number(exception.columnNumber())
- + ", lineNumber="
- + QString::number(exception.lineNumber())
- + ", publicId=\"" + escapeStr(exception.publicId())
- + "\", systemId=\"" + escapeStr(exception.systemId())
- + "\", message=\"" + escapeStr(exception.message())
- + "\"})\n";
- return true;
-}
-
-bool ContentHandler::notationDecl(const QString &name,
- const QString &publicId,
- const QString &systemId )
-{
- m_result += nestPrefix();
- m_result += "notationDecl(name=\"" + escapeStr(name) + "\", publicId=\""
- + escapeStr(publicId) + "\", systemId=\""
- + escapeStr(systemId) + "\")\n";
- return true;
-}
-
-bool ContentHandler::unparsedEntityDecl(const QString &name,
- const QString &publicId,
- const QString &systemId,
- const QString &notationName )
-{
- m_result += nestPrefix();
- m_result += "unparsedEntityDecl(name=\"" + escapeStr(name)
- + "\", publicId=\"" + escapeStr(publicId)
- + "\", systemId=\"" + escapeStr(systemId)
- + "\", notationName=\"" + escapeStr(notationName)
- + "\")\n";
- return true;
-}
-
-bool ContentHandler::resolveEntity(const QString &publicId,
- const QString &systemId,
- QXmlInputSource *&)
-{
- m_result += nestPrefix();
- m_result += "resolveEntity(publicId=\"" + escapeStr(publicId)
- + "\", systemId=\"" + escapeStr(systemId)
- + "\", ret={})\n";
- return true;
-}
-
-bool ContentHandler::startDTD ( const QString & name, const QString & publicId, const QString & systemId )
-{
- m_result += nestPrefix();
- m_result += "startDTD(name=\"" + escapeStr(name)
- + "\", publicId=\"" + escapeStr(publicId)
- + "\", systemId=\"" + escapeStr(systemId) + "\")\n";
- ++m_nest;
- return true;
-}
-
-bool ContentHandler::endDTD ()
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endDTD()\n";
- return true;
-}
-
-bool ContentHandler::startEntity ( const QString & name )
-{
- m_result += nestPrefix();
- m_result += "startEntity(name=\"" + escapeStr(name) + "\")\n";
- ++m_nest;
- return true;
-}
-
-bool ContentHandler::endEntity ( const QString & name )
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endEntity(name=\"" + escapeStr(name) + "\")\n";
- return true;
-}
-
-bool ContentHandler::startCDATA ()
-{
- m_result += nestPrefix();
- m_result += "startCDATA()\n";
- ++m_nest;
- return true;
-}
-
-bool ContentHandler::endCDATA ()
-{
- --m_nest;
- m_result += nestPrefix();
- m_result += "endCDATA()\n";
- return true;
-}
-
-bool ContentHandler::comment ( const QString & ch )
-{
- m_result += nestPrefix();
- m_result += "comment(ch=\"" + escapeStr(ch) + "\")\n";
- return true;
-}
-
-bool ContentHandler::attributeDecl(const QString &eName,
- const QString &aName,
- const QString &type,
- const QString &valueDefault,
- const QString &value)
-{
- m_result += nestPrefix();
- m_result += "attributeDecl(eName=\"" + escapeStr(eName) + "\", aName=\""
- + escapeStr(aName) + "\", type=\"" + escapeStr(type)
- + "\", valueDefault=\"" + escapeStr(valueDefault)
- + "\", value=\"" + escapeStr(value) + "\")\n";
- return true;
-}
-
-bool ContentHandler::internalEntityDecl(const QString &name,
- const QString &value)
-{
- m_result += nestPrefix();
- m_result += "internatlEntityDecl(name=\"" + escapeStr(name)
- + "\", value=\"" + escapeStr(value) + "\")\n";
- return true;
-}
-
-bool ContentHandler::externalEntityDecl(const QString &name,
- const QString &publicId,
- const QString &systemId)
-{
- m_result += nestPrefix();
- m_result += "externalEntityDecl(name=\"" + escapeStr(name)
- + "\", publicId=\"" + escapeStr(publicId)
- + "\", systemId=\"" + escapeStr(systemId) + "\")\n";
- return true;
-}
-
-Parser::Parser()
-{
- handler = new ContentHandler;
- setContentHandler(handler);
- setDTDHandler(handler);
- setDeclHandler(handler);
- setEntityResolver(handler);
- setErrorHandler(handler);
- setLexicalHandler(handler);
-}
-
-Parser::~Parser()
-{
- delete handler;
-}
-
-bool Parser::parseFile(QFile *file)
-{
- QXmlInputSource source(file);
- return parse(source);
-}
-
-QString Parser::result() const
-{
- return handler->result();
-}
-
-QString Parser::errorMsg() const
-{
- return handler->errorMsg();
-}
-
-QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(5, 15)
diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h
deleted file mode 100644
index eed4c7517e..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef PARSER_H
-#define PARSER_H
-
-#include <qglobal.h>
-
-QT_WARNING_DISABLE_DEPRECATED
-
-#if QT_DEPRECATED_SINCE(5, 15)
-
-#include <qfile.h>
-#include <qstring.h>
-#include <qxml.h>
-
-class ContentHandler;
-
-class Parser : public QXmlSimpleReader
-{
-public:
- Parser();
- ~Parser();
-
- bool parseFile(QFile *file);
- QString result() const;
- QString errorMsg() const;
-
-private:
- ContentHandler *handler;
-};
-
-#endif // QT_DEPRECATED_SINCE(5, 15)
-
-#endif
diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.pro b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.pro
deleted file mode 100644
index f801200942..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.pro
+++ /dev/null
@@ -1,4 +0,0 @@
-QT += xml
-
-HEADERS += parser.h
-SOURCES += main.cpp parser.cpp
diff --git a/tests/auto/xml/sax/qxmlsimplereader/qxmlsimplereader.pro b/tests/auto/xml/sax/qxmlsimplereader/qxmlsimplereader.pro
deleted file mode 100644
index 349b976f58..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/qxmlsimplereader.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qxmlsimplereader
-INCLUDEPATH += parser
-
-HEADERS += parser/parser.h
-SOURCES += tst_qxmlsimplereader.cpp parser/parser.cpp
-
-CONFIG += no_batch
-QT = core network xml testlib
-
-TESTDATA += encodings/* xmldocs/*
diff --git a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp
deleted file mode 100644
index 6375a44983..0000000000
--- a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp
+++ /dev/null
@@ -1,824 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QDomDocument>
-#include <qthread.h>
-#include <qtcpserver.h>
-#include <qtcpsocket.h>
-#include <QtTest/QtTest>
-#include <QtCore/qatomic.h>
-#include <QtCore/qsemaphore.h>
-#include <qfile.h>
-#include <qstring.h>
-#include <qdir.h>
-#include <qbuffer.h>
-#include "parser/parser.h"
-
-static const char *const inputString = "<!DOCTYPE inferno [<!ELEMENT inferno (circle+)><!ELEMENT circle (#PCDATA)>]><inferno><circle /><circle /></inferno>";
-static const char *const refString = "setDocumentLocator(locator={columnNumber=1, lineNumber=1})\nstartDocument()\nstartDTD(name=\"inferno\", publicId=\"\", systemId=\"\")\nendDTD()\nstartElement(namespaceURI=\"\", localName=\"inferno\", qName=\"inferno\", atts=[])\nstartElement(namespaceURI=\"\", localName=\"circle\", qName=\"circle\", atts=[])\nendElement(namespaceURI=\"\", localName=\"circle\", qName=\"circle\")\nstartElement(namespaceURI=\"\", localName=\"circle\", qName=\"circle\", atts=[])\nendElement(namespaceURI=\"\", localName=\"circle\", qName=\"circle\")\nendElement(namespaceURI=\"\", localName=\"inferno\", qName=\"inferno\")\nendDocument()\n";
-
-#define TEST_PORT 1088
-
-class XmlServer : public QThread
-{
- Q_OBJECT
-public:
- XmlServer(QObject *parent = 0) : QThread(parent) {}
-
- QSemaphore threadStarted;
- bool listening = false;
- QAtomicInt quitSoon;
-
-protected:
- virtual void run();
-};
-
-#define CHUNK_SIZE 2048
-
-void XmlServer::run()
-{
- QTcpServer srv;
-
- listening = srv.listen(QHostAddress::Any, TEST_PORT);
- threadStarted.release();
-
- if (!listening) {
- qWarning() << "Failed to listen on" << TEST_PORT << srv.errorString();
- return;
- }
-
- for (;;) {
- srv.waitForNewConnection(100);
-
- if (QTcpSocket *sock = srv.nextPendingConnection()) {
- QByteArray fileName;
- for (;;) {
- char c;
- if (sock->getChar(&c)) {
- if (c == '\n')
- break;
- fileName.append(c);
- } else {
- if (!sock->waitForReadyRead(-1))
- break;
- }
- }
-
- QFile file(QString::fromLocal8Bit(fileName));
- if (!file.open(QIODevice::ReadOnly)) {
- qWarning() << "XmlServer::run(): could not open" << fileName;
- sock->abort();
- delete sock;
- continue;
- }
-
- QByteArray data = file.readAll();
- for (int i = 0; i < data.size();) {
- int cnt = qMin(CHUNK_SIZE, d