diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch) | |
tree | 5ac38a06f3dde268dc7927dc155896926aaf7012 /khtml/dom/dom_string.cpp | |
download | tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'khtml/dom/dom_string.cpp')
-rw-r--r-- | khtml/dom/dom_string.cpp | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/khtml/dom/dom_string.cpp b/khtml/dom/dom_string.cpp new file mode 100644 index 000000000..2319194e9 --- /dev/null +++ b/khtml/dom/dom_string.cpp @@ -0,0 +1,300 @@ +/** + * This file is part of the DOM implementation for KDE. + * + * (C) 1999 Lars Knoll ([email protected]) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "dom/dom_string.h" +#include "xml/dom_stringimpl.h" + + +using namespace DOM; + + +DOMString::DOMString(const QChar *str, uint len) +{ + impl = new DOMStringImpl( str, len ); + impl->ref(); +} + +DOMString::DOMString(const QString &str) +{ + if (str.isNull()) { + impl = 0; + return; + } + + impl = new DOMStringImpl( str.unicode(), str.length() ); + impl->ref(); +} + +DOMString::DOMString(const char *str) +{ + if (!str) { + impl = 0; + return; + } + + impl = new DOMStringImpl( str ); + impl->ref(); +} + +DOMString::DOMString(DOMStringImpl *i) +{ + impl = i; + if(impl) impl->ref(); +} + +DOMString::DOMString(const DOMString &other) +{ + impl = other.impl; + if(impl) impl->ref(); +} + +DOMString::~DOMString() +{ + if(impl) impl->deref(); +} + +DOMString &DOMString::operator =(const DOMString &other) +{ + if ( impl != other.impl ) { + if(impl) impl->deref(); + impl = other.impl; + if(impl) impl->ref(); + } + return *this; +} + +DOMString &DOMString::operator += (const DOMString &str) +{ + if(!impl) + { + // ### FIXME!!! + impl = str.impl; + if (impl) + impl->ref(); + return *this; + } + if(str.impl) + { + DOMStringImpl *i = impl->copy(); + impl->deref(); + impl = i; + impl->ref(); + impl->append(str.impl); + } + return *this; +} + +DOMString DOMString::operator + (const DOMString &str) +{ + if(!impl) return str.copy(); + if(str.impl) + { + DOMString s = copy(); + s += str; + return s; + } + + return copy(); +} + +void DOMString::insert(DOMString str, uint pos) +{ + if(!impl) + { + impl = str.impl->copy(); + impl->ref(); + } + else + impl->insert(str.impl, pos); +} + + +const QChar &DOMString::operator [](unsigned int i) const +{ + static const QChar nullChar = 0; + + if(!impl || i >= impl->l ) return nullChar; + + return *(impl->s+i); +} + +int DOMString::find(const QChar c, int start) const +{ + unsigned int l = start; + if(!impl || l >= impl->l ) return -1; + while( l < impl->l ) + { + if( *(impl->s+l) == c ) return l; + l++; + } + return -1; +} + +uint DOMString::length() const +{ + if(!impl) return 0; + return impl->l; +} + +void DOMString::truncate( unsigned int len ) +{ + if(impl) impl->truncate(len); +} + +void DOMString::remove(unsigned int pos, int len) +{ + if(impl) impl->remove(pos, len); +} + +DOMString DOMString::split(unsigned int pos) +{ + if(!impl) return DOMString(); + return impl->split(pos); +} + +DOMString DOMString::lower() const +{ + if(!impl) return DOMString(); + return impl->lower(); +} + +DOMString DOMString::upper() const +{ + if(!impl) return DOMString(); + return impl->upper(); +} + +bool DOMString::percentage(int &_percentage) const +{ + if(!impl || !impl->l) return false; + + if ( *(impl->s+impl->l-1) != QChar('%')) + return false; + + _percentage = QConstString(impl->s, impl->l-1).string().toInt(); + return true; +} + +QChar *DOMString::unicode() const +{ + if(!impl) return 0; + return impl->unicode(); +} + +QString DOMString::string() const +{ + if(!impl) return QString::null; + + return impl->string(); +} + +int DOMString::toInt() const +{ + if(!impl) return 0; + + return impl->toInt(); +} + +DOMString DOMString::copy() const +{ + if(!impl) return DOMString(); + return impl->copy(); +} + +// ------------------------------------------------------------------------ + +bool DOM::strcasecmp( const DOMString &as, const DOMString &bs ) +{ + if ( as.length() != bs.length() ) return true; + + const QChar *a = as.unicode(); + const QChar *b = bs.unicode(); + if ( a == b ) return false; + if ( !( a && b ) ) return true; + int l = as.length(); + while ( l-- ) { + if ( *a != *b && a->lower() != b->lower() ) return true; + a++,b++; + } + return false; +} + +bool DOM::strcasecmp( const DOMString &as, const char* bs ) +{ + const QChar *a = as.unicode(); + int l = as.length(); + if ( !bs ) return ( l != 0 ); + while ( l-- ) { + if ( a->latin1() != *bs ) { + char cc = ( ( *bs >= 'A' ) && ( *bs <= 'Z' ) ) ? ( ( *bs ) + 'a' - 'A' ) : ( *bs ); + if ( a->lower().latin1() != cc ) return true; + } + a++, bs++; + } + return ( *bs != '\0' ); +} + +bool DOMString::isEmpty() const +{ + return (!impl || impl->l == 0); +} + +//----------------------------------------------------------------------------- + +bool DOM::operator==( const DOMString &a, const DOMString &b ) +{ + unsigned int l = a.length(); + + if( l != b.length() ) return false; + + if(!memcmp(a.unicode(), b.unicode(), l*sizeof(QChar))) + return true; + return false; +} + +bool DOM::operator==( const DOMString &a, const QString &b ) +{ + unsigned int l = a.length(); + + if( l != b.length() ) return false; + + if(!memcmp(a.unicode(), b.unicode(), l*sizeof(QChar))) + return true; + return false; +} + +bool DOM::operator==( const DOMString &a, const char *b ) +{ + DOMStringImpl* aimpl = a.impl; + if ( !b ) return !aimpl; + + if ( aimpl ) { + int alen = aimpl->l; + const QChar *aptr = aimpl->s; + while ( alen-- ) { + unsigned char c = *b++; + if ( !c || ( *aptr++ ).unicode() != c ) + return false; + } + } + + return !*b; +} |