Annotation of embedaddon/php/ext/xmlwriter/php_xmlwriter.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 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: | Author: Rob Richards <rrichards@php.net> |
! 16: | Pierre-A. Joye <pajoye@php.net> |
! 17: +----------------------------------------------------------------------+
! 18: */
! 19:
! 20: /* $Id: php_xmlwriter.c 321634 2012-01-01 13:15:04Z felipe $ */
! 21:
! 22: #ifdef HAVE_CONFIG_H
! 23: #include "config.h"
! 24: #endif
! 25:
! 26:
! 27: #include "php.h"
! 28: #include "php_ini.h"
! 29: #include "ext/standard/info.h"
! 30: #include "php_xmlwriter.h"
! 31: #include "ext/standard/php_string.h"
! 32:
! 33: #if LIBXML_VERSION >= 20605
! 34: static PHP_FUNCTION(xmlwriter_set_indent);
! 35: static PHP_FUNCTION(xmlwriter_set_indent_string);
! 36: #endif
! 37: static PHP_FUNCTION(xmlwriter_start_attribute);
! 38: static PHP_FUNCTION(xmlwriter_end_attribute);
! 39: static PHP_FUNCTION(xmlwriter_write_attribute);
! 40: #if LIBXML_VERSION > 20617
! 41: static PHP_FUNCTION(xmlwriter_start_attribute_ns);
! 42: static PHP_FUNCTION(xmlwriter_write_attribute_ns);
! 43: #endif
! 44: static PHP_FUNCTION(xmlwriter_start_element);
! 45: static PHP_FUNCTION(xmlwriter_end_element);
! 46: static PHP_FUNCTION(xmlwriter_full_end_element);
! 47: static PHP_FUNCTION(xmlwriter_start_element_ns);
! 48: static PHP_FUNCTION(xmlwriter_write_element);
! 49: static PHP_FUNCTION(xmlwriter_write_element_ns);
! 50: static PHP_FUNCTION(xmlwriter_start_pi);
! 51: static PHP_FUNCTION(xmlwriter_end_pi);
! 52: static PHP_FUNCTION(xmlwriter_write_pi);
! 53: static PHP_FUNCTION(xmlwriter_start_cdata);
! 54: static PHP_FUNCTION(xmlwriter_end_cdata);
! 55: static PHP_FUNCTION(xmlwriter_write_cdata);
! 56: static PHP_FUNCTION(xmlwriter_text);
! 57: static PHP_FUNCTION(xmlwriter_write_raw);
! 58: static PHP_FUNCTION(xmlwriter_start_document);
! 59: static PHP_FUNCTION(xmlwriter_end_document);
! 60: #if LIBXML_VERSION >= 20607
! 61: static PHP_FUNCTION(xmlwriter_start_comment);
! 62: static PHP_FUNCTION(xmlwriter_end_comment);
! 63: #endif
! 64: static PHP_FUNCTION(xmlwriter_write_comment);
! 65: static PHP_FUNCTION(xmlwriter_start_dtd);
! 66: static PHP_FUNCTION(xmlwriter_end_dtd);
! 67: static PHP_FUNCTION(xmlwriter_write_dtd);
! 68: static PHP_FUNCTION(xmlwriter_start_dtd_element);
! 69: static PHP_FUNCTION(xmlwriter_end_dtd_element);
! 70: static PHP_FUNCTION(xmlwriter_write_dtd_element);
! 71: #if LIBXML_VERSION > 20608
! 72: static PHP_FUNCTION(xmlwriter_start_dtd_attlist);
! 73: static PHP_FUNCTION(xmlwriter_end_dtd_attlist);
! 74: static PHP_FUNCTION(xmlwriter_write_dtd_attlist);
! 75: static PHP_FUNCTION(xmlwriter_start_dtd_entity);
! 76: static PHP_FUNCTION(xmlwriter_end_dtd_entity);
! 77: static PHP_FUNCTION(xmlwriter_write_dtd_entity);
! 78: #endif
! 79: static PHP_FUNCTION(xmlwriter_open_uri);
! 80: static PHP_FUNCTION(xmlwriter_open_memory);
! 81: static PHP_FUNCTION(xmlwriter_output_memory);
! 82: static PHP_FUNCTION(xmlwriter_flush);
! 83:
! 84: static zend_class_entry *xmlwriter_class_entry_ce;
! 85:
! 86: static void xmlwriter_free_resource_ptr(xmlwriter_object *intern TSRMLS_DC);
! 87: static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
! 88:
! 89: typedef int (*xmlwriter_read_one_char_t)(xmlTextWriterPtr writer, const xmlChar *content);
! 90: typedef int (*xmlwriter_read_int_t)(xmlTextWriterPtr writer);
! 91:
! 92: /* {{{ xmlwriter_object_free_storage */
! 93: static void xmlwriter_free_resource_ptr(xmlwriter_object *intern TSRMLS_DC)
! 94: {
! 95: if (intern) {
! 96: if (intern->ptr) {
! 97: xmlFreeTextWriter(intern->ptr);
! 98: intern->ptr = NULL;
! 99: }
! 100: if (intern->output) {
! 101: xmlBufferFree(intern->output);
! 102: intern->output = NULL;
! 103: }
! 104: efree(intern);
! 105: }
! 106: }
! 107: /* }}} */
! 108:
! 109: #ifdef ZEND_ENGINE_2
! 110: /* {{{ XMLWRITER_FROM_OBJECT */
! 111: #define XMLWRITER_FROM_OBJECT(intern, object) \
! 112: { \
! 113: ze_xmlwriter_object *obj = (ze_xmlwriter_object*) zend_object_store_get_object(object TSRMLS_CC); \
! 114: intern = obj->xmlwriter_ptr; \
! 115: if (!intern) { \
! 116: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid or unitialized XMLWriter object"); \
! 117: RETURN_FALSE; \
! 118: } \
! 119: }
! 120: /* }}} */
! 121:
! 122: static zend_object_handlers xmlwriter_object_handlers;
! 123:
! 124: /* {{{ xmlwriter_object_free_storage */
! 125: static void xmlwriter_object_free_storage(void *object TSRMLS_DC)
! 126: {
! 127: ze_xmlwriter_object * intern = (ze_xmlwriter_object *) object;
! 128: if (!intern) {
! 129: return;
! 130: }
! 131: if (intern->xmlwriter_ptr) {
! 132: xmlwriter_free_resource_ptr(intern->xmlwriter_ptr TSRMLS_CC);
! 133: }
! 134: intern->xmlwriter_ptr = NULL;
! 135: zend_object_std_dtor(&intern->zo TSRMLS_CC);
! 136:
! 137: efree(intern);
! 138: }
! 139: /* }}} */
! 140:
! 141:
! 142: /* {{{ xmlwriter_object_new */
! 143: static zend_object_value xmlwriter_object_new(zend_class_entry *class_type TSRMLS_DC)
! 144: {
! 145: ze_xmlwriter_object *intern;
! 146: zval *tmp;
! 147: zend_object_value retval;
! 148:
! 149: intern = emalloc(sizeof(ze_xmlwriter_object));
! 150: memset(&intern->zo, 0, sizeof(zend_object));
! 151: intern->xmlwriter_ptr = NULL;
! 152:
! 153: zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
! 154: zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,
! 155: (void *) &tmp, sizeof(zval *));
! 156:
! 157: retval.handle = zend_objects_store_put(intern,
! 158: NULL,
! 159: (zend_objects_free_object_storage_t) xmlwriter_object_free_storage,
! 160: NULL TSRMLS_CC);
! 161:
! 162: retval.handlers = (zend_object_handlers *) & xmlwriter_object_handlers;
! 163:
! 164: return retval;
! 165: }
! 166: /* }}} */
! 167: #endif
! 168:
! 169: #define XMLW_NAME_CHK(__err) \
! 170: if (xmlValidateName((xmlChar *) name, 0) != 0) { \
! 171: php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", __err); \
! 172: RETURN_FALSE; \
! 173: } \
! 174:
! 175: /* {{{ arginfo */
! 176: ZEND_BEGIN_ARG_INFO(arginfo_xmlwriter_void, 0)
! 177: ZEND_END_ARG_INFO()
! 178:
! 179: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_resource, 0, 0, 1)
! 180: ZEND_ARG_INFO(0, xmlwriter)
! 181: ZEND_END_ARG_INFO()
! 182:
! 183: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_open_uri, 0, 0, 1)
! 184: ZEND_ARG_INFO(0, uri)
! 185: ZEND_END_ARG_INFO()
! 186:
! 187: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_set_indent, 0, 0, 2)
! 188: ZEND_ARG_INFO(0, xmlwriter)
! 189: ZEND_ARG_INFO(0, indent)
! 190: ZEND_END_ARG_INFO()
! 191:
! 192: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_set_indent, 0, 0, 1)
! 193: ZEND_ARG_INFO(0, indent)
! 194: ZEND_END_ARG_INFO()
! 195:
! 196: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_set_indent_string, 0, 0, 2)
! 197: ZEND_ARG_INFO(0, xmlwriter)
! 198: ZEND_ARG_INFO(0, indentString)
! 199: ZEND_END_ARG_INFO()
! 200:
! 201: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_set_indent_string, 0, 0, 1)
! 202: ZEND_ARG_INFO(0, indentString)
! 203: ZEND_END_ARG_INFO()
! 204:
! 205: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_attribute, 0, 0, 2)
! 206: ZEND_ARG_INFO(0, xmlwriter)
! 207: ZEND_ARG_INFO(0, name)
! 208: ZEND_END_ARG_INFO()
! 209:
! 210: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_attribute, 0, 0, 1)
! 211: ZEND_ARG_INFO(0, name)
! 212: ZEND_END_ARG_INFO()
! 213:
! 214: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_attribute_ns, 0, 0, 4)
! 215: ZEND_ARG_INFO(0, xmlwriter)
! 216: ZEND_ARG_INFO(0, prefix)
! 217: ZEND_ARG_INFO(0, name)
! 218: ZEND_ARG_INFO(0, uri)
! 219: ZEND_END_ARG_INFO()
! 220:
! 221: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_attribute_ns, 0, 0, 3)
! 222: ZEND_ARG_INFO(0, prefix)
! 223: ZEND_ARG_INFO(0, name)
! 224: ZEND_ARG_INFO(0, uri)
! 225: ZEND_END_ARG_INFO()
! 226:
! 227: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_attribute_ns, 0, 0, 5)
! 228: ZEND_ARG_INFO(0, xmlwriter)
! 229: ZEND_ARG_INFO(0, prefix)
! 230: ZEND_ARG_INFO(0, name)
! 231: ZEND_ARG_INFO(0, uri)
! 232: ZEND_ARG_INFO(0, content)
! 233: ZEND_END_ARG_INFO()
! 234:
! 235: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_attribute_ns, 0, 0, 4)
! 236: ZEND_ARG_INFO(0, prefix)
! 237: ZEND_ARG_INFO(0, name)
! 238: ZEND_ARG_INFO(0, uri)
! 239: ZEND_ARG_INFO(0, content)
! 240: ZEND_END_ARG_INFO()
! 241:
! 242: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_attribute, 0, 0, 3)
! 243: ZEND_ARG_INFO(0, xmlwriter)
! 244: ZEND_ARG_INFO(0, name)
! 245: ZEND_ARG_INFO(0, value)
! 246: ZEND_END_ARG_INFO()
! 247:
! 248: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_attribute, 0, 0, 2)
! 249: ZEND_ARG_INFO(0, name)
! 250: ZEND_ARG_INFO(0, value)
! 251: ZEND_END_ARG_INFO()
! 252:
! 253: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_element, 0, 0, 2)
! 254: ZEND_ARG_INFO(0, xmlwriter)
! 255: ZEND_ARG_INFO(0, name)
! 256: ZEND_END_ARG_INFO()
! 257:
! 258: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_element, 0, 0, 1)
! 259: ZEND_ARG_INFO(0, name)
! 260: ZEND_END_ARG_INFO()
! 261:
! 262: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_element_ns, 0, 0, 4)
! 263: ZEND_ARG_INFO(0, xmlwriter)
! 264: ZEND_ARG_INFO(0, prefix)
! 265: ZEND_ARG_INFO(0, name)
! 266: ZEND_ARG_INFO(0, uri)
! 267: ZEND_END_ARG_INFO()
! 268:
! 269: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_element_ns, 0, 0, 3)
! 270: ZEND_ARG_INFO(0, prefix)
! 271: ZEND_ARG_INFO(0, name)
! 272: ZEND_ARG_INFO(0, uri)
! 273: ZEND_END_ARG_INFO()
! 274:
! 275: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_element, 0, 0, 2)
! 276: ZEND_ARG_INFO(0, xmlwriter)
! 277: ZEND_ARG_INFO(0, name)
! 278: ZEND_ARG_INFO(0, content)
! 279: ZEND_END_ARG_INFO()
! 280:
! 281: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_element, 0, 0, 1)
! 282: ZEND_ARG_INFO(0, name)
! 283: ZEND_ARG_INFO(0, content)
! 284: ZEND_END_ARG_INFO()
! 285:
! 286: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_element_ns, 0, 0, 4)
! 287: ZEND_ARG_INFO(0, xmlwriter)
! 288: ZEND_ARG_INFO(0, prefix)
! 289: ZEND_ARG_INFO(0, name)
! 290: ZEND_ARG_INFO(0, uri)
! 291: ZEND_ARG_INFO(0, content)
! 292: ZEND_END_ARG_INFO()
! 293:
! 294: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_element_ns, 0, 0, 3)
! 295: ZEND_ARG_INFO(0, prefix)
! 296: ZEND_ARG_INFO(0, name)
! 297: ZEND_ARG_INFO(0, uri)
! 298: ZEND_ARG_INFO(0, content)
! 299: ZEND_END_ARG_INFO()
! 300:
! 301: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_pi, 0, 0, 2)
! 302: ZEND_ARG_INFO(0, xmlwriter)
! 303: ZEND_ARG_INFO(0, target)
! 304: ZEND_END_ARG_INFO()
! 305:
! 306: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_pi, 0, 0, 1)
! 307: ZEND_ARG_INFO(0, target)
! 308: ZEND_END_ARG_INFO()
! 309:
! 310: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_pi, 0, 0, 3)
! 311: ZEND_ARG_INFO(0, xmlwriter)
! 312: ZEND_ARG_INFO(0, target)
! 313: ZEND_ARG_INFO(0, content)
! 314: ZEND_END_ARG_INFO()
! 315:
! 316: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_pi, 0, 0, 2)
! 317: ZEND_ARG_INFO(0, target)
! 318: ZEND_ARG_INFO(0, content)
! 319: ZEND_END_ARG_INFO()
! 320:
! 321: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_cdata, 0, 0, 2)
! 322: ZEND_ARG_INFO(0, xmlwriter)
! 323: ZEND_ARG_INFO(0, content)
! 324: ZEND_END_ARG_INFO()
! 325:
! 326: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_cdata, 0, 0, 1)
! 327: ZEND_ARG_INFO(0, content)
! 328: ZEND_END_ARG_INFO()
! 329:
! 330: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_text, 0, 0, 2)
! 331: ZEND_ARG_INFO(0, xmlwriter)
! 332: ZEND_ARG_INFO(0, content)
! 333: ZEND_END_ARG_INFO()
! 334:
! 335: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_text, 0, 0, 1)
! 336: ZEND_ARG_INFO(0, content)
! 337: ZEND_END_ARG_INFO()
! 338:
! 339: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_raw, 0, 0, 2)
! 340: ZEND_ARG_INFO(0, xmlwriter)
! 341: ZEND_ARG_INFO(0, content)
! 342: ZEND_END_ARG_INFO()
! 343:
! 344: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_raw, 0, 0, 1)
! 345: ZEND_ARG_INFO(0, content)
! 346: ZEND_END_ARG_INFO()
! 347:
! 348: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_document, 0, 0, 1)
! 349: ZEND_ARG_INFO(0, xmlwriter)
! 350: ZEND_ARG_INFO(0, version)
! 351: ZEND_ARG_INFO(0, encoding)
! 352: ZEND_ARG_INFO(0, standalone)
! 353: ZEND_END_ARG_INFO()
! 354:
! 355: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_document, 0, 0, 0)
! 356: ZEND_ARG_INFO(0, version)
! 357: ZEND_ARG_INFO(0, encoding)
! 358: ZEND_ARG_INFO(0, standalone)
! 359: ZEND_END_ARG_INFO()
! 360:
! 361: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_comment, 0, 0, 2)
! 362: ZEND_ARG_INFO(0, xmlwriter)
! 363: ZEND_ARG_INFO(0, content)
! 364: ZEND_END_ARG_INFO()
! 365:
! 366: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_comment, 0, 0, 1)
! 367: ZEND_ARG_INFO(0, content)
! 368: ZEND_END_ARG_INFO()
! 369:
! 370: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd, 0, 0, 2)
! 371: ZEND_ARG_INFO(0, xmlwriter)
! 372: ZEND_ARG_INFO(0, qualifiedName)
! 373: ZEND_ARG_INFO(0, publicId)
! 374: ZEND_ARG_INFO(0, systemId)
! 375: ZEND_END_ARG_INFO()
! 376:
! 377: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd, 0, 0, 1)
! 378: ZEND_ARG_INFO(0, qualifiedName)
! 379: ZEND_ARG_INFO(0, publicId)
! 380: ZEND_ARG_INFO(0, systemId)
! 381: ZEND_END_ARG_INFO()
! 382:
! 383: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd, 0, 0, 2)
! 384: ZEND_ARG_INFO(0, xmlwriter)
! 385: ZEND_ARG_INFO(0, name)
! 386: ZEND_ARG_INFO(0, publicId)
! 387: ZEND_ARG_INFO(0, systemId)
! 388: ZEND_ARG_INFO(0, subset)
! 389: ZEND_END_ARG_INFO()
! 390:
! 391: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd, 0, 0, 1)
! 392: ZEND_ARG_INFO(0, name)
! 393: ZEND_ARG_INFO(0, publicId)
! 394: ZEND_ARG_INFO(0, systemId)
! 395: ZEND_ARG_INFO(0, subset)
! 396: ZEND_END_ARG_INFO()
! 397:
! 398: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_element, 0, 0, 2)
! 399: ZEND_ARG_INFO(0, xmlwriter)
! 400: ZEND_ARG_INFO(0, qualifiedName)
! 401: ZEND_END_ARG_INFO()
! 402:
! 403: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_element, 0, 0, 1)
! 404: ZEND_ARG_INFO(0, qualifiedName)
! 405: ZEND_END_ARG_INFO()
! 406:
! 407: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_element, 0, 0, 3)
! 408: ZEND_ARG_INFO(0, xmlwriter)
! 409: ZEND_ARG_INFO(0, name)
! 410: ZEND_ARG_INFO(0, content)
! 411: ZEND_END_ARG_INFO()
! 412:
! 413: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_element, 0, 0, 2)
! 414: ZEND_ARG_INFO(0, name)
! 415: ZEND_ARG_INFO(0, content)
! 416: ZEND_END_ARG_INFO()
! 417:
! 418: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_attlist, 0, 0, 2)
! 419: ZEND_ARG_INFO(0, xmlwriter)
! 420: ZEND_ARG_INFO(0, name)
! 421: ZEND_END_ARG_INFO()
! 422:
! 423: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_attlist, 0, 0, 1)
! 424: ZEND_ARG_INFO(0, name)
! 425: ZEND_END_ARG_INFO()
! 426:
! 427: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_attlist, 0, 0, 3)
! 428: ZEND_ARG_INFO(0, xmlwriter)
! 429: ZEND_ARG_INFO(0, name)
! 430: ZEND_ARG_INFO(0, content)
! 431: ZEND_END_ARG_INFO()
! 432:
! 433: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_attlist, 0, 0, 2)
! 434: ZEND_ARG_INFO(0, name)
! 435: ZEND_ARG_INFO(0, content)
! 436: ZEND_END_ARG_INFO()
! 437:
! 438: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_entity, 0, 0, 3)
! 439: ZEND_ARG_INFO(0, xmlwriter)
! 440: ZEND_ARG_INFO(0, name)
! 441: ZEND_ARG_INFO(0, isparam)
! 442: ZEND_END_ARG_INFO()
! 443:
! 444: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_entity, 0, 0, 2)
! 445: ZEND_ARG_INFO(0, name)
! 446: ZEND_ARG_INFO(0, isparam)
! 447: ZEND_END_ARG_INFO()
! 448:
! 449: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_entity, 0, 0, 3)
! 450: ZEND_ARG_INFO(0, xmlwriter)
! 451: ZEND_ARG_INFO(0, name)
! 452: ZEND_ARG_INFO(0, content)
! 453: ZEND_END_ARG_INFO()
! 454:
! 455: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_entity, 0, 0, 2)
! 456: ZEND_ARG_INFO(0, name)
! 457: ZEND_ARG_INFO(0, content)
! 458: ZEND_END_ARG_INFO()
! 459:
! 460: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_output_memory, 0, 0, 1)
! 461: ZEND_ARG_INFO(0, xmlwriter)
! 462: ZEND_ARG_INFO(0, flush)
! 463: ZEND_END_ARG_INFO()
! 464:
! 465: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_output_memory, 0, 0, 0)
! 466: ZEND_ARG_INFO(0, flush)
! 467: ZEND_END_ARG_INFO()
! 468:
! 469: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_flush, 0, 0, 1)
! 470: ZEND_ARG_INFO(0, xmlwriter)
! 471: ZEND_ARG_INFO(0, empty)
! 472: ZEND_END_ARG_INFO()
! 473:
! 474: ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_flush, 0, 0, 0)
! 475: ZEND_ARG_INFO(0, empty)
! 476: ZEND_END_ARG_INFO()
! 477: /* }}} */
! 478:
! 479: /* {{{ xmlwriter_functions */
! 480: static const zend_function_entry xmlwriter_functions[] = {
! 481: PHP_FE(xmlwriter_open_uri, arginfo_xmlwriter_open_uri)
! 482: PHP_FE(xmlwriter_open_memory, arginfo_xmlwriter_void)
! 483: #if LIBXML_VERSION >= 20605
! 484: PHP_FE(xmlwriter_set_indent, arginfo_xmlwriter_set_indent)
! 485: PHP_FE(xmlwriter_set_indent_string, arginfo_xmlwriter_set_indent_string)
! 486: #endif
! 487: #if LIBXML_VERSION >= 20607
! 488: PHP_FE(xmlwriter_start_comment, arginfo_xmlwriter_resource)
! 489: PHP_FE(xmlwriter_end_comment, arginfo_xmlwriter_resource)
! 490: #endif
! 491: PHP_FE(xmlwriter_start_attribute, arginfo_xmlwriter_start_attribute)
! 492: PHP_FE(xmlwriter_end_attribute, arginfo_xmlwriter_resource)
! 493: PHP_FE(xmlwriter_write_attribute, arginfo_xmlwriter_write_attribute)
! 494: #if LIBXML_VERSION > 20617
! 495: PHP_FE(xmlwriter_start_attribute_ns,arginfo_xmlwriter_start_attribute_ns)
! 496: PHP_FE(xmlwriter_write_attribute_ns,arginfo_xmlwriter_write_attribute_ns)
! 497: #endif
! 498: PHP_FE(xmlwriter_start_element, arginfo_xmlwriter_start_element)
! 499: PHP_FE(xmlwriter_end_element, arginfo_xmlwriter_resource)
! 500: PHP_FE(xmlwriter_full_end_element, arginfo_xmlwriter_resource)
! 501: PHP_FE(xmlwriter_start_element_ns, arginfo_xmlwriter_start_element_ns)
! 502: PHP_FE(xmlwriter_write_element, arginfo_xmlwriter_write_element)
! 503: PHP_FE(xmlwriter_write_element_ns, arginfo_xmlwriter_write_element_ns)
! 504: PHP_FE(xmlwriter_start_pi, arginfo_xmlwriter_start_pi)
! 505: PHP_FE(xmlwriter_end_pi, arginfo_xmlwriter_resource)
! 506: PHP_FE(xmlwriter_write_pi, arginfo_xmlwriter_write_pi)
! 507: PHP_FE(xmlwriter_start_cdata, arginfo_xmlwriter_resource)
! 508: PHP_FE(xmlwriter_end_cdata, arginfo_xmlwriter_resource)
! 509: PHP_FE(xmlwriter_write_cdata, arginfo_xmlwriter_write_cdata)
! 510: PHP_FE(xmlwriter_text, arginfo_xmlwriter_text)
! 511: PHP_FE(xmlwriter_write_raw, arginfo_xmlwriter_write_raw)
! 512: PHP_FE(xmlwriter_start_document, arginfo_xmlwriter_start_document)
! 513: PHP_FE(xmlwriter_end_document, arginfo_xmlwriter_resource)
! 514: PHP_FE(xmlwriter_write_comment, arginfo_xmlwriter_write_comment)
! 515: PHP_FE(xmlwriter_start_dtd, arginfo_xmlwriter_start_dtd)
! 516: PHP_FE(xmlwriter_end_dtd, arginfo_xmlwriter_resource)
! 517: PHP_FE(xmlwriter_write_dtd, arginfo_xmlwriter_write_dtd)
! 518: PHP_FE(xmlwriter_start_dtd_element, arginfo_xmlwriter_start_dtd_element)
! 519: PHP_FE(xmlwriter_end_dtd_element, arginfo_xmlwriter_resource)
! 520: PHP_FE(xmlwriter_write_dtd_element, arginfo_xmlwriter_write_dtd_element)
! 521: #if LIBXML_VERSION > 20608
! 522: PHP_FE(xmlwriter_start_dtd_attlist, arginfo_xmlwriter_start_dtd_attlist)
! 523: PHP_FE(xmlwriter_end_dtd_attlist, arginfo_xmlwriter_resource)
! 524: PHP_FE(xmlwriter_write_dtd_attlist, arginfo_xmlwriter_write_dtd_attlist)
! 525: PHP_FE(xmlwriter_start_dtd_entity, arginfo_xmlwriter_start_dtd_entity)
! 526: PHP_FE(xmlwriter_end_dtd_entity, arginfo_xmlwriter_resource)
! 527: PHP_FE(xmlwriter_write_dtd_entity, arginfo_xmlwriter_write_dtd_entity)
! 528: #endif
! 529: PHP_FE(xmlwriter_output_memory, arginfo_xmlwriter_output_memory)
! 530: PHP_FE(xmlwriter_flush, arginfo_xmlwriter_flush)
! 531: PHP_FE_END
! 532: };
! 533: /* }}} */
! 534:
! 535: #ifdef ZEND_ENGINE_2
! 536: /* {{{ xmlwriter_class_functions */
! 537: static const zend_function_entry xmlwriter_class_functions[] = {
! 538: PHP_ME_MAPPING(openUri, xmlwriter_open_uri, arginfo_xmlwriter_open_uri, 0)
! 539: PHP_ME_MAPPING(openMemory, xmlwriter_open_memory, arginfo_xmlwriter_void, 0)
! 540: #if LIBXML_VERSION >= 20605
! 541: PHP_ME_MAPPING(setIndent, xmlwriter_set_indent, arginfo_xmlwriter_method_set_indent, 0)
! 542: PHP_ME_MAPPING(setIndentString, xmlwriter_set_indent_string, arginfo_xmlwriter_method_set_indent_string, 0)
! 543: #endif
! 544: #if LIBXML_VERSION >= 20607
! 545: PHP_ME_MAPPING(startComment, xmlwriter_start_comment, arginfo_xmlwriter_void, 0)
! 546: PHP_ME_MAPPING(endComment, xmlwriter_end_comment, arginfo_xmlwriter_void, 0)
! 547: #endif
! 548: PHP_ME_MAPPING(startAttribute, xmlwriter_start_attribute, arginfo_xmlwriter_method_start_attribute, 0)
! 549: PHP_ME_MAPPING(endAttribute, xmlwriter_end_attribute, arginfo_xmlwriter_void, 0)
! 550: PHP_ME_MAPPING(writeAttribute, xmlwriter_write_attribute, arginfo_xmlwriter_method_write_attribute, 0)
! 551: #if LIBXML_VERSION > 20617
! 552: PHP_ME_MAPPING(startAttributeNs, xmlwriter_start_attribute_ns,arginfo_xmlwriter_method_start_attribute_ns, 0)
! 553: PHP_ME_MAPPING(writeAttributeNs, xmlwriter_write_attribute_ns,arginfo_xmlwriter_method_write_attribute_ns, 0)
! 554: #endif
! 555: PHP_ME_MAPPING(startElement, xmlwriter_start_element, arginfo_xmlwriter_method_start_element, 0)
! 556: PHP_ME_MAPPING(endElement, xmlwriter_end_element, arginfo_xmlwriter_void, 0)
! 557: PHP_ME_MAPPING(fullEndElement, xmlwriter_full_end_element, arginfo_xmlwriter_void, 0)
! 558: PHP_ME_MAPPING(startElementNs, xmlwriter_start_element_ns, arginfo_xmlwriter_method_start_element_ns, 0)
! 559: PHP_ME_MAPPING(writeElement, xmlwriter_write_element, arginfo_xmlwriter_method_write_element, 0)
! 560: PHP_ME_MAPPING(writeElementNs, xmlwriter_write_element_ns, arginfo_xmlwriter_method_write_element_ns, 0)
! 561: PHP_ME_MAPPING(startPi, xmlwriter_start_pi, arginfo_xmlwriter_method_start_pi, 0)
! 562: PHP_ME_MAPPING(endPi, xmlwriter_end_pi, arginfo_xmlwriter_void, 0)
! 563: PHP_ME_MAPPING(writePi, xmlwriter_write_pi, arginfo_xmlwriter_method_write_pi, 0)
! 564: PHP_ME_MAPPING(startCdata, xmlwriter_start_cdata, arginfo_xmlwriter_void, 0)
! 565: PHP_ME_MAPPING(endCdata, xmlwriter_end_cdata, arginfo_xmlwriter_void, 0)
! 566: PHP_ME_MAPPING(writeCdata, xmlwriter_write_cdata, arginfo_xmlwriter_method_write_cdata, 0)
! 567: PHP_ME_MAPPING(text, xmlwriter_text, arginfo_xmlwriter_method_text, 0)
! 568: PHP_ME_MAPPING(writeRaw, xmlwriter_write_raw, arginfo_xmlwriter_method_write_raw, 0)
! 569: PHP_ME_MAPPING(startDocument, xmlwriter_start_document, arginfo_xmlwriter_method_start_document, 0)
! 570: PHP_ME_MAPPING(endDocument, xmlwriter_end_document, arginfo_xmlwriter_void, 0)
! 571: PHP_ME_MAPPING(writeComment, xmlwriter_write_comment, arginfo_xmlwriter_method_write_comment, 0)
! 572: PHP_ME_MAPPING(startDtd, xmlwriter_start_dtd, arginfo_xmlwriter_method_start_dtd, 0)
! 573: PHP_ME_MAPPING(endDtd, xmlwriter_end_dtd, arginfo_xmlwriter_void, 0)
! 574: PHP_ME_MAPPING(writeDtd, xmlwriter_write_dtd, arginfo_xmlwriter_method_write_dtd, 0)
! 575: PHP_ME_MAPPING(startDtdElement, xmlwriter_start_dtd_element,arginfo_xmlwriter_method_start_dtd_element, 0)
! 576: PHP_ME_MAPPING(endDtdElement, xmlwriter_end_dtd_element, arginfo_xmlwriter_void, 0)
! 577: PHP_ME_MAPPING(writeDtdElement, xmlwriter_write_dtd_element, arginfo_xmlwriter_method_write_dtd_element, 0)
! 578: #if LIBXML_VERSION > 20608
! 579: PHP_ME_MAPPING(startDtdAttlist, xmlwriter_start_dtd_attlist, arginfo_xmlwriter_method_start_dtd_attlist, 0)
! 580: PHP_ME_MAPPING(endDtdAttlist, xmlwriter_end_dtd_attlist, arginfo_xmlwriter_void, 0)
! 581: PHP_ME_MAPPING(writeDtdAttlist, xmlwriter_write_dtd_attlist, arginfo_xmlwriter_method_write_dtd_attlist, 0)
! 582: PHP_ME_MAPPING(startDtdEntity, xmlwriter_start_dtd_entity, arginfo_xmlwriter_method_start_dtd_entity, 0)
! 583: PHP_ME_MAPPING(endDtdEntity, xmlwriter_end_dtd_entity, arginfo_xmlwriter_void, 0)
! 584: PHP_ME_MAPPING(writeDtdEntity, xmlwriter_write_dtd_entity, arginfo_xmlwriter_method_write_dtd_entity, 0)
! 585: #endif
! 586: PHP_ME_MAPPING(outputMemory, xmlwriter_output_memory, arginfo_xmlwriter_method_output_memory, 0)
! 587: PHP_ME_MAPPING(flush, xmlwriter_flush, arginfo_xmlwriter_method_flush, 0)
! 588: {NULL, NULL, NULL}
! 589: };
! 590: /* }}} */
! 591: #endif
! 592:
! 593: /* {{{ function prototypes */
! 594: static PHP_MINIT_FUNCTION(xmlwriter);
! 595: static PHP_MSHUTDOWN_FUNCTION(xmlwriter);
! 596: static PHP_MINFO_FUNCTION(xmlwriter);
! 597:
! 598: static int le_xmlwriter;
! 599: /* }}} */
! 600:
! 601: /* _xmlwriter_get_valid_file_path should be made a
! 602: common function in libxml extension as code is common to a few xml extensions */
! 603: /* {{{ _xmlwriter_get_valid_file_path */
! 604: static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len TSRMLS_DC) {
! 605: xmlURI *uri;
! 606: xmlChar *escsource;
! 607: char *file_dest;
! 608: int isFileUri = 0;
! 609:
! 610: uri = xmlCreateURI();
! 611: escsource = xmlURIEscapeStr((xmlChar *)source, (xmlChar *) ":");
! 612: xmlParseURIReference(uri, (char *)escsource);
! 613: xmlFree(escsource);
! 614:
! 615: if (uri->scheme != NULL) {
! 616: /* absolute file uris - libxml only supports localhost or empty host */
! 617: if (strncasecmp(source, "file:///", 8) == 0) {
! 618: if (source[sizeof("file:///") - 1] == '\0') {
! 619: return NULL;
! 620: }
! 621: isFileUri = 1;
! 622: #ifdef PHP_WIN32
! 623: source += 8;
! 624: #else
! 625: source += 7;
! 626: #endif
! 627: } else if (strncasecmp(source, "file://localhost/",17) == 0) {
! 628: if (source[sizeof("file://localhost/") - 1] == '\0') {
! 629: return NULL;
! 630: }
! 631:
! 632: isFileUri = 1;
! 633: #ifdef PHP_WIN32
! 634: source += 17;
! 635: #else
! 636: source += 16;
! 637: #endif
! 638: }
! 639: }
! 640:
! 641: if ((uri->scheme == NULL || isFileUri)) {
! 642: char file_dirname[MAXPATHLEN];
! 643: size_t dir_len;
! 644:
! 645: if (!VCWD_REALPATH(source, resolved_path) && !expand_filepath(source, resolved_path TSRMLS_CC)) {
! 646: xmlFreeURI(uri);
! 647: return NULL;
! 648: }
! 649:
! 650: memcpy(file_dirname, source, strlen(source));
! 651: dir_len = php_dirname(file_dirname, strlen(source));
! 652:
! 653: if (dir_len > 0) {
! 654: struct stat buf;
! 655: if (php_sys_stat(file_dirname, &buf) != 0) {
! 656: xmlFreeURI(uri);
! 657: return NULL;
! 658: }
! 659: }
! 660:
! 661: file_dest = resolved_path;
! 662: } else {
! 663: file_dest = source;
! 664: }
! 665:
! 666: xmlFreeURI(uri);
! 667:
! 668: return file_dest;
! 669: }
! 670: /* }}} */
! 671:
! 672: #ifndef ZEND_ENGINE_2
! 673: /* Channel libxml file io layer through the PHP streams subsystem.
! 674: * This allows use of ftps:// and https:// urls */
! 675:
! 676: /* {{{ php_xmlwriter_streams_IO_open_write_wrapper */
! 677: static void *php_xmlwriter_streams_IO_open_write_wrapper(const char *filename TSRMLS_DC)
! 678: {
! 679: php_stream_wrapper *wrapper = NULL;
! 680: void *ret_val = NULL;
! 681:
! 682: ret_val = php_stream_open_wrapper_ex((char *)filename, "wb", ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, NULL);
! 683: return ret_val;
! 684: }
! 685: /* }}} */
! 686:
! 687: /* {{{ php_xmlwriter_streams_IO_write */
! 688: static int php_xmlwriter_streams_IO_write(void *context, const char *buffer, int len)
! 689: {
! 690: TSRMLS_FETCH();
! 691: return php_stream_write((php_stream*)context, buffer, len);
! 692: }
! 693: /* }}} */
! 694:
! 695: /* {{{ php_xmlwriter_streams_IO_close */
! 696: static int php_xmlwriter_streams_IO_close(void *context)
! 697: {
! 698: TSRMLS_FETCH();
! 699: return php_stream_close((php_stream*)context);
! 700: }
! 701: /* }}} */
! 702: #endif
! 703:
! 704: /* {{{ xmlwriter_module_entry
! 705: */
! 706: zend_module_entry xmlwriter_module_entry = {
! 707: STANDARD_MODULE_HEADER,
! 708: "xmlwriter",
! 709: xmlwriter_functions,
! 710: PHP_MINIT(xmlwriter),
! 711: PHP_MSHUTDOWN(xmlwriter),
! 712: NULL,
! 713: NULL,
! 714: PHP_MINFO(xmlwriter),
! 715: "0.1",
! 716: STANDARD_MODULE_PROPERTIES
! 717: };
! 718: /* }}} */
! 719:
! 720: #ifdef COMPILE_DL_XMLWRITER
! 721: ZEND_GET_MODULE(xmlwriter)
! 722: #endif
! 723:
! 724: /* {{{ xmlwriter_objects_clone
! 725: static void xmlwriter_objects_clone(void *object, void **object_clone TSRMLS_DC)
! 726: {
! 727: TODO
! 728: }
! 729: }}} */
! 730:
! 731: /* {{{ xmlwriter_dtor */
! 732: static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
! 733: xmlwriter_object *intern;
! 734:
! 735: intern = (xmlwriter_object *) rsrc->ptr;
! 736: xmlwriter_free_resource_ptr(intern TSRMLS_CC);
! 737: }
! 738: /* }}} */
! 739:
! 740: static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_one_char_t internal_function, char *err_string)
! 741: {
! 742: zval *pind;
! 743: xmlwriter_object *intern;
! 744: xmlTextWriterPtr ptr;
! 745: char *name;
! 746: int name_len, retval;
! 747:
! 748: #ifdef ZEND_ENGINE_2
! 749: zval *this = getThis();
! 750:
! 751: if (this) {
! 752: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
! 753: return;
! 754: }
! 755: XMLWRITER_FROM_OBJECT(intern, this);
! 756: } else
! 757: #endif
! 758: {
! 759: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
! 760: return;
! 761: }
! 762:
! 763: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 764: }
! 765:
! 766: if (err_string != NULL) {
! 767: XMLW_NAME_CHK(err_string);
! 768: }
! 769:
! 770: ptr = intern->ptr;
! 771:
! 772: if (ptr) {
! 773: retval = internal_function(ptr, (xmlChar *) name);
! 774: if (retval != -1) {
! 775: RETURN_TRUE;
! 776: }
! 777: }
! 778:
! 779: RETURN_FALSE;
! 780: }
! 781:
! 782: static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t internal_function)
! 783: {
! 784: zval *pind;
! 785: xmlwriter_object *intern;
! 786: xmlTextWriterPtr ptr;
! 787: int retval;
! 788: #ifdef ZEND_ENGINE_2
! 789: zval *this = getThis();
! 790:
! 791: if (this) {
! 792: XMLWRITER_FROM_OBJECT(intern, this);
! 793: if (zend_parse_parameters_none() == FAILURE) {
! 794: return;
! 795: }
! 796: } else
! 797: #endif
! 798: {
! 799: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
! 800: return;
! 801: }
! 802: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 803: }
! 804:
! 805: ptr = intern->ptr;
! 806:
! 807: if (ptr) {
! 808: retval = internal_function(ptr);
! 809: if (retval != -1) {
! 810: RETURN_TRUE;
! 811: }
! 812: }
! 813:
! 814: RETURN_FALSE;
! 815: }
! 816:
! 817: #if LIBXML_VERSION >= 20605
! 818: /* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool indent)
! 819: Toggle indentation on/off - returns FALSE on error */
! 820: static PHP_FUNCTION(xmlwriter_set_indent)
! 821: {
! 822: zval *pind;
! 823: xmlwriter_object *intern;
! 824: xmlTextWriterPtr ptr;
! 825: int retval;
! 826: zend_bool indent;
! 827:
! 828: #ifdef ZEND_ENGINE_2
! 829: zval *this = getThis();
! 830:
! 831: if (this) {
! 832: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &indent) == FAILURE) {
! 833: return;
! 834: }
! 835: XMLWRITER_FROM_OBJECT(intern, this);
! 836: } else
! 837: #endif
! 838: {
! 839: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &pind, &indent) == FAILURE) {
! 840: return;
! 841: }
! 842: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 843: }
! 844:
! 845:
! 846: ptr = intern->ptr;
! 847: if (ptr) {
! 848: retval = xmlTextWriterSetIndent(ptr, indent);
! 849: if (retval == 0) {
! 850: RETURN_TRUE;
! 851: }
! 852: }
! 853:
! 854: RETURN_FALSE;
! 855: }
! 856: /* }}} */
! 857:
! 858: /* {{{ proto bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)
! 859: Set string used for indenting - returns FALSE on error */
! 860: static PHP_FUNCTION(xmlwriter_set_indent_string)
! 861: {
! 862: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterSetIndentString, NULL);
! 863: }
! 864: /* }}} */
! 865:
! 866: #endif
! 867:
! 868: /* {{{ proto bool xmlwriter_start_attribute(resource xmlwriter, string name)
! 869: Create start attribute - returns FALSE on error */
! 870: static PHP_FUNCTION(xmlwriter_start_attribute)
! 871: {
! 872: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartAttribute, "Invalid Attribute Name");
! 873: }
! 874: /* }}} */
! 875:
! 876: /* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter)
! 877: End attribute - returns FALSE on error */
! 878: static PHP_FUNCTION(xmlwriter_end_attribute)
! 879: {
! 880: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndAttribute);
! 881: }
! 882: /* }}} */
! 883:
! 884: #if LIBXML_VERSION > 20617
! 885: /* {{{ proto bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)
! 886: Create start namespaced attribute - returns FALSE on error */
! 887: static PHP_FUNCTION(xmlwriter_start_attribute_ns)
! 888: {
! 889: zval *pind;
! 890: xmlwriter_object *intern;
! 891: xmlTextWriterPtr ptr;
! 892: char *name, *prefix, *uri;
! 893: int name_len, prefix_len, uri_len, retval;
! 894: #ifdef ZEND_ENGINE_2
! 895: zval *this = getThis();
! 896:
! 897: if (this) {
! 898: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss!",
! 899: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
! 900: return;
! 901: }
! 902: XMLWRITER_FROM_OBJECT(intern, this);
! 903: } else
! 904: #endif
! 905: {
! 906: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss!", &pind,
! 907: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
! 908: return;
! 909: }
! 910: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 911: }
! 912:
! 913: XMLW_NAME_CHK("Invalid Attribute Name");
! 914:
! 915: ptr = intern->ptr;
! 916:
! 917: if (ptr) {
! 918: retval = xmlTextWriterStartAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri);
! 919: if (retval != -1) {
! 920: RETURN_TRUE;
! 921: }
! 922: }
! 923:
! 924: RETURN_FALSE;
! 925: }
! 926: /* }}} */
! 927: #endif
! 928:
! 929: /* {{{ proto bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)
! 930: Write full attribute - returns FALSE on error */
! 931: static PHP_FUNCTION(xmlwriter_write_attribute)
! 932: {
! 933: zval *pind;
! 934: xmlwriter_object *intern;
! 935: xmlTextWriterPtr ptr;
! 936: char *name, *content;
! 937: int name_len, content_len, retval;
! 938:
! 939: #ifdef ZEND_ENGINE_2
! 940: zval *this = getThis();
! 941:
! 942: if (this) {
! 943: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
! 944: &name, &name_len, &content, &content_len) == FAILURE) {
! 945: return;
! 946: }
! 947: XMLWRITER_FROM_OBJECT(intern, this);
! 948: } else
! 949: #endif
! 950: {
! 951: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
! 952: &name, &name_len, &content, &content_len) == FAILURE) {
! 953: return;
! 954: }
! 955: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 956: }
! 957:
! 958: XMLW_NAME_CHK("Invalid Attribute Name");
! 959:
! 960: ptr = intern->ptr;
! 961:
! 962: if (ptr) {
! 963: retval = xmlTextWriterWriteAttribute(ptr, (xmlChar *)name, (xmlChar *)content);
! 964: if (retval != -1) {
! 965: RETURN_TRUE;
! 966: }
! 967: }
! 968:
! 969: RETURN_FALSE;
! 970: }
! 971: /* }}} */
! 972:
! 973: #if LIBXML_VERSION > 20617
! 974: /* {{{ proto bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)
! 975: Write full namespaced attribute - returns FALSE on error */
! 976: static PHP_FUNCTION(xmlwriter_write_attribute_ns)
! 977: {
! 978: zval *pind;
! 979: xmlwriter_object *intern;
! 980: xmlTextWriterPtr ptr;
! 981: char *name, *prefix, *uri, *content;
! 982: int name_len, prefix_len, uri_len, content_len, retval;
! 983:
! 984: #ifdef ZEND_ENGINE_2
! 985: zval *this = getThis();
! 986:
! 987: if (this) {
! 988: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss!s",
! 989: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
! 990: return;
! 991: }
! 992: XMLWRITER_FROM_OBJECT(intern, this);
! 993: } else
! 994: #endif
! 995: {
! 996: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss!s", &pind,
! 997: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
! 998: return;
! 999: }
! 1000: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1001: }
! 1002:
! 1003: XMLW_NAME_CHK("Invalid Attribute Name");
! 1004:
! 1005: ptr = intern->ptr;
! 1006:
! 1007: if (ptr) {
! 1008: retval = xmlTextWriterWriteAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content);
! 1009: if (retval != -1) {
! 1010: RETURN_TRUE;
! 1011: }
! 1012: }
! 1013:
! 1014: RETURN_FALSE;
! 1015: }
! 1016: /* }}} */
! 1017: #endif
! 1018:
! 1019: /* {{{ proto bool xmlwriter_start_element(resource xmlwriter, string name)
! 1020: Create start element tag - returns FALSE on error */
! 1021: static PHP_FUNCTION(xmlwriter_start_element)
! 1022: {
! 1023: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartElement, "Invalid Element Name");
! 1024: }
! 1025: /* }}} */
! 1026:
! 1027: /* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)
! 1028: Create start namespaced element tag - returns FALSE on error */
! 1029: static PHP_FUNCTION(xmlwriter_start_element_ns)
! 1030: {
! 1031: zval *pind;
! 1032: xmlwriter_object *intern;
! 1033: xmlTextWriterPtr ptr;
! 1034: char *name, *prefix, *uri;
! 1035: int name_len, prefix_len, uri_len, retval;
! 1036: #ifdef ZEND_ENGINE_2
! 1037: zval *this = getThis();
! 1038:
! 1039: if (this) {
! 1040: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!ss!",
! 1041: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
! 1042: return;
! 1043: }
! 1044: XMLWRITER_FROM_OBJECT(intern, this);
! 1045: } else
! 1046: #endif
! 1047: {
! 1048: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!", &pind,
! 1049: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
! 1050: return;
! 1051: }
! 1052: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1053: }
! 1054:
! 1055: XMLW_NAME_CHK("Invalid Element Name");
! 1056:
! 1057: ptr = intern->ptr;
! 1058:
! 1059: if (ptr) {
! 1060: retval = xmlTextWriterStartElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri);
! 1061: if (retval != -1) {
! 1062: RETURN_TRUE;
! 1063: }
! 1064:
! 1065: }
! 1066:
! 1067: RETURN_FALSE;
! 1068: }
! 1069: /* }}} */
! 1070:
! 1071: /* {{{ proto bool xmlwriter_end_element(resource xmlwriter)
! 1072: End current element - returns FALSE on error */
! 1073: static PHP_FUNCTION(xmlwriter_end_element)
! 1074: {
! 1075: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndElement);
! 1076: }
! 1077: /* }}} */
! 1078:
! 1079: /* {{{ proto bool xmlwriter_full_end_element(resource xmlwriter)
! 1080: End current element - returns FALSE on error */
! 1081: static PHP_FUNCTION(xmlwriter_full_end_element)
! 1082: {
! 1083: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterFullEndElement);
! 1084: }
! 1085: /* }}} */
! 1086:
! 1087: /* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name[, string content])
! 1088: Write full element tag - returns FALSE on error */
! 1089: static PHP_FUNCTION(xmlwriter_write_element)
! 1090: {
! 1091: zval *pind;
! 1092: xmlwriter_object *intern;
! 1093: xmlTextWriterPtr ptr;
! 1094: char *name, *content = NULL;
! 1095: int name_len, content_len, retval;
! 1096:
! 1097: #ifdef ZEND_ENGINE_2
! 1098: zval *this = getThis();
! 1099:
! 1100: if (this) {
! 1101: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!",
! 1102: &name, &name_len, &content, &content_len) == FAILURE) {
! 1103: return;
! 1104: }
! 1105: XMLWRITER_FROM_OBJECT(intern, this);
! 1106: } else
! 1107: #endif
! 1108: {
! 1109: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!", &pind,
! 1110: &name, &name_len, &content, &content_len) == FAILURE) {
! 1111: return;
! 1112: }
! 1113: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1114: }
! 1115:
! 1116: XMLW_NAME_CHK("Invalid Element Name");
! 1117:
! 1118: ptr = intern->ptr;
! 1119:
! 1120: if (ptr) {
! 1121: if (!content) {
! 1122: retval = xmlTextWriterStartElement(ptr, (xmlChar *)name);
! 1123: if (retval == -1) {
! 1124: RETURN_FALSE;
! 1125: }
! 1126: xmlTextWriterEndElement(ptr);
! 1127: if (retval == -1) {
! 1128: RETURN_FALSE;
! 1129: }
! 1130: } else {
! 1131: retval = xmlTextWriterWriteElement(ptr, (xmlChar *)name, (xmlChar *)content);
! 1132: }
! 1133: if (retval != -1) {
! 1134: RETURN_TRUE;
! 1135: }
! 1136: }
! 1137:
! 1138: RETURN_FALSE;
! 1139: }
! 1140: /* }}} */
! 1141:
! 1142: /* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])
! 1143: Write full namesapced element tag - returns FALSE on error */
! 1144: static PHP_FUNCTION(xmlwriter_write_element_ns)
! 1145: {
! 1146: zval *pind;
! 1147: xmlwriter_object *intern;
! 1148: xmlTextWriterPtr ptr;
! 1149: char *name, *prefix, *uri, *content = NULL;
! 1150: int name_len, prefix_len, uri_len, content_len, retval;
! 1151:
! 1152: #ifdef ZEND_ENGINE_2
! 1153: zval *this = getThis();
! 1154:
! 1155: if (this) {
! 1156: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!ss!|s!",
! 1157: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
! 1158: return;
! 1159: }
! 1160: XMLWRITER_FROM_OBJECT(intern, this);
! 1161: } else
! 1162: #endif
! 1163: {
! 1164: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!|s!", &pind,
! 1165: &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
! 1166: return;
! 1167: }
! 1168: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1169: }
! 1170:
! 1171: XMLW_NAME_CHK("Invalid Element Name");
! 1172:
! 1173: ptr = intern->ptr;
! 1174:
! 1175: if (ptr) {
! 1176: if (!content) {
! 1177: retval = xmlTextWriterStartElementNS(ptr,(xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri);
! 1178: if (retval == -1) {
! 1179: RETURN_FALSE;
! 1180: }
! 1181: retval = xmlTextWriterEndElement(ptr);
! 1182: if (retval == -1) {
! 1183: RETURN_FALSE;
! 1184: }
! 1185: } else {
! 1186: retval = xmlTextWriterWriteElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content);
! 1187: }
! 1188: if (retval != -1) {
! 1189: RETURN_TRUE;
! 1190: }
! 1191: }
! 1192:
! 1193: RETURN_FALSE;
! 1194: }
! 1195: /* }}} */
! 1196:
! 1197: /* {{{ proto bool xmlwriter_start_pi(resource xmlwriter, string target)
! 1198: Create start PI tag - returns FALSE on error */
! 1199: static PHP_FUNCTION(xmlwriter_start_pi)
! 1200: {
! 1201: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartPI, "Invalid PI Target");
! 1202: }
! 1203: /* }}} */
! 1204:
! 1205: /* {{{ proto bool xmlwriter_end_pi(resource xmlwriter)
! 1206: End current PI - returns FALSE on error */
! 1207: static PHP_FUNCTION(xmlwriter_end_pi)
! 1208: {
! 1209: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndPI);
! 1210: }
! 1211: /* }}} */
! 1212:
! 1213: /* {{{ proto bool xmlwriter_write_pi(resource xmlwriter, string target, string content)
! 1214: Write full PI tag - returns FALSE on error */
! 1215: static PHP_FUNCTION(xmlwriter_write_pi)
! 1216: {
! 1217: zval *pind;
! 1218: xmlwriter_object *intern;
! 1219: xmlTextWriterPtr ptr;
! 1220: char *name, *content;
! 1221: int name_len, content_len, retval;
! 1222:
! 1223: #ifdef ZEND_ENGINE_2
! 1224: zval *this = getThis();
! 1225:
! 1226: if (this) {
! 1227: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
! 1228: &name, &name_len, &content, &content_len) == FAILURE) {
! 1229: return;
! 1230: }
! 1231: XMLWRITER_FROM_OBJECT(intern, this);
! 1232: } else
! 1233: #endif
! 1234: {
! 1235: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
! 1236: &name, &name_len, &content, &content_len) == FAILURE) {
! 1237: return;
! 1238: }
! 1239: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1240: }
! 1241:
! 1242: XMLW_NAME_CHK("Invalid PI Target");
! 1243:
! 1244: ptr = intern->ptr;
! 1245:
! 1246: if (ptr) {
! 1247: retval = xmlTextWriterWritePI(ptr, (xmlChar *)name, (xmlChar *)content);
! 1248: if (retval != -1) {
! 1249: RETURN_TRUE;
! 1250: }
! 1251: }
! 1252:
! 1253: RETURN_FALSE;
! 1254: }
! 1255: /* }}} */
! 1256:
! 1257: /* {{{ proto bool xmlwriter_start_cdata(resource xmlwriter)
! 1258: Create start CDATA tag - returns FALSE on error */
! 1259: static PHP_FUNCTION(xmlwriter_start_cdata)
! 1260: {
! 1261: zval *pind;
! 1262: xmlwriter_object *intern;
! 1263: xmlTextWriterPtr ptr;
! 1264: int retval;
! 1265: #ifdef ZEND_ENGINE_2
! 1266: zval *this = getThis();
! 1267:
! 1268: if (this) {
! 1269: XMLWRITER_FROM_OBJECT(intern, this);
! 1270: } else
! 1271: #endif
! 1272: {
! 1273: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
! 1274: return;
! 1275: }
! 1276: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1277: }
! 1278:
! 1279: ptr = intern->ptr;
! 1280:
! 1281: if (ptr) {
! 1282: retval = xmlTextWriterStartCDATA(ptr);
! 1283: if (retval != -1) {
! 1284: RETURN_TRUE;
! 1285: }
! 1286: }
! 1287:
! 1288: RETURN_FALSE;
! 1289: }
! 1290: /* }}} */
! 1291:
! 1292: /* {{{ proto bool xmlwriter_end_cdata(resource xmlwriter)
! 1293: End current CDATA - returns FALSE on error */
! 1294: static PHP_FUNCTION(xmlwriter_end_cdata)
! 1295: {
! 1296: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndCDATA);
! 1297: }
! 1298: /* }}} */
! 1299:
! 1300: /* {{{ proto bool xmlwriter_write_cdata(resource xmlwriter, string content)
! 1301: Write full CDATA tag - returns FALSE on error */
! 1302: static PHP_FUNCTION(xmlwriter_write_cdata)
! 1303: {
! 1304: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteCDATA, NULL);
! 1305: }
! 1306: /* }}} */
! 1307:
! 1308: /* {{{ proto bool xmlwriter_write_raw(resource xmlwriter, string content)
! 1309: Write text - returns FALSE on error */
! 1310: static PHP_FUNCTION(xmlwriter_write_raw)
! 1311: {
! 1312: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteRaw, NULL);
! 1313: }
! 1314: /* }}} */
! 1315:
! 1316: /* {{{ proto bool xmlwriter_text(resource xmlwriter, string content)
! 1317: Write text - returns FALSE on error */
! 1318: static PHP_FUNCTION(xmlwriter_text)
! 1319: {
! 1320: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteString, NULL);
! 1321: }
! 1322: /* }}} */
! 1323:
! 1324: #if LIBXML_VERSION >= 20607
! 1325: /* {{{ proto bool xmlwriter_start_comment(resource xmlwriter)
! 1326: Create start comment - returns FALSE on error */
! 1327: static PHP_FUNCTION(xmlwriter_start_comment)
! 1328: {
! 1329: zval *pind;
! 1330: xmlwriter_object *intern;
! 1331: xmlTextWriterPtr ptr;
! 1332: int retval;
! 1333: #ifdef ZEND_ENGINE_2
! 1334: zval *this = getThis();
! 1335:
! 1336: if (this) {
! 1337: XMLWRITER_FROM_OBJECT(intern, this);
! 1338: } else
! 1339: #endif
! 1340: {
! 1341: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
! 1342: return;
! 1343: }
! 1344: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1345: }
! 1346:
! 1347: ptr = intern->ptr;
! 1348:
! 1349: if (ptr) {
! 1350: retval = xmlTextWriterStartComment(ptr);
! 1351: if (retval != -1) {
! 1352: RETURN_TRUE;
! 1353: }
! 1354: }
! 1355:
! 1356: RETURN_FALSE;
! 1357: }
! 1358: /* }}} */
! 1359:
! 1360: /* {{{ proto bool xmlwriter_end_comment(resource xmlwriter)
! 1361: Create end comment - returns FALSE on error */
! 1362: static PHP_FUNCTION(xmlwriter_end_comment)
! 1363: {
! 1364: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndComment);
! 1365: }
! 1366: /* }}} */
! 1367: #endif /* LIBXML_VERSION >= 20607 */
! 1368:
! 1369:
! 1370: /* {{{ proto bool xmlwriter_write_comment(resource xmlwriter, string content)
! 1371: Write full comment tag - returns FALSE on error */
! 1372: static PHP_FUNCTION(xmlwriter_write_comment)
! 1373: {
! 1374: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteComment, NULL);
! 1375: }
! 1376: /* }}} */
! 1377:
! 1378: /* {{{ proto bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)
! 1379: Create document tag - returns FALSE on error */
! 1380: static PHP_FUNCTION(xmlwriter_start_document)
! 1381: {
! 1382: zval *pind;
! 1383: xmlwriter_object *intern;
! 1384: xmlTextWriterPtr ptr;
! 1385: char *version = NULL, *enc = NULL, *alone = NULL;
! 1386: int version_len, enc_len, alone_len, retval;
! 1387:
! 1388: #ifdef ZEND_ENGINE_2
! 1389: zval *this = getThis();
! 1390:
! 1391: if (this) {
! 1392: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!s!s!", &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) {
! 1393: return;
! 1394: }
! 1395: XMLWRITER_FROM_OBJECT(intern, this);
! 1396: } else
! 1397: #endif
! 1398: {
! 1399: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!s!s!", &pind, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) {
! 1400: return;
! 1401: }
! 1402: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1403: }
! 1404:
! 1405: ptr = intern->ptr;
! 1406:
! 1407: if (ptr) {
! 1408: retval = xmlTextWriterStartDocument(ptr, version, enc, alone);
! 1409: if (retval != -1) {
! 1410: RETURN_TRUE;
! 1411: }
! 1412: }
! 1413:
! 1414: RETURN_FALSE;
! 1415: }
! 1416: /* }}} */
! 1417:
! 1418: /* {{{ proto bool xmlwriter_end_document(resource xmlwriter)
! 1419: End current document - returns FALSE on error */
! 1420: static PHP_FUNCTION(xmlwriter_end_document)
! 1421: {
! 1422: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDocument);
! 1423: }
! 1424: /* }}} */
! 1425:
! 1426: /* {{{ proto bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)
! 1427: Create start DTD tag - returns FALSE on error */
! 1428: static PHP_FUNCTION(xmlwriter_start_dtd)
! 1429: {
! 1430: zval *pind;
! 1431: xmlwriter_object *intern;
! 1432: xmlTextWriterPtr ptr;
! 1433: char *name, *pubid = NULL, *sysid = NULL;
! 1434: int name_len, pubid_len, sysid_len, retval;
! 1435:
! 1436: #ifdef ZEND_ENGINE_2
! 1437: zval *this = getThis();
! 1438:
! 1439: if (this) {
! 1440: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!s!", &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) {
! 1441: return;
! 1442: }
! 1443:
! 1444: XMLWRITER_FROM_OBJECT(intern, this);
! 1445: } else
! 1446: #endif
! 1447: {
! 1448: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) {
! 1449: return;
! 1450: }
! 1451:
! 1452: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1453: }
! 1454: ptr = intern->ptr;
! 1455:
! 1456: if (ptr) {
! 1457: retval = xmlTextWriterStartDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid);
! 1458: if (retval != -1) {
! 1459: RETURN_TRUE;
! 1460: }
! 1461: }
! 1462:
! 1463: RETURN_FALSE;
! 1464: }
! 1465: /* }}} */
! 1466:
! 1467: /* {{{ proto bool xmlwriter_end_dtd(resource xmlwriter)
! 1468: End current DTD - returns FALSE on error */
! 1469: static PHP_FUNCTION(xmlwriter_end_dtd)
! 1470: {
! 1471: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTD);
! 1472: }
! 1473: /* }}} */
! 1474:
! 1475: /* {{{ proto bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)
! 1476: Write full DTD tag - returns FALSE on error */
! 1477: static PHP_FUNCTION(xmlwriter_write_dtd)
! 1478: {
! 1479: zval *pind;
! 1480: xmlwriter_object *intern;
! 1481: xmlTextWriterPtr ptr;
! 1482: char *name, *pubid = NULL, *sysid = NULL, *subset = NULL;
! 1483: int name_len, pubid_len, sysid_len, subset_len, retval;
! 1484:
! 1485: #ifdef ZEND_ENGINE_2
! 1486: zval *this = getThis();
! 1487:
! 1488: if (this) {
! 1489: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!s!s!", &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) {
! 1490: return;
! 1491: }
! 1492:
! 1493: XMLWRITER_FROM_OBJECT(intern, this);
! 1494: } else
! 1495: #endif
! 1496: {
! 1497: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) {
! 1498: return;
! 1499: }
! 1500:
! 1501: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1502: }
! 1503:
! 1504: ptr = intern->ptr;
! 1505:
! 1506: if (ptr) {
! 1507: retval = xmlTextWriterWriteDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)subset);
! 1508: if (retval != -1) {
! 1509: RETURN_TRUE;
! 1510: }
! 1511: }
! 1512:
! 1513: RETURN_FALSE;
! 1514: }
! 1515: /* }}} */
! 1516:
! 1517: /* {{{ proto bool xmlwriter_start_dtd_element(resource xmlwriter, string name)
! 1518: Create start DTD element - returns FALSE on error */
! 1519: static PHP_FUNCTION(xmlwriter_start_dtd_element)
! 1520: {
! 1521: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDElement, "Invalid Element Name");
! 1522: }
! 1523: /* }}} */
! 1524:
! 1525: /* {{{ proto bool xmlwriter_end_dtd_element(resource xmlwriter)
! 1526: End current DTD element - returns FALSE on error */
! 1527: static PHP_FUNCTION(xmlwriter_end_dtd_element)
! 1528: {
! 1529: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDElement);
! 1530: }
! 1531: /* }}} */
! 1532:
! 1533: /* {{{ proto bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)
! 1534: Write full DTD element tag - returns FALSE on error */
! 1535: static PHP_FUNCTION(xmlwriter_write_dtd_element)
! 1536: {
! 1537: zval *pind;
! 1538: xmlwriter_object *intern;
! 1539: xmlTextWriterPtr ptr;
! 1540: char *name, *content;
! 1541: int name_len, content_len, retval;
! 1542:
! 1543: #ifdef ZEND_ENGINE_2
! 1544: zval *this = getThis();
! 1545:
! 1546: if (this) {
! 1547: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &content, &content_len) == FAILURE) {
! 1548: return;
! 1549: }
! 1550: XMLWRITER_FROM_OBJECT(intern, this);
! 1551: } else
! 1552: #endif
! 1553: {
! 1554: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
! 1555: &name, &name_len, &content, &content_len) == FAILURE) {
! 1556: return;
! 1557: }
! 1558: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1559: }
! 1560:
! 1561: XMLW_NAME_CHK("Invalid Element Name");
! 1562:
! 1563: ptr = intern->ptr;
! 1564:
! 1565: if (ptr) {
! 1566: retval = xmlTextWriterWriteDTDElement(ptr, (xmlChar *)name, (xmlChar *)content);
! 1567: if (retval != -1) {
! 1568: RETURN_TRUE;
! 1569: }
! 1570: }
! 1571:
! 1572: RETURN_FALSE;
! 1573: }
! 1574: /* }}} */
! 1575:
! 1576: #if LIBXML_VERSION > 20608
! 1577: /* {{{ proto bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)
! 1578: Create start DTD AttList - returns FALSE on error */
! 1579: static PHP_FUNCTION(xmlwriter_start_dtd_attlist)
! 1580: {
! 1581: php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDAttlist, "Invalid Element Name");
! 1582: }
! 1583: /* }}} */
! 1584:
! 1585: /* {{{ proto bool xmlwriter_end_dtd_attlist(resource xmlwriter)
! 1586: End current DTD AttList - returns FALSE on error */
! 1587: static PHP_FUNCTION(xmlwriter_end_dtd_attlist)
! 1588: {
! 1589: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDAttlist);
! 1590: }
! 1591: /* }}} */
! 1592:
! 1593: /* {{{ proto bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)
! 1594: Write full DTD AttList tag - returns FALSE on error */
! 1595: static PHP_FUNCTION(xmlwriter_write_dtd_attlist)
! 1596: {
! 1597: zval *pind;
! 1598: xmlwriter_object *intern;
! 1599: xmlTextWriterPtr ptr;
! 1600: char *name, *content;
! 1601: int name_len, content_len, retval;
! 1602:
! 1603:
! 1604: #ifdef ZEND_ENGINE_2
! 1605: zval *this = getThis();
! 1606:
! 1607: if (this) {
! 1608: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
! 1609: &name, &name_len, &content, &content_len) == FAILURE) {
! 1610: return;
! 1611: }
! 1612: XMLWRITER_FROM_OBJECT(intern, this);
! 1613: } else
! 1614: #endif
! 1615: {
! 1616: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
! 1617: &name, &name_len, &content, &content_len) == FAILURE) {
! 1618: return;
! 1619: }
! 1620: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1621: }
! 1622:
! 1623: XMLW_NAME_CHK("Invalid Element Name");
! 1624:
! 1625: ptr = intern->ptr;
! 1626:
! 1627: if (ptr) {
! 1628: retval = xmlTextWriterWriteDTDAttlist(ptr, (xmlChar *)name, (xmlChar *)content);
! 1629: if (retval != -1) {
! 1630: RETURN_TRUE;
! 1631: }
! 1632: }
! 1633:
! 1634: RETURN_FALSE;
! 1635: }
! 1636: /* }}} */
! 1637:
! 1638: /* {{{ proto bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)
! 1639: Create start DTD Entity - returns FALSE on error */
! 1640: static PHP_FUNCTION(xmlwriter_start_dtd_entity)
! 1641: {
! 1642: zval *pind;
! 1643: xmlwriter_object *intern;
! 1644: xmlTextWriterPtr ptr;
! 1645: char *name;
! 1646: int name_len, retval;
! 1647: zend_bool isparm;
! 1648:
! 1649:
! 1650: #ifdef ZEND_ENGINE_2
! 1651: zval *this = getThis();
! 1652:
! 1653: if (this) {
! 1654: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sb", &name, &name_len, &isparm) == FAILURE) {
! 1655: return;
! 1656: }
! 1657: XMLWRITER_FROM_OBJECT(intern, this);
! 1658: } else
! 1659: #endif
! 1660: {
! 1661: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsb", &pind, &name, &name_len, &isparm) == FAILURE) {
! 1662: return;
! 1663: }
! 1664: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1665: }
! 1666:
! 1667: XMLW_NAME_CHK("Invalid Attribute Name");
! 1668:
! 1669: ptr = intern->ptr;
! 1670:
! 1671: if (ptr) {
! 1672: retval = xmlTextWriterStartDTDEntity(ptr, isparm, (xmlChar *)name);
! 1673: if (retval != -1) {
! 1674: RETURN_TRUE;
! 1675: }
! 1676: }
! 1677:
! 1678: RETURN_FALSE;
! 1679: }
! 1680: /* }}} */
! 1681:
! 1682: /* {{{ proto bool xmlwriter_end_dtd_entity(resource xmlwriter)
! 1683: End current DTD Entity - returns FALSE on error */
! 1684: static PHP_FUNCTION(xmlwriter_end_dtd_entity)
! 1685: {
! 1686: php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDEntity);
! 1687: }
! 1688: /* }}} */
! 1689:
! 1690: /* {{{ proto bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])
! 1691: Write full DTD Entity tag - returns FALSE on error */
! 1692: static PHP_FUNCTION(xmlwriter_write_dtd_entity)
! 1693: {
! 1694: zval *pind;
! 1695: xmlwriter_object *intern;
! 1696: xmlTextWriterPtr ptr;
! 1697: char *name, *content;
! 1698: int name_len, content_len, retval;
! 1699: /* Optional parameters */
! 1700: char *pubid = NULL, *sysid = NULL, *ndataid = NULL;
! 1701: zend_bool pe = 0;
! 1702: int pubid_len, sysid_len, ndataid_len;
! 1703:
! 1704: #ifdef ZEND_ENGINE_2
! 1705: zval *this = getThis();
! 1706:
! 1707: if (this) {
! 1708: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bsss",
! 1709: &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len,
! 1710: &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) {
! 1711: return;
! 1712: }
! 1713: XMLWRITER_FROM_OBJECT(intern, this);
! 1714: } else
! 1715: #endif
! 1716: {
! 1717: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|bsss", &pind,
! 1718: &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len,
! 1719: &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) {
! 1720: return;
! 1721: }
! 1722: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1723: }
! 1724:
! 1725: XMLW_NAME_CHK("Invalid Element Name");
! 1726:
! 1727: ptr = intern->ptr;
! 1728:
! 1729: if (ptr) {
! 1730: retval = xmlTextWriterWriteDTDEntity(ptr, pe, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)ndataid, (xmlChar *)content);
! 1731: if (retval != -1) {
! 1732: RETURN_TRUE;
! 1733: }
! 1734: }
! 1735:
! 1736: RETURN_FALSE;
! 1737: }
! 1738: /* }}} */
! 1739: #endif
! 1740:
! 1741: /* {{{ proto resource xmlwriter_open_uri(resource xmlwriter, string source)
! 1742: Create new xmlwriter using source uri for output */
! 1743: static PHP_FUNCTION(xmlwriter_open_uri)
! 1744: {
! 1745: char *valid_file = NULL;
! 1746: xmlwriter_object *intern;
! 1747: xmlTextWriterPtr ptr;
! 1748: char *source;
! 1749: char resolved_path[MAXPATHLEN + 1];
! 1750: int source_len;
! 1751:
! 1752: #ifdef ZEND_ENGINE_2
! 1753: zval *this = getThis();
! 1754: ze_xmlwriter_object *ze_obj = NULL;
! 1755: #endif
! 1756:
! 1757: #ifndef ZEND_ENGINE_2
! 1758: xmlOutputBufferPtr out_buffer;
! 1759: void *ioctx;
! 1760: #endif
! 1761:
! 1762: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
! 1763: return;
! 1764: }
! 1765:
! 1766: #ifdef ZEND_ENGINE_2
! 1767: if (this) {
! 1768: /* We do not use XMLWRITER_FROM_OBJECT, xmlwriter init function here */
! 1769: ze_obj = (ze_xmlwriter_object*) zend_object_store_get_object(this TSRMLS_CC);
! 1770: }
! 1771: #endif
! 1772:
! 1773: if (source_len == 0) {
! 1774: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string as source");
! 1775: RETURN_FALSE;
! 1776: }
! 1777:
! 1778: valid_file = _xmlwriter_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
! 1779: if (!valid_file) {
! 1780: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to resolve file path");
! 1781: RETURN_FALSE;
! 1782: }
! 1783:
! 1784: /* TODO: Fix either the PHP stream or libxml APIs: it can then detect when a given
! 1785: path is valid and not report out of memory error. Once it is done, remove the
! 1786: directory check in _xmlwriter_get_valid_file_path */
! 1787: #ifndef ZEND_ENGINE_2
! 1788: ioctx = php_xmlwriter_streams_IO_open_write_wrapper(valid_file TSRMLS_CC);
! 1789: if (ioctx == NULL) {
! 1790: RETURN_FALSE;
! 1791: }
! 1792:
! 1793: out_buffer = xmlOutputBufferCreateIO(php_xmlwriter_streams_IO_write,
! 1794: php_xmlwriter_streams_IO_close, ioctx, NULL);
! 1795:
! 1796: if (out_buffer == NULL) {
! 1797: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create output buffer");
! 1798: RETURN_FALSE;
! 1799: }
! 1800: ptr = xmlNewTextWriter(out_buffer);
! 1801: #else
! 1802: ptr = xmlNewTextWriterFilename(valid_file, 0);
! 1803: #endif
! 1804:
! 1805: if (!ptr) {
! 1806: RETURN_FALSE;
! 1807: }
! 1808:
! 1809: intern = emalloc(sizeof(xmlwriter_object));
! 1810: intern->ptr = ptr;
! 1811: intern->output = NULL;
! 1812: #ifndef ZEND_ENGINE_2
! 1813: intern->uri_output = out_buffer;
! 1814: #else
! 1815: if (this) {
! 1816: if (ze_obj->xmlwriter_ptr) {
! 1817: xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
! 1818: }
! 1819: ze_obj->xmlwriter_ptr = intern;
! 1820: RETURN_TRUE;
! 1821: } else
! 1822: #endif
! 1823: {
! 1824: ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
! 1825: }
! 1826: }
! 1827: /* }}} */
! 1828:
! 1829: /* {{{ proto resource xmlwriter_open_memory()
! 1830: Create new xmlwriter using memory for string output */
! 1831: static PHP_FUNCTION(xmlwriter_open_memory)
! 1832: {
! 1833: xmlwriter_object *intern;
! 1834: xmlTextWriterPtr ptr;
! 1835: xmlBufferPtr buffer;
! 1836:
! 1837: #ifdef ZEND_ENGINE_2
! 1838: zval *this = getThis();
! 1839: ze_xmlwriter_object *ze_obj = NULL;
! 1840: #endif
! 1841:
! 1842: #ifdef ZEND_ENGINE_2
! 1843: if (this) {
! 1844: /* We do not use XMLWRITER_FROM_OBJECT, xmlwriter init function here */
! 1845: ze_obj = (ze_xmlwriter_object*) zend_object_store_get_object(this TSRMLS_CC);
! 1846: }
! 1847: #endif
! 1848:
! 1849: buffer = xmlBufferCreate();
! 1850:
! 1851: if (buffer == NULL) {
! 1852: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create output buffer");
! 1853: RETURN_FALSE;
! 1854: }
! 1855:
! 1856: ptr = xmlNewTextWriterMemory(buffer, 0);
! 1857: if (! ptr) {
! 1858: xmlBufferFree(buffer);
! 1859: RETURN_FALSE;
! 1860: }
! 1861:
! 1862: intern = emalloc(sizeof(xmlwriter_object));
! 1863: intern->ptr = ptr;
! 1864: intern->output = buffer;
! 1865: #ifndef ZEND_ENGINE_2
! 1866: intern->uri_output = NULL;
! 1867: #else
! 1868: if (this) {
! 1869: if (ze_obj->xmlwriter_ptr) {
! 1870: xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
! 1871: }
! 1872: ze_obj->xmlwriter_ptr = intern;
! 1873: RETURN_TRUE;
! 1874: } else
! 1875: #endif
! 1876: {
! 1877: ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
! 1878: }
! 1879:
! 1880: }
! 1881: /* }}} */
! 1882:
! 1883: /* {{{ php_xmlwriter_flush */
! 1884: static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string) {
! 1885: zval *pind;
! 1886: xmlwriter_object *intern;
! 1887: xmlTextWriterPtr ptr;
! 1888: xmlBufferPtr buffer;
! 1889: zend_bool empty = 1;
! 1890: int output_bytes;
! 1891:
! 1892:
! 1893: #ifdef ZEND_ENGINE_2
! 1894: zval *this = getThis();
! 1895:
! 1896: if (this) {
! 1897: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &empty) == FAILURE) {
! 1898: return;
! 1899: }
! 1900: XMLWRITER_FROM_OBJECT(intern, this);
! 1901: } else
! 1902: #endif
! 1903: {
! 1904: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|b", &pind, &empty) == FAILURE) {
! 1905: return;
! 1906: }
! 1907:
! 1908: ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
! 1909: }
! 1910: ptr = intern->ptr;
! 1911:
! 1912: if (ptr) {
! 1913: buffer = intern->output;
! 1914: if (force_string == 1 && buffer == NULL) {
! 1915: RETURN_EMPTY_STRING();
! 1916: }
! 1917: output_bytes = xmlTextWriterFlush(ptr);
! 1918: if (buffer) {
! 1919: RETVAL_STRING((char *) buffer->content, 1);
! 1920: if (empty) {
! 1921: xmlBufferEmpty(buffer);
! 1922: }
! 1923: } else {
! 1924: RETVAL_LONG(output_bytes);
! 1925: }
! 1926: return;
! 1927: }
! 1928:
! 1929: RETURN_EMPTY_STRING();
! 1930: }
! 1931: /* }}} */
! 1932:
! 1933: /* {{{ proto string xmlwriter_output_memory(resource xmlwriter [,bool flush])
! 1934: Output current buffer as string */
! 1935: static PHP_FUNCTION(xmlwriter_output_memory)
! 1936: {
! 1937: php_xmlwriter_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
! 1938: }
! 1939: /* }}} */
! 1940:
! 1941: /* {{{ proto mixed xmlwriter_flush(resource xmlwriter [,bool empty])
! 1942: Output current buffer */
! 1943: static PHP_FUNCTION(xmlwriter_flush)
! 1944: {
! 1945: php_xmlwriter_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
! 1946: }
! 1947: /* }}} */
! 1948:
! 1949: /* {{{ PHP_MINIT_FUNCTION
! 1950: */
! 1951: static PHP_MINIT_FUNCTION(xmlwriter)
! 1952: {
! 1953: #ifdef ZEND_ENGINE_2
! 1954: zend_class_entry ce;
! 1955: #endif
! 1956:
! 1957: le_xmlwriter = zend_register_list_destructors_ex(xmlwriter_dtor, NULL, "xmlwriter", module_number);
! 1958:
! 1959: #ifdef ZEND_ENGINE_2
! 1960: memcpy(&xmlwriter_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
! 1961: xmlwriter_object_handlers.clone_obj = NULL;
! 1962: INIT_CLASS_ENTRY(ce, "XMLWriter", xmlwriter_class_functions);
! 1963: ce.create_object = xmlwriter_object_new;
! 1964: xmlwriter_class_entry_ce = zend_register_internal_class(&ce TSRMLS_CC);
! 1965: #endif
! 1966: return SUCCESS;
! 1967: }
! 1968: /* }}} */
! 1969:
! 1970: /* {{{ PHP_MSHUTDOWN_FUNCTION
! 1971: */
! 1972: static PHP_MSHUTDOWN_FUNCTION(xmlwriter)
! 1973: {
! 1974: return SUCCESS;
! 1975: }
! 1976: /* }}} */
! 1977:
! 1978: /* {{{ PHP_MINFO_FUNCTION
! 1979: */
! 1980: static PHP_MINFO_FUNCTION(xmlwriter)
! 1981: {
! 1982: php_info_print_table_start();
! 1983: {
! 1984: php_info_print_table_row(2, "XMLWriter", "enabled");
! 1985: }
! 1986: php_info_print_table_end();
! 1987: }
! 1988: /* }}} */
! 1989:
! 1990: /*
! 1991: * Local variables:
! 1992: * tab-width: 4
! 1993: * c-basic-offset: 4
! 1994: * End:
! 1995: * vim600: noet sw=4 ts=4 fdm=marker
! 1996: * vim<600: noet sw=4 ts=4
! 1997: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>