summaryrefslogtreecommitdiff
path: root/src/core/characterdata.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/characterdata.c')
-rw-r--r--src/core/characterdata.c83
1 files changed, 62 insertions, 21 deletions
diff --git a/src/core/characterdata.c b/src/core/characterdata.c
index 6beecbe..f5b4094 100644
--- a/src/core/characterdata.c
+++ b/src/core/characterdata.c
@@ -3,8 +3,11 @@
* Licensed under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
* Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
+ * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com>
*/
+#include <assert.h>
+
#include <dom/core/characterdata.h>
#include <dom/core/string.h>
@@ -13,28 +16,28 @@
#include "core/node.h"
#include "utils/utils.h"
-/* The virtual functions for dom_characterdata */
-static struct dom_characterdata_vtable characterdata_vtable = {
+/* The virtual functions for dom_characterdata, we make this vtable
+ * public to each child class */
+struct dom_characterdata_vtable characterdata_vtable = {
{
DOM_NODE_VTABLE
},
DOM_CHARACTERDATA_VTABLE
};
-/**
- * Create a DOM characterdata node and compose the vtable
- *
- * Return The new constructed DOM characterdata node of NULL if fail
- */
-dom_characterdata *dom_characterdata_create(struct dom_document *doc)
+
+/* Create a DOM characterdata node and compose the vtable */
+dom_characterdata *_dom_characterdata_create(struct dom_document *doc)
{
- dom_characterdata *cdata = dom_document_alloc(doc, NULL,
+ dom_characterdata *cdata = _dom_document_alloc(doc, NULL,
sizeof(struct dom_characterdata));
if (cdata == NULL)
return NULL;
cdata->base.base.vtable = &characterdata_vtable;
+ cdata->base.vtable = NULL;
+
return cdata;
}
@@ -50,11 +53,11 @@ dom_characterdata *dom_characterdata_create(struct dom_document *doc)
*
* ::doc, ::name and ::value will have their reference counts increased.
*/
-dom_exception dom_characterdata_initialise(struct dom_characterdata *cdata,
+dom_exception _dom_characterdata_initialise(struct dom_characterdata *cdata,
struct dom_document *doc, dom_node_type type,
- struct dom_string *name, struct dom_string *value)
+ lwc_string *name, struct dom_string *value)
{
- return dom_node_initialise(&cdata->base, doc, type,
+ return _dom_node_initialise(&cdata->base, doc, type,
name, value, NULL, NULL);
}
@@ -66,12 +69,17 @@ dom_exception dom_characterdata_initialise(struct dom_characterdata *cdata,
*
* The contents of ::cdata will be cleaned up. ::cdata will not be freed.
*/
-void dom_characterdata_finalise(struct dom_document *doc,
+void _dom_characterdata_finalise(struct dom_document *doc,
struct dom_characterdata *cdata)
{
- dom_node_finalise(doc, &cdata->base);
+ _dom_node_finalise(doc, &cdata->base);
}
+
+/*----------------------------------------------------------------------*/
+
+/* The public virtual functions */
+
/**
* Retrieve data from a character data node
*
@@ -182,7 +190,7 @@ dom_exception _dom_characterdata_substring_data(
len = 0;
}
- if (offset >= len) {
+ if (offset > len) {
return DOM_INDEX_SIZE_ERR;
}
@@ -210,9 +218,7 @@ dom_exception _dom_characterdata_append_data(struct dom_characterdata *cdata,
return DOM_NO_MODIFICATION_ALLOWED_ERR;
}
- err = dom_string_insert(c->value, data,
- c->value != NULL ? dom_string_length(c->value) : 0,
- &temp);
+ err = dom_string_concat(c->value, data, &temp);
if (err != DOM_NO_ERR) {
return err;
}
@@ -255,7 +261,7 @@ dom_exception _dom_characterdata_insert_data(struct dom_characterdata *cdata,
len = 0;
}
- if (offset >= len) {
+ if (offset > len) {
return DOM_INDEX_SIZE_ERR;
}
@@ -302,7 +308,7 @@ dom_exception _dom_characterdata_delete_data(struct dom_characterdata *cdata,
len = 0;
}
- if (offset >= len) {
+ if (offset > len) {
return DOM_INDEX_SIZE_ERR;
}
@@ -353,7 +359,7 @@ dom_exception _dom_characterdata_replace_data(struct dom_characterdata *cdata,
len = 0;
}
- if (offset >= len) {
+ if (offset > len) {
return DOM_INDEX_SIZE_ERR;
}
@@ -373,3 +379,38 @@ dom_exception _dom_characterdata_replace_data(struct dom_characterdata *cdata,
return DOM_NO_ERR;
}
+
+
+/*----------------------------------------------------------------------*/
+
+/* The protected virtual functions of Node, see core/node.h for details
+ *
+ * @note: the three following API never be called directly from the virtual
+ * functions dispatch mechanism, they are here for the code consistent.
+ */
+void _dom_characterdata_destroy(struct dom_node_internal *node)
+{
+ assert("Should never be here" == NULL);
+ UNUSED(node);
+}
+
+/* The memory allocator of this class */
+dom_exception _dom_characterdata_alloc(struct dom_document *doc,
+ struct dom_node_internal *n, struct dom_node_internal **ret)
+{
+ assert("Should never be here" == NULL);
+ UNUSED(doc);
+ UNUSED(n);
+ UNUSED(ret);
+
+ return DOM_NO_ERR;
+}
+
+/* The copy constructor of this class
+ * The sub-class of characterdata should call this API */
+dom_exception _dom_characterdata_copy(struct dom_node_internal *new,
+ struct dom_node_internal *old)
+{
+ return _dom_node_copy(new, old);
+}
+