/** * Phoebe DOM Implementation. * * This is a C++ approximation of the W3C DOM model, which follows * fairly closely the specifications in the various .idl files, copies of * which are provided for reference. Most important is this one: * * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html * * Authors: * Bob Jamison * * Copyright (C) 2005 Bob Jamison * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "domstring.h" namespace org { namespace w3c { namespace dom { //######################################################################### //# C O N S T R U C T O R S //######################################################################### DOMString::DOMString() { init(); } DOMString::DOMString(const DOMString &other) { init(); chars = other.chars; } DOMString::DOMString(const char *str) { init(); append(str); } DOMString::~DOMString() { if (cstring) delete[] cstring; } /** * Called only by Constructors */ void DOMString::init() { cstring = NULL; chars.clear(); } //######################################################################### //# M O D I F Y //######################################################################### DOMString &DOMString::append(const DOMString &str) { unsigned int len = str.size(); for (unsigned int i=0 ; i::iterator iter = chars.begin(); chars.erase(iter, iter + count); } DOMString &DOMString::insert(unsigned long pos, const DOMString &str) { DOMString a = substr(0, pos); DOMString b = substr(pos, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::insert(unsigned long pos, const char *str) { DOMString a = substr(0, pos); DOMString b = substr(pos, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::insert(unsigned long pos, const std::string &str) { DOMString a = substr(0, pos); DOMString b = substr(pos, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::prepend(const DOMString &str) { DOMString tmp = *this; clear(); append(str); append(tmp); return *this; } DOMString &DOMString::prepend(const char *str) { DOMString tmp = *this; clear(); append(str); append(tmp); return *this; } DOMString &DOMString::prepend(const std::string &str) { DOMString tmp = *this; clear(); append(str); append(tmp); return *this; } DOMString &DOMString::replace(unsigned long pos, unsigned long count, const DOMString &str) { DOMString a = substr(0, pos); DOMString b = substr(pos+count, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::replace(unsigned long pos, unsigned long count, const char *str) { DOMString a = substr(0, pos); DOMString b = substr(pos+count, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::replace(unsigned long pos, unsigned long count, const std::string &str) { DOMString a = substr(0, pos); DOMString b = substr(pos+count, size()); clear(); append(a); append(str); append(b); return *this; } DOMString &DOMString::push_back(XMLCh ch) { chars.push_back(ch); return *this; } void DOMString::clear() { chars.clear(); if (cstring) { delete[] cstring; cstring = NULL; } } //######################################################################### //# Q U E R Y //######################################################################### XMLCh DOMString::charAt(unsigned long index) const { return chars[index]; } XMLCh DOMString::operator[](unsigned long index) const { return chars[index]; } DOMString DOMString::substr(unsigned long start, unsigned long end) const { DOMString ret; for (unsigned long i = start; i