reactos/rosapps/smartpdf/baseutils/str_util.h
Klemens Friedl 435a566751 SmartPDF - lightweight pdf viewer app for rosapps
* sumatrapdf - vendor import
* everything compiles (libjpeg, poppler, fitz, sumatrapdf)
* does NOT link

(remove the comment tags in the parent directory.rbuild file (rosapps dir) to build it)

svn path=/trunk/; revision=29295
2007-09-29 08:39:35 +00:00

118 lines
3.6 KiB
C

/* Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info)
The author disclaims copyright to this source code. */
#ifndef STR_UTIL_H_
#define STR_UTIL_H_
#ifdef __cplusplus
extern "C"
{
#endif
/* DOS is 0xd 0xa */
#define DOS_NEWLINE "\x0d\x0a"
/* Mac is single 0xd */
#define MAC_NEWLINE "\x0d"
/* Unix is single 0xa (10) */
#define UNIX_NEWLINE "\x0a"
#define UNIX_NEWLINE_C 0xa
#ifdef _WIN32
#define DIR_SEP_CHAR '\\'
#define DIR_SEP_STR "\\"
#else
#define DIR_SEP_CHAR '/'
#define DIR_SEP_STR "/"
#endif
void no_op(void);
#ifdef DEBUG
#ifdef _WIN32
#define DBG_OUT win32_dbg_out
#define DBG_OUT_HEX win32_dbg_out_hex
#else
#define DBG_OUT printf
#define DBG_OUT_HEX(...) no_op()
#endif
#else
#define DBG_OUT(...) no_op()
#define DBG_OUT_HEX(...) no_op()
#endif
int char_is_ws_or_zero(char c);
int char_is_ws(char c);
int char_is_digit(char c);
/* TODO: should probably be based on MSVC version */
#if defined(__GNUC__) || !defined(_WIN32) || (_MSC_VER < 1400)
void strcpy_s(char *dst, size_t dstLen, const char *src);
#endif
#define str_len strlen
int str_eq(const char *str1, const char *str2);
int str_ieq(const char *str1, const char *str2);
#define str_eq_no_case str_ieq
int str_eqn(const char *str1, const char *str2, int len);
int str_startswith(const char *str, const char *txt);
int str_startswithi(const char *str, const char *txt);
int str_endswith(const char *str, const char *end);
int str_endswithi(const char *str, const char *end);
int str_endswith_char(const char *str, char c);
int str_empty(const char *str);
int str_copy(char *dst, size_t dst_cch_size, const char *src);
int str_copyn(char *dst, size_t dst_cch_size, const char *src, size_t src_cch_size);
char * str_dup(const char *str);
char * str_dupn(const char *str, size_t len);
char * str_cat(const char *str1, const char *str2);
char * str_cat3(const char *str1, const char *str2, const char *str3);
char * str_cat4(const char *str1, const char *str2, const char *str3, const char *str4);
char * str_url_encode(const char *str);
int char_needs_url_escape(char c);
int str_contains(const char *str, char c);
char * str_printf_args(const char *format, va_list args);
char * str_printf(const char *format, ...);
const char *str_find_char(const char *txt, char c);
char * str_split_iter(char **txt, char c);
char * str_normalize_newline(const char *txt, const char *replace);
void str_strip_left(char *txt, const char *to_strip);
void str_strip_ws_left(char *txt);
void str_strip_right(char *txt, const char *to_strip);
void str_strip_ws_right(char *txt);
void str_strip_both(char *txt, const char *to_strip);
void str_strip_ws_both(char *txt);
char * str_escape(const char *txt);
char * str_parse_possibly_quoted(char **txt);
#ifdef DEBUG
void str_util_test(void);
#endif
typedef struct str_item str_item;
typedef struct str_array str_array;
struct str_item {
void * opaque; /* opaque data that the user can use */
char str[1];
};
struct str_array {
int items_allocated;
int items_count;
str_item ** items;
};
void str_array_init(str_array *str_arr);
void str_array_free(str_array *str_arr);
void str_array_delete(str_array *str_arr);
str_item *str_array_set(str_array *str_arr, int index, const char *str);
str_item *str_array_add(str_array *str_arr, const char *str);
str_item *str_array_get(str_array *str_arr, int index);
int str_array_get_count(str_array *str_arr);
int str_array_exists_no_case(str_array *str_arr, const char *str);
str_item *str_array_add_no_dups(str_array *str_arr, const char *str);
#ifdef __cplusplus
}
#endif
#endif