From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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 --- khtml/dom/dom_string.h | 144 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 khtml/dom/dom_string.h (limited to 'khtml/dom/dom_string.h') diff --git a/khtml/dom/dom_string.h b/khtml/dom/dom_string.h new file mode 100644 index 000000000..f14a2aea9 --- /dev/null +++ b/khtml/dom/dom_string.h @@ -0,0 +1,144 @@ +/* + * This file is part of the DOM implementation for KDE. + * + * (C) 1999 Lars Knoll (knoll@kde.org) + * + * 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. + * + */ +#ifndef _DOM_DOMString_h_ +#define _DOM_DOMString_h_ + +#include +#include + +#include + +namespace DOM { + +class DOMStringImpl; + +/** + * This class implements the basic string we use in the DOM. We do not use + * QString for 2 reasons: Memory overhead, and the missing explicit sharing + * of strings we need for the DOM. + * + * All DOMStrings are explicitly shared (they behave like pointers), meaning + * that modifications to one instance will also modify all others. If you + * wish to get a DOMString that is independent, use copy(). + */ +class KHTML_EXPORT DOMString +{ + friend class CharacterDataImpl; + friend KHTML_EXPORT bool operator==( const DOMString &a, const char *b ); +public: + /** + * default constructor. Gives an empty DOMString + */ + DOMString() : impl(0) {} + + DOMString(const QChar *str, uint len); + DOMString(const QString &); + DOMString(const char *str); + DOMString(DOMStringImpl *i); + + virtual ~DOMString(); + + // assign and copy + DOMString(const DOMString &str); + DOMString &operator =(const DOMString &str); + + /** + * append str to this string + */ + DOMString &operator += (const DOMString &str); + /** + * add two DOMString's + */ + DOMString operator + (const DOMString &str); + + void insert(DOMString str, uint pos); + + /** + * The character at position i of the DOMString. If i >= length(), the + * character returned will be 0. + */ + const QChar &operator [](unsigned int i) const; + + int find(const QChar c, int start = 0) const; + + uint length() const; + void truncate( unsigned int len ); + void remove(unsigned int pos, int len=1); + /** + * Splits the string into two. The original string gets truncated to pos, and the rest is returned. + */ + DOMString split(unsigned int pos); + + /** + * Returns a lowercase version of the string + */ + DOMString lower() const; + /** + * Returns an uppercase version of the string + */ + DOMString upper() const; + + QChar *unicode() const; + QString string() const; + + int toInt() const; + bool percentage(int &_percentage) const; + + DOMString copy() const; + + bool isNull() const { return (impl == 0); } + bool isEmpty() const; + + /** + * @internal get a handle to the imlementation of the DOMString + * Use at own risk!!! + */ + DOMStringImpl *implementation() const { return impl; } + +protected: + DOMStringImpl *impl; +}; + +#ifndef NDEBUG +inline kdbgstream &operator<<(kdbgstream &stream, const DOMString &string) { + return (stream << string.string()); +} +#else +inline kndbgstream &operator<<(kndbgstream &stream, const DOMString &) { + return stream; +} +#endif + +KHTML_EXPORT bool operator==( const DOMString &a, const DOMString &b ); +KHTML_EXPORT bool operator==( const DOMString &a, const QString &b ); +KHTML_EXPORT bool operator==( const DOMString &a, const char *b ); +inline bool operator!=( const DOMString &a, const DOMString &b ) { return !(a==b); } +inline bool operator!=( const DOMString &a, const QString &b ) { return !(a==b); } +inline bool operator!=( const DOMString &a, const char *b ) { return !(a==b); } +inline bool strcmp( const DOMString &a, const DOMString &b ) { return a != b; } + +// returns false when equal, true otherwise (ignoring case) +KHTML_EXPORT bool strcasecmp( const DOMString &a, const DOMString &b ); +KHTML_EXPORT bool strcasecmp( const DOMString& a, const char* b ); + +} +#endif -- cgit v1.2.1