1/* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2013 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Authors: Christian Stocker <chregu@php.net> | 16 | Rob Richards <rrichards@php.net> | 17 +----------------------------------------------------------------------+ 18*/ 19 20/* $Id$ */ 21 22#ifdef HAVE_CONFIG_H 23#include "config.h" 24#endif 25 26#include "php.h" 27#if HAVE_LIBXML && HAVE_DOM 28#include "php_dom.h" 29 30/* 31* class DOMDocumentType extends DOMNode 32* 33* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-412266927 34* Since: 35*/ 36 37const zend_function_entry php_dom_documenttype_class_functions[] = { 38 PHP_FE_END 39}; 40 41/* {{{ name string 42readonly=yes 43URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134 44Since: 45*/ 46int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC) 47{ 48 xmlDtdPtr dtdptr; 49 50 dtdptr = (xmlDtdPtr) dom_object_get_node(obj); 51 52 if (dtdptr == NULL) { 53 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 54 return FAILURE; 55 } 56 57 ALLOC_ZVAL(*retval); 58 ZVAL_STRING(*retval, (char *) (dtdptr->name), 1); 59 60 return SUCCESS; 61} 62 63/* }}} */ 64 65/* {{{ entities DOMNamedNodeMap 66readonly=yes 67URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630 68Since: 69*/ 70int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC) 71{ 72 xmlDtdPtr doctypep; 73 xmlHashTable *entityht; 74 dom_object *intern; 75 76 doctypep = (xmlDtdPtr) dom_object_get_node(obj); 77 78 if (doctypep == NULL) { 79 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 80 return FAILURE; 81 } 82 83 MAKE_STD_ZVAL(*retval); 84 php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); 85 86 entityht = (xmlHashTable *) doctypep->entities; 87 88 intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); 89 dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC); 90 91 return SUCCESS; 92} 93 94/* }}} */ 95 96/* {{{ notations DOMNamedNodeMap 97readonly=yes 98URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF 99Since: 100*/ 101int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC) 102{ 103 xmlDtdPtr doctypep; 104 xmlHashTable *notationht; 105 dom_object *intern; 106 107 doctypep = (xmlDtdPtr) dom_object_get_node(obj); 108 109 if (doctypep == NULL) { 110 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 111 return FAILURE; 112 } 113 114 MAKE_STD_ZVAL(*retval); 115 php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); 116 117 notationht = (xmlHashTable *) doctypep->notations; 118 119 intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); 120 dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC); 121 122 return SUCCESS; 123} 124 125/* }}} */ 126 127/* {{{ publicId string 128readonly=yes 129URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId 130Since: DOM Level 2 131*/ 132int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) 133{ 134 xmlDtdPtr dtdptr; 135 136 dtdptr = (xmlDtdPtr) dom_object_get_node(obj); 137 138 if (dtdptr == NULL) { 139 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 140 return FAILURE; 141 } 142 143 ALLOC_ZVAL(*retval); 144 if (dtdptr->ExternalID) { 145 ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1); 146 } else { 147 ZVAL_EMPTY_STRING(*retval); 148 } 149 return SUCCESS; 150 151} 152 153/* }}} */ 154 155/* {{{ systemId string 156readonly=yes 157URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId 158Since: DOM Level 2 159*/ 160int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) 161{ 162 xmlDtdPtr dtdptr; 163 164 dtdptr = (xmlDtdPtr) dom_object_get_node(obj); 165 166 if (dtdptr == NULL) { 167 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 168 return FAILURE; 169 } 170 171 ALLOC_ZVAL(*retval); 172 if (dtdptr->SystemID) { 173 ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1); 174 } else { 175 ZVAL_EMPTY_STRING(*retval); 176 } 177 return SUCCESS; 178} 179 180/* }}} */ 181 182/* {{{ internalSubset string 183readonly=yes 184URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset 185Since: DOM Level 2 186*/ 187int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC) 188{ 189 190 xmlDtdPtr dtdptr; 191 xmlDtd *intsubset; 192 xmlOutputBuffer *buff = NULL; 193 194 dtdptr = (xmlDtdPtr) dom_object_get_node(obj); 195 196 if (dtdptr == NULL) { 197 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); 198 return FAILURE; 199 } 200 201 ALLOC_ZVAL(*retval); 202 203 if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) { 204 buff = xmlAllocOutputBuffer(NULL); 205 if (buff != NULL) { 206 xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL); 207 xmlOutputBufferFlush(buff); 208#ifdef LIBXML2_NEW_BUFFER 209 ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1); 210#else 211 ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1); 212#endif 213 (void)xmlOutputBufferClose(buff); 214 return SUCCESS; 215 } 216 } 217 218 ZVAL_EMPTY_STRING(*retval); 219 220 return SUCCESS; 221 222} 223 224/* }}} */ 225 226#endif 227 228/* 229 * Local variables: 230 * tab-width: 4 231 * c-basic-offset: 4 232 * End: 233 * vim600: noet sw=4 ts=4 fdm=marker 234 * vim<600: noet sw=4 ts=4 235 */ 236