diff options
Diffstat (limited to 'src/core/characterdata.c')
-rw-r--r-- | src/core/characterdata.c | 83 |
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); +} + |