util.h

Go to the documentation of this file.
00001 
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00025  *
00026  * @todo Rename the functions so that they live somewhere in the purple
00027  *       namespace.
00028  */
00029 #ifndef _PURPLE_UTIL_H_
00030 #define _PURPLE_UTIL_H_
00031 
00032 #include <stdio.h>
00033 
00034 #include "account.h"
00035 #include "xmlnode.h"
00036 #include "notify.h"
00037 
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041 
00042 typedef struct _PurpleUtilFetchUrlData PurpleUtilFetchUrlData;
00043 
00044 typedef struct _PurpleMenuAction
00045 {
00046     char *label;
00047     PurpleCallback callback;
00048     gpointer data;
00049     GList *children;
00050 } PurpleMenuAction;
00051 
00052 typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len);
00053 
00060 typedef struct _PurpleKeyValuePair
00061 {
00062     gchar *key;
00063     void *value;
00064 
00065 } PurpleKeyValuePair;
00066 
00078 PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback,
00079                                      gpointer data, GList *children);
00080 
00086 void purple_menu_action_free(PurpleMenuAction *act);
00087 
00096 void purple_util_set_current_song(const char *title, const char *artist,
00097         const char *album);
00098 
00110 char * purple_util_format_song_info(const char *title, const char *artist,
00111         const char *album, gpointer unused);
00112 
00113 /**************************************************************************/
00115 /**************************************************************************/
00123 void purple_util_init(void);
00124 
00130 void purple_util_uninit(void);
00131 
00134 /**************************************************************************/
00136 /**************************************************************************/
00150 gchar *purple_base16_encode(const guchar *data, gsize len);
00151 
00167 guchar *purple_base16_decode(const char *str, gsize *ret_len);
00168 
00181 gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
00182 
00183 
00186 /**************************************************************************/
00188 /**************************************************************************/
00202 gchar *purple_base64_encode(const guchar *data, gsize len);
00203 
00219 guchar *purple_base64_decode(const char *str, gsize *ret_len);
00220 
00223 /**************************************************************************/
00225 /**************************************************************************/
00240 guchar *purple_quotedp_decode(const char *str, gsize *ret_len);
00241 
00244 /**************************************************************************/
00246 /**************************************************************************/
00268 char *purple_mime_decode_field(const char *str);
00269 
00273 /**************************************************************************/
00275 /**************************************************************************/
00304 const char *purple_utf8_strftime(const char *format, const struct tm *tm);
00305 
00314 const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso);
00315 
00326 const char *purple_date_format_short(const struct tm *tm);
00327 
00338 const char *purple_date_format_long(const struct tm *tm);
00339 
00350 const char *purple_date_format_full(const struct tm *tm);
00351 
00362 const char *purple_time_format(const struct tm *tm);
00363 
00376 time_t purple_time_build(int year, int month, int day, int hour,
00377                        int min, int sec);
00378 
00381 #define PURPLE_NO_TZ_OFF -500000
00382 
00403 time_t purple_str_to_time(const char *timestamp, gboolean utc,
00404                         struct tm *tm, long *tz_off, const char **rest);
00405 
00409 /**************************************************************************/
00411 /**************************************************************************/
00429 gboolean purple_markup_find_tag(const char *needle, const char *haystack,
00430                               const char **start, const char **end,
00431                               GData **attributes);
00432 
00456 gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
00457                                         const char *start_token, int skip,
00458                                         const char *end_token, char check_value,
00459                                         const char *no_value_token,
00460                                         const char *display_name, gboolean is_link,
00461                                         const char *link_prefix,
00462                     PurpleInfoFieldFormatCallback format_cb);
00463 
00471 void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
00472                                char **dest_plain);
00473 
00482 char *purple_markup_strip_html(const char *str);
00483 
00493 char *purple_markup_linkify(const char *str);
00494 
00506 char *purple_unescape_html(const char *html);
00507 
00529 char *purple_markup_slice(const char *str, guint x, guint y);
00530 
00540 char *purple_markup_get_tag_name(const char *tag);
00541 
00558 const char * purple_markup_unescape_entity(const char *text, int *length);
00559 
00576 char * purple_markup_get_css_property(const gchar *style, const gchar *opt);
00577 
00578 
00582 /**************************************************************************/
00584 /**************************************************************************/
00594 const gchar *purple_home_dir(void);
00595 
00604 const char *purple_user_dir(void);
00605 
00610 void purple_util_set_user_dir(const char *dir);
00611 
00622 int purple_build_dir(const char *path, int mode);
00623 
00639 gboolean purple_util_write_data_to_file(const char *filename, const char *data,
00640                                       gssize size);
00641 
00659 gboolean
00660 purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size);
00661 
00676 xmlnode *purple_util_read_xml_from_file(const char *filename,
00677                                       const char *description);
00678 
00695 FILE *purple_mkstemp(char **path, gboolean binary);
00696 
00705 const char *
00706 purple_util_get_image_extension(gconstpointer data, size_t len);
00707 
00715 char *purple_util_get_image_filename(gconstpointer image_data, size_t image_len);
00716 
00720 /**************************************************************************/
00722 /**************************************************************************/
00732 gboolean purple_program_is_valid(const char *program);
00733 
00739 gboolean purple_running_gnome(void);
00740 
00746 gboolean purple_running_kde(void);
00747 
00753 gboolean purple_running_osx(void);
00754 
00762 char *purple_fd_get_ip(int fd);
00763 
00767 /**************************************************************************/
00769 /**************************************************************************/
00789 const char *purple_normalize(const PurpleAccount *account, const char *str);
00790 
00803 const char *purple_normalize_nocase(const PurpleAccount *account, const char *str);
00804 
00814 gboolean purple_str_has_prefix(const char *s, const char *p);
00815 
00825 gboolean purple_str_has_suffix(const char *s, const char *x);
00826 
00835 gchar *purple_strdup_withhtml(const gchar *src);
00836 
00844 char *purple_str_add_cr(const char *str);
00845 
00857 void purple_str_strip_char(char *str, char thechar);
00858 
00869 void purple_util_chrreplace(char *string, char delimiter,
00870                           char replacement);
00871 
00884 gchar *purple_strreplace(const char *string, const char *delimiter,
00885                        const char *replacement);
00886 
00887 
00898 char *purple_utf8_ncr_encode(const char *in);
00899 
00900 
00911 char *purple_utf8_ncr_decode(const char *in);
00912 
00913 
00926 gchar *purple_strcasereplace(const char *string, const char *delimiter,
00927                            const char *replacement);
00928 
00938 const char *purple_strcasestr(const char *haystack, const char *needle);
00939 
00948 char *purple_str_size_to_units(size_t size);
00949 
00958 char *purple_str_seconds_to_string(guint sec);
00959 
00973 char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
00977 /**************************************************************************/
00979 /**************************************************************************/
00982 void purple_got_protocol_handler_uri(const char *uri);
00983 
00996 gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port,
00997                         char **ret_path, char **ret_user, char **ret_passwd);
00998 
01014 typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message);
01015 
01027 #define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \
01028     purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \
01029         FALSE, cb, data);
01030 
01046 PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url,
01047         gboolean full, const gchar *user_agent, gboolean http11,
01048         const gchar *request, gboolean include_headers,
01049         PurpleUtilFetchUrlCallback callback, gpointer data);
01050 
01057 void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data);
01058 
01068 const char *purple_url_decode(const char *str);
01069 
01079 const char *purple_url_encode(const char *str);
01080 
01088 gboolean purple_email_is_valid(const char *address);
01089 
01097 gboolean purple_ip_address_is_valid(const char *ip);
01098 
01108 GList *purple_uri_list_extract_uris(const gchar *uri_list);
01109 
01122 GList *purple_uri_list_extract_filenames(const gchar *uri_list);
01123 
01126 /**************************************************************************
01127  * UTF8 String Functions
01128  **************************************************************************/
01140 gchar *purple_utf8_try_convert(const char *str);
01141 
01151 gchar *purple_utf8_salvage(const char *str);
01152 
01163 G_CONST_RETURN gchar *purple_gai_strerror(gint errnum);
01164 
01178 int purple_utf8_strcasecmp(const char *a, const char *b);
01179 
01190 gboolean purple_utf8_has_word(const char *haystack, const char *needle);
01191 
01200 void purple_print_utf8_to_console(FILE *filestream, char *message);
01201 
01211 gboolean purple_message_meify(char *message, gssize len);
01212 
01221 char *purple_text_strip_mnemonic(const char *in);
01222 
01234 #define purple_add_eight(x) ((x)+8)
01235 
01245 const char *purple_unescape_filename(const char *str);
01246 
01254 const char *purple_escape_filename(const char *str);
01255 
01260 const char *_purple_oscar_convert(const char *act, const char *protocol);
01261 
01267 void purple_restore_default_signal_handlers(void);
01268 
01269 #ifdef __cplusplus
01270 }
01271 #endif
01272 
01273 /* to address incompatibility with cp932. */
01274 void botch_ucs(gchar *ucs, gsize len);
01275 void sanitize_ucs(gchar *ucs, gsize len);
01276 gchar *botch_utf(const gchar *utf, gsize len, gsize *newlen);
01277 gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen);
01278 
01279 #endif /* _PURPLE_UTIL_H_ */