Return to processinginstruction.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / dom |
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: | Authors: Christian Stocker <chregu@php.net> | ! 16: | Rob Richards <rrichards@php.net> | ! 17: +----------------------------------------------------------------------+ ! 18: */ ! 19: ! 20: /* $Id: processinginstruction.c 321634 2012-01-01 13:15:04Z felipe $ */ ! 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: /* {{{ arginfo */ ! 32: ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_processinginstruction_construct, 0, 0, 1) ! 33: ZEND_ARG_INFO(0, name) ! 34: ZEND_ARG_INFO(0, value) ! 35: ZEND_END_ARG_INFO(); ! 36: /* }}} */ ! 37: ! 38: /* ! 39: * class DOMProcessingInstruction extends DOMNode ! 40: * ! 41: * URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1004215813 ! 42: * Since: ! 43: */ ! 44: ! 45: const zend_function_entry php_dom_processinginstruction_class_functions[] = { ! 46: PHP_ME(domprocessinginstruction, __construct, arginfo_dom_processinginstruction_construct, ZEND_ACC_PUBLIC) ! 47: PHP_FE_END ! 48: }; ! 49: ! 50: /* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */ ! 51: PHP_METHOD(domprocessinginstruction, __construct) ! 52: { ! 53: ! 54: zval *id; ! 55: xmlNodePtr nodep = NULL, oldnode = NULL; ! 56: dom_object *intern; ! 57: char *name, *value = NULL; ! 58: int name_len, value_len, name_valid; ! 59: zend_error_handling error_handling; ! 60: ! 61: zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling TSRMLS_CC); ! 62: if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_processinginstruction_class_entry, &name, &name_len, &value, &value_len) == FAILURE) { ! 63: zend_restore_error_handling(&error_handling TSRMLS_CC); ! 64: return; ! 65: } ! 66: ! 67: zend_restore_error_handling(&error_handling TSRMLS_CC); ! 68: ! 69: name_valid = xmlValidateName((xmlChar *) name, 0); ! 70: if (name_valid != 0) { ! 71: php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); ! 72: RETURN_FALSE; ! 73: } ! 74: ! 75: nodep = xmlNewPI((xmlChar *) name, (xmlChar *) value); ! 76: ! 77: if (!nodep) { ! 78: php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); ! 79: RETURN_FALSE; ! 80: } ! 81: ! 82: intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); ! 83: if (intern != NULL) { ! 84: oldnode = dom_object_get_node(intern); ! 85: if (oldnode != NULL) { ! 86: php_libxml_node_free_resource(oldnode TSRMLS_CC); ! 87: } ! 88: php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); ! 89: } ! 90: } ! 91: /* }}} end DOMProcessingInstruction::__construct */ ! 92: ! 93: /* {{{ target string ! 94: readonly=yes ! 95: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192 ! 96: Since: ! 97: */ ! 98: int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC) ! 99: { ! 100: xmlNodePtr nodep; ! 101: ! 102: nodep = dom_object_get_node(obj); ! 103: ! 104: if (nodep == NULL) { ! 105: php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); ! 106: return FAILURE; ! 107: } ! 108: ! 109: ALLOC_ZVAL(*retval); ! 110: ZVAL_STRING(*retval, (char *) (nodep->name), 1); ! 111: ! 112: return SUCCESS; ! 113: } ! 114: ! 115: /* }}} */ ! 116: ! 117: /* {{{ data string ! 118: readonly=no ! 119: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393 ! 120: Since: ! 121: */ ! 122: int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC) ! 123: { ! 124: xmlNodePtr nodep; ! 125: xmlChar *content; ! 126: ! 127: nodep = dom_object_get_node(obj); ! 128: ! 129: if (nodep == NULL) { ! 130: php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); ! 131: return FAILURE; ! 132: } ! 133: ! 134: ALLOC_ZVAL(*retval); ! 135: ! 136: ! 137: if ((content = xmlNodeGetContent(nodep)) != NULL) { ! 138: ZVAL_STRING(*retval, content, 1); ! 139: xmlFree(content); ! 140: } else { ! 141: ZVAL_EMPTY_STRING(*retval); ! 142: } ! 143: ! 144: return SUCCESS; ! 145: } ! 146: ! 147: int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC) ! 148: { ! 149: zval value_copy; ! 150: xmlNode *nodep; ! 151: ! 152: nodep = dom_object_get_node(obj); ! 153: ! 154: if (nodep == NULL) { ! 155: php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); ! 156: return FAILURE; ! 157: } ! 158: ! 159: if (newval->type != IS_STRING) { ! 160: if(Z_REFCOUNT_P(newval) > 1) { ! 161: value_copy = *newval; ! 162: zval_copy_ctor(&value_copy); ! 163: newval = &value_copy; ! 164: } ! 165: convert_to_string(newval); ! 166: } ! 167: ! 168: xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); ! 169: ! 170: if (newval == &value_copy) { ! 171: zval_dtor(newval); ! 172: } ! 173: ! 174: return SUCCESS; ! 175: } ! 176: ! 177: /* }}} */ ! 178: ! 179: #endif ! 180: ! 181: /* ! 182: * Local variables: ! 183: * tab-width: 4 ! 184: * c-basic-offset: 4 ! 185: * End: ! 186: * vim600: noet sw=4 ts=4 fdm=marker ! 187: * vim<600: noet sw=4 ts=4 ! 188: */