00001
00002
00003
00004
00005
00006 #ifndef UT_STRING_CLASS_H
00007 #define UT_STRING_CLASS_H
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <stdlib.h>
00031 #include <stdarg.h>
00032
00033 #if defined(__MINGW32__)
00034 #undef snprintf
00035 #define _GLIBCXX_USE_C99_DYNAMIC 1
00036 #endif
00037
00038 #include <string>
00039
00040
00041
00042
00043
00044 #ifndef UT_TYPES_H
00045 #include "ut_types.h"
00046 #endif
00047 #include "ut_string.h"
00048 #include "ut_stringbuf.h"
00049
00050
00051 class UT_ByteBuf;
00052 class UT_UCS4_mbtowc;
00053 class UT_String;
00054 class UT_UTF8String;
00055 class UT_UCS4String;
00056
00057 class ABI_EXPORT UT_GenericBase
00058 {
00059 public:
00060 virtual const char * GenericBaseID () const = 0;
00061
00062 virtual ~UT_GenericBase () { }
00063 };
00064
00065
00066
00068
00069
00070
00071
00072
00073
00075
00077
00078
00079 class ABI_EXPORT UT_String
00080 {
00081 public:
00082 UT_String();
00083 UT_String(const char* sz, size_t n = 0 );
00084 UT_String(const UT_String& rhs);
00085 UT_String(const std::basic_string<char> &s);
00086 ~UT_String();
00087
00088 size_t size() const;
00089 size_t length () const { return size () ; }
00090 void reserve(size_t n);
00091 bool empty() const;
00092 void clear() const;
00093
00094 UT_String substr(size_t iStart, size_t nChars) const;
00095
00096 UT_String& operator=(const UT_String& rhs);
00097 UT_String& operator=(const char* rhs);
00098 UT_String& operator+=(const UT_String& rhs);
00099 UT_String& operator+=(const char* rhs);
00100 UT_String& operator+=(char rhs);
00101
00102 char operator[](size_t iPos) const;
00103 char& operator[](size_t iPos);
00104
00105 void swap(UT_String& rhs);
00106
00107
00108
00109
00110 const char* c_str() const;
00111
00112 private:
00113 class UT_StringImpl<char>* pimpl;
00114 };
00115
00116
00117 ABI_EXPORT bool operator==(const UT_String& s1, const UT_String& s2);
00118 ABI_EXPORT bool operator==(const UT_String& s1, const char* s2);
00119 ABI_EXPORT bool operator==(const char* s1, const UT_String& s2);
00120 ABI_EXPORT bool operator!=(const UT_String& s1, const UT_String& s2);
00121 ABI_EXPORT bool operator!=(const UT_String& s1, const char* s2);
00122 ABI_EXPORT bool operator!=(const char* s1, const UT_String& s2);
00123
00124 ABI_EXPORT UT_uint32 hashcode(const UT_String& string);
00125 ABI_EXPORT UT_uint32 hashcode(const char *s);
00126
00127
00128 ABI_EXPORT bool operator<(const UT_String& s1, const UT_String& s2);
00129
00130 ABI_EXPORT UT_String operator+(const UT_String& s1, const UT_String& s2);
00131
00132 ABI_EXPORT size_t UT_String_findCh(const UT_String &st, char ch);
00133 ABI_EXPORT size_t UT_String_findRCh(const UT_String &st, char ch);
00134
00135
00136
00141 ABI_EXPORT UT_String& UT_String_sprintf(UT_String & inStr, const char * inFormat, ...);
00142 ABI_EXPORT UT_String& UT_String_vprintf (UT_String & inStr, const char *format,
00143 va_list args1);
00144 ABI_EXPORT UT_String& UT_String_vprintf (UT_String & inStr, const UT_String & format,
00145 va_list args1);
00146
00151 ABI_EXPORT UT_String UT_String_sprintf(const char * inFormat, ...);
00152 ABI_EXPORT UT_String UT_String_vprintf(const char * inFormat, va_list args1);
00153 ABI_EXPORT UT_String UT_String_vprintf(const UT_String & inFormat, va_list args1);
00154
00155
00156
00157
00162 ABI_EXPORT UT_String UT_String_getPropVal(const UT_String & sPropertyString, const UT_String & sProp);
00163 ABI_EXPORT void UT_String_removeProperty(UT_String & sPropertyString, const UT_String & sProp);
00164 ABI_EXPORT void UT_String_setProperty(UT_String & sPropertyString, const UT_String &sProp, const UT_String & sVal);
00165 ABI_EXPORT void UT_String_addPropertyString(UT_String & sPropertyString, const UT_String & sNewProp);
00166
00168
00169
00170
00172
00174
00175
00176
00177 class ABI_EXPORT UT_UTF8String : public UT_GenericBase
00178 {
00179 public:
00180 virtual const char * GenericBaseID () const;
00181
00182 UT_UTF8String ();
00183 UT_UTF8String (const char * sz, size_t n = 0 );
00184 UT_UTF8String (const char *sz, const char *encoding);
00185
00186 UT_UTF8String (const UT_UTF8String & rhs);
00187 UT_UTF8String (const UT_UCS4String & rhs);
00188 UT_UTF8String (const UT_UCSChar * sz, size_t n = 0 );
00189
00190 ~UT_UTF8String ();
00191
00192 size_t size () const;
00193 size_t length () const { return size () ; }
00194
00195 void reserve(size_t n);
00196 bool empty () const;
00197 void clear () const;
00198 size_t byteLength() const;
00199 void dump(void) const;
00200 UT_UTF8String substr(size_t iStart, size_t nChars) const;
00201
00202 UT_UTF8String & operator=(const char * rhs);
00203 UT_UTF8String & operator=(const std::string & rhs);
00204 UT_UTF8String & operator=(const UT_UTF8String & rhs);
00205 UT_UTF8String & operator=(const UT_UCS4String & rhs);
00206
00207 UT_UTF8String & operator+=(const UT_UCS4Char rhs);
00208 UT_UTF8String & operator+=(const char * rhs);
00209 UT_UTF8String & operator+=(const std::string & rhs);
00210 UT_UTF8String & operator+=(const UT_UTF8String & rhs);
00211 UT_UTF8String & operator+=(const UT_UCS4String & rhs);
00212
00213
00214
00215
00216 const char * utf8_str () const;
00217 UT_UCS4String ucs4_str ();
00218
00219 void assign (const char * sz, size_t n = 0 );
00220 void append (const char * sz, size_t n = 0 );
00221 void appendBuf (const UT_ByteBuf & buf, UT_UCS4_mbtowc & converter);
00222
00223 void appendUCS4 (const UT_UCS4Char * sz, size_t n = 0 );
00224 void appendUCS2 (const UT_UCS2Char * sz, size_t n = 0 );
00225
00226 const UT_UTF8String & escape (const UT_UTF8String & str1,
00227 const UT_UTF8String & str2);
00228 const UT_UTF8String & escapeXML ();
00229 const UT_UTF8String & decodeXML ();
00230 const UT_UTF8String & escapeMIME ();
00231 const UT_UTF8String & lowerCase ();
00232 const UT_UTF8String & escapeURL ();
00233 const UT_UTF8String & decodeURL ();
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 UT_UTF8Stringbuf::UTF8Iterator getIterator () const
00269 {
00270 return UT_UTF8Stringbuf::UTF8Iterator(pimpl);
00271 }
00272
00273 private:
00274 class UT_UTF8Stringbuf * pimpl;
00275 };
00276
00277 ABI_EXPORT bool operator<(const UT_UTF8String& s1, const UT_UTF8String& s2);
00278 ABI_EXPORT bool operator==(const UT_UTF8String& s1, const UT_UTF8String& s2);
00279 ABI_EXPORT bool operator!=(const UT_UTF8String& s1, const UT_UTF8String& s2);
00280 ABI_EXPORT bool operator==(const UT_UTF8String& s1, const char * s2);
00281 ABI_EXPORT bool operator!=(const UT_UTF8String& s1, const char * s2);
00282 ABI_EXPORT bool operator==(const UT_UTF8String& s1, const std::string & s2);
00283 ABI_EXPORT bool operator!=(const UT_UTF8String& s1, const std::string & s2);
00284 ABI_EXPORT bool operator==(const std::string & s2, const UT_UTF8String& s1);
00285 ABI_EXPORT bool operator!=(const std::string & s2, const UT_UTF8String& s1);
00286 ABI_EXPORT UT_UTF8String operator+(const UT_UTF8String & s1, const UT_UTF8String & s2);
00287 ABI_EXPORT UT_UTF8String UT_UTF8String_sprintf(const char * inFormat, ...);
00288 ABI_EXPORT UT_UTF8String & UT_UTF8String_sprintf(UT_UTF8String & inStr, const char * inFormat, ...);
00289
00290
00291
00296 ABI_EXPORT UT_UTF8String UT_UTF8String_getPropVal(const UT_UTF8String & sPropertyString, const UT_UTF8String & sProp);
00297
00298 ABI_EXPORT void UT_UTF8String_removeProperty(UT_UTF8String & sPropertyString, const UT_UTF8String & sProp);
00299
00300 ABI_EXPORT void UT_UTF8String_setProperty(UT_UTF8String & sPropertyString, const UT_UTF8String &sProp, const UT_UTF8String & sVal);
00301
00302 ABI_EXPORT void UT_UTF8String_addPropertyString(UT_UTF8String & sPropertyString, const UT_UTF8String & sNewProp);
00303
00305
00306
00307
00308
00309
00310
00311
00312
00313
00315
00317
00318
00319
00320
00321
00322 class ABI_EXPORT UT_UCS4String
00323 {
00324 public:
00325 UT_UCS4String();
00326 UT_UCS4String(const UT_UCS4Char * sz, size_t n = 0 );
00327 UT_UCS4String(const UT_UCS4String& rhs);
00328
00329
00330
00331 UT_UCS4String(const char * utf8_str, size_t bytelength = 0 );
00332 UT_UCS4String(const std::string & str );
00333
00334
00335
00336
00337
00338
00339 UT_UCS4String(const char * utf8_str, size_t bytelength , bool strip_whitespace);
00340
00341 ~UT_UCS4String();
00342
00343 size_t size() const;
00344 size_t length () const { return size () ; }
00345
00346 void reserve(size_t n);
00347 bool empty() const;
00348 void clear() const;
00349
00350 UT_UCS4String substr(size_t iStart, size_t nChars) const;
00351
00352 UT_UCS4String& operator=(const UT_UCS4String& rhs);
00353 UT_UCS4String& operator=(const UT_UCS4Char * rhs);
00354 UT_UCS4String& operator+=(const UT_UCS4String& rhs);
00355 UT_UCS4String& operator+=(const UT_UCS4Char * rhs);
00356 UT_UCS4String& operator+=(UT_UCS4Char rhs);
00357 UT_UCS4String& operator+=(char rhs);
00358 UT_UCS4String& operator+=(unsigned char rhs);
00359
00360 UT_UCS4Char operator[](size_t iPos) const;
00361 UT_UCS4Char& operator[](size_t iPos);
00362
00363 void swap(UT_UCS4String& rhs);
00364
00365
00366
00367
00368 const UT_UCS4Char* ucs4_str() const;
00369
00370 const char * utf8_str ();
00371
00372 private:
00373 void _loadUtf8(const char * utf8_str, size_t bytelength);
00374 class UT_StringImpl<UT_UCS4Char>* pimpl;
00375 };
00376
00377
00378 bool operator==(const UT_UCS4String& s1, const UT_UCS4String& s2);
00379 bool operator==(const UT_UCS4String& s1, const UT_UCS4Char * s2);
00380 bool operator==(const UT_UCS4Char * s1, const UT_UCS4String& s2);
00381 bool operator!=(const UT_UCS4String& s1, const UT_UCS4String& s2);
00382 bool operator!=(const UT_UCS4String& s1, const UT_UCS4Char * s2);
00383 bool operator!=(const UT_UCS4Char * s1, const UT_UCS4String& s2);
00384
00385
00386 bool operator<(const UT_UCS4String& s1, const UT_UCS4String& s2);
00387
00388 UT_UCS4String operator+(const UT_UCS4String& s1, const UT_UCS4String& s2);
00389
00390
00391
00392 #endif // UT_STRING_CLASS_H