398 lines
14 KiB
C
398 lines
14 KiB
C
|
|
// CkString.h: interface for the CkString class.
|
||
|
|
//
|
||
|
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
// This header is NOT generated.
|
||
|
|
// Some methods may be undocumented in the online reference documentation.
|
||
|
|
|
||
|
|
#ifndef _CKSTRING_H
|
||
|
|
#define _CKSTRING_H
|
||
|
|
|
||
|
|
#include "chilkatDefs.h"
|
||
|
|
|
||
|
|
#include "CkObject.h"
|
||
|
|
|
||
|
|
|
||
|
|
class CkStringArray;
|
||
|
|
class CkStringArrayW;
|
||
|
|
|
||
|
|
#if !defined(__sun__) && !defined(__sun)
|
||
|
|
#pragma pack (push, 8)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
// CLASS: CkString
|
||
|
|
class CK_VISIBLE_PUBLIC CkString : public CkObject
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
CkString();
|
||
|
|
~CkString();
|
||
|
|
|
||
|
|
static CkString *createNew(void);
|
||
|
|
static CkString *createNew2(int progLang);
|
||
|
|
|
||
|
|
// Construct with an ANSI string
|
||
|
|
CkString(const char *s_ansi);
|
||
|
|
// Construct with a utf-8 string. The 2nd arg is unused.
|
||
|
|
CkString(const char *s_utf8, bool bUnused);
|
||
|
|
|
||
|
|
CkString(const CkString &str);
|
||
|
|
CkString &operator=(const CkString &str);
|
||
|
|
|
||
|
|
CkString &operator=(const char *s);
|
||
|
|
CkString &operator=(int n);
|
||
|
|
CkString &operator=(bool b);
|
||
|
|
CkString &operator=(char c);
|
||
|
|
|
||
|
|
bool operator==(const CkString& s) const;
|
||
|
|
bool operator==(const char *s) const;
|
||
|
|
bool operator!=(const CkString& s) const;
|
||
|
|
bool operator!=(const char *s) const;
|
||
|
|
|
||
|
|
// Append s to this CkString
|
||
|
|
CkString &operator+=(const CkString& s);
|
||
|
|
CkString &operator+=(const char *s);
|
||
|
|
|
||
|
|
//
|
||
|
|
// operator to cast to a const char *
|
||
|
|
//
|
||
|
|
operator const char *();
|
||
|
|
operator const wchar_t *();
|
||
|
|
|
||
|
|
|
||
|
|
// BEGIN PUBLIC INTERFACE
|
||
|
|
bool get_Utf8(void) const;
|
||
|
|
void put_Utf8(bool b);
|
||
|
|
|
||
|
|
|
||
|
|
int get_NumArabic(void);
|
||
|
|
int get_NumAscii(void);
|
||
|
|
int get_NumCentralEuro(void); // such as Czech, Polish, etc.
|
||
|
|
int get_NumChinese(void);
|
||
|
|
int get_NumCyrillic(void);
|
||
|
|
int get_NumGreek(void);
|
||
|
|
int get_NumHebrew(void);
|
||
|
|
int get_NumJapanese(void);
|
||
|
|
int get_NumKorean(void);
|
||
|
|
int get_NumLatin(void); // Western European
|
||
|
|
int get_NumThai(void);
|
||
|
|
|
||
|
|
void punyEncode(void);
|
||
|
|
void punyDecode(void);
|
||
|
|
|
||
|
|
// Load the contents of a text file into the CkString object.
|
||
|
|
// The string is cleared before loading.
|
||
|
|
// Charset can be "unicode", "ansi", "utf-8", or any other charset
|
||
|
|
// such as "iso-8859-1", "windows-1253", "Shift_JIS", etc.
|
||
|
|
bool loadFile(const char *path, const char *charset);
|
||
|
|
bool loadFileW(const wchar_t *path, const wchar_t *charset);
|
||
|
|
|
||
|
|
// Returns the ANSI character starting at an index.
|
||
|
|
// The first character is at index 0.
|
||
|
|
// IMPORTANT: This is not a byte index, but a character position index.
|
||
|
|
char charAt(int idx) const;
|
||
|
|
wchar_t charAtU(int idx) const; // Returns Unicode character at position idx.
|
||
|
|
|
||
|
|
// If this string is "43" for example, this returns 43.
|
||
|
|
int intValue(void) const;
|
||
|
|
double doubleValue(void) const;
|
||
|
|
|
||
|
|
CkString *clone(void) const;
|
||
|
|
void setStr(CkString &s);
|
||
|
|
|
||
|
|
bool endsWith(const char *s) const;
|
||
|
|
bool endsWithW(const wchar_t *s) const;
|
||
|
|
bool endsWithStr(CkString &s) const;
|
||
|
|
|
||
|
|
bool beginsWithStr(CkString &s) const;
|
||
|
|
int indexOf(const char *s) const;
|
||
|
|
int indexOfW(const wchar_t *s) const;
|
||
|
|
|
||
|
|
int indexOfStr(CkString &s) const;
|
||
|
|
int replaceAll(CkString &str, CkString &replacement);
|
||
|
|
bool replaceFirst(CkString &str, CkString &replacement);
|
||
|
|
CkString *substring(int startCharIdx, int numChars) const;
|
||
|
|
bool matchesStr(CkString &str) const;
|
||
|
|
|
||
|
|
bool matches(const char *s) const;
|
||
|
|
bool matchesNoCase(const char *s) const;
|
||
|
|
bool matchesW(const wchar_t *s) const;
|
||
|
|
bool matchesNoCaseW(const wchar_t *s) const;
|
||
|
|
|
||
|
|
CkString *getChar(int idx) const;
|
||
|
|
int removeAll(CkString &str);
|
||
|
|
bool removeFirst(CkString &str);
|
||
|
|
void chopAtStr(CkString &str);
|
||
|
|
void chopAtStr(const char *s);
|
||
|
|
|
||
|
|
// For Q/B encoding, such as "?UTF-8?Q?Chilkat=20Software=2C=20Inc?= <support@chilkatsoft.com>"
|
||
|
|
void qbDecode(void);
|
||
|
|
|
||
|
|
void urlDecode(const char *charset);
|
||
|
|
void urlEncode(const char *charset);
|
||
|
|
void base64Decode(const char *charset);
|
||
|
|
void base64Encode(const char *charset);
|
||
|
|
void qpDecode(const char *charset);
|
||
|
|
void qpEncode(const char *charset);
|
||
|
|
void hexDecode(const char *charset);
|
||
|
|
void hexEncode(const char *charset);
|
||
|
|
|
||
|
|
void urlDecodeW(const wchar_t *charset);
|
||
|
|
void urlEncodeW(const wchar_t *charset);
|
||
|
|
void base64DecodeW(const wchar_t *charset);
|
||
|
|
void base64EncodeW(const wchar_t *charset);
|
||
|
|
void qpDecodeW(const wchar_t *charset);
|
||
|
|
void qpEncodeW(const wchar_t *charset);
|
||
|
|
void hexDecodeW(const wchar_t *charset);
|
||
|
|
void hexEncodeW(const wchar_t *charset);
|
||
|
|
|
||
|
|
void entityDecode(void);
|
||
|
|
void entityEncode(void);
|
||
|
|
void appendUtf8(const char *s);
|
||
|
|
void appendAnsi(const char *s);
|
||
|
|
|
||
|
|
bool isEmpty(void);
|
||
|
|
|
||
|
|
// Appends the current local date/time.
|
||
|
|
void appendCurrentDateRfc822(void);
|
||
|
|
|
||
|
|
// SYSTEMTIME is defined in <windows.h>
|
||
|
|
// For more information, Google "SYSTEMTIME"
|
||
|
|
// sysTime should represent a local date/time
|
||
|
|
// Removed in Chilkat v11.0.0
|
||
|
|
//void appendDateRfc822(SYSTEMTIME &sysTime);
|
||
|
|
//void appendDateRfc822Gmt(SYSTEMTIME &sysTime);
|
||
|
|
|
||
|
|
// Clears the string (i.e. resets the length to 0). The internal buffer is
|
||
|
|
// not deallocated. Deallocation happens when the CkString object is destructed.
|
||
|
|
void clear(void);
|
||
|
|
|
||
|
|
void prepend(const char *s);
|
||
|
|
void prependW(const wchar_t *s);
|
||
|
|
|
||
|
|
// Causes the internal buffers to always be securely cleared by zeroing out the memory prior to deallocation or clearing.
|
||
|
|
bool get_SecureClear(void) const;
|
||
|
|
void put_SecureClear(bool b);
|
||
|
|
|
||
|
|
|
||
|
|
void appendInt(int n);
|
||
|
|
void append(const char *s);
|
||
|
|
void append(const CkString &str);
|
||
|
|
void appendChar(char c);
|
||
|
|
void appendCharU(wchar_t c);
|
||
|
|
void appendN(const char *pByteData, unsigned long szByteData);
|
||
|
|
void appendStr(const CkString &str);
|
||
|
|
void appendEnc(const char *s, const char *charEncoding); // such as "utf-8", "windows-1252", "shift_JIS", etc.
|
||
|
|
void appendRandom(int numBytes, const char *encoding); // such as "base64", "hex", "qp", "url", etc.
|
||
|
|
|
||
|
|
// Convert the binary data to a hex string representation and append.
|
||
|
|
void appendHexData(const void *pByteData, unsigned long szByteData);
|
||
|
|
|
||
|
|
// Same as clearing the string and appending.
|
||
|
|
void setString(const char *s);
|
||
|
|
void setStringAnsi(const char *s);
|
||
|
|
void setStringUtf8(const char *s);
|
||
|
|
|
||
|
|
// To/From Unicode (wchar_t)
|
||
|
|
// On some systems wchar_t is utf-16, on others it is utf-32.
|
||
|
|
void setStringU(const wchar_t *unicode);
|
||
|
|
void setStringUtf16(const uint16_t *unicode);
|
||
|
|
void appendU(const wchar_t *unicode);
|
||
|
|
void appendNU(const wchar_t *unicode, int numChars);
|
||
|
|
const wchar_t *getUnicode(void) const;
|
||
|
|
|
||
|
|
// Returns utf16 chars having the byte order of the local computer.
|
||
|
|
// (Returns utf16LE on little-endian machines, and utf16BE on big-endian machines)
|
||
|
|
const uint16_t *getUtf16(void) const;
|
||
|
|
|
||
|
|
void removeDelimited(const char *beginDelim, const char *endDelim, bool caseSensitive);
|
||
|
|
|
||
|
|
// To ANSI...
|
||
|
|
const char *getAnsi(void) const;
|
||
|
|
const char *getStringAnsi(void) const { return getAnsi(); }
|
||
|
|
|
||
|
|
// To utf-8...
|
||
|
|
const char *getUtf8(void) const;
|
||
|
|
const char *getStringUtf8(void) const { return getUtf8(); }
|
||
|
|
|
||
|
|
// Get any multi-byte encoding.
|
||
|
|
const char *getEnc(const char *encoding);
|
||
|
|
const char *getEncW(const wchar_t *encoding);
|
||
|
|
|
||
|
|
// Same as ckStrCmp
|
||
|
|
int compareStr(const CkString &str) const; // Compare against another CkString
|
||
|
|
|
||
|
|
const char *getString(void) const;
|
||
|
|
|
||
|
|
int getSizeUtf8(void) const; // Returns size in bytes of utf-8 string.
|
||
|
|
int getSizeAnsi(void) const; // Returns size in bytes of ANSI string.
|
||
|
|
int getSizeUnicode(void) const; // Returns size in bytes of Unicode string.
|
||
|
|
int getNumChars(void) const; // Returns number of characters in the string.
|
||
|
|
|
||
|
|
// Trim whitespace from both ends of the string.
|
||
|
|
void trim(void); // Does not include newline
|
||
|
|
void trim2(void); // Includes newline
|
||
|
|
void trimInsideSpaces(void);
|
||
|
|
|
||
|
|
// Case sensitive replacement functions.
|
||
|
|
// Return the number of occurrences replaced.
|
||
|
|
// (Yes, we know that occurrence is misspelled here. It was a mistake from many years ago..)
|
||
|
|
int replaceAllOccurances(const char *pattern, const char *replacement);
|
||
|
|
int replaceAllOccurancesW(const wchar_t *pattern, const wchar_t *replacement);
|
||
|
|
|
||
|
|
// (Yes, we know that occurrence is misspelled here. It was a mistake from many years ago..)
|
||
|
|
bool replaceFirstOccurance(const char *pattern, const char *replacement);
|
||
|
|
bool replaceFirstOccuranceW(const wchar_t *pattern, const wchar_t *replacement);
|
||
|
|
|
||
|
|
// (Yes, we know that occurrence is misspelled here. It was a mistake from many years ago..)
|
||
|
|
int replaceAllOccurancesNoCase(const char *pattern, const char *replacement);
|
||
|
|
bool replaceFirstOccuranceNoCase(const char *pattern, const char *replacement);
|
||
|
|
|
||
|
|
// Searches the string for the 1st occurrence of startStr. Then
|
||
|
|
// searches for the first occurrence of endStr after startStr.
|
||
|
|
// If both startStr and endStr are found, then replaces all occurrences
|
||
|
|
// of pattern with replacement.
|
||
|
|
// Then continues past the endStr searching for the next occurrence of StartStr
|
||
|
|
// and repeating until replacements are made within all chunks delimited by
|
||
|
|
// startStr/endStr are made.
|
||
|
|
|
||
|
|
// For example, if the content is XML and has nodes such as "<description>.....</description>",
|
||
|
|
// then the startStr and endStr can be "<description>" and "</description>" respectively,
|
||
|
|
// and the next within each pair can be search/replaced.
|
||
|
|
|
||
|
|
// Return the number of occurrences replaced.
|
||
|
|
// (Yes, we know that occurrence is misspelled here. It was a mistake from many years ago..)
|
||
|
|
int replaceAllOccurancesBetween(const char *startStr,
|
||
|
|
const char *endStr,
|
||
|
|
const char *pattern,
|
||
|
|
const char *replacement);
|
||
|
|
|
||
|
|
// (Yes, we know that occurrence is misspelled here. It was a mistake from many years ago..)
|
||
|
|
int replaceAllOccurancesBetweenW(const wchar_t *startStr,
|
||
|
|
const wchar_t *endStr,
|
||
|
|
const wchar_t *pattern,
|
||
|
|
const wchar_t *replacement);
|
||
|
|
|
||
|
|
|
||
|
|
// CRLF
|
||
|
|
void toCRLF(void); // Make all end of lines a CRLF ("\r\n")
|
||
|
|
void toLF(void); // Make all end of lines a "\n"
|
||
|
|
|
||
|
|
// Eliminate all occurances of a particular ANSI character.
|
||
|
|
void eliminateChar(char ansiChar, int startIndex);
|
||
|
|
|
||
|
|
// Return the last (ANSI) character in the string.
|
||
|
|
char lastChar(void);
|
||
|
|
|
||
|
|
// Return the number of occurrences of ch in the string.
|
||
|
|
int countCharOccurances(char ch);
|
||
|
|
|
||
|
|
// Remove the last N chars from the string.
|
||
|
|
void shorten(int n);
|
||
|
|
|
||
|
|
// Convert to lower or upper case
|
||
|
|
void toLowerCase(void);
|
||
|
|
void toUpperCase(void);
|
||
|
|
|
||
|
|
// Convert XML special characters to their representations
|
||
|
|
// Example: '<' is converted to <
|
||
|
|
void encodeXMLSpecial(void); // Convert '<' to < (etc.)
|
||
|
|
void decodeXMLSpecial(void); // Convert < to '<' (etc.)
|
||
|
|
|
||
|
|
// Return true if any char in s is contained in this CkString.
|
||
|
|
bool containsAnyOf(const char *s) const;
|
||
|
|
|
||
|
|
bool containsSubstring(const char *substr) const;
|
||
|
|
bool containsSubstringNoCase(const char *substr) const;
|
||
|
|
bool containsSubstringW(const wchar_t *substr) const;
|
||
|
|
bool containsSubstringNoCaseW(const wchar_t *substr) const;
|
||
|
|
|
||
|
|
// For many Win32 SDK functions, such as CreateFile, error information
|
||
|
|
// must be retrieved by using the Win32 functions GetLastError and FormatMessage.
|
||
|
|
// This method calls these Win32 functions to format the error and append it
|
||
|
|
// to the string.
|
||
|
|
#ifdef WIN32
|
||
|
|
void appendLastWindowsError(void);
|
||
|
|
#endif
|
||
|
|
// Returns true if the strings are equal, or false. (Not the same as
|
||
|
|
// "compare", which returns 0 if equal, and 1 or -1 if the strings are lexicographically
|
||
|
|
// less than or greater than)
|
||
|
|
bool equals(const char *s) const;
|
||
|
|
bool equalsIgnoreCase(const char *s) const;
|
||
|
|
|
||
|
|
bool equalsStr(const CkString &s) const;
|
||
|
|
bool equalsIgnoreCaseStr(const CkString &s) const;
|
||
|
|
|
||
|
|
bool equalsW(const wchar_t *s) const;
|
||
|
|
bool equalsIgnoreCaseW(const wchar_t *s) const;
|
||
|
|
|
||
|
|
// Remove a chunk from the string.
|
||
|
|
void removeChunk(int charStartPos, int numChars);
|
||
|
|
|
||
|
|
// Remove all occurances of a particular character.
|
||
|
|
void removeCharOccurances(char c);
|
||
|
|
void removeCharOccurancesU(wchar_t c);
|
||
|
|
|
||
|
|
// Replace all occurance of c1 with c2.
|
||
|
|
void replaceChar(char c1, char c2);
|
||
|
|
void replaceCharU(wchar_t c1, wchar_t c2);
|
||
|
|
|
||
|
|
// Replace the first occurance of c1 with a null terminator
|
||
|
|
void chopAtFirstChar(char c1);
|
||
|
|
|
||
|
|
void obfuscate(void);
|
||
|
|
void unobfuscate(void);
|
||
|
|
|
||
|
|
// Save the string to a file.
|
||
|
|
// charset can be "ansi", "utf-8", "unicode", or anything else such as "iso-8859-1"
|
||
|
|
bool saveToFile(const char *path, const char *charset);
|
||
|
|
bool saveToFileW(const wchar_t *path, const wchar_t *charset);
|
||
|
|
|
||
|
|
CkStringArrayW *w_split(char splitChar, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArrayW *w_split2(const char *splitCharSet, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArrayW *w_split2W(const wchar_t *splitCharSet, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArrayW *w_tokenize(const char *punctuation) const;
|
||
|
|
CkStringArrayW *w_tokenizeW(const wchar_t *punctuation) const;
|
||
|
|
CkStringArrayW *w_splitAtWS(void) const;
|
||
|
|
|
||
|
|
CkStringArray *split(char splitChar, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArray *split2(const char *splitCharSet, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArray *split2W(const wchar_t *splitCharSet, bool exceptDoubleQuoted, bool exceptEscaped, bool keepEmpty) const;
|
||
|
|
CkStringArray *tokenize(const char *punctuation) const;
|
||
|
|
CkStringArray *tokenizeW(const wchar_t *punctuation) const;
|
||
|
|
|
||
|
|
// Equivalent to split2(" \t\r\n",true,true,false)
|
||
|
|
CkStringArray *splitAtWS(void) const;
|
||
|
|
|
||
|
|
// Return true if this string begins with substr (case sensitive)
|
||
|
|
bool beginsWith(const char *sSubstr) const;
|
||
|
|
bool beginsWithW(const wchar_t *s) const;
|
||
|
|
|
||
|
|
CkString *getDelimited(const char *beginSearchAfter,
|
||
|
|
const char *startDelim, const char *endDelim);
|
||
|
|
CkString *getDelimitedW(const wchar_t *beginSearchAfter,
|
||
|
|
const wchar_t *startDelim, const wchar_t *endDelim);
|
||
|
|
|
||
|
|
void minimizeMemory(void);
|
||
|
|
|
||
|
|
bool isInternalPtr(const char *str);
|
||
|
|
|
||
|
|
private:
|
||
|
|
// Internal implementation.
|
||
|
|
void *m_x;
|
||
|
|
bool m_utf8; // If true, all input "const char *" arguments are utf-8, otherwise they are ANSI strings.
|
||
|
|
void *m_sb; // Used for getEnc()
|
||
|
|
|
||
|
|
public:
|
||
|
|
// For internal use
|
||
|
|
void *getImplX(void) const { return m_x; }
|
||
|
|
|
||
|
|
};
|
||
|
|
#if !defined(__sun__) && !defined(__sun)
|
||
|
|
#pragma pack (pop)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
#endif
|