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.
kvirc/src/kvilib/core/kvi_qstring.h

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_