summaryrefslogtreecommitdiff
path: root/ext/dom/text.c
diff options
context:
space:
mode:
authorSterling Hughes <sterling@php.net>2003-06-06 20:10:05 +0000
committerSterling Hughes <sterling@php.net>2003-06-06 20:10:05 +0000
commit6610183236b88cf1017fbd71b0561fac9cee9c8f (patch)
tree16df30c81b523e7c7f0f43b575cdb2f04b3ac44a /ext/dom/text.c
parent29b5fbcc535380b80ff900cfc3e0015e6d83d886 (diff)
downloadphp-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.c46
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 */