00001
00028 #ifndef _PURPLE_UTIL_H_
00029 #define _PURPLE_UTIL_H_
00030
00031 #include <stdio.h>
00032
00033 #include "account.h"
00034 #include "xmlnode.h"
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00040 typedef struct _PurpleUtilFetchUrlData PurpleUtilFetchUrlData;
00041
00042 typedef struct _PurpleMenuAction
00043 {
00044 char *label;
00045 PurpleCallback callback;
00046 gpointer data;
00047 GList *children;
00048 } PurpleMenuAction;
00049
00050 typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len);
00051
00058 typedef struct _PurpleKeyValuePair
00059 {
00060 gchar *key;
00061 void *value;
00062
00063 } PurpleKeyValuePair;
00064
00076 PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback,
00077 gpointer data, GList *children);
00078
00084 void purple_menu_action_free(PurpleMenuAction *act);
00085
00086
00088
00102 gchar *purple_base16_encode(const guchar *data, gsize len);
00103
00119 guchar *purple_base16_decode(const char *str, gsize *ret_len);
00120
00123
00125
00139 gchar *purple_base64_encode(const guchar *data, gsize len);
00140
00156 guchar *purple_base64_decode(const char *str, gsize *ret_len);
00157
00160
00162
00177 guchar *purple_quotedp_decode(const char *str, gsize *ret_len);
00178
00181
00183
00205 char *purple_mime_decode_field(const char *str);
00206
00210
00212
00241 const char *purple_utf8_strftime(const char *format, const struct tm *tm);
00242
00253 const char *purple_date_format_short(const struct tm *tm);
00254
00265 const char *purple_date_format_long(const struct tm *tm);
00266
00277 const char *purple_date_format_full(const struct tm *tm);
00278
00289 const char *purple_time_format(const struct tm *tm);
00290
00303 time_t purple_time_build(int year, int month, int day, int hour,
00304 int min, int sec);
00305
00308 #define PURPLE_NO_TZ_OFF -500000
00309
00330 time_t purple_str_to_time(const char *timestamp, gboolean utc,
00331 struct tm *tm, long *tz_off, const char **rest);
00332
00336
00338
00356 gboolean purple_markup_find_tag(const char *needle, const char *haystack,
00357 const char **start, const char **end,
00358 GData **attributes);
00359
00383 gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
00384 const char *start_token, int skip,
00385 const char *end_token, char check_value,
00386 const char *no_value_token,
00387 const char *display_name, gboolean is_link,
00388 const char *link_prefix,
00389 PurpleInfoFieldFormatCallback format_cb);
00390
00398 void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
00399 char **dest_plain);
00400
00408 char *purple_markup_strip_html(const char *str);
00409
00417 char *purple_markup_linkify(const char *str);
00418
00429 char *purple_unescape_html(const char *html);
00430
00452 char *purple_markup_slice(const char *str, guint x, guint y);
00453
00463 char *purple_markup_get_tag_name(const char *tag);
00464
00481 const char * purple_markup_unescape_entity(const char *text, int *length);
00482
00499 char * purple_markup_get_css_property(const gchar *style, const gchar *opt);
00500
00501
00505
00507
00517 const gchar *purple_home_dir(void);
00518
00527 const char *purple_user_dir(void);
00528
00533 void purple_util_set_user_dir(const char *dir);
00534
00545 int purple_build_dir(const char *path, int mode);
00546
00562 gboolean purple_util_write_data_to_file(const char *filename, const char *data,
00563 size_t size);
00564
00579 xmlnode *purple_util_read_xml_from_file(const char *filename,
00580 const char *description);
00581
00598 FILE *purple_mkstemp(char **path, gboolean binary);
00599
00608 const char *
00609 purple_util_get_image_extension(gconstpointer data, size_t len);
00610
00614
00616
00626 gboolean purple_program_is_valid(const char *program);
00627
00633 gboolean purple_running_gnome(void);
00634
00640 gboolean purple_running_kde(void);
00641
00647 gboolean purple_running_osx(void);
00648
00656 char *purple_fd_get_ip(int fd);
00657
00661
00663
00683 const char *purple_normalize(const PurpleAccount *account, const char *str);
00684
00697 const char *purple_normalize_nocase(const PurpleAccount *account, const char *str);
00698
00708 gboolean purple_str_has_prefix(const char *s, const char *p);
00709
00719 gboolean purple_str_has_suffix(const char *s, const char *x);
00720
00729 gchar *purple_strdup_withhtml(const gchar *src);
00730
00738 char *purple_str_add_cr(const char *str);
00739
00751 void purple_str_strip_char(char *str, char thechar);
00752
00763 void purple_util_chrreplace(char *string, char delimiter,
00764 char replacement);
00765
00778 gchar *purple_strreplace(const char *string, const char *delimiter,
00779 const char *replacement);
00780
00781
00792 char *purple_utf8_ncr_encode(const char *in);
00793
00794
00805 char *purple_utf8_ncr_decode(const char *in);
00806
00807
00820 gchar *purple_strcasereplace(const char *string, const char *delimiter,
00821 const char *replacement);
00822
00832 const char *purple_strcasestr(const char *haystack, const char *needle);
00833
00842 char *purple_str_size_to_units(size_t size);
00843
00852 char *purple_str_seconds_to_string(guint sec);
00853
00867 char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
00871
00873
00876 void purple_got_protocol_handler_uri(const char *uri);
00877
00890 gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port,
00891 char **ret_path, char **ret_user, char **ret_passwd);
00892
00908 typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message);
00909
00921 #define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \
00922 purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \
00923 FALSE, cb, data);
00924
00940 PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url,
00941 gboolean full, const gchar *user_agent, gboolean http11,
00942 const gchar *request, gboolean include_headers,
00943 PurpleUtilFetchUrlCallback callback, gpointer data);
00944
00951 void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data);
00952
00962 const char *purple_url_decode(const char *str);
00963
00973 const char *purple_url_encode(const char *str);
00974
00982 gboolean purple_email_is_valid(const char *address);
00983
00993 GList *purple_uri_list_extract_uris(const gchar *uri_list);
00994
01007 GList *purple_uri_list_extract_filenames(const gchar *uri_list);
01008
01011
01012
01013
01025 gchar *purple_utf8_try_convert(const char *str);
01026
01036 gchar *purple_utf8_salvage(const char *str);
01037
01051 int purple_utf8_strcasecmp(const char *a, const char *b);
01052
01063 gboolean purple_utf8_has_word(const char *haystack, const char *needle);
01064
01073 void purple_print_utf8_to_console(FILE *filestream, char *message);
01074
01083 gboolean purple_message_meify(char *message, size_t len);
01084
01093 char *purple_text_strip_mnemonic(const char *in);
01094
01106 #define purple_add_eight(x) ((x)+8)
01107
01117 const char *purple_unescape_filename(const char *str);
01118
01126 const char *purple_escape_filename(const char *str);
01127
01132 const char *_purple_oscar_convert(const char *act, const char *protocol);
01133
01139 void purple_restore_default_signal_handlers(void);
01140
01141 #ifdef __cplusplus
01142 }
01143 #endif
01144
01145
01146 void botch_ucs(gchar *ucs, gssize len);
01147 void sanitize_ucs(gchar *ucs, gssize len);
01148 guchar *botch_utf(const void *utf, size_t len, size_t *newlen);
01149 guchar *sanitize_utf(unsigned char *msg, size_t len, size_t *newlen);
01150
01151 #endif