diff options
author | Sterling Hughes <sterling@php.net> | 2003-06-06 20:10:05 +0000 |
---|---|---|
committer | Sterling Hughes <sterling@php.net> | 2003-06-06 20:10:05 +0000 |
commit | 6610183236b88cf1017fbd71b0561fac9cee9c8f (patch) | |
tree | 16df30c81b523e7c7f0f43b575cdb2f04b3ac44a /ext/dom/text.c | |
parent | 29b5fbcc535380b80ff900cfc3e0015e6d83d886 (diff) | |
download | php-git-6610183236b88cf1017fbd71b0561fac9cee9c8f.tar.gz |
add splitText()
never has such a complex process been endured for such a simple function
libxml makes me queasy right now :)
Diffstat (limited to 'ext/dom/text.c')
-rw-r--r-- | ext/dom/text.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/ext/dom/text.c b/ext/dom/text.c index ddbbb73559..5a1fcc71b8 100644 --- a/ext/dom/text.c +++ b/ext/dom/text.c @@ -25,7 +25,7 @@ #include "php.h" #include "php_dom.h" - +#include "dom_ce.h" /* * class domtext extends domcharacterdata @@ -97,7 +97,49 @@ Since: */ PHP_FUNCTION(dom_text_split_text) { - DOM_NOT_IMPLEMENTED(); + zval *id; + xmlChar *cur; + xmlChar *first; + xmlChar *second; + xmlNodePtr node; + xmlNodePtr nnode; + long offset; + int ret; + int length; + + DOM_GET_THIS_OBJ(node, getThis(), xmlNodePtr); + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &offset) == FAILURE) { + return; + } + + if (node->type != XML_TEXT_NODE) { + RETURN_FALSE; + } + + cur = xmlNodeListGetString(node->doc, node, 1); + if (cur == NULL) { + RETURN_FALSE; + } + length = xmlStrlen(cur); + + if (offset > length || offset < 0) { + RETURN_FALSE; + } + + first = xmlStrndup(cur, offset); + second = xmlStrdup(cur + offset); + + xmlFree(cur); + + xmlNodeSetContentLen(node, first, offset); + nnode = xmlNewText(second); + + nnode->type = XML_ELEMENT_NODE; + xmlAddNextSibling(node, nnode); + nnode->type = XML_TEXT_NODE; + + return_value = php_dom_create_object(nnode, &ret, NULL, return_value TSRMLS_CC); } /* }}} end dom_text_split_text */ |