summaryrefslogtreecommitdiff
path: root/ext/dom/documenttype.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/documenttype.c')
-rw-r--r--ext/dom/documenttype.c235
1 files changed, 235 insertions, 0 deletions
diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c
new file mode 100644
index 0000000..570999a
--- /dev/null
+++ b/ext/dom/documenttype.c
@@ -0,0 +1,235 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2013 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Christian Stocker <chregu@php.net> |
+ | Rob Richards <rrichards@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#if HAVE_LIBXML && HAVE_DOM
+#include "php_dom.h"
+
+/*
+* class DOMDocumentType extends DOMNode
+*
+* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-412266927
+* Since:
+*/
+
+const zend_function_entry php_dom_documenttype_class_functions[] = {
+ PHP_FE_END
+};
+
+/* {{{ name string
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134
+Since:
+*/
+int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+ xmlDtdPtr dtdptr;
+
+ dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (dtdptr == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ ALLOC_ZVAL(*retval);
+ ZVAL_STRING(*retval, (char *) (dtdptr->name), 1);
+
+ return SUCCESS;
+}
+
+/* }}} */
+
+/* {{{ entities DOMNamedNodeMap
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630
+Since:
+*/
+int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+ xmlDtdPtr doctypep;
+ xmlHashTable *entityht;
+ dom_object *intern;
+
+ doctypep = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (doctypep == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ MAKE_STD_ZVAL(*retval);
+ php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+
+ entityht = (xmlHashTable *) doctypep->entities;
+
+ intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+ dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC);
+
+ return SUCCESS;
+}
+
+/* }}} */
+
+/* {{{ notations DOMNamedNodeMap
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF
+Since:
+*/
+int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+ xmlDtdPtr doctypep;
+ xmlHashTable *notationht;
+ dom_object *intern;
+
+ doctypep = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (doctypep == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ MAKE_STD_ZVAL(*retval);
+ php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+
+ notationht = (xmlHashTable *) doctypep->notations;
+
+ intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+ dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC);
+
+ return SUCCESS;
+}
+
+/* }}} */
+
+/* {{{ publicId string
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId
+Since: DOM Level 2
+*/
+int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+ xmlDtdPtr dtdptr;
+
+ dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (dtdptr == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ ALLOC_ZVAL(*retval);
+ if (dtdptr->ExternalID) {
+ ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1);
+ } else {
+ ZVAL_EMPTY_STRING(*retval);
+ }
+ return SUCCESS;
+
+}
+
+/* }}} */
+
+/* {{{ systemId string
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId
+Since: DOM Level 2
+*/
+int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+ xmlDtdPtr dtdptr;
+
+ dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (dtdptr == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ ALLOC_ZVAL(*retval);
+ if (dtdptr->SystemID) {
+ ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1);
+ } else {
+ ZVAL_EMPTY_STRING(*retval);
+ }
+ return SUCCESS;
+}
+
+/* }}} */
+
+/* {{{ internalSubset string
+readonly=yes
+URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
+Since: DOM Level 2
+*/
+int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC)
+{
+
+ xmlDtdPtr dtdptr;
+ xmlDtd *intsubset;
+ xmlOutputBuffer *buff = NULL;
+
+ dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+
+ if (dtdptr == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ ALLOC_ZVAL(*retval);
+
+ if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
+ buff = xmlAllocOutputBuffer(NULL);
+ if (buff != NULL) {
+ xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
+ xmlOutputBufferFlush(buff);
+#ifdef LIBXML2_NEW_BUFFER
+ ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1);
+#else
+ ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1);
+#endif
+ (void)xmlOutputBufferClose(buff);
+ return SUCCESS;
+ }
+ }
+
+ ZVAL_EMPTY_STRING(*retval);
+
+ return SUCCESS;
+
+}
+
+/* }}} */
+
+#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */