the_Foundation 1.0
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Functions | Variables
string.h File Reference
#include "defs.h"
#include "block.h"
#include <limits.h>

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
 

Detailed Description

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.

Authors
Copyright (c) 2017 Jaakko Keränen jaakk.nosp@m.o.ke.nosp@m.ranen.nosp@m.@iki.nosp@m..fi
License

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

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.

Function Documentation

◆ nextSplit_Rangecc()

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.

Parameters
separatorSeparator string.
rangeNext range. Must be initialized to zero. Subsequent ranges are searched based on the locations pointed to by this variable.
Returns
iTrue, if a next range was found (range was updated).