applied a couple of patches from Peter Jacobi to start to get rid of

* parser.c: applied a couple of patches from Peter Jacobi to start
  to get rid of ctxt->token, with a possible significant speed
  improvement to be gained once done. Better compliance with PE
  references constructs in DTDs too.
* test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
  from Peter too
Daniel
diff --git a/result/valid/t4.dtd b/result/valid/t4.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4.dtd
diff --git a/result/valid/t4.dtd.err b/result/valid/t4.dtd.err
new file mode 100644
index 0000000..bd98d32
--- /dev/null
+++ b/result/valid/t4.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t4.dtd:1: error: xmlParseStartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+^
+./test/valid/t4.dtd:1: error: Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+^
diff --git a/result/valid/t4.xml b/result/valid/t4.xml
new file mode 100644
index 0000000..c198f76
--- /dev/null
+++ b/result/valid/t4.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t4.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t4.xml.err b/result/valid/t4.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4.xml.err
diff --git a/result/valid/t4a.dtd b/result/valid/t4a.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4a.dtd
diff --git a/result/valid/t4a.dtd.err b/result/valid/t4a.dtd.err
new file mode 100644
index 0000000..5d2a8d8
--- /dev/null
+++ b/result/valid/t4a.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t4a.dtd:1: error: xmlParseStartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+^
+./test/valid/t4a.dtd:1: error: Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+^
diff --git a/result/valid/t4a.xml b/result/valid/t4a.xml
new file mode 100644
index 0000000..37e80f7
--- /dev/null
+++ b/result/valid/t4a.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t4a.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t4a.xml.err b/result/valid/t4a.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4a.xml.err
diff --git a/result/valid/t6.dtd b/result/valid/t6.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t6.dtd
diff --git a/result/valid/t6.dtd.err b/result/valid/t6.dtd.err
new file mode 100644
index 0000000..9eb7dc2
--- /dev/null
+++ b/result/valid/t6.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t6.dtd:1: error: xmlParseStartTag: invalid element name
+<!ENTITY % xdef "def">
+^
+./test/valid/t6.dtd:1: error: Extra content at the end of the document
+<!ENTITY % xdef "def">
+^
diff --git a/result/valid/t6.xml b/result/valid/t6.xml
new file mode 100644
index 0000000..23f2d25
--- /dev/null
+++ b/result/valid/t6.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t6.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t6.xml.err b/result/valid/t6.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t6.xml.err
diff --git a/result/valid/t8.xml b/result/valid/t8.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t8.xml
diff --git a/result/valid/t8.xml.err b/result/valid/t8.xml.err
new file mode 100644
index 0000000..d3fdf73
--- /dev/null
+++ b/result/valid/t8.xml.err
@@ -0,0 +1,18 @@
+Entity: line 1: error: xmlParseInternalSubset: error detected in Markup declaration
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: error: DOCTYPE improperly terminated
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: error: Start tag expected, '<' not found
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
diff --git a/result/valid/t8a.xml b/result/valid/t8a.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t8a.xml
diff --git a/result/valid/t8a.xml.err b/result/valid/t8a.xml.err
new file mode 100644
index 0000000..d3fdf73
--- /dev/null
+++ b/result/valid/t8a.xml.err
@@ -0,0 +1,18 @@
+Entity: line 1: error: xmlParseInternalSubset: error detected in Markup declaration
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: error: DOCTYPE improperly terminated
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: error: Start tag expected, '<' not found
+ %defroot; 
+         ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
diff --git a/result/valid/t9.xml b/result/valid/t9.xml
new file mode 100644
index 0000000..6950b14
--- /dev/null
+++ b/result/valid/t9.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ENTITY % deftest "&#60;!ELEMENT test (#PCDATA) >">
+<!ENTITY % defmiddle "&#60;!ELEMENT middle (test) >">
+<!ENTITY % defroot "&#60;!ELEMENT root (middle) >">
+<!ELEMENT root (middle)>
+<!ELEMENT middle (test)>
+<!ELEMENT test (#PCDATA)>
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/result/valid/t9.xml.err b/result/valid/t9.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t9.xml.err
diff --git a/result/valid/t9a.xml b/result/valid/t9a.xml
new file mode 100644
index 0000000..6950b14
--- /dev/null
+++ b/result/valid/t9a.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ENTITY % deftest "&#60;!ELEMENT test (#PCDATA) >">
+<!ENTITY % defmiddle "&#60;!ELEMENT middle (test) >">
+<!ENTITY % defroot "&#60;!ELEMENT root (middle) >">
+<!ELEMENT root (middle)>
+<!ELEMENT middle (test)>
+<!ELEMENT test (#PCDATA)>
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/result/valid/t9a.xml.err b/result/valid/t9a.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t9a.xml.err