00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _CPL_STRING_H_INCLUDED
00032 #define _CPL_STRING_H_INCLUDED
00033
00034 #include "cpl_vsi.h"
00035 #include "cpl_error.h"
00036 #include "cpl_conv.h"
00037
00056 CPL_C_START
00057
00058 char CPL_DLL **CSLAddString(char **papszStrList, const char *pszNewString);
00059 int CPL_DLL CSLCount(char **papszStrList);
00060 const char CPL_DLL *CSLGetField( char **, int );
00061 void CPL_DLL CPL_STDCALL CSLDestroy(char **papszStrList);
00062 char CPL_DLL **CSLDuplicate(char **papszStrList);
00063 char CPL_DLL **CSLMerge( char **papszOrig, char **papszOverride );
00064
00065 char CPL_DLL **CSLTokenizeString(const char *pszString );
00066 char CPL_DLL **CSLTokenizeStringComplex(const char *pszString,
00067 const char *pszDelimiter,
00068 int bHonourStrings, int bAllowEmptyTokens );
00069 char CPL_DLL **CSLTokenizeString2( const char *pszString,
00070 const char *pszDelimeter,
00071 int nCSLTFlags );
00072
00073 #define CSLT_HONOURSTRINGS 0x0001
00074 #define CSLT_ALLOWEMPTYTOKENS 0x0002
00075 #define CSLT_PRESERVEQUOTES 0x0004
00076 #define CSLT_PRESERVEESCAPES 0x0008
00077 #define CSLT_STRIPLEADSPACES 0x0010
00078 #define CSLT_STRIPENDSPACES 0x0020
00079
00080 int CPL_DLL CSLPrint(char **papszStrList, FILE *fpOut);
00081 char CPL_DLL **CSLLoad(const char *pszFname);
00082 char CPL_DLL **CSLLoad2(const char *pszFname, int nMaxLines, int nMaxCols, char** papszOptions);
00083 int CPL_DLL CSLSave(char **papszStrList, const char *pszFname);
00084
00085 char CPL_DLL **CSLInsertStrings(char **papszStrList, int nInsertAtLineNo,
00086 char **papszNewLines);
00087 char CPL_DLL **CSLInsertString(char **papszStrList, int nInsertAtLineNo,
00088 const char *pszNewLine);
00089 char CPL_DLL **CSLRemoveStrings(char **papszStrList, int nFirstLineToDelete,
00090 int nNumToRemove, char ***ppapszRetStrings);
00091 int CPL_DLL CSLFindString( char **, const char * );
00092 int CPL_DLL CSLPartialFindString( char **papszHaystack,
00093 const char * pszNeedle );
00094 int CPL_DLL CSLFindName(char **papszStrList, const char *pszName);
00095 int CPL_DLL CSLTestBoolean( const char *pszValue );
00096 int CPL_DLL CSLFetchBoolean( char **papszStrList, const char *pszKey,
00097 int bDefault );
00098
00099 const char CPL_DLL *CPLSPrintf(const char *fmt, ...) CPL_PRINT_FUNC_FORMAT(1, 2);
00100 char CPL_DLL **CSLAppendPrintf(char **papszStrList, const char *fmt, ...) CPL_PRINT_FUNC_FORMAT(2, 3);
00101 int CPL_DLL CPLVASPrintf(char **buf, const char *fmt, va_list args );
00102
00103 const char CPL_DLL *
00104 CPLParseNameValue(const char *pszNameValue, char **ppszKey );
00105 const char CPL_DLL *
00106 CSLFetchNameValue(char **papszStrList, const char *pszName);
00107 const char CPL_DLL *
00108 CSLFetchNameValueDef(char **papszStrList, const char *pszName,
00109 const char *pszDefault );
00110 char CPL_DLL **
00111 CSLFetchNameValueMultiple(char **papszStrList, const char *pszName);
00112 char CPL_DLL **
00113 CSLAddNameValue(char **papszStrList,
00114 const char *pszName, const char *pszValue);
00115 char CPL_DLL **
00116 CSLSetNameValue(char **papszStrList,
00117 const char *pszName, const char *pszValue);
00118 void CPL_DLL CSLSetNameValueSeparator( char ** papszStrList,
00119 const char *pszSeparator );
00120
00121 #define CPLES_BackslashQuotable 0
00122 #define CPLES_XML 1
00123 #define CPLES_URL 2
00124 #define CPLES_SQL 3
00125 #define CPLES_CSV 4
00126
00127 char CPL_DLL *CPLEscapeString( const char *pszString, int nLength,
00128 int nScheme );
00129 char CPL_DLL *CPLUnescapeString( const char *pszString, int *pnLength,
00130 int nScheme );
00131
00132 char CPL_DLL *CPLBinaryToHex( int nBytes, const GByte *pabyData );
00133 GByte CPL_DLL *CPLHexToBinary( const char *pszHex, int *pnBytes );
00134
00135 typedef enum
00136 {
00137 CPL_VALUE_STRING,
00138 CPL_VALUE_REAL,
00139 CPL_VALUE_INTEGER
00140 } CPLValueType;
00141
00142 CPLValueType CPL_DLL CPLGetValueType(const char* pszValue);
00143
00144 size_t CPL_DLL CPLStrlcpy(char* pszDest, const char* pszSrc, size_t nDestSize);
00145 size_t CPL_DLL CPLStrlcat(char* pszDest, const char* pszSrc, size_t nDestSize);
00146 size_t CPL_DLL CPLStrnlen (const char *pszStr, size_t nMaxLen);
00147
00148
00149
00150
00151 #define CPL_ENC_LOCALE ""
00152 #define CPL_ENC_UTF8 "UTF-8"
00153 #define CPL_ENC_UTF16 "UTF-16"
00154 #define CPL_ENC_UCS2 "UCS-2"
00155 #define CPL_ENC_UCS4 "UCS-4"
00156 #define CPL_ENC_ASCII "ASCII"
00157 #define CPL_ENC_ISO8859_1 "ISO-8859-1"
00158
00159 char CPL_DLL *CPLRecode( const char *pszSource,
00160 const char *pszSrcEncoding,
00161 const char *pszDstEncoding );
00162 char CPL_DLL *CPLRecodeFromWChar( const wchar_t *pwszSource,
00163 const char *pszSrcEncoding,
00164 const char *pszDstEncoding );
00165 wchar_t CPL_DLL *CPLRecodeToWChar( const char *pszSource,
00166 const char *pszSrcEncoding,
00167 const char *pszDstEncoding );
00168 int CPL_DLL CPLIsUTF8(const char* pabyData, int nLen);
00169 char CPL_DLL *CPLForceToASCII(const char* pabyData, int nLen, char chReplacementChar);
00170
00171 CPL_C_END
00172
00173
00174
00175
00176
00177 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
00178
00179 #include <string>
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 #if defined(_MSC_VER)
00195 # if (_MSC_VER <= 1202)
00196 # define MSVC_OLD_STUPID_BEHAVIOUR
00197 # endif
00198 #endif
00199
00200
00201 #ifdef MSVC_OLD_STUPID_BEHAVIOUR
00202 using std::string;
00203 # define std_string string
00204 #else
00205 # define std_string std::string
00206 #endif
00207
00208
00209 #if defined(WIN32CE)
00210 # pragma warning(disable:4251 4275 4786)
00211 #endif
00212
00213
00214
00215
00216 class CPL_DLL CPLString : public std_string
00217 {
00218 public:
00219
00220
00221 CPLString(void) {}
00222 CPLString( const std::string &oStr ) : std_string( oStr ) {}
00223 CPLString( const char *pszStr ) : std_string( pszStr ) {}
00224
00225 operator const char* (void) const { return c_str(); }
00226
00227 char& operator[](std::string::size_type i)
00228 {
00229 return std_string::operator[](i);
00230 }
00231
00232 const char& operator[](std::string::size_type i) const
00233 {
00234 return std_string::operator[](i);
00235 }
00236
00237 char& operator[](int i)
00238 {
00239 return std_string::operator[](static_cast<std::string::size_type>(i));
00240 }
00241
00242 const char& operator[](int i) const
00243 {
00244 return std_string::operator[](static_cast<std::string::size_type>(i));
00245 }
00246
00247 void Clear() { resize(0); }
00248
00249
00250 CPLString &Printf( const char *pszFormat, ... ) CPL_PRINT_FUNC_FORMAT (2, 3);
00251 CPLString &vPrintf( const char *pszFormat, va_list args );
00252 CPLString &FormatC( double dfValue, const char *pszFormat = NULL );
00253 CPLString &Trim();
00254 };
00255
00256 #endif
00257
00258 #endif