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
37 const zend_function_entry php_dom_documenttype_class_functions[] = {
38 PHP_FE_END
39 };
40
41 /* {{{ name string
42 readonly=yes
43 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134
44 Since:
45 */
dom_documenttype_name_read(dom_object * obj,zval ** retval TSRMLS_DC)46 int 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
66 readonly=yes
67 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630
68 Since:
69 */
dom_documenttype_entities_read(dom_object * obj,zval ** retval TSRMLS_DC)70 int 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
97 readonly=yes
98 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF
99 Since:
100 */
dom_documenttype_notations_read(dom_object * obj,zval ** retval TSRMLS_DC)101 int 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
128 readonly=yes
129 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId
130 Since: DOM Level 2
131 */
dom_documenttype_public_id_read(dom_object * obj,zval ** retval TSRMLS_DC)132 int 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
156 readonly=yes
157 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId
158 Since: DOM Level 2
159 */
dom_documenttype_system_id_read(dom_object * obj,zval ** retval TSRMLS_DC)160 int 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
183 readonly=yes
184 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
185 Since: DOM Level 2
186 */
dom_documenttype_internal_subset_read(dom_object * obj,zval ** retval TSRMLS_DC)187 int 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