diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
index f44a6b26fb2..d773be3b4e3 100644
--- a/ext/xmlwriter/php_xmlwriter.c
+++ b/ext/xmlwriter/php_xmlwriter.c
@@ -139,6 +139,7 @@ static zend_function_entry xmlwriter_functions[] = {
PHP_FE(xmlwriter_write_attribute, NULL)
#if LIBXML_VERSION > 20617
PHP_FE(xmlwriter_start_attribute_ns,NULL)
+ PHP_FE(xmlwriter_write_attribute_ns,NULL)
#endif
PHP_FE(xmlwriter_start_element, NULL)
PHP_FE(xmlwriter_end_element, NULL)
@@ -160,6 +161,12 @@ static zend_function_entry xmlwriter_functions[] = {
PHP_FE(xmlwriter_write_dtd, NULL)
PHP_FE(xmlwriter_start_dtd_element, NULL)
PHP_FE(xmlwriter_end_dtd_element, NULL)
+ PHP_FE(xmlwriter_write_dtd_element, NULL)
+#if LIBXML_VERSION > 20608
+ PHP_FE(xmlwriter_start_dtd_attlist, NULL)
+ PHP_FE(xmlwriter_end_dtd_attlist, NULL)
+ PHP_FE(xmlwriter_write_dtd_attlist, NULL)
+#endif
PHP_FE(xmlwriter_output_memory, NULL)
PHP_FE(xmlwriter_flush, NULL)
{NULL, NULL, NULL}
@@ -184,6 +191,7 @@ static zend_function_entry xmlwriter_class_functions[] = {
PHP_ME_MAPPING(writeAttribute, xmlwriter_write_attribute, NULL)
#if LIBXML_VERSION > 20617
PHP_ME_MAPPING(startAttributeNs, xmlwriter_start_attribute_ns,NULL)
+ PHP_ME_MAPPING(writeAttributeNs, xmlwriter_write_attribute_ns,NULL)
#endif
PHP_ME_MAPPING(startElement, xmlwriter_start_element, NULL)
PHP_ME_MAPPING(endElement, xmlwriter_end_element, NULL)
@@ -205,6 +213,12 @@ static zend_function_entry xmlwriter_class_functions[] = {
PHP_ME_MAPPING(writeDtd, xmlwriter_write_dtd, NULL)
PHP_ME_MAPPING(startDtdElement, xmlwriter_start_dtd_element, NULL)
PHP_ME_MAPPING(endDtdElement, xmlwriter_end_dtd_element, NULL)
+ PHP_ME_MAPPING(writeDtdElement, xmlwriter_write_dtd_element, NULL)
+#if LIBXML_VERSION > 20608
+ PHP_ME_MAPPING(startDtdAttlist, xmlwriter_start_dtd_attlist, NULL)
+ PHP_ME_MAPPING(endDtdAttlist, xmlwriter_end_dtd_attlist, NULL)
+ PHP_ME_MAPPING(writeDtdAttlist, xmlwriter_write_dtd_attlist, NULL)
+#endif
PHP_ME_MAPPING(outputMemory, xmlwriter_output_memory, NULL)
PHP_ME_MAPPING(flush, xmlwriter_flush, NULL)
{NULL, NULL, NULL}
@@ -338,7 +352,7 @@ static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
/* }}} */
#if LIBXML_VERSION >= 20605
-/* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool)
+/* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool indent)
Toggle indentation on/off - returns FALSE on error */
PHP_FUNCTION(xmlwriter_set_indent)
{
@@ -628,6 +642,7 @@ PHP_FUNCTION(xmlwriter_write_attribute)
}
/* }}} */
+#if LIBXML_VERSION > 20617
/* {{{ proto bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)
Write full namespaced attribute - returns FALSE on error */
PHP_FUNCTION(xmlwriter_write_attribute_ns)
@@ -671,6 +686,7 @@ PHP_FUNCTION(xmlwriter_write_attribute_ns)
RETURN_FALSE;
}
/* }}} */
+#endif
/* {{{ proto bool xmlwriter_start_element(resource xmlwriter, string name)
Create start element tag - returns FALSE on error */
@@ -1364,7 +1380,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_element)
zval *this = getThis();
if (this) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &content, &content_len) == FAILURE) {
return;
}
XMLWRITER_FROM_OBJECT(intern, this);
@@ -1393,6 +1409,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_element)
}
/* }}} */
+#if LIBXML_VERSION > 20608
/* {{{ proto bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)
Create start DTD AttList - returns FALSE on error */
PHP_FUNCTION(xmlwriter_start_dtd_attlist)
@@ -1583,6 +1600,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_entity)
RETURN_FALSE;
}
/* }}} */
+#endif
/* {{{ proto resource xmlwriter_open_uri(resource xmlwriter, string source)
Create new xmlwriter using source uri for output */
diff --git a/ext/xmlwriter/php_xmlwriter.h b/ext/xmlwriter/php_xmlwriter.h
index 12038e7f34e..f27774da4c4 100644
--- a/ext/xmlwriter/php_xmlwriter.h
+++ b/ext/xmlwriter/php_xmlwriter.h
@@ -63,9 +63,9 @@ PHP_FUNCTION(xmlwriter_set_indent_string);
#endif
PHP_FUNCTION(xmlwriter_start_attribute);
PHP_FUNCTION(xmlwriter_end_attribute);
-PHP_FUNCTION(xmlwriter_start_attribute_ns);
PHP_FUNCTION(xmlwriter_write_attribute);
#if LIBXML_VERSION > 20617
+PHP_FUNCTION(xmlwriter_start_attribute_ns);
PHP_FUNCTION(xmlwriter_write_attribute_ns);
#endif
PHP_FUNCTION(xmlwriter_start_element);
@@ -92,6 +92,12 @@ PHP_FUNCTION(xmlwriter_end_dtd);
PHP_FUNCTION(xmlwriter_write_dtd);
PHP_FUNCTION(xmlwriter_start_dtd_element);
PHP_FUNCTION(xmlwriter_end_dtd_element);
+PHP_FUNCTION(xmlwriter_write_dtd_element);
+#if LIBXML_VERSION > 20608
+PHP_FUNCTION(xmlwriter_start_dtd_attlist);
+PHP_FUNCTION(xmlwriter_end_dtd_attlist);
+PHP_FUNCTION(xmlwriter_write_dtd_attlist);
+#endif
PHP_FUNCTION(xmlwriter_open_uri);
PHP_FUNCTION(xmlwriter_open_memory);
PHP_FUNCTION(xmlwriter_output_memory);
diff --git a/ext/xmlwriter/tests/006.phpt b/ext/xmlwriter/tests/006.phpt
new file mode 100644
index 00000000000..3b290ad2d26
--- /dev/null
+++ b/ext/xmlwriter/tests/006.phpt
@@ -0,0 +1,27 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, startDTD/writeElementNS
+--SKIPIF--
+
+--FILE--
+
+--EXPECT--
+dummy content
diff --git a/ext/xmlwriter/tests/007.phpt b/ext/xmlwriter/tests/007.phpt
new file mode 100644
index 00000000000..2e6ad3c54da
--- /dev/null
+++ b/ext/xmlwriter/tests/007.phpt
@@ -0,0 +1,38 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, Elements & Attributes
+--SKIPIF--
+
+--FILE--
+\"'&");
+xmlwriter_end_attribute($xw);
+xmlwriter_write_element($xw, 'chars', "special characters: <>\"'&");
+xmlwriter_end_element($xw);
+xmlwriter_end_document($xw);
+// Force to write and empty the buffer
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--EXPECT--
+
+
+
+ special characters: <>"'&
+
+
diff --git a/ext/xmlwriter/tests/008.phpt b/ext/xmlwriter/tests/008.phpt
new file mode 100644
index 00000000000..17e0eab5fa1
--- /dev/null
+++ b/ext/xmlwriter/tests/008.phpt
@@ -0,0 +1,35 @@
+--TEST--
+XMLWriter: libxml2 XML Writer DTD Element & Attlist
+--SKIPIF--
+
+--FILE--
+
+--EXPECT--
+
+
+
+
+
diff --git a/ext/xmlwriter/tests/009.phpt b/ext/xmlwriter/tests/009.phpt
new file mode 100644
index 00000000000..2322b7c0baf
--- /dev/null
+++ b/ext/xmlwriter/tests/009.phpt
@@ -0,0 +1,43 @@
+--TEST--
+XMLWriter: PI, Comment, CDATA
+--SKIPIF--
+
+--FILE--
+&"');
+xmlwriter_end_cdata($xw);
+xmlwriter_end_element($xw);
+xmlwriter_end_element($xw);
+xmlwriter_end_document($xw);
+// Force to write and empty the buffer
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--EXPECT--
+
+
+
+
+
+ &"]]>
+
+
diff --git a/ext/xmlwriter/tests/OO_007.phpt b/ext/xmlwriter/tests/OO_007.phpt
new file mode 100644
index 00000000000..119be931114
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_007.phpt
@@ -0,0 +1,39 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, Elements & Attributes
+--SKIPIF--
+start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+openMemory();
+$xw->setIndent(TRUE);
+$xw->setIndentString(' ');
+$xw->startDocument('1.0', "UTF-8");
+$xw->startElement('root');
+$xw->startElementNS('ns1', 'child1', 'urn:ns1');
+$xw->startAttributeNS('ns1', 'att1', 'urn:ns1');
+$xw->text('a&b');
+$xw->endAttribute();
+$xw->writeAttribute('att2', "double\" single'");
+$xw->startAttributeNS('ns1', 'att2', 'urn:ns1');
+$xw->text("<>\"'&");
+$xw->endAttribute();
+$xw->writeElement('chars', "special characters: <>\"'&");
+$xw->endElement();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECT--
+
+
+
+ special characters: <>"'&
+
+
diff --git a/ext/xmlwriter/tests/OO_008.phpt b/ext/xmlwriter/tests/OO_008.phpt
new file mode 100644
index 00000000000..ee555986ff0
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_008.phpt
@@ -0,0 +1,36 @@
+--TEST--
+XMLWriter: libxml2 XML Writer DTD Element & Attlist
+--SKIPIF--
+start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+openMemory();
+$xw->setIndent(TRUE);
+$xw->startDocument(NULL, "UTF-8");
+$xw->writeDtdElement('sxe', '(elem1+, elem11, elem22*)');
+$xw->writeDtdAttlist('sxe', 'id CDATA #implied');
+$xw->startDtdElement('elem1');
+$xw->text('elem2*');
+$xw->endDtdElement();
+$xw->startDtdAttlist('elem1');
+$xw->text("attr1 CDATA #required\n");
+$xw->text('attr2 CDATA #implied');
+$xw->endDtdAttlist();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECT--
+
+
+
+
+
diff --git a/ext/xmlwriter/tests/OO_009.phpt b/ext/xmlwriter/tests/OO_009.phpt
new file mode 100644
index 00000000000..659cfc8d6d3
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_009.phpt
@@ -0,0 +1,44 @@
+--TEST--
+XMLWriter: PI, Comment, CDATA
+--SKIPIF--
+start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+openMemory();
+$xw->setIndent(TRUE);
+$xw->startDocument("1.0", "UTF-8");
+$xw->startElement('root');
+$xw->writeAttribute('id', 'elem1');
+$xw->startElement('elem1');
+$xw->writeAttribute('attr1', 'first');
+$xw->writeComment('start PI');
+$xw->startElement('pi');
+$xw->writePi('php', 'echo "hello world"; ');
+$xw->endElement();
+$xw->startElement('cdata');
+$xw->startCdata();
+$xw->endElement();
+$xw->text('<>&"');
+$xw->endCdata();
+$xw->endElement();
+$xw->endElement();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECT--
+
+
+
+
+
+ &"]]>
+
+