diff --git a/.gitmodules b/.gitmodules index dbca4703..01c08226 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "testdata"] - path = html5lib/tests/testdata + path = tests/testdata url = https://github.com/html5lib/html5lib-tests.git diff --git a/.pytest.expect b/.pytest.expect index 22cf51bb..58eacffe 100644 --- a/.pytest.expect +++ b/.pytest.expect @@ -1,1323 +1,1323 @@ pytest-expect file v1 (2, 7, 18, 'final', 0) -b'html5lib/tests/test_encoding.py::test_parser_encoding[\\n-iso-8859-2]': FAIL -b'html5lib/tests/test_encoding.py::test_prescan_encoding[\\n-iso-8859-2]': FAIL -u'html5lib/tests/testdata/tokenizer/domjs.test::4::cdataSectionState': FAIL -u'html5lib/tests/testdata/tokenizer/test2.test::0::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::280::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::283::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::284::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::286::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::287::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::289::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::292::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::293::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::295::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::296::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::298::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::310::dataState': FAIL -u'html5lib/tests/testdata/tokenizer/test3.test::718::dataState': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/adoption01.dat::17::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/blocks.dat::12::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::1::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::2::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/isindex.dat::3::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/adoption01.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/ark.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/scripted/webkit01.dat::1::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::0::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::100::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::101::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::102::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::103::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::104::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::105::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::106::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::107::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::10::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::11::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::12::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::13::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::14::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::15::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::16::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::17::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::18::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::19::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::1::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::20::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::21::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::22::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::23::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::24::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::25::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::26::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::27::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::28::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::29::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::2::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::30::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::31::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::32::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::33::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::34::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::35::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::36::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::37::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::38::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::3::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::40::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::41::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::42::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::43::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::44::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::45::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::46::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::47::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::48::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::49::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::4::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::50::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::51::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::52::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::53::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::54::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::55::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::56::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::57::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::58::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::59::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::5::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::60::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::61::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::62::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::63::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::64::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::65::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::66::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::67::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::68::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::69::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::6::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::70::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::71::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::72::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::73::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::74::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::75::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::76::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::77::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::78::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::79::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::80::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::81::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::82::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::83::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::84::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::85::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::86::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::87::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::88::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::89::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::8::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::90::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::91::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::92::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::93::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::94::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::95::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::96::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::97::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::98::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::99::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/template.dat::9::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::4::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::5::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::6::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests18.dat::15::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::14::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::17::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::7::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests8.dat::5::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::void-namespace': FAIL +b'tests/test_encoding.py::test_parser_encoding[\\n-iso-8859-2]': FAIL +b'tests/test_encoding.py::test_prescan_encoding[\\n-iso-8859-2]': FAIL +u'tests/testdata/tokenizer/domjs.test::4::cdataSectionState': FAIL +u'tests/testdata/tokenizer/test2.test::0::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::280::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::283::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::284::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::286::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::287::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::289::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::292::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::293::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::295::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::296::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::298::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::310::dataState': FAIL +u'tests/testdata/tokenizer/test3.test::718::dataState': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/adoption01.dat::17::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/blocks.dat::12::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::1::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::2::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/isindex.dat::3::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::10::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::12::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::15::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::17::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::1::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::20::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::2::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::3::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::5::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/ruby.dat::7::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/adoption01.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/ark.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/scripted/webkit01.dat::1::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::0::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::0::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::0::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::0::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::0::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::0::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::0::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::0::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::100::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::100::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::100::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::100::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::100::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::100::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::100::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::100::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::101::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::101::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::101::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::101::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::101::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::101::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::101::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::101::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::102::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::102::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::102::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::102::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::102::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::102::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::102::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::102::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::103::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::103::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::103::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::103::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::103::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::103::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::103::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::103::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::104::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::104::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::104::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::104::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::104::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::104::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::104::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::104::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::105::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::105::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::105::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::105::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::105::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::105::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::105::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::105::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::106::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::106::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::106::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::106::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::106::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::106::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::106::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::106::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::107::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::107::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::107::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::107::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::107::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::107::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::107::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::107::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::10::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::10::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::10::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::10::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::10::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::10::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::10::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::10::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::11::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::11::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::11::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::11::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::11::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::11::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::11::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::11::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::12::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::12::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::12::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::12::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::12::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::12::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::12::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::12::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::13::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::13::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::13::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::13::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::13::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::13::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::13::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::13::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::14::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::14::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::14::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::14::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::14::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::14::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::14::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::14::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::15::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::15::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::15::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::15::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::15::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::15::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::15::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::15::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::16::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::16::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::16::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::16::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::16::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::16::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::16::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::16::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::17::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::17::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::17::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::17::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::17::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::17::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::17::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::17::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::18::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::18::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::18::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::18::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::18::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::18::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::18::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::18::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::19::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::19::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::19::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::19::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::19::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::19::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::19::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::19::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::1::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::1::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::1::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::1::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::1::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::1::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::1::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::1::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::20::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::20::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::20::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::20::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::20::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::20::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::20::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::20::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::21::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::21::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::21::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::21::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::21::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::21::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::21::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::21::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::22::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::22::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::22::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::22::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::22::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::22::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::22::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::22::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::23::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::23::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::23::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::23::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::23::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::23::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::23::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::23::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::24::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::24::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::24::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::24::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::24::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::24::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::24::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::24::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::25::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::25::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::25::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::25::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::25::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::25::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::25::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::25::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::26::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::26::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::26::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::26::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::26::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::26::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::26::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::26::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::27::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::27::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::27::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::27::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::27::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::27::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::27::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::27::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::28::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::28::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::28::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::28::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::28::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::28::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::28::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::28::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::29::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::29::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::29::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::29::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::29::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::29::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::29::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::29::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::2::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::2::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::2::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::2::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::2::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::2::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::2::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::2::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::30::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::30::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::30::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::30::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::30::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::30::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::30::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::30::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::31::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::31::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::31::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::31::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::31::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::31::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::31::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::31::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::32::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::32::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::32::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::32::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::32::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::32::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::32::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::32::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::33::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::33::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::33::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::33::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::33::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::33::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::33::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::33::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::34::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::34::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::34::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::34::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::34::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::34::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::34::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::34::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::35::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::35::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::35::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::35::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::35::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::35::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::35::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::35::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::36::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::36::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::36::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::36::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::36::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::36::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::36::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::36::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::37::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::37::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::37::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::37::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::37::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::37::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::37::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::37::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::38::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::38::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::38::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::38::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::38::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::38::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::38::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::38::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::3::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::3::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::3::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::3::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::3::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::3::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::3::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::3::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::40::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::40::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::40::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::40::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::40::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::40::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::40::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::40::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::41::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::41::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::41::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::41::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::41::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::41::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::41::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::41::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::42::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::42::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::42::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::42::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::42::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::42::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::42::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::42::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::43::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::43::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::43::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::43::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::43::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::43::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::43::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::43::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::44::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::44::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::44::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::44::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::44::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::44::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::44::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::44::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::45::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::45::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::45::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::45::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::45::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::45::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::45::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::45::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::46::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::46::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::46::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::46::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::46::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::46::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::46::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::46::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::47::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::47::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::47::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::47::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::47::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::47::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::47::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::47::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::48::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::48::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::48::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::48::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::48::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::48::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::48::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::48::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::49::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::49::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::49::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::49::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::49::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::49::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::49::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::49::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::4::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::4::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::4::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::4::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::4::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::4::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::4::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::4::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::50::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::50::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::50::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::50::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::50::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::50::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::50::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::50::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::51::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::51::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::51::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::51::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::51::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::51::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::51::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::51::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::52::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::52::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::52::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::52::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::52::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::52::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::52::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::52::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::53::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::53::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::53::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::53::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::53::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::53::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::53::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::53::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::54::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::54::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::54::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::54::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::54::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::54::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::54::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::54::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::55::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::55::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::55::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::55::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::55::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::55::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::55::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::55::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::56::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::56::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::56::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::56::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::56::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::56::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::56::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::56::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::57::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::57::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::57::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::57::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::57::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::57::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::57::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::57::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::58::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::58::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::58::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::58::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::58::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::58::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::58::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::58::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::59::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::59::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::59::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::59::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::59::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::59::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::59::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::59::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::5::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::5::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::5::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::5::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::5::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::5::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::5::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::5::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::60::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::60::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::60::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::60::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::60::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::60::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::60::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::60::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::61::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::61::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::61::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::61::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::61::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::61::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::61::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::61::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::62::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::62::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::62::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::62::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::62::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::62::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::62::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::62::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::63::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::63::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::63::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::63::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::63::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::63::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::63::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::63::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::64::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::64::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::64::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::64::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::64::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::64::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::64::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::64::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::65::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::65::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::65::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::65::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::65::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::65::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::65::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::65::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::66::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::66::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::66::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::66::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::66::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::66::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::66::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::66::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::67::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::67::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::67::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::67::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::67::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::67::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::67::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::67::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::68::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::68::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::68::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::68::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::68::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::68::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::68::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::68::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::69::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::69::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::69::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::69::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::69::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::69::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::69::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::69::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::6::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::6::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::6::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::6::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::6::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::6::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::6::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::6::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::70::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::70::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::70::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::70::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::70::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::70::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::70::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::70::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::71::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::71::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::71::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::71::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::71::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::71::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::71::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::71::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::72::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::72::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::72::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::72::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::72::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::72::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::72::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::72::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::73::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::73::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::73::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::73::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::73::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::73::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::73::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::73::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::74::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::74::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::74::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::74::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::74::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::74::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::74::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::74::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::75::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::75::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::75::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::75::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::75::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::75::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::75::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::75::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::76::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::76::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::76::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::76::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::76::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::76::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::76::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::76::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::77::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::77::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::77::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::77::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::77::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::77::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::77::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::77::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::78::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::78::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::78::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::78::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::78::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::78::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::78::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::78::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::79::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::79::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::79::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::79::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::79::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::79::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::79::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::79::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::80::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::80::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::80::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::80::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::80::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::80::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::80::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::80::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::81::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::81::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::81::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::81::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::81::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::81::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::81::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::81::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::82::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::82::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::82::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::82::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::82::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::82::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::82::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::82::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::83::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::83::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::83::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::83::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::83::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::83::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::83::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::83::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::84::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::84::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::84::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::84::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::84::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::84::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::84::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::84::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::85::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::85::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::85::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::85::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::85::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::85::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::85::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::85::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::86::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::86::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::86::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::86::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::86::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::86::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::86::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::86::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::87::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::87::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::87::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::87::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::87::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::87::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::87::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::87::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::88::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::88::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::88::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::88::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::88::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::88::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::88::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::88::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::89::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::89::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::89::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::89::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::89::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::89::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::89::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::89::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::8::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::8::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::8::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::8::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::8::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::8::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::8::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::8::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::90::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::90::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::90::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::90::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::90::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::90::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::90::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::90::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::91::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::91::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::91::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::91::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::91::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::91::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::91::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::91::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::92::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::92::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::92::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::92::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::92::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::92::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::92::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::92::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::93::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::93::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::93::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::93::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::93::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::93::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::93::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::93::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::94::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::94::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::94::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::94::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::94::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::94::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::94::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::94::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::95::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::95::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::95::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::95::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::95::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::95::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::95::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::95::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::96::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::96::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::96::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::96::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::96::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::96::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::96::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::96::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::97::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::97::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::97::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::97::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::97::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::97::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::97::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::97::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::98::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::98::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::98::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::98::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::98::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::98::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::98::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::98::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::99::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::99::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::99::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::99::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::99::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::99::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::99::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::99::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::9::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::9::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::9::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::9::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::9::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::9::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/template.dat::9::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/template.dat::9::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::2::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::4::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::5::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests11.dat::6::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests18.dat::15::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::14::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::17::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests19.dat::7::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::6::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests2.dat::7::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests25.dat::7::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/tests8.dat::5::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::void-namespace': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::namespaced': FAIL +u'tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::void-namespace': FAIL diff --git a/MANIFEST.in b/MANIFEST.in index 4b3ffe3e..d022bf16 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -7,4 +7,5 @@ include .pytest.expect include tox.ini include pytest.ini graft html5lib/tests/testdata +recursive-include html5lib *.pxd recursive-include html5lib/tests *.py diff --git a/benchmarks/bench_html.py b/benchmarks/bench_html.py index cfe53c67..7639ec19 100644 --- a/benchmarks/bench_html.py +++ b/benchmarks/bench_html.py @@ -4,7 +4,7 @@ import pyperf -sys.path[0:0] = [os.path.join(os.path.dirname(__file__), "..")] +#sys.path[0:0] = [os.path.join(os.path.dirname(__file__), "..")] import html5lib # noqa: E402 @@ -49,9 +49,9 @@ def add_cmdline_args(cmd, args): source = io.BytesIO(fh.read()) if "parse" in benchmarks: - for tb in ("etree", "dom", "lxml"): + for tb in ("etree",): runner.bench_func("html_parse_%s" % tb, bench_parse, source, tb) - if "serialize" in benchmarks: - for tb in ("etree", "dom", "lxml"): - runner.bench_time_func("html_serialize_%s" % tb, bench_serialize, source, tb) + # if "serialize" in benchmarks: + # for tb in ("etree",): + # runner.bench_time_func("html_serialize_%s" % tb, bench_serialize, source, tb) diff --git a/benchmarks/bench_wpt.py b/benchmarks/bench_wpt.py index d5da0069..0efcff9f 100644 --- a/benchmarks/bench_wpt.py +++ b/benchmarks/bench_wpt.py @@ -4,7 +4,7 @@ import pyperf -sys.path[0:0] = [os.path.join(os.path.dirname(__file__), "..")] +#sys.path[0:0] = [os.path.join(os.path.dirname(__file__), "..")] import html5lib # noqa: E402 diff --git a/html5lib/_ascii.py b/html5lib/_ascii.py new file mode 100644 index 00000000..e9200fbe --- /dev/null +++ b/html5lib/_ascii.py @@ -0,0 +1,5 @@ +from .constants import asciiUpper2Lower + + +def ascii_lower(s): + return s.translate(asciiUpper2Lower) diff --git a/html5lib/_inputstream.pxd b/html5lib/_inputstream.pxd new file mode 100644 index 00000000..fef259a5 --- /dev/null +++ b/html5lib/_inputstream.pxd @@ -0,0 +1,109 @@ +# cython: language_level=3 +cimport cython +from cpython cimport array + +ctypedef void (*rCEf)(HTMLUnicodeInputStream, unicode) except * + +cdef dict charsUntilCache + +cdef class BufferedStream(object): + cdef object stream + cdef object buffer + cdef object position + cpdef object tell(self) + cpdef object seek(self, object pos) + cpdef object read(self, object bytes) + cdef object _bufferedBytes(self) + cdef object _readStream(self, object bytes) + cdef object _readFromBuffer(self, object bytes) + +#def HTMLInputStream(source, object **kwargs) + +cdef class HTMLUnicodeInputStream(object): + cdef rCEf reportCharacterErrors + cdef object newLines + cdef readonly object charEncoding + cdef object dataStream + cdef unicode chunk + cdef Py_ssize_t chunkSize + cdef Py_ssize_t chunkOffset + cdef readonly list errors + + # number of (complete) lines in previous chunks + cdef Py_ssize_t prevNumLines + # number of columns in the last line of the previous chunk + cdef Py_ssize_t prevNumCols + + # Deal with CR LF and surrogates split over chunk boundaries + cdef unicode _bufferedCharacter + + cdef object reset(self) + cdef object openStream(self, object source) + + @cython.locals(nLines=Py_ssize_t, lastLinePos=Py_ssize_t) + cdef tuple _position(self, Py_ssize_t offset) + cpdef tuple position(self) + + @cython.locals(chunkOffset=Py_ssize_t, char=unicode) + cpdef unicode char(self) + + @cython.locals(data=unicode) + cdef bint readChunk(self, Py_ssize_t chunkSize=?) except? -1 + + @cython.locals(c=ulong) + cdef void characterErrorsUCS4(self, unicode data) except * + cdef void characterErrorsUCS2(self, unicode data) except * + + cpdef object charsUntil(self, object characters, bint opposite=?) + cpdef object unget(self, object char) + +cdef class HTMLBinaryInputStream(HTMLUnicodeInputStream): + cdef object rawStream + cdef readonly object numBytesMeta + cdef readonly object numBytesChardet + cdef object override_encoding + cdef object transport_encoding + cdef object same_origin_parent_encoding + cdef object likely_encoding + cdef object default_encoding + cdef object reset(self) + cdef object openStream(self, object source) + cdef object determineEncoding(self, object chardet=?) + cpdef object changeEncoding(self, object newEncoding) + @cython.locals(string=bytes) + cdef object detectBOM(self) + cdef object detectEncodingMeta(self) + +# cdef class EncodingBytes(bytes): +# cdef object previous(self) +# cdef object setPosition(self, object position) +# cdef object getPosition(self) +# cdef object getCurrentByte(self) +# cdef object skip(self, object chars=?) +# cdef object skipUntil(self, object chars) +# cdef object matchBytes(self, object bytes) +# cdef object jumpTo(self, object bytes) + +ctypedef bint (*encstate)(EncodingParser) except? -1 + +cdef class EncodingParser(object): + cdef object data + cdef object encoding + + @cython.locals(func=encstate, keepParsing=bint) + cdef object getEncoding(self) + cdef bint handleComment(self) except? -1 + @cython.locals(hasPragma=bint, name=bytes, value=bytes, tentativeEncoding=bytes) + cdef bint handleMeta(self) except? -1 + cdef bint handlePossibleStartTag(self) except? -1 + cdef bint handlePossibleEndTag(self) except? -1 + cdef bint handlePossibleTag(self, bint endTag) except? -1 + cdef bint handleOther(self) except? -1 + @cython.locals(c=bytes) + cdef tuple getAttribute(self) + +cdef class ContentAttrParser(object): + cdef object data + cpdef object parse(self) # this needs to be cpdef for tests + +cdef object lookupEncoding(object encoding) diff --git a/html5lib/_inputstream.py b/html5lib/_inputstream.py index 0207dd21..ab4efd14 100644 --- a/html5lib/_inputstream.py +++ b/html5lib/_inputstream.py @@ -3,10 +3,12 @@ from six import text_type from six.moves import http_client, urllib +import array import codecs import re from io import BytesIO, StringIO +import cython import webencodings from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase @@ -45,7 +47,7 @@ ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005C\u005B-\u0060\u007B-\u007E]") # Cache for charsUntil() -charsUntilRegEx = {} +charsUntilCache = {} class BufferedStream(object): @@ -145,6 +147,27 @@ def HTMLInputStream(source, **kwargs): return HTMLBinaryInputStream(source, **kwargs) +if cython.compiled: + @cython.cfunc + @cython.inline + @cython.returns(cython.ulong) + @cython.exceptval(check=False) + @cython.locals(c=cython.uchar) + @cython.cdivision(True) + def index(c): + return c // (cython.sizeof(cython.ulong) * 8) + + @cython.cfunc + @cython.inline + @cython.returns(cython.ulong) + @cython.exceptval(check=False) + @cython.locals(c=cython.uchar) + @cython.cdivision(True) + def bit(c): + return cython.cast(cython.ulong, 1) << (c % (cython.sizeof(cython.ulong) * 8)) + + + class HTMLUnicodeInputStream(object): """Provides a unicode stream of characters to the HTMLTokenizer. @@ -173,7 +196,10 @@ def __init__(self, source): if not _utils.supports_lone_surrogates: # Such platforms will have already checked for such # surrogate errors, so no need to do this checking. - self.reportCharacterErrors = None + if cython.compiled: + self.reportCharacterErrors = cython.cast(rCEf, cython.NULL) + else: + self.reportCharacterErrors = None elif len("\U0010FFFF") == 1: self.reportCharacterErrors = self.characterErrorsUCS4 else: @@ -231,6 +257,8 @@ def position(self): line, col = self._position(self.chunkOffset) return (line + 1, col) + @cython.boundscheck(False) + @cython.wraparound(False) def char(self): """ Read one character from the stream or queue if available. Return EOF when EOF is reached. @@ -246,8 +274,8 @@ def char(self): return char - def readChunk(self, chunkSize=None): - if chunkSize is None: + def readChunk(self, chunkSize=0): + if chunkSize == 0: chunkSize = self._defaultChunkSize self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) @@ -273,7 +301,10 @@ def readChunk(self, chunkSize=None): data = data[:-1] if self.reportCharacterErrors: - self.reportCharacterErrors(data) + if cython.compiled: + self.reportCharacterErrors(self, data) + else: + self.reportCharacterErrors(data) # Replace invalid characters data = data.replace("\r\n", "\n") @@ -285,8 +316,19 @@ def readChunk(self, chunkSize=None): return True def characterErrorsUCS4(self, data): - for _ in range(len(invalid_unicode_re.findall(data))): - self.errors.append("invalid-codepoint") + if cython.compiled: + for c in data: + if (0x0001 <= c <= 0x0008 or + c == 0x000B or + 0x000E <= c <= 0x001F or + 0x007F <= c <= 0x009F or + 0xD800 <= c <= 0xDFFF or + 0xFDD0 <= c <= 0xFDEF or + (c & 0xFFFE) == 0xFFFE): + self.errors.append("invalid-codepoint") + else: + for _ in range(len(invalid_unicode_re.findall(data))): + self.errors.append("invalid-codepoint") def characterErrorsUCS2(self, data): # Someone picked the wrong compile option @@ -318,45 +360,98 @@ def charsUntil(self, characters, opposite=False): characters. """ - # Use a cache of regexps to find the required characters - try: - chars = charsUntilRegEx[(characters, opposite)] - except KeyError: - if __debug__: + if cython.compiled: + a_len = cython.declare(Py_ssize_t, index(0x7F) + 1) + bitmap = cython.declare(cython.p_ulong) + a = cython.declare(array.array) + c = cython.declare(cython.Py_UCS4) + + try: + a = charsUntilCache[characters] + except KeyError: + a = array.array('L') + array.resize(a, a_len) + array.zero(a) + bitmap = a.data.as_ulongs + for c in characters: - assert(ord(c) < 128) - regex = "".join(["\\x%02x" % ord(c) for c in characters]) - if not opposite: - regex = "^%s" % regex - chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) + assert c <= 0x7F + bitmap[index(c)] |= bit(c) - rv = [] + charsUntilCache[characters] = a + else: + bitmap = a.data.as_ulongs + + # we deal with opposite here as it means we can cache purely based + # on the pre-existing characters object and not construct a tuple + # to also cache on opposite; the below code is much quicker than + # constructing a tuple (it'll typically compile to around a dozen + # instructions!) + if opposite: + # this is often too long, but Cython won't let us call sizeof in Pure Python mode + new_bitmap = cython.declare(cython.ulong[4]) + for i in range(a_len): + new_bitmap[i] = ~bitmap[i] + bitmap = cython.cast(cython.p_ulong, cython.address(new_bitmap)) + + cyrv = "" - while True: - # Find the longest matching prefix - m = chars.match(self.chunk, self.chunkOffset) - if m is None: - # If nothing matched, and it wasn't because we ran out of chunk, - # then stop - if self.chunkOffset != self.chunkSize: + while True: + # this really should be a slice of self.chunk, but https://github.com/cython/cython/issues/3536 + for i in range(self.chunkOffset, self.chunkSize): + with cython.boundscheck(False), cython.wraparound(False): + c = self.chunk[i] + if c > 0x7F and opposite or c <= 0x7F and (bitmap[index(c)] & bit(c)): + cyrv += self.chunk[self.chunkOffset:i] + self.chunkOffset = i + return cyrv + + cyrv += self.chunk[self.chunkOffset:] + if not self.readChunk(): break - else: - end = m.end() - # If not the whole chunk matched, return everything - # up to the part that didn't match - if end != self.chunkSize: - rv.append(self.chunk[self.chunkOffset:end]) - self.chunkOffset = end + + return cyrv + + else: + # Use a cache of regexps to find the required characters + try: + chars = charsUntilCache[(characters, opposite)] + except KeyError: + if __debug__: + for c in characters: + assert(ord(c) < 128) + regex = "".join(["\\x%02x" % ord(c) for c in characters]) + if not opposite: + regex = "^%s" % regex + chars = charsUntilCache[(characters, opposite)] = re.compile("[%s]+" % regex) + + rv = [] + + while True: + # Find the longest matching prefix + m = chars.match(self.chunk, self.chunkOffset) + if m is None: + # If nothing matched, and it wasn't because we ran out of chunk, + # then stop + if self.chunkOffset != self.chunkSize: + break + else: + end = m.end() + # If not the whole chunk matched, return everything + # up to the part that didn't match + if end != self.chunkSize: + rv.append(self.chunk[self.chunkOffset:end]) + self.chunkOffset = end + break + # If the whole remainder of the chunk matched, + # use it all and read the next chunk + rv.append(self.chunk[self.chunkOffset:]) + if not self.readChunk(): + # Reached EOF break - # If the whole remainder of the chunk matched, - # use it all and read the next chunk - rv.append(self.chunk[self.chunkOffset:]) - if not self.readChunk(): - # Reached EOF - break - r = "".join(rv) - return r + r = "".join(rv) + return r def unget(self, char): # Only one character is allowed to be ungotten at once - it must @@ -611,12 +706,8 @@ def previous(self): self._position = p = p - 1 return self[p:p + 1] - def setPosition(self, position): - if self._position >= len(self): - raise StopIteration - self._position = position - - def getPosition(self): + @property + def position(self): if self._position >= len(self): raise StopIteration if self._position >= 0: @@ -624,13 +715,16 @@ def getPosition(self): else: return None - position = property(getPosition, setPosition) + @position.setter + def position(self, position): + if self._position >= len(self): + raise StopIteration + self._position = position - def getCurrentByte(self): + @property + def currentByte(self): return self[self.position:self.position + 1] - currentByte = property(getCurrentByte) - def skip(self, chars=spaceCharactersBytes): """Skip past a list of characters""" p = self.position # use property for the error-checking @@ -660,7 +754,7 @@ def matchBytes(self, bytes): match. Otherwise return False and leave the position alone""" rv = self.startswith(bytes, self.position) if rv: - self.position += len(bytes) + self._position += len(bytes) return rv def jumpTo(self, bytes): @@ -685,27 +779,36 @@ def getEncoding(self): if b"= (3, 7): +if cython.compiled: + @cython.cfunc + @cython.inline + def attributeMap(): + if version.PY_VERSION_HEX >= 0x03070000: + return {} + else: + return OrderedDict() +elif version_info >= (3, 7): attributeMap = dict else: attributeMap = OrderedDict @@ -30,7 +43,7 @@ class HTMLTokenizer(object): * self.currentToken Holds the token that is currently being processed. - * self.state + * self._state Holds a reference to the method to be invoked... XXX * self.stream @@ -43,13 +56,11 @@ def __init__(self, stream, parser=None, **kwargs): self.parser = parser # Setup the initial tokenizer state - self.escapeFlag = False - self.lastFourChars = [] - self.state = self.dataState - self.escape = False + self._state = self.dataState # The current token being created self.currentToken = None + self.currentAttribute = None super(HTMLTokenizer, self).__init__() def __iter__(self): @@ -60,13 +71,180 @@ def __iter__(self): is requested. """ self.tokenQueue = deque([]) - # Start processing. When EOF is reached self.state will return False + # Start processing. When EOF is reached self._state will return False # instead of True and the loop will terminate. - while self.state(): - while self.stream.errors: - yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} - while self.tokenQueue: - yield self.tokenQueue.popleft() + if cython.compiled: + with cython.binding(False): + while self._state(self): + while self.stream.errors: + yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} + while self.tokenQueue: + yield self.tokenQueue.popleft() + else: + while self._state(): + while self.stream.errors: + yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} + while self.tokenQueue: + yield self.tokenQueue.popleft() + + @property + def state(self): + if cython.compiled: + if self._state == self.dataState: + return "dataState" + elif self._state == self.entityDataState: + return "entityDataState" + elif self._state == self.rcdataState: + return "rcdataState" + elif self._state == self.characterReferenceInRcdata: + return "characterReferenceInRcdata" + elif self._state == self.rawtextState: + return "rawtextState" + elif self._state == self.scriptDataState: + return "scriptDataState" + elif self._state == self.plaintextState: + return "plaintextState" + elif self._state == self.tagOpenState: + return "tagOpenState" + elif self._state == self.closeTagOpenState: + return "closeTagOpenState" + elif self._state == self.tagNameState: + return "tagNameState" + elif self._state == self.rcdataLessThanSignState: + return "rcdataLessThanSignState" + elif self._state == self.rcdataEndTagOpenState: + return "rcdataEndTagOpenState" + elif self._state == self.rcdataEndTagNameState: + return "rcdataEndTagNameState" + elif self._state == self.rawtextLessThanSignState: + return "rawtextLessThanSignState" + elif self._state == self.rawtextEndTagOpenState: + return "rawtextEndTagOpenState" + elif self._state == self.rawtextEndTagNameState: + return "rawtextEndTagNameState" + elif self._state == self.scriptDataLessThanSignState: + return "scriptDataLessThanSignState" + elif self._state == self.scriptDataEndTagOpenState: + return "scriptDataEndTagOpenState" + elif self._state == self.scriptDataEndTagNameState: + return "scriptDataEndTagNameState" + elif self._state == self.scriptDataEscapeStartState: + return "scriptDataEscapeStartState" + elif self._state == self.scriptDataEscapeStartDashState: + return "scriptDataEscapeStartDashState" + elif self._state == self.scriptDataEscapedState: + return "scriptDataEscapedState" + elif self._state == self.scriptDataEscapedDashState: + return "scriptDataEscapedDashState" + elif self._state == self.scriptDataEscapedDashDashState: + return "scriptDataEscapedDashDashState" + elif self._state == self.scriptDataEscapedLessThanSignState: + return "scriptDataEscapedLessThanSignState" + elif self._state == self.scriptDataEscapedEndTagOpenState: + return "scriptDataEscapedEndTagOpenState" + elif self._state == self.scriptDataEscapedEndTagNameState: + return "scriptDataEscapedEndTagNameState" + elif self._state == self.scriptDataDoubleEscapeStartState: + return "scriptDataDoubleEscapeStartState" + elif self._state == self.scriptDataDoubleEscapedState: + return "scriptDataDoubleEscapedState" + elif self._state == self.scriptDataDoubleEscapedDashState: + return "scriptDataDoubleEscapedDashState" + elif self._state == self.scriptDataDoubleEscapedDashDashState: + return "scriptDataDoubleEscapedDashDashState" + elif self._state == self.scriptDataDoubleEscapedLessThanSignState: + return "scriptDataDoubleEscapedLessThanSignState" + elif self._state == self.scriptDataDoubleEscapeEndState: + return "scriptDataDoubleEscapeEndState" + elif self._state == self.beforeAttributeNameState: + return "beforeAttributeNameState" + elif self._state == self.attributeNameState: + return "attributeNameState" + elif self._state == self.afterAttributeNameState: + return "afterAttributeNameState" + elif self._state == self.beforeAttributeValueState: + return "beforeAttributeValueState" + elif self._state == self.attributeValueDoubleQuotedState: + return "attributeValueDoubleQuotedState" + elif self._state == self.attributeValueSingleQuotedState: + return "attributeValueSingleQuotedState" + elif self._state == self.attributeValueUnQuotedState: + return "attributeValueUnQuotedState" + elif self._state == self.afterAttributeValueState: + return "afterAttributeValueState" + elif self._state == self.selfClosingStartTagState: + return "selfClosingStartTagState" + elif self._state == self.bogusCommentState: + return "bogusCommentState" + elif self._state == self.markupDeclarationOpenState: + return "markupDeclarationOpenState" + elif self._state == self.commentStartState: + return "commentStartState" + elif self._state == self.commentStartDashState: + return "commentStartDashState" + elif self._state == self.commentState: + return "commentState" + elif self._state == self.commentEndDashState: + return "commentEndDashState" + elif self._state == self.commentEndState: + return "commentEndState" + elif self._state == self.commentEndBangState: + return "commentEndBangState" + elif self._state == self.doctypeState: + return "doctypeState" + elif self._state == self.beforeDoctypeNameState: + return "beforeDoctypeNameState" + elif self._state == self.doctypeNameState: + return "doctypeNameState" + elif self._state == self.afterDoctypeNameState: + return "afterDoctypeNameState" + elif self._state == self.afterDoctypePublicKeywordState: + return "afterDoctypePublicKeywordState" + elif self._state == self.beforeDoctypePublicIdentifierState: + return "beforeDoctypePublicIdentifierState" + elif self._state == self.doctypePublicIdentifierDoubleQuotedState: + return "doctypePublicIdentifierDoubleQuotedState" + elif self._state == self.doctypePublicIdentifierSingleQuotedState: + return "doctypePublicIdentifierSingleQuotedState" + elif self._state == self.afterDoctypePublicIdentifierState: + return "afterDoctypePublicIdentifierState" + elif self._state == self.betweenDoctypePublicAndSystemIdentifiersState: + return "betweenDoctypePublicAndSystemIdentifiersState" + elif self._state == self.afterDoctypeSystemKeywordState: + return "afterDoctypeSystemKeywordState" + elif self._state == self.beforeDoctypeSystemIdentifierState: + return "beforeDoctypeSystemIdentifierState" + elif self._state == self.doctypeSystemIdentifierDoubleQuotedState: + return "doctypeSystemIdentifierDoubleQuotedState" + elif self._state == self.doctypeSystemIdentifierSingleQuotedState: + return "doctypeSystemIdentifierSingleQuotedState" + elif self._state == self.afterDoctypeSystemIdentifierState: + return "afterDoctypeSystemIdentifierState" + elif self._state == self.bogusDoctypeState: + return "bogusDoctypeState" + elif self._state == self.cdataSectionState: + return "cdataSectionState" + else: + raise ValueError("unreachable") + else: + return self._state.__name__ + + @state.setter + def state(self, newState): + if newState == "dataState": + self._state = self.dataState + elif newState == "cdataSectionState": + self._state = self.cdataSectionState + elif newState == "rawtextState": + self._state = self.rawtextState + elif newState == "rcdataState": + self._state = self.rcdataState + elif newState == "plaintextState": + self._state = self.plaintextState + elif newState == "scriptDataState": + self._state = self.scriptDataState + else: + raise ValueError(newState) def consumeNumberEntity(self, isHex): """This function returns either U+FFFD or the character based on the @@ -90,7 +268,14 @@ def consumeNumberEntity(self, isHex): c = self.stream.char() # Convert the set of characters consumed to an int. - charAsInt = int("".join(charStack), radix) + if cython.compiled: + with cython.overflowcheck(True): + try: + charAsInt = int("".join(charStack), radix) + except OverflowError: + charAsInt = 0x7FFFFFFF + else: + charAsInt = int("".join(charStack), radix) # Certain characters get replaced with others if charAsInt in replacementCharacters: @@ -105,20 +290,14 @@ def consumeNumberEntity(self, isHex): "illegal-codepoint-for-numeric-entity", "datavars": {"charAsInt": charAsInt}}) else: - # Should speed up this check somehow (e.g. move the set to a constant) - if ((0x0001 <= charAsInt <= 0x0008) or + if ( + (0x0001 <= charAsInt <= 0x0008) or (0x000E <= charAsInt <= 0x001F) or (0x007F <= charAsInt <= 0x009F) or (0xFDD0 <= charAsInt <= 0xFDEF) or - charAsInt in frozenset([0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, - 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, - 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, - 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, - 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, - 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, - 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, - 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, - 0xFFFFF, 0x10FFFE, 0x10FFFF])): + charAsInt == 0x000B or + (charAsInt & 0xFFFE) == 0xFFFE + ): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "illegal-codepoint-for-numeric-entity", @@ -212,7 +391,7 @@ def consumeEntity(self, allowedChar=None, fromAttribute=False): output = "&" + "".join(charStack) if fromAttribute: - self.currentToken["data"][-1][1] += output + self.currentToken["data"][self.currentAttribute][-1] += output else: if output in spaceCharacters: tokenType = "SpaceCharacters" @@ -233,14 +412,11 @@ def emitCurrentToken(self): token = self.currentToken # Add token to the queue to be yielded if (token["type"] in tagTokenTypes): - token["name"] = token["name"].translate(asciiUpper2Lower) + token["name"] = ascii_lower(token["name"]) if token["type"] == tokenTypes["StartTag"]: - raw = token["data"] - data = attributeMap(raw) - if len(raw) > len(data): - # we had some duplicated attribute, fix so first wins - data.update(raw[::-1]) - token["data"] = data + data = token["data"] + for k, v in data.items(): + data[k] = v[0] if token["type"] == tokenTypes["EndTag"]: if token["data"]: @@ -250,15 +426,15 @@ def emitCurrentToken(self): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "self-closing-flag-on-end-tag"}) self.tokenQueue.append(token) - self.state = self.dataState + self._state = self.dataState # Below are the various tokenizer states worked out. def dataState(self): data = self.stream.char() if data == "&": - self.state = self.entityDataState + self._state = self.entityDataState elif data == "<": - self.state = self.tagOpenState + self._state = self.tagOpenState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -284,15 +460,15 @@ def dataState(self): def entityDataState(self): self.consumeEntity() - self.state = self.dataState + self._state = self.dataState return True def rcdataState(self): data = self.stream.char() if data == "&": - self.state = self.characterReferenceInRcdata + self._state = self.characterReferenceInRcdata elif data == "<": - self.state = self.rcdataLessThanSignState + self._state = self.rcdataLessThanSignState elif data == EOF: # Tokenization ends. return False @@ -318,13 +494,13 @@ def rcdataState(self): def characterReferenceInRcdata(self): self.consumeEntity() - self.state = self.rcdataState + self._state = self.rcdataState return True def rawtextState(self): data = self.stream.char() if data == "<": - self.state = self.rawtextLessThanSignState + self._state = self.rawtextLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -342,7 +518,7 @@ def rawtextState(self): def scriptDataState(self): data = self.stream.char() if data == "<": - self.state = self.scriptDataLessThanSignState + self._state = self.scriptDataLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -375,74 +551,74 @@ def plaintextState(self): def tagOpenState(self): data = self.stream.char() if data == "!": - self.state = self.markupDeclarationOpenState + self._state = self.markupDeclarationOpenState elif data == "/": - self.state = self.closeTagOpenState + self._state = self.closeTagOpenState elif data in asciiLetters: self.currentToken = {"type": tokenTypes["StartTag"], - "name": data, "data": [], + "name": data, "data": attributeMap(), "selfClosing": False, "selfClosingAcknowledged": False} - self.state = self.tagNameState + self._state = self.tagNameState elif data == ">": # XXX In theory it could be something besides a tag name. But # do we really care? self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-tag-name-but-got-right-bracket"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) - self.state = self.dataState + self._state = self.dataState elif data == "?": # XXX In theory it could be something besides a tag name. But # do we really care? self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-tag-name-but-got-question-mark"}) self.stream.unget(data) - self.state = self.bogusCommentState + self._state = self.bogusCommentState else: # XXX self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-tag-name"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) self.stream.unget(data) - self.state = self.dataState + self._state = self.dataState return True def closeTagOpenState(self): data = self.stream.char() if data in asciiLetters: self.currentToken = {"type": tokenTypes["EndTag"], "name": data, - "data": [], "selfClosing": False} - self.state = self.tagNameState + "data": attributeMap(), "selfClosing": False} + self._state = self.tagNameState elif data == ">": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-closing-tag-but-got-right-bracket"}) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-closing-tag-but-got-eof"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ""}) - self.state = self.dataState + self._state = self.dataState else: # XXX data can be _'_... self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-closing-tag-but-got-char", "datavars": {"data": data}}) self.stream.unget(data) - self.state = self.bogusCommentState + self._state = self.bogusCommentState return True def tagNameState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeAttributeNameState + self._state = self.beforeAttributeNameState elif data == ">": self.emitCurrentToken() elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-tag-name"}) - self.state = self.dataState + self._state = self.dataState elif data == "/": - self.state = self.selfClosingStartTagState + self._state = self.selfClosingStartTagState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -457,22 +633,22 @@ def rcdataLessThanSignState(self): data = self.stream.char() if data == "/": self.temporaryBuffer = "" - self.state = self.rcdataEndTagOpenState + self._state = self.rcdataEndTagOpenState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) self.stream.unget(data) - self.state = self.rcdataState + self._state = self.rcdataState return True def rcdataEndTagOpenState(self): data = self.stream.char() if data in asciiLetters: self.temporaryBuffer += data - self.state = self.rcdataEndTagNameState + self._state = self.rcdataEndTagNameState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ""}) self.stream.unget(data) - self.state = self.rcdataState + self._state = self.rcdataState return True def rcdataEndTagNameState(self): @@ -481,48 +657,48 @@ def rcdataEndTagNameState(self): if data in spaceCharacters and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState + "data": attributeMap(), "selfClosing": False} + self._state = self.beforeAttributeNameState elif data == "/" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState + "data": attributeMap(), "selfClosing": False} + self._state = self.selfClosingStartTagState elif data == ">" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} + "data": attributeMap(), "selfClosing": False} self.emitCurrentToken() - self.state = self.dataState + self._state = self.dataState elif data in asciiLetters: self.temporaryBuffer += data else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" + self.temporaryBuffer}) self.stream.unget(data) - self.state = self.rcdataState + self._state = self.rcdataState return True def rawtextLessThanSignState(self): data = self.stream.char() if data == "/": self.temporaryBuffer = "" - self.state = self.rawtextEndTagOpenState + self._state = self.rawtextEndTagOpenState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) self.stream.unget(data) - self.state = self.rawtextState + self._state = self.rawtextState return True def rawtextEndTagOpenState(self): data = self.stream.char() if data in asciiLetters: self.temporaryBuffer += data - self.state = self.rawtextEndTagNameState + self._state = self.rawtextEndTagNameState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ""}) self.stream.unget(data) - self.state = self.rawtextState + self._state = self.rawtextState return True def rawtextEndTagNameState(self): @@ -531,51 +707,51 @@ def rawtextEndTagNameState(self): if data in spaceCharacters and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState + "data": attributeMap(), "selfClosing": False} + self._state = self.beforeAttributeNameState elif data == "/" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState + "data": attributeMap(), "selfClosing": False} + self._state = self.selfClosingStartTagState elif data == ">" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} + "data": attributeMap(), "selfClosing": False} self.emitCurrentToken() - self.state = self.dataState + self._state = self.dataState elif data in asciiLetters: self.temporaryBuffer += data else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" + self.temporaryBuffer}) self.stream.unget(data) - self.state = self.rawtextState + self._state = self.rawtextState return True def scriptDataLessThanSignState(self): data = self.stream.char() if data == "/": self.temporaryBuffer = "" - self.state = self.scriptDataEndTagOpenState + self._state = self.scriptDataEndTagOpenState elif data == "!": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} + "data": attributeMap(), "selfClosing": False} self.emitCurrentToken() - self.state = self.dataState + self._state = self.dataState elif data in asciiLetters: self.temporaryBuffer += data else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" + self.temporaryBuffer}) self.stream.unget(data) - self.state = self.scriptDataState + self._state = self.scriptDataState return True def scriptDataEscapeStartState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapeStartDashState + self._state = self.scriptDataEscapeStartDashState else: self.stream.unget(data) - self.state = self.scriptDataState + self._state = self.scriptDataState return True def scriptDataEscapeStartDashState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashDashState + self._state = self.scriptDataEscapedDashDashState else: self.stream.unget(data) - self.state = self.scriptDataState + self._state = self.scriptDataState return True def scriptDataEscapedState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashState + self._state = self.scriptDataEscapedDashState elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState + self._state = self.scriptDataEscapedLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "\uFFFD"}) elif data == EOF: - self.state = self.dataState + self._state = self.dataState else: chars = self.stream.charsUntil(("<", "-", "\u0000")) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": @@ -650,20 +826,20 @@ def scriptDataEscapedDashState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashDashState + self._state = self.scriptDataEscapedDashDashState elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState + self._state = self.scriptDataEscapedLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "\uFFFD"}) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState elif data == EOF: - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataEscapedDashDashState(self): @@ -671,47 +847,47 @@ def scriptDataEscapedDashDashState(self): if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState + self._state = self.scriptDataEscapedLessThanSignState elif data == ">": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState + self._state = self.scriptDataState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "\uFFFD"}) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState elif data == EOF: - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataEscapedLessThanSignState(self): data = self.stream.char() if data == "/": self.temporaryBuffer = "" - self.state = self.scriptDataEscapedEndTagOpenState + self._state = self.scriptDataEscapedEndTagOpenState elif data in asciiLetters: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) self.temporaryBuffer = data - self.state = self.scriptDataDoubleEscapeStartState + self._state = self.scriptDataDoubleEscapeStartState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) self.stream.unget(data) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataEscapedEndTagOpenState(self): data = self.stream.char() if data in asciiLetters: self.temporaryBuffer = data - self.state = self.scriptDataEscapedEndTagNameState + self._state = self.scriptDataEscapedEndTagNameState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ""}) self.stream.unget(data) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataEscapedEndTagNameState(self): @@ -720,26 +896,26 @@ def scriptDataEscapedEndTagNameState(self): if data in spaceCharacters and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState + "data": attributeMap(), "selfClosing": False} + self._state = self.beforeAttributeNameState elif data == "/" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState + "data": attributeMap(), "selfClosing": False} + self._state = self.selfClosingStartTagState elif data == ">" and appropriate: self.currentToken = {"type": tokenTypes["EndTag"], "name": self.temporaryBuffer, - "data": [], "selfClosing": False} + "data": attributeMap(), "selfClosing": False} self.emitCurrentToken() - self.state = self.dataState + self._state = self.dataState elif data in asciiLetters: self.temporaryBuffer += data else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" + self.temporaryBuffer}) self.stream.unget(data) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataDoubleEscapeStartState(self): @@ -747,25 +923,25 @@ def scriptDataDoubleEscapeStartState(self): if data in (spaceCharacters | frozenset(("/", ">"))): self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState else: - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState elif data in asciiLetters: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) self.temporaryBuffer += data else: self.stream.unget(data) - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState return True def scriptDataDoubleEscapedState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashState + self._state = self.scriptDataDoubleEscapedDashState elif data == "<": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState + self._state = self.scriptDataDoubleEscapedLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -774,7 +950,7 @@ def scriptDataDoubleEscapedState(self): elif data == EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-script-in-script"}) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) return True @@ -783,23 +959,23 @@ def scriptDataDoubleEscapedDashState(self): data = self.stream.char() if data == "-": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashDashState + self._state = self.scriptDataDoubleEscapedDashDashState elif data == "<": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState + self._state = self.scriptDataDoubleEscapedLessThanSignState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState elif data == EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-script-in-script"}) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState return True def scriptDataDoubleEscapedDashDashState(self): @@ -808,23 +984,23 @@ def scriptDataDoubleEscapedDashDashState(self): self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) elif data == "<": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState + self._state = self.scriptDataDoubleEscapedLessThanSignState elif data == ">": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState + self._state = self.scriptDataState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState elif data == EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-script-in-script"}) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState return True def scriptDataDoubleEscapedLessThanSignState(self): @@ -832,10 +1008,10 @@ def scriptDataDoubleEscapedLessThanSignState(self): if data == "/": self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) self.temporaryBuffer = "" - self.state = self.scriptDataDoubleEscapeEndState + self._state = self.scriptDataDoubleEscapeEndState else: self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState return True def scriptDataDoubleEscapeEndState(self): @@ -843,15 +1019,15 @@ def scriptDataDoubleEscapeEndState(self): if data in (spaceCharacters | frozenset(("/", ">"))): self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataEscapedState + self._state = self.scriptDataEscapedState else: - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState elif data in asciiLetters: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) self.temporaryBuffer += data else: self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState + self._state = self.scriptDataDoubleEscapedState return True def beforeAttributeNameState(self): @@ -859,29 +1035,29 @@ def beforeAttributeNameState(self): if data in spaceCharacters: self.stream.charsUntil(spaceCharacters, True) elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState elif data == ">": self.emitCurrentToken() elif data == "/": - self.state = self.selfClosingStartTagState + self._state = self.selfClosingStartTagState elif data in ("'", '"', "=", "<"): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-character-in-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState + self.currentAttribute = "\uFFFD" + self._state = self.attributeNameState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-attribute-name-but-got-eof"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState return True def attributeNameState(self): @@ -889,9 +1065,9 @@ def attributeNameState(self): leavingThisState = True emitToken = False if data == "=": - self.state = self.beforeAttributeValueState + self._state = self.beforeAttributeValueState elif data in asciiLetters: - self.currentToken["data"][-1][0] += data +\ + self.currentAttribute += data +\ self.stream.charsUntil(asciiLetters, True) leavingThisState = False elif data == ">": @@ -900,39 +1076,40 @@ def attributeNameState(self): # because data is a dict not a list emitToken = True elif data in spaceCharacters: - self.state = self.afterAttributeNameState + self._state = self.afterAttributeNameState elif data == "/": - self.state = self.selfClosingStartTagState + self._state = self.selfClosingStartTagState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"][-1][0] += "\uFFFD" + self.currentAttribute += "\uFFFD" leavingThisState = False elif data in ("'", '"', "<"): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-character-in-attribute-name"}) - self.currentToken["data"][-1][0] += data + self.currentAttribute += data leavingThisState = False elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-attribute-name"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"][-1][0] += data + self.currentAttribute += data leavingThisState = False + assert leavingThisState == ((self._state != self.attributeNameState) or emitToken) if leavingThisState: # Attributes are not dropped at this stage. That happens when the # start tag token is emitted so values can still be safely appended # to attributes, but we do want to report the parse error in time. - self.currentToken["data"][-1][0] = ( - self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) - for name, _ in self.currentToken["data"][:-1]: - if self.currentToken["data"][-1][0] == name: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "duplicate-attribute"}) - break + self.currentAttribute = ascii_lower(self.currentAttribute) + if self.currentAttribute in self.currentToken["data"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "duplicate-attribute"}) + self.currentToken["data"][self.currentAttribute].append("") + else: + self.currentToken["data"][self.currentAttribute] = [""] # XXX Fix for above XXX if emitToken: self.emitCurrentToken() @@ -943,31 +1120,31 @@ def afterAttributeNameState(self): if data in spaceCharacters: self.stream.charsUntil(spaceCharacters, True) elif data == "=": - self.state = self.beforeAttributeValueState + self._state = self.beforeAttributeValueState elif data == ">": self.emitCurrentToken() elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState elif data == "/": - self.state = self.selfClosingStartTagState + self._state = self.selfClosingStartTagState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState + self.currentAttribute = "\uFFFD" + self._state = self.attributeNameState elif data in ("'", '"', "<"): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-character-after-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-end-of-tag-but-got-eof"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState + self.currentAttribute = data + self._state = self.attributeNameState return True def beforeAttributeValueState(self): @@ -975,12 +1152,12 @@ def beforeAttributeValueState(self): if data in spaceCharacters: self.stream.charsUntil(spaceCharacters, True) elif data == "\"": - self.state = self.attributeValueDoubleQuotedState + self._state = self.attributeValueDoubleQuotedState elif data == "&": - self.state = self.attributeValueUnQuotedState + self._state = self.attributeValueUnQuotedState self.stream.unget(data) elif data == "'": - self.state = self.attributeValueSingleQuotedState + self._state = self.attributeValueSingleQuotedState elif data == ">": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-attribute-value-but-got-right-bracket"}) @@ -988,64 +1165,64 @@ def beforeAttributeValueState(self): elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - self.state = self.attributeValueUnQuotedState + self.currentToken["data"][self.currentAttribute][-1] += "\uFFFD" + self._state = self.attributeValueUnQuotedState elif data in ("=", "<", "`"): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "equals-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState + self.currentToken["data"][self.currentAttribute][-1] += data + self._state = self.attributeValueUnQuotedState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-attribute-value-but-got-eof"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState + self.currentToken["data"][self.currentAttribute][-1] += data + self._state = self.attributeValueUnQuotedState return True def attributeValueDoubleQuotedState(self): data = self.stream.char() if data == "\"": - self.state = self.afterAttributeValueState + self._state = self.afterAttributeValueState elif data == "&": self.processEntityInAttribute('"') elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" + self.currentToken["data"][self.currentAttribute][-1] += "\uFFFD" elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-attribute-value-double-quote"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"][-1][1] += data +\ + self.currentToken["data"][self.currentAttribute][-1] += data +\ self.stream.charsUntil(("\"", "&", "\u0000")) return True def attributeValueSingleQuotedState(self): data = self.stream.char() if data == "'": - self.state = self.afterAttributeValueState + self._state = self.afterAttributeValueState elif data == "&": self.processEntityInAttribute("'") elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" + self.currentToken["data"][self.currentAttribute][-1] += "\uFFFD" elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-attribute-value-single-quote"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"][-1][1] += data +\ + self.currentToken["data"][self.currentAttribute][-1] += data +\ self.stream.charsUntil(("'", "&", "\u0000")) return True def attributeValueUnQuotedState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeAttributeNameState + self._state = self.beforeAttributeNameState elif data == "&": self.processEntityInAttribute(">") elif data == ">": @@ -1053,38 +1230,38 @@ def attributeValueUnQuotedState(self): elif data in ('"', "'", "=", "<", "`"): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-character-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data + self.currentToken["data"][self.currentAttribute][-1] += data elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" + self.currentToken["data"][self.currentAttribute][-1] += "\uFFFD" elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-attribute-value-no-quotes"}) - self.state = self.dataState + self._state = self.dataState else: - self.currentToken["data"][-1][1] += data + self.stream.charsUntil( + self.currentToken["data"][self.currentAttribute][-1] += data + self.stream.charsUntil( frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) return True def afterAttributeValueState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeAttributeNameState + self._state = self.beforeAttributeNameState elif data == ">": self.emitCurrentToken() elif data == "/": - self.state = self.selfClosingStartTagState + self._state = self.selfClosingStartTagState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-EOF-after-attribute-value"}) self.stream.unget(data) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-character-after-attribute-value"}) self.stream.unget(data) - self.state = self.beforeAttributeNameState + self._state = self.beforeAttributeNameState return True def selfClosingStartTagState(self): @@ -1097,12 +1274,12 @@ def selfClosingStartTagState(self): "data": "unexpected-EOF-after-solidus-in-tag"}) self.stream.unget(data) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-character-after-solidus-in-tag"}) self.stream.unget(data) - self.state = self.beforeAttributeNameState + self._state = self.beforeAttributeNameState return True def bogusCommentState(self): @@ -1117,7 +1294,7 @@ def bogusCommentState(self): # Eat the character directly after the bogus comment which is either a # ">" or an EOF. self.stream.char() - self.state = self.dataState + self._state = self.dataState return True def markupDeclarationOpenState(self): @@ -1126,7 +1303,7 @@ def markupDeclarationOpenState(self): charStack.append(self.stream.char()) if charStack[-1] == "-": self.currentToken = {"type": tokenTypes["Comment"], "data": ""} - self.state = self.commentStartState + self._state = self.commentStartState return True elif charStack[-1] in ('d', 'D'): matched = True @@ -1141,7 +1318,7 @@ def markupDeclarationOpenState(self): "name": "", "publicId": None, "systemId": None, "correct": True} - self.state = self.doctypeState + self._state = self.doctypeState return True elif (charStack[-1] == "[" and self.parser is not None and @@ -1154,7 +1331,7 @@ def markupDeclarationOpenState(self): matched = False break if matched: - self.state = self.cdataSectionState + self._state = self.cdataSectionState return True self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": @@ -1162,13 +1339,13 @@ def markupDeclarationOpenState(self): while charStack: self.stream.unget(charStack.pop()) - self.state = self.bogusCommentState + self._state = self.bogusCommentState return True def commentStartState(self): data = self.stream.char() if data == "-": - self.state = self.commentStartDashState + self._state = self.commentStartDashState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1177,21 +1354,21 @@ def commentStartState(self): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "incorrect-comment"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["data"] += data - self.state = self.commentState + self._state = self.commentState return True def commentStartDashState(self): data = self.stream.char() if data == "-": - self.state = self.commentEndState + self._state = self.commentEndState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1200,21 +1377,21 @@ def commentStartDashState(self): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "incorrect-comment"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["data"] += "-" + data - self.state = self.commentState + self._state = self.commentState return True def commentState(self): data = self.stream.char() if data == "-": - self.state = self.commentEndDashState + self._state = self.commentEndDashState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1223,7 +1400,7 @@ def commentState(self): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["data"] += data + \ self.stream.charsUntil(("-", "\u0000")) @@ -1232,36 +1409,36 @@ def commentState(self): def commentEndDashState(self): data = self.stream.char() if data == "-": - self.state = self.commentEndState + self._state = self.commentEndState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.currentToken["data"] += "-\uFFFD" - self.state = self.commentState + self._state = self.commentState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment-end-dash"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["data"] += "-" + data - self.state = self.commentState + self._state = self.commentState return True def commentEndState(self): data = self.stream.char() if data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.currentToken["data"] += "--\uFFFD" - self.state = self.commentState + self._state = self.commentState elif data == "!": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-bang-after-double-dash-in-comment"}) - self.state = self.commentEndBangState + self._state = self.commentEndBangState elif data == "-": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-dash-after-double-dash-in-comment"}) @@ -1270,53 +1447,53 @@ def commentEndState(self): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment-double-dash"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: # XXX self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-comment"}) self.currentToken["data"] += "--" + data - self.state = self.commentState + self._state = self.commentState return True def commentEndBangState(self): data = self.stream.char() if data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == "-": self.currentToken["data"] += "--!" - self.state = self.commentEndDashState + self._state = self.commentEndDashState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.currentToken["data"] += "--!\uFFFD" - self.state = self.commentState + self._state = self.commentState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-comment-end-bang-state"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["data"] += "--!" + data - self.state = self.commentState + self._state = self.commentState return True def doctypeState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeDoctypeNameState + self._state = self.beforeDoctypeNameState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-doctype-name-but-got-eof"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "need-space-after-doctype"}) self.stream.unget(data) - self.state = self.beforeDoctypeNameState + self._state = self.beforeDoctypeNameState return True def beforeDoctypeNameState(self): @@ -1328,44 +1505,44 @@ def beforeDoctypeNameState(self): "expected-doctype-name-but-got-right-bracket"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.currentToken["name"] = "\uFFFD" - self.state = self.doctypeNameState + self._state = self.doctypeNameState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "expected-doctype-name-but-got-eof"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["name"] = data - self.state = self.doctypeNameState + self._state = self.doctypeNameState return True def doctypeNameState(self): data = self.stream.char() if data in spaceCharacters: - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.state = self.afterDoctypeNameState + self.currentToken["name"] = ascii_lower(self.currentToken["name"]) + self._state = self.afterDoctypeNameState elif data == ">": - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.currentToken["name"] = ascii_lower(self.currentToken["name"]) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) self.currentToken["name"] += "\uFFFD" - self.state = self.doctypeNameState + self._state = self.doctypeNameState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype-name"}) self.currentToken["correct"] = False - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.currentToken["name"] = ascii_lower(self.currentToken["name"]) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["name"] += data return True @@ -1376,14 +1553,14 @@ def afterDoctypeNameState(self): pass elif data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.currentToken["correct"] = False self.stream.unget(data) self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: if data in ("p", "P"): matched = True @@ -1394,7 +1571,7 @@ def afterDoctypeNameState(self): matched = False break if matched: - self.state = self.afterDoctypePublicKeywordState + self._state = self.afterDoctypePublicKeywordState return True elif data in ("s", "S"): matched = True @@ -1405,7 +1582,7 @@ def afterDoctypeNameState(self): matched = False break if matched: - self.state = self.afterDoctypeSystemKeywordState + self._state = self.afterDoctypeSystemKeywordState return True # All the characters read before the current 'data' will be @@ -1417,28 +1594,28 @@ def afterDoctypeNameState(self): "expected-space-or-right-bracket-in-doctype", "datavars": {"data": data}}) self.currentToken["correct"] = False - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def afterDoctypePublicKeywordState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeDoctypePublicIdentifierState + self._state = self.beforeDoctypePublicIdentifierState elif data in ("'", '"'): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState + self._state = self.beforeDoctypePublicIdentifierState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState + self._state = self.beforeDoctypePublicIdentifierState return True def beforeDoctypePublicIdentifierState(self): @@ -1447,33 +1624,33 @@ def beforeDoctypePublicIdentifierState(self): pass elif data == "\"": self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierDoubleQuotedState + self._state = self.doctypePublicIdentifierDoubleQuotedState elif data == "'": self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierSingleQuotedState + self._state = self.doctypePublicIdentifierSingleQuotedState elif data == ">": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-end-of-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["correct"] = False - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def doctypePublicIdentifierDoubleQuotedState(self): data = self.stream.char() if data == "\"": - self.state = self.afterDoctypePublicIdentifierState + self._state = self.afterDoctypePublicIdentifierState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1483,13 +1660,13 @@ def doctypePublicIdentifierDoubleQuotedState(self): "unexpected-end-of-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["publicId"] += data return True @@ -1497,7 +1674,7 @@ def doctypePublicIdentifierDoubleQuotedState(self): def doctypePublicIdentifierSingleQuotedState(self): data = self.stream.char() if data == "'": - self.state = self.afterDoctypePublicIdentifierState + self._state = self.afterDoctypePublicIdentifierState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1507,13 +1684,13 @@ def doctypePublicIdentifierSingleQuotedState(self): "unexpected-end-of-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["publicId"] += data return True @@ -1521,31 +1698,31 @@ def doctypePublicIdentifierSingleQuotedState(self): def afterDoctypePublicIdentifierState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.betweenDoctypePublicAndSystemIdentifiersState + self._state = self.betweenDoctypePublicAndSystemIdentifiersState elif data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == '"': self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState + self._state = self.doctypeSystemIdentifierDoubleQuotedState elif data == "'": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState + self._state = self.doctypeSystemIdentifierSingleQuotedState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["correct"] = False - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def betweenDoctypePublicAndSystemIdentifiersState(self): @@ -1554,44 +1731,44 @@ def betweenDoctypePublicAndSystemIdentifiersState(self): pass elif data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data == '"': self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState + self._state = self.doctypeSystemIdentifierDoubleQuotedState elif data == "'": self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState + self._state = self.doctypeSystemIdentifierSingleQuotedState elif data == EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["correct"] = False - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def afterDoctypeSystemKeywordState(self): data = self.stream.char() if data in spaceCharacters: - self.state = self.beforeDoctypeSystemIdentifierState + self._state = self.beforeDoctypeSystemIdentifierState elif data in ("'", '"'): self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState + self._state = self.beforeDoctypeSystemIdentifierState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState + self._state = self.beforeDoctypeSystemIdentifierState return True def beforeDoctypeSystemIdentifierState(self): @@ -1600,33 +1777,33 @@ def beforeDoctypeSystemIdentifierState(self): pass elif data == "\"": self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState + self._state = self.doctypeSystemIdentifierDoubleQuotedState elif data == "'": self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState + self._state = self.doctypeSystemIdentifierSingleQuotedState elif data == ">": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) self.currentToken["correct"] = False - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def doctypeSystemIdentifierDoubleQuotedState(self): data = self.stream.char() if data == "\"": - self.state = self.afterDoctypeSystemIdentifierState + self._state = self.afterDoctypeSystemIdentifierState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1636,13 +1813,13 @@ def doctypeSystemIdentifierDoubleQuotedState(self): "unexpected-end-of-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["systemId"] += data return True @@ -1650,7 +1827,7 @@ def doctypeSystemIdentifierDoubleQuotedState(self): def doctypeSystemIdentifierSingleQuotedState(self): data = self.stream.char() if data == "'": - self.state = self.afterDoctypeSystemIdentifierState + self._state = self.afterDoctypeSystemIdentifierState elif data == "\u0000": self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "invalid-codepoint"}) @@ -1660,13 +1837,13 @@ def doctypeSystemIdentifierSingleQuotedState(self): "unexpected-end-of-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.currentToken["systemId"] += data return True @@ -1677,29 +1854,29 @@ def afterDoctypeSystemIdentifierState(self): pass elif data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "eof-in-doctype"}) self.currentToken["correct"] = False self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": "unexpected-char-in-doctype"}) - self.state = self.bogusDoctypeState + self._state = self.bogusDoctypeState return True def bogusDoctypeState(self): data = self.stream.char() if data == ">": self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState elif data is EOF: # XXX EMIT self.stream.unget(data) self.tokenQueue.append(self.currentToken) - self.state = self.dataState + self._state = self.dataState else: pass return True @@ -1731,5 +1908,5 @@ def cdataSectionState(self): if data: self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.dataState + self._state = self.dataState return True diff --git a/html5lib/_utils.py b/html5lib/_utils.py index 9ea57942..7e23ee57 100644 --- a/html5lib/_utils.py +++ b/html5lib/_utils.py @@ -145,15 +145,3 @@ def moduleFactory(baseModule, *args, **kwargs): return mod return moduleFactory - - -def memoize(func): - cache = {} - - def wrapped(*args, **kwargs): - key = (tuple(args), tuple(kwargs.items())) - if key not in cache: - cache[key] = func(*args, **kwargs) - return cache[key] - - return wrapped diff --git a/html5lib/html5parser.pxd b/html5lib/html5parser.pxd new file mode 100644 index 00000000..4b1b62c8 --- /dev/null +++ b/html5lib/html5parser.pxd @@ -0,0 +1,379 @@ +cimport cython + +from . cimport _tokenizer + +# # def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs) + +# # def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs) + +cdef class HTMLParser(object): + cdef bint strict + cdef bint debug + cdef readonly object tree + cdef readonly list errors + cdef readonly dict phases + cdef bint innerHTMLMode + cdef unicode container + cdef readonly bint scripting + cdef readonly _tokenizer.HTMLTokenizer tokenizer + cdef public bint firstStartTag + cdef readonly list log + cdef public unicode compatMode + cdef readonly unicode innerHTML + cdef public object phase + cdef public bint framesetOK + cdef public object originalPhase + + + #def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs) + cdef reset(self) + #cdef documentEncoding(self) + cpdef bint isHTMLIntegrationPoint(self, object element) except? -1 + cpdef bint isMathMLTextIntegrationPoint(self, object element) except? -1 + @cython.locals( + CharactersToken=int, + SpaceCharactersToken=int, + StartTagToken=int, + EndTagToken=int, + CommentToken=int, + DoctypeToken=int, + ParseErrorToken=int, + defaultNamespace=unicode, + token=dict, + prev_token=dict, + new_token=dict, + openElements=list, + type=int + ) + cdef mainLoop(self) + #def parse(self, stream, *args, **kwargs) + #def parseFragment(self, stream, *args, **kwargs) + cpdef void parseError(self, errorcode=?, datavars=?) except * + cpdef void adjustMathMLAttributes(self, dict token) except * + cpdef void adjustSVGAttributes(self, dict token) except * + cpdef void adjustForeignAttributes(self, dict token) except * + cdef void reparseTokenNormal(self, dict token) except * + cpdef void resetInsertionMode(self) except * + cpdef void parseRCDataRawtext(self, dict token, unicode contentType) except * + +# cdef class Phase(object): +# cdef readonly object parser +# cdef readonly object tree +# cdef dict __startTagCache +# cdef dict __endTagCache + +# cpdef processEOF(self) +# cpdef processComment(self, dict token) +# cpdef processDoctype(self, dict token) +# cpdef processCharacters(self, dict token) +# cpdef processSpaceCharacters(self, dict token) +# cpdef processStartTag(self, dict token) +# cpdef startTagHtml(self, dict token) +# cpdef processEndTag(self, dict token) + +# # cdef class InitialPhase(Phase): +# # cdef processSpaceCharacters(self, dict token) +# # cdef processComment(self, dict token) +# # cdef processDoctype(self, dict token) +# # cdef anythingElse(self) +# # cdef processCharacters(self, dict token) +# # cdef processStartTag(self, dict token) +# # cdef processEndTag(self, dict token) +# # cdef processEOF(self) + +# # cdef class BeforeHtmlPhase(Phase): +# # cdef insertHtmlElement(self) +# # cdef processEOF(self) +# # cdef processComment(self, dict token) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef processStartTag(self, dict token) +# # cdef processEndTag(self, dict token) + +# # cdef class BeforeHeadPhase(Phase): +# # cdef processEOF(self) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagHead(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagImplyHead(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InHeadPhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagHead(self, dict token) +# # cdef startTagBaseLinkCommand(self, dict token) +# # cdef startTagMeta(self, dict token) +# # cdef startTagTitle(self, dict token) +# # cdef startTagNoFramesStyle(self, dict token) +# # cdef startTagNoscript(self, dict token) +# # cdef startTagScript(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagHead(self, dict token) +# # cdef endTagHtmlBodyBr(self, dict token) +# # cdef endTagOther(self, dict token) +# # cdef anythingElse(self) + +# # cdef class InHeadNoscriptPhase(Phase): +# # cdef processEOF(self) +# # cdef processComment(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef processSpaceCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagBaseLinkCommand(self, dict token) +# # cdef startTagHeadNoscript(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagNoscript(self, dict token) +# # cdef endTagBr(self, dict token) +# # cdef endTagOther(self, dict token) +# # cdef anythingElse(self) + +# # cdef class AfterHeadPhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagBody(self, dict token) +# # cdef startTagFrameset(self, dict token) +# # cdef startTagFromHead(self, dict token) +# # cdef startTagHead(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagHtmlBodyBr(self, dict token) +# # cdef endTagOther(self, dict token) +# # cdef anythingElse(self) + +# # cdef class InBodyPhase(Phase): +# # cdef bint dropNewline +# # cdef isMatchingFormattingElement(self, node1, node2) +# # cdef addFormattingElement(self, dict token) +# # cdef processEOF(self) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processSpaceCharactersDropNewline(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef processSpaceCharactersNonPre(self, dict token) +# # cdef startTagProcessInHead(self, dict token) +# # cdef startTagBody(self, dict token) +# # cdef startTagFrameset(self, dict token) +# # cdef startTagCloseP(self, dict token) +# # cdef startTagPreListing(self, dict token) +# # cdef startTagForm(self, dict token) +# # cdef startTagListItem(self, dict token) +# # cdef startTagPlaintext(self, dict token) +# # cdef startTagHeading(self, dict token) +# # cdef startTagA(self, dict token) +# # cdef startTagFormatting(self, dict token) +# # cdef startTagNobr(self, dict token) +# # cdef startTagButton(self, dict token) +# # cdef startTagAppletMarqueeObject(self, dict token) +# # cdef startTagXmp(self, dict token) +# # cdef startTagTable(self, dict token) +# # cdef startTagVoidFormatting(self, dict token) +# # cdef startTagInput(self, dict token) +# # cdef startTagParamSource(self, dict token) +# # cdef startTagHr(self, dict token) +# # cdef startTagImage(self, dict token) +# # cdef startTagIsIndex(self, dict token) +# # cdef startTagTextarea(self, dict token) +# # cdef startTagIFrame(self, dict token) +# # cdef startTagNoscript(self, dict token) +# # cdef startTagRawtext(self, dict token) +# # cdef startTagOpt(self, dict token) +# # cdef startTagSelect(self, dict token) +# # cdef startTagRpRt(self, dict token) +# # cdef startTagMath(self, dict token) +# # cdef startTagSvg(self, dict token) +# # cdef startTagMisplaced(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagP(self, dict token) +# # cdef endTagBody(self, dict token) +# # cdef endTagHtml(self, dict token) +# # cdef endTagBlock(self, dict token) +# # cdef endTagForm(self, dict token) +# # cdef endTagListItem(self, dict token) +# # cdef endTagHeading(self, dict token) +# # cdef endTagFormatting(self, dict token) +# # cdef endTagAppletMarqueeObject(self, dict token) +# # cdef endTagBr(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class TextPhase(Phase): +# # cdef processCharacters(self, dict token) +# # cdef processEOF(self) +# # cdef startTagOther(self, dict token) +# # cdef endTagScript(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InTablePhase(Phase): +# # cdef object originalPhase +# # cdef object characterTokens + +# # cdef clearStackToTableContext(self) +# # cdef processEOF(self) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef insertText(self, dict token) +# # cdef startTagCaption(self, dict token) +# # cdef startTagColgroup(self, dict token) +# # cdef startTagCol(self, dict token) +# # cdef startTagRowGroup(self, dict token) +# # cdef startTagImplyTbody(self, dict token) +# # cdef startTagTable(self, dict token) +# # cdef startTagStyleScript(self, dict token) +# # cdef startTagInput(self, dict token) +# # cdef startTagForm(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagTable(self, dict token) +# # cdef endTagIgnore(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InTableTextPhase(Phase): +# # cdef flushCharacters(self) +# # cdef processComment(self, dict token) +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processStartTag(self, dict token) +# # cdef processEndTag(self, dict token) + +# # cdef class InCaptionPhase(Phase): +# # cdef ignoreEndTagCaption(self) +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagTableElement(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagCaption(self, dict token) +# # cdef endTagTable(self, dict token) +# # cdef endTagIgnore(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InColumnGroupPhase(Phase): +# # cdef ignoreEndTagColgroup(self) +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagCol(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagColgroup(self, dict token) +# # cdef endTagCol(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InTableBodyPhase(Phase): +# # cdef clearStackToTableBodyContext(self) +# # cdef processEOF(self) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagTr(self, dict token) +# # cdef startTagTableCell(self, dict token) +# # cdef startTagTableOther(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagTableRowGroup(self, dict token) +# # cdef endTagTable(self, dict token) +# # cdef endTagIgnore(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InRowPhase(Phase): +# # cdef clearStackToTableRowContext(self) +# # cdef ignoreEndTagTr(self) +# # cdef processEOF(self) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagTableCell(self, dict token) +# # cdef startTagTableOther(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagTr(self, dict token) +# # cdef endTagTable(self, dict token) +# # cdef endTagTableRowGroup(self, dict token) +# # cdef endTagIgnore(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InCellPhase(Phase): +# # cdef closeCell(self) +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagTableOther(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagTableCell(self, dict token) +# # cdef endTagIgnore(self, dict token) +# # cdef endTagImply(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InSelectPhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagOption(self, dict token) +# # cdef startTagOptgroup(self, dict token) +# # cdef startTagSelect(self, dict token) +# # cdef startTagInput(self, dict token) +# # cdef startTagScript(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagOption(self, dict token) +# # cdef endTagOptgroup(self, dict token) +# # cdef endTagSelect(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InSelectInTablePhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagTable(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagTable(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class InForeignContentPhase(Phase): +# # cdef adjustSVGTagNames(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef processStartTag(self, dict token) +# # cdef processEndTag(self, dict token) + +# # cdef class AfterBodyPhase(Phase): +# # cdef processEOF(self) +# # cdef processComment(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagHtml(self, name) +# # cdef endTagOther(self, dict token) + +# # cdef class InFramesetPhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagFrameset(self, dict token) +# # cdef startTagFrame(self, dict token) +# # cdef startTagNoframes(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagFrameset(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class AfterFramesetPhase(Phase): +# # cdef processEOF(self) +# # cdef processCharacters(self, dict token) +# # cdef startTagNoframes(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef endTagHtml(self, dict token) +# # cdef endTagOther(self, dict token) + +# # cdef class AfterAfterBodyPhase(Phase): +# # cdef processEOF(self) +# # cdef processComment(self, dict token) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef processEndTag(self, dict token) + +# # cdef class AfterAfterFramesetPhase(Phase): +# # cdef processEOF(self) +# # cdef processComment(self, dict token) +# # cdef processSpaceCharacters(self, dict token) +# # cdef processCharacters(self, dict token) +# # cdef startTagHtml(self, dict token) +# # cdef startTagNoFrames(self, dict token) +# # cdef startTagOther(self, dict token) +# # cdef processEndTag(self, dict token) + +cdef inline void adjust_attributes(dict token, dict replacements) except * +cdef inline dict impliedTagToken(unicode name, unicode type=?, dict attributes=?, bint selfClosing=?) + +# cdef class ParseError(Exception): +# pass diff --git a/html5lib/html5parser.py b/html5lib/html5parser.py index 74d829d9..b2cce0eb 100644 --- a/html5lib/html5parser.py +++ b/html5lib/html5parser.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, division, unicode_literals -from six import with_metaclass, viewkeys - -import types +import cython +from six import viewkeys from . import _inputstream from . import _tokenizer @@ -13,7 +12,7 @@ from .constants import ( spaceCharacters, asciiUpper2Lower, specialElements, headingElements, cdataElements, rcdataElements, - tokenTypes, tagTokenTypes, + tokenTypes, namespaces, htmlIntegrationPointElements, mathmlTextIntegrationPointElements, adjustForeignAttributes as adjustForeignAttributesMap, @@ -71,18 +70,6 @@ def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElemen return p.parseFragment(doc, container=container, **kwargs) -def method_decorator_metaclass(function): - class Decorated(type): - def __new__(meta, classname, bases, classDict): - for attributeName, attribute in classDict.items(): - if isinstance(attribute, types.FunctionType): - attribute = function(attribute) - - classDict[attributeName] = attribute - return type.__new__(meta, classname, bases, classDict) - return Decorated - - class HTMLParser(object): """HTML parser @@ -112,6 +99,7 @@ def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=Fa # Raise an exception on the first error encountered self.strict = strict + self.debug = debug if tree is None: tree = treebuilders.getTreeBuilder("etree") @@ -119,7 +107,8 @@ def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=Fa self.errors = [] self.phases = {name: cls(self, self.tree) for name, cls in - getPhases(debug).items()} + _phases.items()} + self.tokenizer = None def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): @@ -147,14 +136,14 @@ def reset(self): self.innerHTML = self.container.lower() if self.innerHTML in cdataElements: - self.tokenizer.state = self.tokenizer.rcdataState + self.tokenizer.state = "rcdataState" elif self.innerHTML in rcdataElements: - self.tokenizer.state = self.tokenizer.rawtextState + self.tokenizer.state = "rawtextState" elif self.innerHTML == 'plaintext': - self.tokenizer.state = self.tokenizer.plaintextState + self.tokenizer.state = "plaintextState" else: # state already is data state - # self.tokenizer.state = self.tokenizer.dataState + # self.tokenizer.state = "dataState" pass self.phase = self.phases["beforeHtml"] self.phase.insertHtmlElement() @@ -163,10 +152,6 @@ def reset(self): self.innerHTML = False # pylint:disable=redefined-variable-type self.phase = self.phases["initial"] - self.lastPhase = None - - self.beforeRCDataPhase = None - self.framesetOK = True @property @@ -175,7 +160,7 @@ def documentEncoding(self): :obj:`None` if that is not determined yet """ - if not hasattr(self, 'tokenizer'): + if self.tokenizer is None: return None return self.tokenizer.stream.charEncoding[0].name @@ -201,14 +186,19 @@ def mainLoop(self): DoctypeToken = tokenTypes["Doctype"] ParseErrorToken = tokenTypes["ParseError"] + type_names = {value: key for key, value in tokenTypes.items()} + debug = self.debug + defaultNamespace = self.tree.defaultNamespace + for token in self.tokenizer: prev_token = None new_token = token while new_token is not None: prev_token = new_token - currentNode = self.tree.openElements[-1] if self.tree.openElements else None - currentNodeNamespace = currentNode.namespace if currentNode else None - currentNodeName = currentNode.name if currentNode else None + openElements = self.tree.openElements + currentNode = openElements[-1] if openElements else None + currentNodeNamespace = currentNode.namespace if currentNode is not None else None + currentNodeName = currentNode.name if currentNode is not None else None type = new_token["type"] @@ -216,11 +206,11 @@ def mainLoop(self): self.parseError(new_token["data"], new_token.get("datavars", {})) new_token = None else: - if (len(self.tree.openElements) == 0 or - currentNodeNamespace == self.tree.defaultNamespace or + if (not openElements or + currentNodeNamespace == defaultNamespace or (self.isMathMLTextIntegrationPoint(currentNode) and ((type == StartTagToken and - token["name"] not in frozenset(["mglyph", "malignmark"])) or + token["name"] not in ("mglyph", "malignmark")) or type in (CharactersToken, SpaceCharactersToken))) or (currentNodeNamespace == namespaces["mathml"] and currentNodeName == "annotation-xml" and @@ -232,6 +222,17 @@ def mainLoop(self): else: phase = self.phases["inForeignContent"] + if debug: + info = {"type": type_names[type]} + if type in (StartTagToken, EndTagToken): + info["name"] = new_token['name'] + + self.log.append((self.tokenizer.state, + self.phase.__class__.__name__, + phase.__class__.__name__, + "process" + info["type"], + info)) + if type == CharactersToken: new_token = phase.processCharacters(new_token) elif type == SpaceCharactersToken: @@ -384,2402 +385,2410 @@ def parseRCDataRawtext(self, token, contentType): self.tree.insertElement(token) if contentType == "RAWTEXT": - self.tokenizer.state = self.tokenizer.rawtextState + self.tokenizer.state = "rawtextState" else: - self.tokenizer.state = self.tokenizer.rcdataState + self.tokenizer.state = "rcdataState" self.originalPhase = self.phase self.phase = self.phases["text"] -@_utils.memoize -def getPhases(debug): - def log(function): - """Logger that records which phase processes each token""" - type_names = {value: key for key, value in tokenTypes.items()} - - def wrapped(self, *args, **kwargs): - if function.__name__.startswith("process") and len(args) > 0: - token = args[0] - info = {"type": type_names[token['type']]} - if token['type'] in tagTokenTypes: - info["name"] = token['name'] - - self.parser.log.append((self.parser.tokenizer.state.__name__, - self.parser.phase.__class__.__name__, - self.__class__.__name__, - function.__name__, - info)) - return function(self, *args, **kwargs) - else: - return function(self, *args, **kwargs) - return wrapped - - def getMetaclass(use_metaclass, metaclass_func): - if use_metaclass: - return method_decorator_metaclass(metaclass_func) +class Phase(object): + """Base class for helper object that implements each phase of processing + """ + __slots__ = ("parser", "tree", "__startTagCache", "__endTagCache") + + def __init__(self, parser, tree): + self.parser = parser + self.tree = tree + self.__startTagCache = {} + self.__endTagCache = {} + + def processEOF(self): + raise NotImplementedError + + def processComment(self, token): + # For most phases the following is correct. Where it's not it will be + # overridden. + self.tree.insertComment(token, self.tree.openElements[-1]) + + def processDoctype(self, token): + self.parser.parseError("unexpected-doctype") + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processSpaceCharacters(self, token): + self.tree.insertText(token["data"]) + + def processStartTag(self, token): + # Note the caching is done here rather than BoundMethodDispatcher as doing it there + # requires a circular reference to the Phase, and this ends up with a significant + # (CPython 2.7, 3.8) GC cost when parsing many short inputs + name = token["name"] + # In Py2, using `in` is quicker in general than try/except KeyError + # In Py3, `in` is quicker when there are few cache hits (typically short inputs) + if name in self.__startTagCache: + func = self.__startTagCache[name] else: - return type - - # pylint:disable=unused-argument - class Phase(with_metaclass(getMetaclass(debug, log))): - """Base class for helper object that implements each phase of processing - """ - __slots__ = ("parser", "tree", "__startTagCache", "__endTagCache") - - def __init__(self, parser, tree): - self.parser = parser - self.tree = tree - self.__startTagCache = {} - self.__endTagCache = {} - - def processEOF(self): - raise NotImplementedError - - def processComment(self, token): - # For most phases the following is correct. Where it's not it will be - # overridden. - self.tree.insertComment(token, self.tree.openElements[-1]) - - def processDoctype(self, token): - self.parser.parseError("unexpected-doctype") - - def processCharacters(self, token): - self.tree.insertText(token["data"]) - - def processSpaceCharacters(self, token): - self.tree.insertText(token["data"]) - - def processStartTag(self, token): - # Note the caching is done here rather than BoundMethodDispatcher as doing it there - # requires a circular reference to the Phase, and this ends up with a significant - # (CPython 2.7, 3.8) GC cost when parsing many short inputs - name = token["name"] - # In Py2, using `in` is quicker in general than try/except KeyError - # In Py3, `in` is quicker when there are few cache hits (typically short inputs) - if name in self.__startTagCache: - func = self.__startTagCache[name] - else: - func = self.__startTagCache[name] = self.startTagHandler[name] - # bound the cache size in case we get loads of unknown tags - while len(self.__startTagCache) > len(self.startTagHandler) * 1.1: - # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 - self.__startTagCache.pop(next(iter(self.__startTagCache))) - return func(token) - - def startTagHtml(self, token): - if not self.parser.firstStartTag and token["name"] == "html": - self.parser.parseError("non-html-root") - # XXX Need a check here to see if the first start tag token emitted is - # this token... If it's not, invoke self.parser.parseError(). - for attr, value in token["data"].items(): - if attr not in self.tree.openElements[0].attributes: - self.tree.openElements[0].attributes[attr] = value - self.parser.firstStartTag = False - - def processEndTag(self, token): - # Note the caching is done here rather than BoundMethodDispatcher as doing it there - # requires a circular reference to the Phase, and this ends up with a significant - # (CPython 2.7, 3.8) GC cost when parsing many short inputs - name = token["name"] - # In Py2, using `in` is quicker in general than try/except KeyError - # In Py3, `in` is quicker when there are few cache hits (typically short inputs) - if name in self.__endTagCache: - func = self.__endTagCache[name] - else: - func = self.__endTagCache[name] = self.endTagHandler[name] - # bound the cache size in case we get loads of unknown tags - while len(self.__endTagCache) > len(self.endTagHandler) * 1.1: - # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 - self.__endTagCache.pop(next(iter(self.__endTagCache))) - return func(token) - - class InitialPhase(Phase): - __slots__ = tuple() - - def processSpaceCharacters(self, token): - pass - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - correct = token["correct"] - - if (name != "html" or publicId is not None or - systemId is not None and systemId != "about:legacy-compat"): - self.parser.parseError("unknown-doctype") - - if publicId is None: - publicId = "" - - self.tree.insertDoctype(token) - - if publicId != "": - publicId = publicId.translate(asciiUpper2Lower) - - if (not correct or token["name"] != "html" or - publicId.startswith( - ("+//silmaril//dtd html pro v0r11 19970101//", - "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", - "-//as//dtd html 3.0 aswedit + extensions//", - "-//ietf//dtd html 2.0 level 1//", - "-//ietf//dtd html 2.0 level 2//", - "-//ietf//dtd html 2.0 strict level 1//", - "-//ietf//dtd html 2.0 strict level 2//", - "-//ietf//dtd html 2.0 strict//", - "-//ietf//dtd html 2.0//", - "-//ietf//dtd html 2.1e//", - "-//ietf//dtd html 3.0//", - "-//ietf//dtd html 3.2 final//", - "-//ietf//dtd html 3.2//", - "-//ietf//dtd html 3//", - "-//ietf//dtd html level 0//", - "-//ietf//dtd html level 1//", - "-//ietf//dtd html level 2//", - "-//ietf//dtd html level 3//", - "-//ietf//dtd html strict level 0//", - "-//ietf//dtd html strict level 1//", - "-//ietf//dtd html strict level 2//", - "-//ietf//dtd html strict level 3//", - "-//ietf//dtd html strict//", - "-//ietf//dtd html//", - "-//metrius//dtd metrius presentational//", - "-//microsoft//dtd internet explorer 2.0 html strict//", - "-//microsoft//dtd internet explorer 2.0 html//", - "-//microsoft//dtd internet explorer 2.0 tables//", - "-//microsoft//dtd internet explorer 3.0 html strict//", - "-//microsoft//dtd internet explorer 3.0 html//", - "-//microsoft//dtd internet explorer 3.0 tables//", - "-//netscape comm. corp.//dtd html//", - "-//netscape comm. corp.//dtd strict html//", - "-//o'reilly and associates//dtd html 2.0//", - "-//o'reilly and associates//dtd html extended 1.0//", - "-//o'reilly and associates//dtd html extended relaxed 1.0//", - "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", - "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", - "-//spyglass//dtd html 2.0 extended//", - "-//sq//dtd html 2.0 hotmetal + extensions//", - "-//sun microsystems corp.//dtd hotjava html//", - "-//sun microsystems corp.//dtd hotjava strict html//", - "-//w3c//dtd html 3 1995-03-24//", - "-//w3c//dtd html 3.2 draft//", - "-//w3c//dtd html 3.2 final//", - "-//w3c//dtd html 3.2//", - "-//w3c//dtd html 3.2s draft//", - "-//w3c//dtd html 4.0 frameset//", - "-//w3c//dtd html 4.0 transitional//", - "-//w3c//dtd html experimental 19960712//", - "-//w3c//dtd html experimental 970421//", - "-//w3c//dtd w3 html//", - "-//w3o//dtd w3 html 3.0//", - "-//webtechs//dtd mozilla html 2.0//", - "-//webtechs//dtd mozilla html//")) or - publicId in ("-//w3o//dtd w3 html strict 3.0//en//", - "-/w3c/dtd html 4.0 transitional/en", - "html") or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is None or - systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): - self.parser.compatMode = "quirks" - elif (publicId.startswith( - ("-//w3c//dtd xhtml 1.0 frameset//", - "-//w3c//dtd xhtml 1.0 transitional//")) or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is not None): - self.parser.compatMode = "limited quirks" - - self.parser.phase = self.parser.phases["beforeHtml"] - - def anythingElse(self): + func = self.__startTagCache[name] = self.startTagHandler[name] + # bound the cache size in case we get loads of unknown tags + while len(self.__startTagCache) > len(self.startTagHandler) * 1.1: + # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 + self.__startTagCache.pop(next(iter(self.__startTagCache))) + return func(token) + + def startTagHtml(self, token): + if not self.parser.firstStartTag and token["name"] == "html": + self.parser.parseError("non-html-root") + # XXX Need a check here to see if the first start tag token emitted is + # this token... If it's not, invoke self.parser.parseError(). + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[0].attributes: + self.tree.openElements[0].attributes[attr] = value + self.parser.firstStartTag = False + + def processEndTag(self, token): + # Note the caching is done here rather than BoundMethodDispatcher as doing it there + # requires a circular reference to the Phase, and this ends up with a significant + # (CPython 2.7, 3.8) GC cost when parsing many short inputs + name = token["name"] + # In Py2, using `in` is quicker in general than try/except KeyError + # In Py3, `in` is quicker when there are few cache hits (typically short inputs) + if name in self.__endTagCache: + func = self.__endTagCache[name] + else: + func = self.__endTagCache[name] = self.endTagHandler[name] + # bound the cache size in case we get loads of unknown tags + while len(self.__endTagCache) > len(self.endTagHandler) * 1.1: + # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7 + self.__endTagCache.pop(next(iter(self.__endTagCache))) + return func(token) + + +class InitialPhase(Phase): + __slots__ = tuple() + + def processSpaceCharacters(self, token): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + correct = token["correct"] + + if (name != "html" or publicId is not None or + systemId is not None and systemId != "about:legacy-compat"): + self.parser.parseError("unknown-doctype") + + if publicId is None: + publicId = "" + + self.tree.insertDoctype(token) + + if publicId != "": + publicId = publicId.translate(asciiUpper2Lower) + + if (not correct or token["name"] != "html" or + publicId.startswith( + ("+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//")) or + publicId in ("-//w3o//dtd w3 html strict 3.0//en//", + "-/w3c/dtd html 4.0 transitional/en", + "html") or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is None or + systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): self.parser.compatMode = "quirks" - self.parser.phase = self.parser.phases["beforeHtml"] - - def processCharacters(self, token): - self.parser.parseError("expected-doctype-but-got-chars") - self.anythingElse() - return token - - def processStartTag(self, token): - self.parser.parseError("expected-doctype-but-got-start-tag", + elif (publicId.startswith( + ("-//w3c//dtd xhtml 1.0 frameset//", + "-//w3c//dtd xhtml 1.0 transitional//")) or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is not None): + self.parser.compatMode = "limited quirks" + + self.parser.phase = self.parser.phases["beforeHtml"] + + def anythingElse(self): + self.parser.compatMode = "quirks" + self.parser.phase = self.parser.phases["beforeHtml"] + + def processCharacters(self, token): + self.parser.parseError("expected-doctype-but-got-chars") + self.anythingElse() + return token + + def processStartTag(self, token): + self.parser.parseError("expected-doctype-but-got-start-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEndTag(self, token): + self.parser.parseError("expected-doctype-but-got-end-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEOF(self): + self.parser.parseError("expected-doctype-but-got-eof") + self.anythingElse() + return True + + +class BeforeHtmlPhase(Phase): + __slots__ = tuple() + + # helper methods + def insertHtmlElement(self): + self.tree.insertRoot(impliedTagToken("html", "StartTag")) + self.parser.phase = self.parser.phases["beforeHead"] + + # other + def processEOF(self): + self.insertHtmlElement() + return True + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.insertHtmlElement() + return token + + def processStartTag(self, token): + if token["name"] == "html": + self.parser.firstStartTag = True + self.insertHtmlElement() + return token + + def processEndTag(self, token): + if token["name"] not in ("head", "body", "html", "br"): + self.parser.parseError("unexpected-end-tag-before-html", {"name": token["name"]}) - self.anythingElse() + else: + self.insertHtmlElement() return token - def processEndTag(self, token): - self.parser.parseError("expected-doctype-but-got-end-tag", - {"name": token["name"]}) - self.anythingElse() - return token - def processEOF(self): - self.parser.parseError("expected-doctype-but-got-eof") - self.anythingElse() - return True +class BeforeHeadPhase(Phase): + __slots__ = tuple() - class BeforeHtmlPhase(Phase): - __slots__ = tuple() + def processEOF(self): + self.startTagHead(impliedTagToken("head", "StartTag")) + return True - # helper methods - def insertHtmlElement(self): - self.tree.insertRoot(impliedTagToken("html", "StartTag")) - self.parser.phase = self.parser.phases["beforeHead"] + def processSpaceCharacters(self, token): + pass - # other - def processEOF(self): - self.insertHtmlElement() - return True + def processCharacters(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) - def processSpaceCharacters(self, token): - pass + def startTagHead(self, token): + self.tree.insertElement(token) + self.tree.headPointer = self.tree.openElements[-1] + self.parser.phase = self.parser.phases["inHead"] - def processCharacters(self, token): - self.insertHtmlElement() - return token + def startTagOther(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token - def processStartTag(self, token): - if token["name"] == "html": - self.parser.firstStartTag = True - self.insertHtmlElement() - return token + def endTagImplyHead(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token - def processEndTag(self, token): - if token["name"] not in ("head", "body", "html", "br"): - self.parser.parseError("unexpected-end-tag-before-html", - {"name": token["name"]}) - else: - self.insertHtmlElement() - return token + def endTagOther(self, token): + self.parser.parseError("end-tag-after-implied-root", + {"name": token["name"]}) - class BeforeHeadPhase(Phase): - __slots__ = tuple() + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther - def processEOF(self): - self.startTagHead(impliedTagToken("head", "StartTag")) - return True + endTagHandler = _utils.MethodDispatcher([ + (("head", "body", "html", "br"), endTagImplyHead) + ]) + endTagHandler.default = endTagOther - def processSpaceCharacters(self, token): - pass - def processCharacters(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token +class InHeadPhase(Phase): + __slots__ = tuple() - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) + # the real thing + def processEOF(self): + self.anythingElse() + return True - def startTagHead(self, token): - self.tree.insertElement(token) - self.tree.headPointer = self.tree.openElements[-1] - self.parser.phase = self.parser.phases["inHead"] + def processCharacters(self, token): + self.anythingElse() + return token - def startTagOther(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) - def endTagImplyHead(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token + def startTagHead(self, token): + self.parser.parseError("two-heads-are-not-better-than-one") - def endTagOther(self, token): - self.parser.parseError("end-tag-after-implied-root", - {"name": token["name"]}) + def startTagBaseLinkCommand(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True - startTagHandler = _utils.MethodDispatcher([ - ("html", startTagHtml), - ("head", startTagHead) - ]) - startTagHandler.default = startTagOther + def startTagMeta(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + attributes = token["data"] + if self.parser.tokenizer.stream.charEncoding[1] == "tentative": + if "charset" in attributes: + self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) + elif ("content" in attributes and + "http-equiv" in attributes and + attributes["http-equiv"].lower() == "content-type"): + # Encoding it as UTF-8 here is a hack, as really we should pass + # the abstract Unicode string, and just use the + # ContentAttrParser on that, but using UTF-8 allows all chars + # to be encoded and as a ASCII-superset works. + data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) + parser = _inputstream.ContentAttrParser(data) + codec = parser.parse() + self.parser.tokenizer.stream.changeEncoding(codec) + + def startTagTitle(self, token): + self.parser.parseRCDataRawtext(token, "RCDATA") + + def startTagNoFramesStyle(self, token): + # Need to decide whether to implement the scripting-disabled case + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagNoscript(self, token): + if self.parser.scripting: + self.parser.parseRCDataRawtext(token, "RAWTEXT") + else: + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inHeadNoscript"] - endTagHandler = _utils.MethodDispatcher([ - (("head", "body", "html", "br"), endTagImplyHead) - ]) - endTagHandler.default = endTagOther + def startTagScript(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = "scriptDataState" + self.parser.originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["text"] + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHead(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "head", "Expected head got %s" % node.name + self.parser.phase = self.parser.phases["afterHead"] + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.endTagHead(impliedTagToken("head")) + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("title", startTagTitle), + (("noframes", "style"), startTagNoFramesStyle), + ("noscript", startTagNoscript), + ("script", startTagScript), + (("base", "basefont", "bgsound", "command", "link"), + startTagBaseLinkCommand), + ("meta", startTagMeta), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther + + endTagHandler = _utils.MethodDispatcher([ + ("head", endTagHead), + (("br", "html", "body"), endTagHtmlBodyBr) + ]) + endTagHandler.default = endTagOther + + +class InHeadNoscriptPhase(Phase): + __slots__ = tuple() + + def processEOF(self): + self.parser.parseError("eof-in-head-noscript") + self.anythingElse() + return True + + def processComment(self, token): + return self.parser.phases["inHead"].processComment(token) + + def processCharacters(self, token): + self.parser.parseError("char-in-head-noscript") + self.anythingElse() + return token + + def processSpaceCharacters(self, token): + return self.parser.phases["inHead"].processSpaceCharacters(token) + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBaseLinkCommand(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagHeadNoscript(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagNoscript(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "noscript", "Expected noscript got %s" % node.name + self.parser.phase = self.parser.phases["inHead"] + + def endTagBr(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + # Caller must raise parse error first! + self.endTagNoscript(impliedTagToken("noscript")) + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + (("basefont", "bgsound", "link", "meta", "noframes", "style"), startTagBaseLinkCommand), + (("head", "noscript"), startTagHeadNoscript), + ]) + startTagHandler.default = startTagOther + + endTagHandler = _utils.MethodDispatcher([ + ("noscript", endTagNoscript), + ("br", endTagBr), + ]) + endTagHandler.default = endTagOther + + +class AfterHeadPhase(Phase): + __slots__ = tuple() + + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBody(self, token): + self.parser.framesetOK = False + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inBody"] - class InHeadPhase(Phase): - __slots__ = tuple() + def startTagFrameset(self, token): + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] - # the real thing - def processEOF(self): - self.anythingElse() - return True + def startTagFromHead(self, token): + self.parser.parseError("unexpected-start-tag-out-of-my-head", + {"name": token["name"]}) + self.tree.openElements.append(self.tree.headPointer) + self.parser.phases["inHead"].processStartTag(token) + for node in self.tree.openElements[::-1]: + if node.name == "head": + self.tree.openElements.remove(node) + break - def processCharacters(self, token): - self.anythingElse() - return token + def startTagHead(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.tree.insertElement(impliedTagToken("body", "StartTag")) + self.parser.phase = self.parser.phases["inBody"] + self.parser.framesetOK = True + + startTagHandler = _utils.MethodDispatcher([ + ("html", startTagHtml), + ("body", startTagBody), + ("frameset", startTagFrameset), + (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", + "style", "title"), + startTagFromHead), + ("head", startTagHead) + ]) + startTagHandler.default = startTagOther + endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), + endTagHtmlBodyBr)]) + endTagHandler.default = endTagOther + + +class InBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody + # the really-really-really-very crazy mode + __slots__ = ("processSpaceCharacters",) + + def __init__(self, *args, **kwargs): + super(InBodyPhase, self).__init__(*args, **kwargs) + # Set this to the default handler + self.processSpaceCharacters = self.processSpaceCharactersNonPre + + def isMatchingFormattingElement(self, node1, node2): + return (node1.name == node2.name and + node1.namespace == node2.namespace and + node1.attributes == node2.attributes) + + # helper + def addFormattingElement(self, token): + self.tree.insertElement(token) + element = self.tree.openElements[-1] - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) + matchingElements = [] + for node in self.tree.activeFormattingElements[::-1]: + if node is Marker: + break + elif self.isMatchingFormattingElement(node, element): + matchingElements.append(node) + + assert len(matchingElements) <= 3 + if len(matchingElements) == 3: + self.tree.activeFormattingElements.remove(matchingElements[-1]) + self.tree.activeFormattingElements.append(element) + + # the real deal + def processEOF(self): + allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", + "tfoot", "th", "thead", "tr", "body", + "html")) + for node in self.tree.openElements[::-1]: + if node.name not in allowed_elements: + self.parser.parseError("expected-closing-tag-but-got-eof") + break + # Stop parsing + + def processSpaceCharactersDropNewline(self, token): + # Sometimes (start of
,, and