summaryrefslogtreecommitdiff
path: root/vendor/nunicode/include/libnu/strcoll.h
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/nunicode/include/libnu/strcoll.h')
-rw-r--r--vendor/nunicode/include/libnu/strcoll.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/vendor/nunicode/include/libnu/strcoll.h b/vendor/nunicode/include/libnu/strcoll.h
new file mode 100644
index 0000000000..3300e0a013
--- /dev/null
+++ b/vendor/nunicode/include/libnu/strcoll.h
@@ -0,0 +1,199 @@
+#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 */