diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4strx.cpt |
Initial commit
Diffstat (limited to 'support/dktools/dk4strx.cpt')
-rw-r--r-- | support/dktools/dk4strx.cpt | 601 |
1 files changed, 601 insertions, 0 deletions
diff --git a/support/dktools/dk4strx.cpt b/support/dktools/dk4strx.cpt new file mode 100644 index 0000000000..cf8b9c8ea9 --- /dev/null +++ b/support/dktools/dk4strx.cpt @@ -0,0 +1,601 @@ +%% options + +copyright owner = Dirk Krause +copyright year = 2015-xxxx +license = bsd + +%% header + +/** @file dk4strx.h String functions for wxChar. +*/ + +#ifndef DK4CONF_H_INCLUDED +#include "dk4conf.h" +#endif + +#ifndef DK4TYPES_H_INCLUDED +#include "dk4types.h" +#endif + +#ifndef DK4CONST_H_INCLUDED +#include "dk4const.h" +#endif + +#ifndef DK4ERROR_H_INCLUDED +#include "dk4error.h" +#endif + +#ifndef DK4WXCS_H_INCLUDED +#include "dk4wxcs.h" +#endif + + +#ifndef WX_WXPREC_H_INCLUDED +#include <wx/wxprec.h> +#define WX_WXPREC_H_INCLUDED 1 +#endif +#ifdef __BORLANDC__ +#pragma hdrstop +#endif +#ifndef WX_PRECOMP +#if DK4_HAVE_WX_CHARTYPE_H +#ifndef WX_CHARTYPE_H_INCLUDED +#include <wx/chartype.h> +#define WX_CHARTYPE_H_INCLUDED 1 +#endif +#else +#if DK4_HAVE_WX_WXCHAR_H +#ifndef WX_WXCHAR_H_INCLUDED +#include <wx/wxchar.h> +#define WX_WXCHAR_H_INCLUDED 1 +#endif +#else +#ifndef WX_WX_H_INCLUDED +#include <wx/wx.h> +#define WX_WX_H_INCLUDED +#endif +#endif +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** Copy string, check destination buffer size. + @param dst Destination buffer address. + @param sz Destination buffer size. + @param src Source string. + @param erp Error report, may be NULL. + @return 1 on success, 0 on error. + + Error codes: + - DK4_E_INVALID_ARGUMENTS<br> + if dst or src is NULL or sz is 0, + - DK4_E_BUFFER_TOO_SMALL<br> + if the dst buffer is too small. +*/ +int +dk4strx_cpy_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp); + +/** Concatenate strings, check destination buffer size. + @param dst Destination buffer address. + @param sz Destination buffer size. + @param src Source string. + @param erp Error report, may be NULL. + @return 1 on success, 0 on error. + + Error codes: + - DK4_E_INVALID_ARGUMENTS<br> + if dst or src is NULL or sz is 0, + - DK4_E_MATH_OVERFLOW<br> + if a mathematical overflow occured in size calculation, + - DK4_E_BUFFER_TOO_SMALL<br> + if the concatenated string doest not fit into the buffer. +*/ +int +dk4strx_cat_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp); + +/** Copy characters within a string from right to left. + This copy operation is intended for moving characters within + one string from right to left, making the string shorter + as is. This function does not check buffer size or report + any error. + For normal string copy operations, use the dk4strx_cpy_s() + function instead. + @param dst Destination buffer address. + @param src Source string. +*/ +void +dk4strx_cpy_to_left(wxChar *dst, const wxChar *src); + +/** Find string length. + @param src Source string. + @return String length. +*/ +size_t +dk4strx_len(const wxChar *src); + +/** Compare two strings. + @param s1 Left string, may be NULL. + @param s2 Right string, may be NULL. + @return 1 if s1>s2, 0 if s1==s2, -1 if s1<s2. +*/ +int +dk4strx_cmp(const wxChar *s1, const wxChar *s2); + +/** Compare two strings, case-insensitive comparison. + @param s1 Left string, may be NULL. + @param s2 Right string, may be NULL. + @return 1 if s1>s2, 0 if s1==s2, -1 if s1<s2. +*/ +int +dk4strx_casecmp(const wxChar *s1, const wxChar *s2); + +/** Compare two file path names. + @param s1 Left string, may be NULL. + @param s2 Right string, may be NULL. + @return 1 if s1>s2, 0 if s1==s2, -1 if s1<s2. +*/ +int +dk4strx_pathcmp(const wxChar *s1, const wxChar *s2); + +/** Find first occurance of character c in string s. + @param s String to search for c. + @param c Character to find. + @return Pointer to first occurance if found, NULL otherwise. +*/ +wxChar * +dk4strx_chr(const wxChar *s, wxChar c); + +/** Find last occurance of character c in string s. + @param s String to search for c. + @param c Character to find. + @return Pointer to last occurance if found, NULL otherwise. +*/ +wxChar * +dk4strx_rchr(const wxChar *s, wxChar c); + +/** Retrieve first token from *stringp. + @param stringp Adress of string pointer. + @param delim String containing the delimiter set, + my be NULL to use the default delimiter + set (space, tabulator, carriage return and newline). + @return Pointer to first token on success, NULL if no (further) + token found. +*/ +wxChar * +dk4strx_sep(wxChar **stringp, const wxChar *delim); + +/** Find first token in string. + @param src String to search for tokens. + @param delim String containing the delimiter characters, + may be NULL to use the default delimiter set. + @return Pointer to first token if found, NULL otherwise. +*/ +wxChar * +dk4strx_start(const wxChar *src, const wxChar *delim); + +/** Cut string after first token, find start of second token in string. + @param src String to search for tokens, + normally the result of dk4strx_start() or a + previous dk4strx_next() call. + @param delim String containing the delimiter characters, + may be NULL to use the default delimiter set. + @return Pointer to second token if found, NULL otherwise. +*/ +wxChar * +dk4strx_next(wxChar *src, const wxChar *delim); + +/** Split a string into tokens. + @param dpp Pointer to string pointer array. + @param szdpp Size of destination string pointer array. + @param src Source string to process. + @param delim String containing delimiter characters, + may be NULL to use the default delimiter set. + @param erp Error report, may be NULL. + @return Number of tokens found on success, 0 if no token + found or on error. + + Error codes: + - DK4_E_INVALID_ARGUMENTS<br> + for invalid function arguments, + - DK4_E_BUFFER_TOO_SMALL<br> + with dt.mem.nelem set to the number of tokens in string if the dpp + array is too short. +*/ +size_t +dk4strx_tokenize( + wxChar **dpp, size_t szdpp, wxChar *src, const wxChar *delim, dk4_er_t *erp +); + +/** Normalize a string (remove leading and trailing delimiters, + replace delimiter sequences by just one delimiter). + @param src Buffer containing the string to normalize. + @param delim String containing delimiter characters, + may be NULL to use the default delimiter set. +*/ +void +dk4strx_normalize(wxChar *src, const wxChar *delim); + +/** Find index of a string in an array of strings. + @param arr Array of strings. + @param str String to find in array. + @param cs Flag: Case-sensitive search (0=no, other=yes). + @return Non-negative index value on success, -1 on error. +*/ +int +dk4strx_array_index(const wxChar * const *arr, const wxChar *str, int cs); + +/** Find index of a string in an array of strings. + @param arr Array of strings allowing abbreviation. + @param spec Special character indicating start of optional text. + @param str String to find in array. + @param cs Flag: Case-sensitive search (0=no, other=yes). + @return Non-negative index value on success, -1 on error. +*/ +int +dk4strx_abbr_index( + const wxChar * const *arr, + wxChar spec, + const wxChar *str, + int cs +); + +/** Check whether a text matches a pattern, the text may be abbreviated. + @param str Text to check. + @param pattern Pattern for comparison. + @param spec Special character marking the abbreviation in the + pattern. + @param cs Flag: Case sensitive (1) or not (0). + @return 1 for a match, 0 otherwise. +*/ +int +dk4strx_is_abbr(const wxChar *str, const wxChar *pattern, wxChar spec, int cs); + +/** Check whether a string represents a boolean value. + @param str String to check. + @return 1 if str represents a boolean value, 0 otherwise. +*/ +int +dk4strx_is_bool(const wxChar *str); + +/** Check whether a string represents the boolean value TRUE. + @param str String to check. + @return 1 if str represents the boolean value TRUE, 0 otherwise. +*/ +int +dk4strx_is_on(const wxChar *str); + +#if (defined(_WIN32) && DK4_USE_WINDOWS_LOCAL_ALLOC) \ + || (DK4_HAVE_MALLOC && DK4_HAVE_FREE) + +/** Duplicate string in dynamically allocated memory. + @param src String to duplicate. + @param erp Error report, may be NULL. + @return Pointer to string in new memory on succes, NULL on error. + Use dk4mem_free() to release the memory after usage. + + Error codes: + - DK4_E_INVALID_ARGUMENTS<br> + if src is a NULL pointer, + - DK4_E_MATH_OVERFLOW<br> + on mathematical overflow in size calculation, + - DK4_E_MEMORY<br> + if no memory is available. +*/ +wxChar * +dk4strx_dup(const wxChar *src, dk4_er_t *erp); + +#endif +/* if (defined(_WIN32) ... */ + +/** Remove trailing white spaces. + @param str String to remove white spaces from. + @param whsp White spaces set. +*/ +void +dk4strx_rtwh(wxChar *str, const wxChar *whsp); + +/** Remove trailing newline from line. + @param lptr Line pointer. +*/ +void +dk4strx_delnl(wxChar *lptr); + +#ifdef __cplusplus +} +#endif + + + +%% module + +#include "dk4strx.h" + + +#if DK4_SIZEOF_WXCHAR > 1 +#include "dk4strw.h" +#else +#include "dk4str8.h" +#endif + + + +$!trace-include + + + +int +dk4strx_cpy_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_cpy_s(dst, sz, src, erp)); +#else + return (dk4str8_cpy_s(dst, sz, src, erp)); +#endif +} + + + +int +dk4strx_cat_s(wxChar *dst, size_t sz, const wxChar *src, dk4_er_t *erp) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_cat_s(dst, sz, src, erp)); +#else + return (dk4str8_cat_s(dst, sz, src, erp)); +#endif +} + + + +void +dk4strx_cpy_to_left(wxChar *dst, const wxChar *src) +{ +#if DK4_SIZEOF_WXCHAR > 1 + dk4strw_cpy_to_left(dst, src); +#else + dk4str8_cpy_to_left(dst, src); +#endif +} + + + +size_t +dk4strx_len(const wxChar *src) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_len(src)); +#else + return (dk4str8_len(src)); +#endif +} + + + +int +dk4strx_cmp(const wxChar *s1, const wxChar *s2) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_cmp(s1, s2)); +#else + return (dk4str8_cmp(s1, s2)); +#endif +} + + + +int +dk4strx_casecmp(const wxChar *s1, const wxChar *s2) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_casecmp(s1, s2)); +#else + return (dk4str8_casecmp(s1, s2)); +#endif +} + + + +int +dk4strx_pathcmp(const wxChar *s1, const wxChar *s2) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_pathcmp(s1, s2)); +#else + return (dk4str8_pathcmp(s1, s2)); +#endif +} + + + +wxChar * +dk4strx_chr(const wxChar *s, wxChar c) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_chr(s, c)); +#else + return (dk4str8_chr(s, c)); +#endif +} + + + +wxChar * +dk4strx_rchr(const wxChar *s, wxChar c) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_rchr(s, c)); +#else + return (dk4str8_rchr(s, c)); +#endif +} + + + +wxChar * +dk4strx_sep(wxChar **stringp, const wxChar *delim) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_sep(stringp, delim)); +#else + return (dk4str8_sep(stringp, delim)); +#endif +} + + + +wxChar * +dk4strx_start(const wxChar *src, const wxChar *delim) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_start(src, delim)); +#else + return (dk4str8_start(src, delim)); +#endif +} + + + +wxChar * +dk4strx_next(wxChar *src, const wxChar *delim) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_next(src, delim)); +#else + return (dk4str8_next(src, delim)); +#endif +} + + + +size_t +dk4strx_tokenize( + wxChar **dpp, size_t szdpp, wxChar *src, const wxChar *delim, dk4_er_t *erp +) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_tokenize(dpp, szdpp, src, delim, erp)); +#else + return (dk4str8_tokenize(dpp, szdpp, src, delim, erp)); +#endif +} + + + +void +dk4strx_normalize(wxChar *src, const wxChar *delim) +{ +#if DK4_SIZEOF_WXCHAR > 1 + dk4strw_normalize(src, delim); +#else + dk4str8_normalize(src, delim); +#endif +} + + + +int +dk4strx_array_index(const wxChar * const *arr, const wxChar *str, int cs) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_array_index(arr, str, cs)); +#else + return (dk4str8_array_index(arr, str, cs)); +#endif +} + + + +int +dk4strx_abbr_index( + const wxChar * const *arr, + wxChar spec, + const wxChar *str, + int cs +) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_abbr_index(arr, spec, str, cs)); +#else + return (dk4str8_abbr_index(arr, spec, str, cs)); +#endif +} + + + +int +dk4strx_is_abbr(const wxChar *str, const wxChar *pattern, wxChar spec, int cs) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_is_abbr(str, pattern, spec, cs)); +#else + return (dk4str8_is_abbr(str, pattern, spec, cs)); +#endif +} + + + +int +dk4strx_is_bool(const wxChar *str) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_is_bool(str)); +#else + return (dk4str8_is_bool(str)); +#endif +} + + + +int +dk4strx_is_on(const wxChar *str) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_is_on(str)); +#else + return (dk4str8_is_on(str)); +#endif +} + + + +#if (defined(_WIN32) && DK4_USE_WINDOWS_LOCAL_ALLOC) \ + || (DK4_HAVE_MALLOC && DK4_HAVE_FREE) + +wxChar * +dk4strx_dup(const wxChar *src, dk4_er_t *erp) +{ +#if DK4_SIZEOF_WXCHAR > 1 + return (dk4strw_dup(src, erp)); +#else + return (dk4str8_dup(src, erp)); +#endif +} + +#endif +/* if (defined(_WIN32) ... */ + +void +dk4strx_rtwh(wxChar *str, const wxChar *whsp) +{ +#if DK4_SIZEOF_WXCHAR > 1 + dk4strw_rtwh(str, whsp); +#else + dk4str8_rtwh(str, whsp); +#endif +} + + + +void +dk4strx_delnl(wxChar *lptr) +{ +#if DK4_SIZEOF_WXCHAR > 1 + dk4strw_delnl(lptr); +#else + dk4str8_delnl(lptr); +#endif +} + |