the_Foundation 1.0
|
Data Structures | |
struct | iStringComparison |
struct | iString |
struct | iStringReverseConstIterator |
struct | iMultibyteChar |
Macros | |
#define | iStringLiteral(str) (iString){ iBlockLiteral(str, strlen(str), strlen(str) + 1) } |
#define | cmp_String(d, cstr) cmpSc_String(d, cstr, &iCaseSensitive) |
#define | cmpCase_String(d, cstr) cmpSc_String(d, cstr, &iCaseInsensitive) |
#define | cmpString_String(d, s) cmpSc_String(d, cstr_String(s), &iCaseSensitive) |
#define | cmpStringCase_String(d, s) cmpSc_String(d, cstr_String(s), &iCaseInsensitive) |
#define | cmpStringSc_String(d, s, sc) cmpSc_String(d, cstr_String(s), sc) |
#define | startsWith_String(d, cstr) startsWithSc_String(d, cstr, &iCaseSensitive) |
#define | startsWithCase_String(d, cstr) startsWithSc_String(d, cstr, &iCaseInsensitive) |
#define | endsWith_String(d, cstr) endsWithSc_String (d, cstr, &iCaseSensitive) |
#define | endsWithCase_String(d, cstr) endsWithSc_String (d, cstr, &iCaseInsensitive) |
#define | indexOfString_String(d, s) indexOfCStr_String(d, cstr_String(s)) |
#define | indexOfStringFrom_String(d, s, pos) indexOfCStrFrom_String(d, cstr_String(s), pos) |
#define | lastIndexOfString_String(d, s) lastIndexOfCStr_String(d, cstr_String(s)) |
#define | cmp_Rangecc(d, cstr) cmpCStrSc_Rangecc((d), (cstr), &iCaseSensitive) |
#define | iMultibyteCharMaxSize ((size_t) 7) |
Typedefs | |
typedef uint32_t | iChar |
Functions | |
iChar | upper_Char (iChar) |
iChar | lower_Char (iChar) |
iBool | isSpace_Char (iChar) |
iBool | isAlpha_Char (iChar) |
iBool | isNumeric_Char (iChar) |
iBool | isAlphaNumeric_Char (iChar) |
iBool | isPunct_Char (iChar) |
const char * | script_Char (iChar) |
int | width_Char (iChar) |
iString * | new_String (void) |
void | delete_String (iString *) |
void | init_String (iString *) |
void | deinit_String (iString *) |
void | serialize_String (const iString *, iStream *) |
void | deserialize_String (iString *, iStream *) |
iString * | newCStr_String (const char *utf8CStr) |
iString * | newCStrN_String (const char *utf8CStr, size_t n) |
iString * | newUtf16_String (const uint16_t *utf16Str) |
iString * | newUtf16N_String (const uint16_t *utf16Str, size_t n) |
iString * | newUnicode_String (const iChar *ucs) |
iString * | newUnicodeN_String (const iChar *ucs, size_t n) |
iString * | newLocalCStr_String (const char *localCStr) |
iString * | newLocalCStrN_String (const char *localCStr, size_t n) |
iString * | newBlock_String (const iBlock *utf8Data) |
iString * | newFormat_String (const char *format,...) |
iString * | copy_String (const iString *) |
iString * | collectNewFormat_String (const char *format,...) |
void | initCStr_String (iString *, const char *utf8CStr) |
void | initCStrN_String (iString *, const char *utf8CStr, size_t n) |
void | initUtf16_String (iString *, const uint16_t *utf16Str) |
void | initUtf16N_String (iString *, const uint16_t *utf16Str, size_t n) |
void | initUnicode_String (iString *, const iChar *ucs) |
void | initUnicodeN_String (iString *, const iChar *ucs, size_t n) |
void | initLocalCStr_String (iString *, const char *localCStr) |
void | initLocalCStrN_String (iString *, const char *localCStr, size_t n) |
void | initBlock_String (iString *, const iBlock *chars) |
void | initBlockEncoding_String (iString *, const iBlock *chars, const char *encoding) |
void | initCopy_String (iString *, const iString *other) |
const char * | cstr_String (const iString *) |
size_t | length_String (const iString *) |
size_t | size_String (const iString *) |
iString * | mid_String (const iString *, size_t charStartPos, size_t charCount) |
iString * | upper_String (const iString *) |
iString * | upperLang_String (const iString *, const char *langCode) |
iString * | lower_String (const iString *) |
iString * | lowerLang_String (const iString *, const char *langCode) |
iStringList * | split_String (const iString *, const char *separator) |
iChar | first_String (const iString *) |
iChar | last_String (const iString *) |
iBlock * | toLocal_String (const iString *) |
iBlock * | toUtf16_String (const iString *) |
iBlock * | toUnicode_String (const iString *) |
iString * | urlEncode_String (const iString *) |
iString * | urlDecode_String (const iString *) |
iString * | urlEncodeExclude_String (const iString *, const char *excluded) |
iString * | urlDecodeExclude_String (const iString *, const char *excluded) |
iString * | maybeUrlEncodeExclude_String (const iString *, const char *excluded) |
iString * | maybeUrlDecodeExclude_String (const iString *, const char *excluded) |
int | cmpSc_String (const iString *, const char *cstr, const iStringComparison *) |
int | cmpNSc_String (const iString *, const char *cstr, size_t n, const iStringComparison *) |
iBool | startsWithSc_String (const iString *, const char *cstr, const iStringComparison *) |
iBool | endsWithSc_String (const iString *, const char *cstr, const iStringComparison *) |
size_t | indexOf_String (const iString *, iChar ch) |
size_t | indexOfCStr_String (const iString *, const char *cstr) |
size_t | indexOfCStrFrom_String (const iString *, const char *cstr, size_t from) |
size_t | indexOfCStrSc_String (const iString *, const char *cstr, const iStringComparison *) |
size_t | indexOfCStrFromSc_String (const iString *, const char *cstr, size_t from, const iStringComparison *) |
size_t | lastIndexOf_String (const iString *, iChar ch) |
size_t | lastIndexOfCStr_String (const iString *, const char *cstr) |
void | set_String (iString *, const iString *other) |
void | setCStr_String (iString *, const char *cstr) |
void | setCStrN_String (iString *, const char *cstr, size_t n) |
void | setBlock_String (iString *, const iBlock *block) |
void | format_String (iString *, const char *format,...) |
void | append_String (iString *, const iString *other) |
void | appendCStr_String (iString *, const char *cstr) |
void | appendCStrN_String (iString *, const char *cstr, size_t size) |
void | appendChar_String (iString *, iChar ch) |
void | appendRange_String (iString *, const iRangecc range) |
void | appendFormat_String (iString *, const char *format,...) |
void | prepend_String (iString *, const iString *other) |
void | prependChar_String (iString *, iChar ch) |
void | prependCStr_String (iString *, const char *cstr) |
void | clear_String (iString *) |
void | truncate_String (iString *, size_t charCount) |
void | removeEnd_String (iString *, size_t charCount) |
void | trimStart_String (iString *) |
void | trimEnd_String (iString *) |
void | trim_String (iString *) |
iString * | trimmed_String (const iString *) |
void | replace_String (iString *, const char *src, const char *dst) |
void | normalize_String (iString *) |
int | toInt_String (const iString *) |
float | toFloat_String (const iString *) |
double | toDouble_String (const iString *) |
iString * | quote_String (const iString *, iBool numericUnicode) |
iString * | unquote_String (const iString *) |
const char * | format_CStr (const char *format,...) |
const char * | skipSpace_CStr (const char *) |
const char * | cstr_Rangecc (iRangecc) |
const iString * | string_Rangecc (iRangecc) |
iBool | isUtf8_Rangecc (iRangecc) |
size_t | length_Rangecc (iRangecc) |
int | cmpCStrSc_Rangecc (iRangecc, const char *cstr, const iStringComparison *) |
int | cmpCStrNSc_Rangecc (iRangecc, const char *cstr, size_t n, const iStringComparison *) |
iBool | startsWithSc_Rangecc (iRangecc, const char *cstr, const iStringComparison *) |
iBool | endsWithSc_Rangecc (iRangecc, const char *cstr, const iStringComparison *) |
iStringList * | split_Rangecc (iRangecc, const char *separator) |
void | trimStart_Rangecc (iRangecc *) |
void | trimEnd_Rangecc (iRangecc *) |
void | trim_Rangecc (iRangecc *) |
size_t | lastIndexOfCStr_Rangecc (iRangecc, const char *cstr) |
iBool | nextSplit_Rangecc (iRangecc, const char *separator, iRangecc *range) |
const char * | findAscii_Rangecc (iRangecc, char ch) |
iString * | punyEncode_Rangecc (iRangecc) |
iString * | punyDecode_Rangecc (iRangecc) |
iStringList * | split_CStr (const char *cstr, const char *separator) |
void | init_MultibyteChar (iMultibyteChar *d, iChar ch) |
int | decodeBytes_MultibyteChar (const char *bytes, const char *end, iChar *ch_out) |
int | decodePrecedingBytes_MultibyteChar (const char *bytes, const char *start, iChar *ch_out) |
const char * | cstrLocal_Char (iChar ch) |
int | iCmpStr (const char *a, const char *b) |
int | iCmpStrN (const char *a, const char *b, size_t n) |
int | iCmpStrRange (iRangecc, const char *cstr) |
int | iCmpStrCase (const char *a, const char *b) |
int | iCmpStrNCase (const char *a, const char *b, size_t len) |
char * | iDupStr (const char *) |
char * | iStrStrN (const char *, const char *, size_t) |
Iterators | |
void | init_StringConstIterator (iStringConstIterator *, const iString *) |
void | next_StringConstIterator (iStringConstIterator *) |
void | init_StringReverseConstIterator (iStringReverseConstIterator *, const iString *) |
void | next_StringReverseConstIterator (iStringReverseConstIterator *) |
Variables | |
iFoundationAPIData iStringComparison | iCaseSensitive |
iFoundationAPIData iStringComparison | iCaseInsensitive |
UTF-8 string with copy-on-write semantics.
String is derived from Block, and contains text with multibyte characters. When iterating a string, the multibyte characters are converted to UTF-32 code points.
String uses copy-on-write semantics (thanks to Block), so making copies is very efficient. Conversions between String and Block are also trivial, and can be done without duplicating the content. In fact, a pointer to a Block can be simply casted to a String pointer and vice versa.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
iBool nextSplit_Rangecc | ( | iRangecc | , |
const char * | separator, | ||
iRangecc * | range | ||
) |
Finds the next range between separators. Empty ranges at the beginning and end of the string are ignored (i.e., when there is a separator at the beginning or the end of the string).
A string containing nothing but the separator results in no split ranges.
separator | Separator string. |
range | Next range. Must be initialized to zero. Subsequent ranges are searched based on the locations pointed to by this variable. |
iTrue
, if a next range was found (range was updated).