200 lines
4.9 KiB
C
200 lines
4.9 KiB
C
#ifndef NU_STRCOLL_H
|
|
#define NU_STRCOLL_H
|
|
|
|
/** @defgroup collation Collation functions
|
|
*
|
|
* All functions in this group are following full Unicode collation rules,
|
|
* i.e. nu_strstr(haystack, "Æ") will find "AE" in haystack and
|
|
* nu_strstr(haystack, "ß") will find "ss".
|
|
*
|
|
* Same applies for *every* function, nu_strchr(str, 0x00DF), as you would
|
|
* guess, will also find "ss" in str.
|
|
*
|
|
* Please expect this.
|
|
*
|
|
* Note on "n" functions variant: please see comment on this topic
|
|
* in strings.h
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <libnu/config.h>
|
|
#include <libnu/casemap.h>
|
|
#include <libnu/defines.h>
|
|
#include <libnu/strings.h>
|
|
|
|
#if defined (__cplusplus) || defined (c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef NU_WITH_TOFOLD
|
|
# define NU_FOLDING_FUNCTION nu_tofold
|
|
#else
|
|
# define NU_FOLDING_FUNCTION nu_toupper
|
|
#endif /* NU_WITH_TOFOLD */
|
|
|
|
#ifdef NU_WITH_Z_COLLATION
|
|
|
|
/** Locate codepoint in string
|
|
*
|
|
* @ingroup collation
|
|
* @param encoded encoded string
|
|
* @param c charater to locate
|
|
* @param read read (decode) function for encoded string
|
|
* @return pointer to codepoint in string or 0
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strchr(const char *encoded, uint32_t c, nu_read_iterator_t read);
|
|
|
|
/** Locate codepoint in string ignoring case
|
|
*
|
|
* @ingroup collation
|
|
* @see nu_strchr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read);
|
|
|
|
/** Locate codepoint in string in reverse direction
|
|
*
|
|
* @ingroup collation
|
|
* @param encoded encoded string
|
|
* @param c charater to locate
|
|
* @param read read (decode) function for encoded string
|
|
* @return pointer to codepoint in string or 0
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strrchr(const char *encoded, uint32_t c, nu_read_iterator_t read);
|
|
|
|
/** Locate codepoint in string in reverse direction, case-insensitive
|
|
*
|
|
* @ingroup collation
|
|
* @see nu_strrchr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strrcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read);
|
|
|
|
/** Compare strings in case-sensitive manner.
|
|
*
|
|
* @ingroup collation
|
|
* @param s1 first encoded strings
|
|
* @param s2 second encoded strings
|
|
* @param s1_read read (decode) function for first string
|
|
* @param s2_read read (decode) function for second string
|
|
* @return -1, 0, 1
|
|
*/
|
|
NU_EXPORT
|
|
int nu_strcoll(const char *s1, const char *s2,
|
|
nu_read_iterator_t s1_read, nu_read_iterator_t s2_read);
|
|
|
|
/** Compare strings in case-insensitive manner.
|
|
*
|
|
* @ingroup collation
|
|
* @see nu_strcoll
|
|
*/
|
|
NU_EXPORT
|
|
int nu_strcasecoll(const char *s1, const char *s2,
|
|
nu_read_iterator_t s1_read, nu_read_iterator_t s2_read);
|
|
|
|
/** Find needle in haystack
|
|
*
|
|
* @ingroup collation
|
|
* @param haystack encoded haystack
|
|
* @param needle encoded needle
|
|
* @param haystack_read haystack read (decode) function
|
|
* @param needle_read needle read (decode) function
|
|
* @return pointer to found string or 0, will return
|
|
* haystack if needle is empty string
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strstr(const char *haystack, const char *needle,
|
|
nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read);
|
|
|
|
/** Find needle in haystack (case-insensitive)
|
|
*
|
|
* @ingroup collation
|
|
* @see nu_strstr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strcasestr(const char *haystack, const char *needle,
|
|
nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read);
|
|
|
|
#endif /* NU_WITH_Z_COLLATION */
|
|
|
|
#ifdef NU_WITH_N_COLLATION
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strchr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strnchr(const char *encoded, size_t max_len, uint32_t c,
|
|
nu_read_iterator_t read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strcasechr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strcasenchr(const char *encoded, size_t max_len, uint32_t c,
|
|
nu_read_iterator_t read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strrchr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strrnchr(const char *encoded, size_t max_len, uint32_t c,
|
|
nu_read_iterator_t read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strrcasechr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strrcasenchr(const char *encoded, size_t max_len, uint32_t c,
|
|
nu_read_iterator_t read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strcoll
|
|
*/
|
|
NU_EXPORT
|
|
int nu_strncoll(const char *s1, size_t s1_max_len,
|
|
const char *s2, size_t s2_max_len,
|
|
nu_read_iterator_t s1_read, nu_read_iterator_t s2_read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strncoll
|
|
*/
|
|
NU_EXPORT
|
|
int nu_strcasencoll(const char *s1, size_t s1_max_len,
|
|
const char *s2, size_t s2_max_len,
|
|
nu_read_iterator_t s1_read, nu_read_iterator_t s2_read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strstr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strnstr(const char *haystack, size_t haystack_max_len,
|
|
const char *needle, size_t needle_max_len,
|
|
nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read);
|
|
|
|
/**
|
|
* @ingroup collation
|
|
* @see nu_strcasestr
|
|
*/
|
|
NU_EXPORT
|
|
const char* nu_strcasenstr(const char *haystack, size_t haystack_max_len,
|
|
const char *needle, size_t needle_max_len,
|
|
nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read);
|
|
|
|
#endif /* NU_WITH_N_COLLATION */
|
|
|
|
#if defined (__cplusplus) || defined (c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* NU_STRCOLL_H */
|