You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
10 KiB
295 lines
10 KiB
#ifndef _KVI_TQSTRING_H_
|
|
#define _KVI_TQSTRING_H_
|
|
|
|
//=============================================================================
|
|
//
|
|
// File : kvi_qstring.h
|
|
// Creation date : Mon Aug 04 2003 13:36:33 CEST by Szymon Stefanek
|
|
//
|
|
// This file is part of the KVirc irc client distribution
|
|
// Copyright (C) 2003-2006 Szymon Stefanek (pragma at kvirc dot net)
|
|
//
|
|
// This program is FREE software. You can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your opinion) any later version.
|
|
//
|
|
// This program 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 General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, write to the Free Software Foundation,
|
|
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
//
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
//
|
|
// Helper functions for the TQString class
|
|
//
|
|
//=============================================================================
|
|
|
|
#include "kvi_settings.h"
|
|
#include "kvi_inttypes.h"
|
|
#include "kvi_stdarg.h"
|
|
#include "kvi_qcstring.h"
|
|
|
|
#include <tqstring.h>
|
|
#include <tqregexp.h>
|
|
|
|
///
|
|
/// \namespace KviTQString
|
|
///
|
|
/// \brief A namespace for TQString helper functions
|
|
///
|
|
/// This namespace contains several helper functions
|
|
/// that are used when dealing with TQString.
|
|
///
|
|
namespace KviTQString
|
|
{
|
|
extern KVILIB_API TQString makeSizeReadable(size_t size);
|
|
extern KVILIB_API bool equalCS(const TQString &sz1,const TQString &sz2);
|
|
extern KVILIB_API bool equalCI(const TQString &sz1,const TQString &sz2);
|
|
extern KVILIB_API bool equalCS(const TQString &sz1,const char * sz2);
|
|
extern KVILIB_API bool equalCI(const TQString &sz1,const char * sz2);
|
|
// sz2 is assumed to be null terminated here!
|
|
extern KVILIB_API bool equalCI(const TQString &sz1,const TQChar * sz2);
|
|
inline bool equalCS(const char * sz1,const TQString &sz2)
|
|
{ return equalCS(sz2,sz1); };
|
|
inline bool equalCI(const char * sz1,const TQString &sz2)
|
|
{ return equalCI(sz2,sz1); };
|
|
// sz1 is assumed to be null terminated here!
|
|
inline bool equalCI(const TQChar * sz1,const TQString &sz2)
|
|
{ return equalCI(sz2,sz1); };
|
|
|
|
extern KVILIB_API bool equalCSN(const TQString &sz1,const TQString &sz2,unsigned int len);
|
|
extern KVILIB_API bool equalCIN(const TQString &sz1,const TQString &sz2,unsigned int len);
|
|
extern KVILIB_API bool equalCSN(const TQString &sz1,const char * sz2,unsigned int len);
|
|
extern KVILIB_API bool equalCIN(const TQString &sz1,const char * sz2,unsigned int len);
|
|
// sz2 is assumed to be null terminated here!
|
|
extern KVILIB_API bool equalCIN(const TQString &sz1,const TQChar * sz2,unsigned int len);
|
|
inline bool equalCSN(const char * sz1,const TQString &sz2,unsigned int len)
|
|
{ return equalCSN(sz2,sz1,len); };
|
|
inline bool equalCIN(const char * sz1,const TQString &sz2,unsigned int len)
|
|
{ return equalCIN(sz2,sz1,len); };
|
|
// sz1 is assumed to be null terminated here!
|
|
inline bool equalCIN(const TQChar * sz1,const TQString &sz2,unsigned int len)
|
|
{ return equalCIN(sz2,sz1,len); };
|
|
|
|
//note that greater here means that come AFTER in the alphabetic order
|
|
// return < 0 ---> str1 < str2
|
|
// return = 0 ---> str1 = str2
|
|
// return > 0 ---> str1 > str2
|
|
extern KVILIB_API int cmpCI(const TQString &sz1,const TQString &sz2);
|
|
extern KVILIB_API int cmpCIN(const TQString &sz1,const TQString &sz2,unsigned int len);
|
|
extern KVILIB_API int cmpCS(const TQString &sz1,const TQString &sz2);
|
|
|
|
extern KVILIB_API void detach(TQString &sz);
|
|
|
|
// this makes the TQString sz appear as a null terminated array
|
|
// it MAY RETURN 0 when the TQString is null!
|
|
extern KVILIB_API const TQChar * nullTerminatedArray(const TQString &sz);
|
|
|
|
inline bool lastCharIs(TQString &szString,const TQChar &c)
|
|
{ return szString.endsWith(c); };
|
|
|
|
extern KVILIB_API void ensureLastCharIs(TQString &szString,const TQChar &c);
|
|
|
|
// wild expression matching
|
|
extern KVILIB_API bool matchWildExpressionsCI(const TQString &szM1,const TQString &szM2);
|
|
// wild or regexp matching
|
|
extern KVILIB_API bool matchStringCI(const TQString &szExp,const TQString &szStr,bool bIsRegExp = false,bool bExact = false);
|
|
extern KVILIB_API bool matchStringCS(const TQString &szExp,const TQString &szStr,bool bIsRegExp = false,bool bExact = false);
|
|
|
|
extern KVILIB_API void vsprintf(TQString &s,const TQString &szFmt,kvi_va_list list);
|
|
extern KVILIB_API TQString & sprintf(TQString &s,const TQString &szFmt,...);
|
|
extern KVILIB_API void stripRightWhiteSpace(TQString &s);
|
|
extern KVILIB_API void stripLeft(TQString &s,const TQChar &c);
|
|
extern KVILIB_API void stripRight(TQString &s,const TQChar &c);
|
|
extern KVILIB_API void appendFormatted(TQString &s,const TQString &szFmt,...);
|
|
extern KVILIB_API void appendNumber(TQString &s,double dReal);
|
|
extern KVILIB_API void appendNumber(TQString &s,kvi_i64_t iInteger);
|
|
extern KVILIB_API void appendNumber(TQString &s,int iInteger);
|
|
extern KVILIB_API void appendNumber(TQString &s,unsigned int uInteger);
|
|
extern KVILIB_API void appendNumber(TQString &s,kvi_u64_t uInteger);
|
|
|
|
extern KVILIB_API void cutFromFirst(TQString &s,const TQChar &c,bool bIncluded = true);
|
|
extern KVILIB_API void cutFromLast(TQString &s,const TQChar &c,bool bIncluded = true);
|
|
extern KVILIB_API void cutToFirst(TQString &s,const TQChar &c,bool bIncluded = true,bool bClearIfNotFound = false);
|
|
extern KVILIB_API void cutToLast(TQString &s,const TQChar &c,bool bIncluded = true,bool bClearIfNotFound = false);
|
|
extern KVILIB_API void cutFromFirst(TQString &s,const TQString &c,bool bIncluded = true);
|
|
extern KVILIB_API void cutFromLast(TQString &s,const TQString &c,bool bIncluded = true);
|
|
extern KVILIB_API void cutToFirst(TQString &s,const TQString &c,bool bIncluded = true,bool bClearIfNotFound = false);
|
|
extern KVILIB_API void cutToLast(TQString &s,const TQString &c,bool bIncluded = true,bool bClearIfNotFound = false);
|
|
|
|
extern KVILIB_API TQString upperISO88591(const TQString &szSrc);
|
|
extern KVILIB_API TQString lowerISO88591(const TQString &szSrc);
|
|
extern KVILIB_API TQString getToken(TQString &szString,const TQChar &sep);
|
|
|
|
extern KVILIB_API void transliterate(TQString &s,const TQString &szToFind,const TQString &szReplacement);
|
|
|
|
extern KVILIB_API void bufferToHex(TQString &szRetBuffer,const unsigned char * buffer,unsigned int len);
|
|
|
|
// a global empty string (note that this is ALSO NULL under TQt 3.x)
|
|
extern KVILIB_API const TQString empty;
|
|
|
|
///
|
|
/// A portability wrapper which with TQt3 and TQt4.
|
|
/// Returns a lowcase version of the parameter string.
|
|
///
|
|
inline TQString toLower(const TQString &s)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.toLower();
|
|
#else
|
|
return s.lower();
|
|
#endif
|
|
}
|
|
|
|
inline int find(const TQString &s,TQChar c,int index = 0,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.indexOf(c,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.find(c,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int find(const TQString &s,char c,int index = 0,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.indexOf(c,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.find(c,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int find(const TQString &s,const TQString & str,int index = 0,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.indexOf(str,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.find(str,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int find(const TQString &s,const TQRegExp & rx,int index = 0)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.indexOf(rx,index);
|
|
#else
|
|
return s.find(rx,index);
|
|
#endif
|
|
}
|
|
|
|
inline int find(const TQString &s,const char * str,int index = 0)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.indexOf(TQString(str),index);
|
|
#else
|
|
return s.find(str,index);
|
|
#endif
|
|
}
|
|
|
|
inline int findRev(const TQString &s,TQChar c,int index = -1,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.lastIndexOf(c,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.findRev(c,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int findRev(const TQString &s,char c,int index = -1,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.lastIndexOf(c,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.findRev(c,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int findRev(const TQString &s,const TQString & str,int index = -1,bool cs = true)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.lastIndexOf(str,index,cs ? TQt::CaseSensitive : TQt::CaseInsensitive);
|
|
#else
|
|
return s.findRev(str,index,cs);
|
|
#endif
|
|
}
|
|
|
|
inline int findRev(const TQString &s,const TQRegExp & rx,int index = -1)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.lastIndexOf(rx,index);
|
|
#else
|
|
return s.findRev(rx,index);
|
|
#endif
|
|
}
|
|
|
|
inline int findRev(const TQString &s,const char * str,int index = -1)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.lastIndexOf(TQString(str),index);
|
|
#else
|
|
return s.findRev(str,index);
|
|
#endif
|
|
}
|
|
|
|
inline TQString trimmed(const TQString &s)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.trimmed();
|
|
#else
|
|
return s.stripWhiteSpace();
|
|
#endif
|
|
}
|
|
|
|
// WARNING: DO NOT USE CONSTRUCTS LIKE char * c = KviTQString::toUtf8(something).data();
|
|
// They are dangerous since with many compilers the returned string gets destroyed
|
|
// at the end of the instruction and the c pointer gets thus invalidated.
|
|
// Use
|
|
// KviTQCString tmp = KviTQString::toUtf8(something);
|
|
// char * c = tmp.data();
|
|
// instead.
|
|
// Yes, I know that it sucks, but it's the only way to
|
|
// transit to qt 4.x more or less cleanly...
|
|
inline KviTQCString toUtf8(const TQString &s)
|
|
{
|
|
#ifdef COMPILE_USE_QT4
|
|
return s.toUtf8();
|
|
#else
|
|
return s.utf8();
|
|
#endif
|
|
}
|
|
|
|
inline KviTQCString toLocal8Bit(const TQString &s)
|
|
{
|
|
return s.local8Bit();
|
|
}
|
|
|
|
inline kvi_i64_t toI64(TQString &szNumber,bool * bOk)
|
|
{
|
|
#if SIZEOF_LONG_INT == 8
|
|
return szNumber.toLong(bOk);
|
|
#else
|
|
return szNumber.toLongLong(bOk);
|
|
#endif
|
|
}
|
|
|
|
inline kvi_u64_t toU64(TQString &szNumber,bool * bOk)
|
|
{
|
|
#if SIZEOF_LONG_INT == 8
|
|
return szNumber.toULong(bOk);
|
|
#else
|
|
return szNumber.toULongLong(bOk);
|
|
#endif
|
|
}
|
|
};
|
|
|
|
// QT4SUX: Because TQString() is gone. TQString() is SLOWER than TQString() since it invokes a constructor and destructor.
|
|
|
|
#endif //!_KVI_TQSTRING_H_
|