00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00057
00058
00059
00060 #ifndef __MXM_STRING_H__
00061 #define __MXM_STRING_H__
00062
00063
00064
00065 #include <mxm/core/mxmObject.h>
00066 #include <mxm/core/mxm_smart.h>
00067
00068 #include <cstdio>
00069
00070
00071
00072 class mxmStringList;
00073
00074
00075
00078
00125 class MXM_CORE_API mxmString : public mxmObject {
00126
00127 private:
00128 static const char *Base64EncodeTable;
00129
00130 private:
00131 char *TextBuffer;
00132 int BufferedChar;
00133 bool CharBuffered;
00134 void *StableABIDataExtension;
00135
00136 public:
00138 static mxmString nullString(void);
00139
00140 public:
00142 mxmString();
00144 mxmString(const char *txt);
00146 mxmString(const mxmString &txt);
00148 mxmString(int numba);
00149 ~mxmString();
00150
00151 public:
00152 mxmString &operator=(const char *txt);
00153 mxmString &operator=(const mxmString &txt);
00154 mxmString &operator+=(const mxmString &txt);
00155 mxmString &operator+=(const char *txt);
00156 bool operator==(const mxmString &txt) const;
00157 bool operator!=(const mxmString &txt) const;
00159 bool operator<=(const mxmString &txt) const;
00162 mxmStringList operator,(const mxmString &other_string);
00163
00164 public:
00166 void setText(const char *txt);
00168 const char *text(void) const;
00170 void setNull(void);
00172 bool isNull(void) const;
00174 int length(void) const;
00177 void setLength(int len, char fill_character = ' ');
00181 int characterPosition(char c) const;
00183 void append(const mxmString &txt);
00185 bool split(mxmString &left, mxmString &right,
00186 const mxmString &separators,
00187 bool search_from_behind = false) const;
00190 bool splitUsingSeparatorStrings(mxmString &left, mxmString &right,
00191 const mxmStringList &separator_strings);
00193 void trim(const mxmString &delimiters);
00195 void purgeCharacters(const mxmString &characters_to_purge,
00196 bool invert_logic = false,
00197 const char *replacement_character = 0);
00200 void replace(mxmString const &search, mxmString const & replacement);
00202 mxmString HTMLEscaped(bool const strict = false) const;
00204 void escapeHTML(bool const strict = false);
00208 mxmString urlPercentSymbolEscaped(const mxmString &characters_to_escape)
00209 const;
00212 void escapeURLPercentSymbol(mxmString const & characters_to_escape);
00214 bool unescapeURLPercentSymbols();
00217 mxmString urlPercentSymbolsUnescaped(void) const;
00219 bool unescapeURL();
00221 mxmString urlUnescaped(void) const;
00223 mxmString base64(void) const;
00225 mxmString left(int character_num) const;
00228 mxmString mid(int character_start, int character_len) const;
00231 mxmString left(const mxmString &valid_characters) const;
00235 int findSubString(mxmString const & search, int start_from = 0) const;
00238 bool subString(const mxmString &another_string) const;
00241 mxm::smart<mxmStringList> tokenize(const mxmString &separators,
00242 const mxmString &characters_to_trim = "")
00243 const;
00245 mxm::smart<mxmStringList> tokenizeUsingSeparatorStrings(
00246 const mxmStringList &separator_strings,
00247 const mxmString &characters_to_trim = "") const;
00248
00251 bool toInt(int &target_int);
00252
00253 public:
00255 static bool areEqualIgnoringCase(const mxmString &txt1,
00256 const mxmString &txt2);
00257 };
00258
00259
00260 MXM_CORE_API mxmString operator+(const mxmString &txt1, const mxmString &txt2);
00261 MXM_CORE_API mxmString operator+(const char *txt1, const mxmString &txt2);
00262
00263
00264
00265 #endif // __MXM_STRING_H__
00266