summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorJohn Coggeshall <john@php.net>2004-01-03 05:23:24 +0000
committerJohn Coggeshall <john@php.net>2004-01-03 05:23:24 +0000
commit4ddb3d194d2780d7477d4bb4ce65f242cce46df4 (patch)
treedf2d80bd0a3dea3cd9b28431cf80d5bacb19c804 /ext
parentf37c9932ba822106070abd86184c2e303c06e987 (diff)
downloadphp-git-4ddb3d194d2780d7477d4bb4ce65f242cce46df4.tar.gz
Added examples for tidy v2.0 (in PHP5) and a few more tests..
Diffstat (limited to 'ext')
-rw-r--r--ext/tidy/examples/cleanhtml.php2
-rw-r--r--ext/tidy/examples/cleanhtml5.php39
-rw-r--r--ext/tidy/examples/dumpit5.php92
-rw-r--r--ext/tidy/examples/urlgrab.php2
-rw-r--r--ext/tidy/examples/urlgrab5.php41
-rw-r--r--ext/tidy/tests/007.phpt5
-rw-r--r--ext/tidy/tests/008.phpt19
-rw-r--r--ext/tidy/tests/009.phpt21
-rw-r--r--ext/tidy/tests/010.phpt248
-rw-r--r--ext/tidy/tests/011.phpt25
-rw-r--r--ext/tidy/tests/012.phpt350
-rw-r--r--ext/tidy/tests/013.phpt350
12 files changed, 1194 insertions, 0 deletions
diff --git a/ext/tidy/examples/cleanhtml.php b/ext/tidy/examples/cleanhtml.php
index 9d054cda4f..9a6713dc55 100644
--- a/ext/tidy/examples/cleanhtml.php
+++ b/ext/tidy/examples/cleanhtml.php
@@ -6,6 +6,8 @@
* A simple script to clean and repair HTML,XHTML,PHP,ASP,etc. documents
* if no file is provided, it reads from standard input.
*
+ * NOTE: Works only with tidy for PHP 4.3.x, for tidy in PHP 5 see cleanhtml5.php
+ *
* By: John Coggeshall <john@php.net>
*
* Usage: php cleanhtml.php [filename]
diff --git a/ext/tidy/examples/cleanhtml5.php b/ext/tidy/examples/cleanhtml5.php
new file mode 100644
index 0000000000..5e4095e8ac
--- /dev/null
+++ b/ext/tidy/examples/cleanhtml5.php
@@ -0,0 +1,39 @@
+<?php
+
+ /*
+ * cleanhtml5.php
+ *
+ * A simple script to clean and repair HTML,XHTML,PHP,ASP,etc. documents
+ * if no file is provided, it reads from standard input.
+ *
+ * NOTE: Works only with tidy for PHP 5, for tidy in PHP 4.3.x see cleanhtml.php
+ *
+ * By: John Coggeshall <john@php.net>
+ *
+ * Usage: php cleanhtml5.php [filename]
+ *
+ */
+
+ if(!isset($_SERVER['argv'][1])) {
+ $data = file_get_contents("php://stdin");
+ $tidy = tidy_parse_string($data);
+ } else {
+ $tidy = tidy_parse_file($_SERVER['argv'][1]);
+ }
+
+ $tidy->clean_repair();
+
+ if(!empty($tidy->error_buf)) {
+
+ echo "\n\nThe following errors or warnings occured:\n";
+ echo "{$tidy->error_buf}\n";
+
+ }
+
+ echo $tidy;
+
+?>
+
+
+
+ \ No newline at end of file
diff --git a/ext/tidy/examples/dumpit5.php b/ext/tidy/examples/dumpit5.php
new file mode 100644
index 0000000000..ad9157f6ad
--- /dev/null
+++ b/ext/tidy/examples/dumpit5.php
@@ -0,0 +1,92 @@
+<?php
+ /*
+ * dumpit5.php
+ *
+ * a command-line script which dumps the given HTML, PHP, ASP, XHTML, etc.
+ * file as it is represented in the document model.
+ *
+ * NOTE: Only works with tidy for PHP 5+, for tidy in 4.3.x, see dumpit.php
+ *
+ * By: John Coggeshall <john@php.net>
+ *
+ * Usage; php dumpit5.php <filename>
+ */
+
+ $tidy = tidy_parse_file($_SERVER['argv'][1]);
+
+ /* Optionally you can do this here if you want to fix up the document */
+
+ /* $tidy->clean_repair() */
+
+ $tree = $tidy->root();
+ dump_tree($tree);
+ echo "\n";
+
+ function node_type($type) {
+
+ switch($type) {
+
+ case TIDY_NODETYPE_ROOT: return "Root Node";
+ case TIDY_NODETYPE_DOCTYPE: return "DocType Node";
+ case TIDY_NODETYPE_COMMENT: return "Comment Node";
+ case TIDY_NODETYPE_PROCINS: return "ProcIns Node";
+ case TIDY_NODETYPE_TEXT: return "Text Node";
+ case TIDY_NODETYPE_START: return "Start Node";
+ case TIDY_NODETYPE_END: return "End Node";
+ case TIDY_NODETYPE_STARTEND: return "Start/End Node";
+ case TIDY_NODETYPE_CDATA: return "CDATA Node";
+ case TIDY_NODETYPE_SECTION: return "Section Node";
+ case TIDY_NODETYPE_ASP: return "ASP Source Code Node";
+ case TIDY_NODETYPE_PHP: return "PHP Source Code Node";
+ case TIDY_NODETYPE_JSTE: return "JSTE Source Code";
+ case TIDY_NODETYPE_XMLDECL: return "XML Declaration Node";
+ default: return "Unknown Node";
+ }
+ }
+
+ function do_leaf($string, $indent) {
+ for($i = 0; $i < $indent; $i++) {
+ echo " ";
+ }
+ echo $string;
+ }
+
+ function dump_tree(tidy_node $node, $indent = 0) {
+
+ /* Put something there if the node name is empty */
+ $nodename = trim(strtoupper($node->name));
+ $nodename = (empty($nodename)) ? "[EMPTY]" : $nodename;
+
+ /* Generate the Node, and a pretty name for it */
+ do_leaf(" + $nodename (".node_type($node->type).")\n", $indent);
+
+ /* Check to see if this node is a text node. Text nodes are
+ generated by start/end tags and contain the text in between.
+ i.e. <B>foo</B> will create a text node with $node->value
+ equal to 'foo' */
+ if($node->type == TIDY_NODETYPE_TEXT) {
+ do_leaf(" |\n", $indent);
+ do_leaf(" +---- Value: '{$node->value}'\n", $indent);
+ }
+
+ if(count($node->attribute)) {
+ do_leaf(" |\n", $indent);
+ do_leaf(" +---- Attributes\n", $indent);
+
+ foreach($node->attribute as $name=>$value) {
+ @do_leaf(" +-- $name\n", $indent);
+ do_leaf(" | +-- Value: $value\n", $indent);
+ }
+ }
+
+ /* Recurse along the children to generate the remaining nodes */
+ if($node->has_children()) {
+ foreach($node->child as $child) {
+ dump_tree($child, $indent + 3);
+ }
+ }
+
+ }
+
+
+?> \ No newline at end of file
diff --git a/ext/tidy/examples/urlgrab.php b/ext/tidy/examples/urlgrab.php
index 7896792ea5..9ec4c42bab 100644
--- a/ext/tidy/examples/urlgrab.php
+++ b/ext/tidy/examples/urlgrab.php
@@ -6,6 +6,8 @@
* A simple command-line utility to extract all of the URLS contained
* within <A HREF> tags from a document.
*
+ * NOTE: Only works with tidy for PHP 4.3.x, please see urlgrab5.php for tidy for PHP 5
+ *
* By: John Coggeshall <john@php.net>
*
* Usage: php urlgrab.php <file>
diff --git a/ext/tidy/examples/urlgrab5.php b/ext/tidy/examples/urlgrab5.php
new file mode 100644
index 0000000000..d9f9f7f065
--- /dev/null
+++ b/ext/tidy/examples/urlgrab5.php
@@ -0,0 +1,41 @@
+<?php
+ /*
+ * urlgrab5.php
+ *
+ * A simple command-line utility to extract all of the URLS contained
+ * within <A HREF> tags from a document.
+ *
+ * NOTE: Only works with tidy for PHP 5, please see urlgrab.php for tidy for PHP 4.3.x
+ *
+ * By: John Coggeshall <john@php.net>
+ *
+ * Usage: php urlgrab5.php <file>
+ *
+ */
+ function dump_nodes(tidy_node $node, &$urls = NULL) {
+
+ $urls = (is_array($urls)) ? $urls : array();
+
+ if(isset($node->id)) {
+ if($node->id == TIDY_TAG_A) {
+ $urls[] = $node->attribute['href'];
+ }
+ }
+
+ if($node->has_children()) {
+
+ foreach($node->child as $c) {
+
+ dump_nodes($c, $urls);
+
+ }
+
+ }
+
+ return $urls;
+ }
+
+ $a = tidy_parse_file($_SERVER['argv'][1]);
+ $a->clean_repair();
+ print_r(dump_nodes($a->html()));
+?> \ No newline at end of file
diff --git a/ext/tidy/tests/007.phpt b/ext/tidy/tests/007.phpt
index e5015eb3fd..4e7a088763 100644
--- a/ext/tidy/tests/007.phpt
+++ b/ext/tidy/tests/007.phpt
@@ -23,6 +23,9 @@ tidy.default_config=
$a->setopt("tab-size", 10);
echo "\nNew Value of 'tab-size': ";
var_dump($a->getopt("tab-size"));
+ tidy_setopt($a, "tab-size", 12);
+ echo "\nNew Value of 'tab-size': ";
+ var_dump(tidy_getopt($a, "tab-size"));
} else {
echo "Current Value of 'tidy-mark': ";
var_dump(tidy_getopt("tidy-mark"));
@@ -51,3 +54,5 @@ New Value of 'error-file': string(6) "foobar"
Current Value of 'tab-size': int(8)
New Value of 'tab-size': int(10)
+
+New Value of 'tab-size': int(12)
diff --git a/ext/tidy/tests/008.phpt b/ext/tidy/tests/008.phpt
new file mode 100644
index 0000000000..2896514726
--- /dev/null
+++ b/ext/tidy/tests/008.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Accessing the error buffer via $obj->error_buf...
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+ $a = tidy_parse_string("<HTML><asd asdf></HTML>");
+ echo $a->error_buf;
+
+?>
+--EXPECT--
+line 1 column 1 - Warning: missing <!DOCTYPE> declaration
+line 1 column 7 - Error: <asd> is not recognized!
+line 1 column 7 - Warning: discarding unexpected <asd>
+line 1 column 17 - Warning: discarding unexpected </html>
+line 1 column 7 - Warning: inserting missing 'title' element \ No newline at end of file
diff --git a/ext/tidy/tests/009.phpt b/ext/tidy/tests/009.phpt
new file mode 100644
index 0000000000..7c04b81a9e
--- /dev/null
+++ b/ext/tidy/tests/009.phpt
@@ -0,0 +1,21 @@
+--TEST--
+tidy_doc object overloading
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+ $a = tidy_parse_string("<HTML></HTML>");
+ echo $a;
+
+?>
+--EXPECT--
+<html>
+<head>
+<title></title>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/ext/tidy/tests/010.phpt b/ext/tidy/tests/010.phpt
new file mode 100644
index 0000000000..0d38f9df60
--- /dev/null
+++ b/ext/tidy/tests/010.phpt
@@ -0,0 +1,248 @@
+--TEST--
+Accessing root, body, html, and head nodes..
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+ $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000></BODY></HTML>");
+ var_dump($a->root());
+ var_dump($a->body());
+ var_dump($a->html());
+ var_dump($a->head());
+
+?>
+--EXPECT--
+object(tidy_node)#2 (5) {
+ ["value"]=>
+ string(94) "<html>
+<head>
+<title></title>
+</head>
+<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+</html>"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(0)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#3 (6) {
+ ["value"]=>
+ string(94) "<html>
+<head>
+<title></title>
+</head>
+<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+</html>"
+ ["name"]=>
+ string(4) "html"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(48)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(31) "<head>
+<title></title>
+</head>
+"
+ ["name"]=>
+ string(4) "head"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(46)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#5 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ [1]=>
+ &object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(49) "<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+"
+ ["name"]=>
+ string(4) "body"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(16)
+ ["attribute"]=>
+ array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+ }
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ }
+}
+object(tidy_node)#2 (6) {
+ ["value"]=>
+ string(49) "<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+"
+ ["name"]=>
+ string(4) "body"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(16)
+ ["attribute"]=>
+ array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+ }
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#2 (6) {
+ ["value"]=>
+ string(94) "<html>
+<head>
+<title></title>
+</head>
+<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+</html>"
+ ["name"]=>
+ string(4) "html"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(48)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#3 (6) {
+ ["value"]=>
+ string(31) "<head>
+<title></title>
+</head>
+"
+ ["name"]=>
+ string(4) "head"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(46)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ [1]=>
+ &object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(49) "<body bgcolor="#FFFFFF" alink="#000000">
+</body>
+"
+ ["name"]=>
+ string(4) "body"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(16)
+ ["attribute"]=>
+ array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+ }
+ ["child"]=>
+ NULL
+ }
+ }
+}
+object(tidy_node)#2 (6) {
+ ["value"]=>
+ string(31) "<head>
+<title></title>
+</head>
+"
+ ["name"]=>
+ string(4) "head"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(46)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
diff --git a/ext/tidy/tests/011.phpt b/ext/tidy/tests/011.phpt
new file mode 100644
index 0000000000..223da8500c
--- /dev/null
+++ b/ext/tidy/tests/011.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Accessing attributes of a node
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+ $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000></BODY></HTML>");
+ $body = $a->body();
+ var_dump($body->attribute);
+ foreach($body->attribute as $key=>$val) {
+ echo "Attrib '$key': $val\n";
+ }
+?>
+--EXPECT--
+array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+}
+Attrib 'bgcolor': #FFFFFF
+Attrib 'alink': #000000 \ No newline at end of file
diff --git a/ext/tidy/tests/012.phpt b/ext/tidy/tests/012.phpt
new file mode 100644
index 0000000000..013cb1fd0d
--- /dev/null
+++ b/ext/tidy/tests/012.phpt
@@ -0,0 +1,350 @@
+--TEST--
+Accessing children nodes
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+
+ function dump_nodes(tidy_node $node) {
+
+ var_dump($node->has_children());
+ if($node->has_children()) {
+
+ foreach($node->child as $c) {
+
+ var_dump($c);
+
+ if($c->has_children()) {
+
+ dump_nodes($c);
+
+ }
+ }
+
+ }
+
+ }
+
+ $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000><B>Hi</B><I>Bye<U>Test</U></I></BODY></HTML>");
+ $html = $a->html();
+ dump_nodes($html);
+
+?>
+--EXPECT--
+bool(true)
+object(tidy_node)#3 (6) {
+ ["value"]=>
+ string(31) "<head>
+<title></title>
+</head>
+"
+ ["name"]=>
+ string(4) "head"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(46)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#5 (6) {
+ ["value"]=>
+ string(80) "<body bgcolor="#FFFFFF" alink="#000000">
+<b>Hi</b><i>Bye<u>Test</u></i>
+</body>
+"
+ ["name"]=>
+ string(4) "body"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(16)
+ ["attribute"]=>
+ array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+ }
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(9) "<b>Hi</b>"
+ ["name"]=>
+ string(1) "b"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(8)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ [1]=>
+ &object(tidy_node)#8 (6) {
+ ["value"]=>
+ string(21) "<i>Bye<u>Test</u></i>"
+ ["name"]=>
+ string(1) "i"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(49)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ [1]=>
+ &object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ }
+ }
+ }
+}
+bool(true)
+object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(9) "<b>Hi</b>"
+ ["name"]=>
+ string(1) "b"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(8)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#8 (6) {
+ ["value"]=>
+ string(21) "<i>Bye<u>Test</u></i>"
+ ["name"]=>
+ string(1) "i"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(49)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ [1]=>
+ &object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ }
+}
+bool(true)
+object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
diff --git a/ext/tidy/tests/013.phpt b/ext/tidy/tests/013.phpt
new file mode 100644
index 0000000000..013cb1fd0d
--- /dev/null
+++ b/ext/tidy/tests/013.phpt
@@ -0,0 +1,350 @@
+--TEST--
+Accessing children nodes
+--SKIPIF--
+<?php if (!extension_loaded("tidy") || !class_exists("tidy_doc")) print "skip"; ?>
+--POST--
+--GET--
+--INI--
+--FILE--
+<?php
+
+ function dump_nodes(tidy_node $node) {
+
+ var_dump($node->has_children());
+ if($node->has_children()) {
+
+ foreach($node->child as $c) {
+
+ var_dump($c);
+
+ if($c->has_children()) {
+
+ dump_nodes($c);
+
+ }
+ }
+
+ }
+
+ }
+
+ $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000><B>Hi</B><I>Bye<U>Test</U></I></BODY></HTML>");
+ $html = $a->html();
+ dump_nodes($html);
+
+?>
+--EXPECT--
+bool(true)
+object(tidy_node)#3 (6) {
+ ["value"]=>
+ string(31) "<head>
+<title></title>
+</head>
+"
+ ["name"]=>
+ string(4) "head"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(46)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#4 (6) {
+ ["value"]=>
+ string(16) "<title></title>
+"
+ ["name"]=>
+ string(5) "title"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(111)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#5 (6) {
+ ["value"]=>
+ string(80) "<body bgcolor="#FFFFFF" alink="#000000">
+<b>Hi</b><i>Bye<u>Test</u></i>
+</body>
+"
+ ["name"]=>
+ string(4) "body"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(16)
+ ["attribute"]=>
+ array(2) {
+ ["bgcolor"]=>
+ string(7) "#FFFFFF"
+ ["alink"]=>
+ string(7) "#000000"
+ }
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(9) "<b>Hi</b>"
+ ["name"]=>
+ string(1) "b"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(8)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ [1]=>
+ &object(tidy_node)#8 (6) {
+ ["value"]=>
+ string(21) "<i>Bye<u>Test</u></i>"
+ ["name"]=>
+ string(1) "i"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(49)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ [1]=>
+ &object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ }
+ }
+ }
+}
+bool(true)
+object(tidy_node)#6 (6) {
+ ["value"]=>
+ string(9) "<b>Hi</b>"
+ ["name"]=>
+ string(1) "b"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(8)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#7 (5) {
+ ["value"]=>
+ string(2) "Hi"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#8 (6) {
+ ["value"]=>
+ string(21) "<i>Bye<u>Test</u></i>"
+ ["name"]=>
+ string(1) "i"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(49)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(2) {
+ [0]=>
+ &object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ [1]=>
+ &object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+ }
+ }
+}
+bool(true)
+object(tidy_node)#9 (5) {
+ ["value"]=>
+ string(3) "Bye"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}
+object(tidy_node)#10 (6) {
+ ["value"]=>
+ string(11) "<u>Test</u>"
+ ["name"]=>
+ string(1) "u"
+ ["type"]=>
+ int(5)
+ ["id"]=>
+ int(114)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ array(1) {
+ [0]=>
+ &object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+ }
+ }
+}
+bool(true)
+object(tidy_node)#11 (5) {
+ ["value"]=>
+ string(4) "Test"
+ ["name"]=>
+ string(0) ""
+ ["type"]=>
+ int(4)
+ ["attribute"]=>
+ NULL
+ ["child"]=>
+ NULL
+}