@@ -37,6 +37,10 @@ const zend_function_entry php_dom_characterdata_class_functions[] = {
3737 PHP_ME (domcharacterdata , insertData , arginfo_class_DOMCharacterData_insertData , ZEND_ACC_PUBLIC )
3838 PHP_ME (domcharacterdata , deleteData , arginfo_class_DOMCharacterData_deleteData , ZEND_ACC_PUBLIC )
3939 PHP_ME (domcharacterdata , replaceData , arginfo_class_DOMCharacterData_replaceData , ZEND_ACC_PUBLIC )
40+ PHP_ME (domcharacterdata , remove , arginfo_class_DOMChildNode_remove , ZEND_ACC_PUBLIC )
41+ PHP_ME (domcharacterdata , after , arginfo_class_DOMChildNode_after , ZEND_ACC_PUBLIC )
42+ PHP_ME (domcharacterdata , before , arginfo_class_DOMChildNode_before , ZEND_ACC_PUBLIC )
43+ PHP_ME (domcharacterdata , replaceWith , arginfo_class_DOMChildNode_replaceWith , ZEND_ACC_PUBLIC )
4044 PHP_FE_END
4145};
4246
@@ -361,4 +365,104 @@ PHP_METHOD(domcharacterdata, replaceData)
361365}
362366/* }}} end dom_characterdata_replace_data */
363367
368+ PHP_METHOD (domcharacterdata , remove )
369+ {
370+ zval * id = ZEND_THIS ;
371+ xmlNodePtr children , child ;
372+ dom_object * intern ;
373+ int stricterror ;
374+
375+ if (zend_parse_parameters_none () == FAILURE ) {
376+ RETURN_THROWS ();
377+ }
378+
379+ DOM_GET_OBJ (child , id , xmlNodePtr , intern );
380+
381+ if (dom_node_children_valid (child ) == FAILURE ) {
382+ RETURN_NULL ();
383+ }
384+
385+ stricterror = dom_get_strict_error (intern -> document );
386+
387+ if (dom_node_is_read_only (child ) == SUCCESS ||
388+ (child -> parent != NULL && dom_node_is_read_only (child -> parent ) == SUCCESS )) {
389+ php_dom_throw_error (NO_MODIFICATION_ALLOWED_ERR , stricterror );
390+ RETURN_NULL ();
391+ }
392+
393+ if (!child -> parent ) {
394+ php_dom_throw_error (NOT_FOUND_ERR , stricterror );
395+ RETURN_NULL ();
396+ }
397+
398+ children = child -> parent -> children ;
399+ if (!children ) {
400+ php_dom_throw_error (NOT_FOUND_ERR , stricterror );
401+ RETURN_NULL ();
402+ }
403+
404+ while (children ) {
405+ if (children == child ) {
406+ xmlUnlinkNode (child );
407+ RETURN_NULL ();
408+ }
409+ children = children -> next ;
410+ }
411+
412+ php_dom_throw_error (NOT_FOUND_ERR , stricterror );
413+ RETURN_NULL ();
414+ }
415+
416+ PHP_METHOD (domcharacterdata , after )
417+ {
418+ int argc ;
419+ zval * args , * id ;
420+ dom_object * intern ;
421+ xmlNode * context ;
422+
423+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "+" , & args , & argc ) == FAILURE ) {
424+ RETURN_THROWS ();
425+ }
426+
427+ id = ZEND_THIS ;
428+ DOM_GET_OBJ (context , id , xmlNodePtr , intern );
429+
430+ dom_parent_node_after (intern , args , argc );
431+ }
432+
433+ PHP_METHOD (domcharacterdata , before )
434+ {
435+ int argc ;
436+ zval * args , * id ;
437+ dom_object * intern ;
438+ xmlNode * context ;
439+
440+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "+" , & args , & argc ) == FAILURE ) {
441+ RETURN_THROWS ();
442+ }
443+
444+ id = ZEND_THIS ;
445+ DOM_GET_OBJ (context , id , xmlNodePtr , intern );
446+
447+ dom_parent_node_before (intern , args , argc );
448+ }
449+
450+ PHP_METHOD (domcharacterdata , replaceWith )
451+ {
452+ int argc ;
453+ zval * args , * id ;
454+ dom_object * intern ;
455+ xmlNode * context ;
456+
457+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "+" , & args , & argc ) == FAILURE ) {
458+ RETURN_THROWS ();
459+ }
460+
461+ id = ZEND_THIS ;
462+ DOM_GET_OBJ (context , id , xmlNodePtr , intern );
463+
464+ dom_parent_node_after (intern , args , argc );
465+ dom_child_node_remove (intern );
466+ }
467+
364468#endif
0 commit comments