00001 /********************************************************************** 00002 * $Id: cpl_string_h-source.html,v 1.13 2002/12/21 19:13:12 warmerda Exp $ 00003 * 00004 * Name: cpl_string.h 00005 * Project: CPL - Common Portability Library 00006 * Purpose: String and StringList functions. 00007 * Author: Daniel Morissette, danmo@videotron.ca 00008 * 00009 ********************************************************************** 00010 * Copyright (c) 1998, Daniel Morissette 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00023 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ********************************************************************** 00030 * 00031 * $Log: cpl_string_h-source.html,v $ 00031 * Revision 1.13 2002/12/21 19:13:12 warmerda 00031 * updated 00031 * 00032 * Revision 1.12 2002/07/12 22:37:05 warmerda 00033 * added CSLFetchBoolean 00034 * 00035 * Revision 1.11 2002/05/28 18:53:43 warmerda 00036 * added XML escaping support 00037 * 00038 * Revision 1.10 2002/04/26 14:55:26 warmerda 00039 * Added CPLEscapeString() and CPLUnescapeString() (unescape untested) 00040 * 00041 * Revision 1.9 2002/03/05 14:26:57 warmerda 00042 * expanded tabs 00043 * 00044 * Revision 1.8 2002/01/16 03:59:28 warmerda 00045 * added CPLTokenizeString2 00046 * 00047 * Revision 1.7 2000/10/06 15:19:03 warmerda 00048 * added CPLSetNameValueSeparator 00049 * 00050 * Revision 1.6 2000/04/26 18:25:10 warmerda 00051 * implement CPL_DLL 00052 * 00053 * Revision 1.5 2000/03/30 05:38:48 warmerda 00054 * added CPLParseNameValue 00055 * 00056 * Revision 1.4 1999/06/26 14:05:19 warmerda 00057 * Added CSLFindString(). 00058 * 00059 * Revision 1.3 1999/02/17 01:41:58 warmerda 00060 * Added CSLGetField 00061 * 00062 * Revision 1.2 1998/12/04 21:40:42 danmo 00063 * Added more Name=Value manipulation fuctions 00064 * 00065 * Revision 1.1 1998/12/03 18:26:02 warmerda 00066 * New 00067 * 00068 **********************************************************************/ 00069 00070 #ifndef _CPL_STRING_H_INCLUDED 00071 #define _CPL_STRING_H_INCLUDED 00072 00073 #include "cpl_vsi.h" 00074 #include "cpl_error.h" 00075 #include "cpl_conv.h" 00076 00077 /*===================================================================== 00078 Stringlist functions (strlist.c) 00079 =====================================================================*/ 00080 CPL_C_START 00081 00082 char CPL_DLL **CSLAddString(char **papszStrList, const char *pszNewString); 00083 int CPL_DLL CSLCount(char **papszStrList); 00084 const char CPL_DLL *CSLGetField( char **, int ); 00085 void CPL_DLL CSLDestroy(char **papszStrList); 00086 char CPL_DLL **CSLDuplicate(char **papszStrList); 00087 00088 char CPL_DLL **CSLTokenizeString(const char *pszString ); 00089 char CPL_DLL **CSLTokenizeStringComplex(const char *pszString, 00090 const char *pszDelimiter, 00091 int bHonourStrings, int bAllowEmptyTokens ); 00092 char CPL_DLL **CSLTokenizeString2( const char *pszString, 00093 const char *pszDelimeter, 00094 int nCSLTFlags ); 00095 00096 #define CSLT_HONOURSTRINGS 0x0001 00097 #define CSLT_ALLOWEMPTYTOKENS 0x0002 00098 #define CSLT_PRESERVEQUOTES 0x0004 00099 #define CSLT_PRESERVEESCAPES 0x0008 00100 00101 int CPL_DLL CSLPrint(char **papszStrList, FILE *fpOut); 00102 char CPL_DLL **CSLLoad(const char *pszFname); 00103 int CPL_DLL CSLSave(char **papszStrList, const char *pszFname); 00104 00105 char CPL_DLL **CSLInsertStrings(char **papszStrList, int nInsertAtLineNo, 00106 char **papszNewLines); 00107 char CPL_DLL **CSLInsertString(char **papszStrList, int nInsertAtLineNo, 00108 char *pszNewLine); 00109 char CPL_DLL **CSLRemoveStrings(char **papszStrList, int nFirstLineToDelete, 00110 int nNumToRemove, char ***ppapszRetStrings); 00111 int CPL_DLL CSLFindString( char **, const char * ); 00112 int CPL_DLL CSLFetchBoolean( char **papszStrList, const char *pszKey, 00113 int bDefault ); 00114 00115 const char CPL_DLL *CPLSPrintf(char *fmt, ...); 00116 char CPL_DLL **CSLAppendPrintf(char **papszStrList, char *fmt, ...); 00117 00118 const char CPL_DLL * 00119 CPLParseNameValue(const char *pszNameValue, char **ppszKey ); 00120 const char CPL_DLL * 00121 CSLFetchNameValue(char **papszStrList, const char *pszName); 00122 char CPL_DLL ** 00123 CSLFetchNameValueMultiple(char **papszStrList, const char *pszName); 00124 char CPL_DLL ** 00125 CSLAddNameValue(char **papszStrList, 00126 const char *pszName, const char *pszValue); 00127 char CPL_DLL ** 00128 CSLSetNameValue(char **papszStrList, 00129 const char *pszName, const char *pszValue); 00130 void CPL_DLL CSLSetNameValueSeparator( char ** papszStrList, 00131 const char *pszSeparator ); 00132 00133 #define CPLES_BackslashQuotable 0 00134 #define CPLES_XML 1 00135 00136 char CPL_DLL *CPLEscapeString( const char *pszString, int nLength, 00137 int nScheme ); 00138 char CPL_DLL *CPLUnescapeString( const char *pszString, int *pnLength, 00139 int nScheme ); 00140 00141 CPL_C_END 00142 00143 #endif /* _CPL_STRING_H_INCLUDED */