diff options
| author | Bob Jamison <ishmalius@gmail.com> | 2006-04-12 13:25:21 +0000 |
|---|---|---|
| committer | ishmal <ishmal@users.sourceforge.net> | 2006-04-12 13:25:21 +0000 |
| commit | 6fd9af13a8614a4b95e8be1518e745915ef8bb56 (patch) | |
| tree | bf94fa5f7c3a7b2f581f3e7cf2522bf7c2d4b6c9 /src/dom/domstring.cpp | |
| parent | Removed file/folder for ishmal (diff) | |
| download | inkscape-6fd9af13a8614a4b95e8be1518e745915ef8bb56.tar.gz inkscape-6fd9af13a8614a4b95e8be1518e745915ef8bb56.zip | |
Add new rearranged /dom directory
(bzr r479)
Diffstat (limited to 'src/dom/domstring.cpp')
| -rw-r--r-- | src/dom/domstring.cpp | 423 |
1 files changed, 423 insertions, 0 deletions
diff --git a/src/dom/domstring.cpp b/src/dom/domstring.cpp new file mode 100644 index 000000000..34629edb6 --- /dev/null +++ b/src/dom/domstring.cpp @@ -0,0 +1,423 @@ +/** + * 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 <stdio.h> +#include <stdlib.h> + +#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<len ; i++) + { + XMLCh ch = str.charAt(i); + chars.push_back(ch); + } + return *this; +} + +DOMString &DOMString::append(const char *str) +{ + if (!str) + return *this; + char *s = (char *)str; + while (*s) + { + XMLCh ch = (XMLCh) *s++; + chars.push_back(ch); + } + return *this; +} + +DOMString &DOMString::append(const std::string &str) +{ + unsigned int len = str.size(); + for (unsigned int i=0 ; i<len ; i++) + { + XMLCh ch = str[i]; + chars.push_back(ch); + } + return *this; +} + +DOMString &DOMString::assign(const DOMString &str) +{ + clear(); + append(str); + return *this; +} + +DOMString &DOMString::operator=(const DOMString &str) +{ + clear(); + append(str); + return *this; +} + +DOMString &DOMString::assign(const char *str) +{ + clear(); + append(str); + return *this; +} + +DOMString &DOMString::assign(const std::string &str) +{ + clear(); + append(str); + return *this; +} + + +void DOMString::erase(unsigned long pos, unsigned long count) +{ + std::vector<XMLCh>::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<end ; i++) + ret.push_back(chars[i]); + return ret; +} + +const char *DOMString::c_str() +{ + if (cstring) + delete cstring; + + int length = chars.size(); + + cstring = new char[length+1]; + + int i=0; + for ( ; i<length ; i++ ) + cstring[i] = (char) chars[i]; + + cstring[i] = '\0'; + + return cstring; +} + + +unsigned long DOMString::size() const +{ + return chars.size(); +} + + + +//######################################################################### +//# C O M P A R I S O N +//######################################################################### + +int DOMString::compare(const DOMString &str) const +{ + int asize = chars.size(); + int bsize = str.size(); + + int diff = 0; + int index = 0; + while (index < asize && index < bsize) + { + int a = (int) chars[index]; + int b = (int) str[index]; + diff = a - b; + if (diff) + return diff; + index++; + } + + //equal for their common length. lets see which is longer + diff = asize - bsize; + + return diff; +} + + +int DOMString::compare(const char *str) const +{ + if (!str) + return 1; + + int asize = chars.size(); + + int diff = 0; + int index = 0; + while (index < asize) + { + int a = (int) chars[index]; + int b = (int) str[index]; + if (!b) + return a; + + diff = a - b; + if (diff) + return diff; + index++; + } + + diff = str[index]; //char or terminating 0 + + return diff; + +} + + +int DOMString::compare(const std::string &str) const +{ + int asize = chars.size(); + int bsize = str.size(); + + int diff = 0; + int index = 0; + while (index < asize && index < bsize) + { + int a = (int) chars[index]; + int b = (int) str[index]; + diff = a - b; + if (diff) + return diff; + index++; + } + + diff = asize - bsize; + + return diff; + + + +} + + + +//######################################################################### +//# O P E R A T O R S +//######################################################################### +DOMString &operator +(DOMString &a, const char *b) + { return a.append(b); } + +DOMString &operator +(const char *b, DOMString &a) + { return a.prepend(b); } + + + +} //namespace dom +} //namespace w3c +} //namespace org + +/*######################################################################### +## E N D O F F I L E +#########################################################################*/ + + + |
