Mercurial > pidgin
comparison libgaim/util.h @ 14192:60b1bc8dbf37
[gaim-migrate @ 16863]
Renamed 'core' to 'libgaim'
committer: Tailor Script <tailor@pidgin.im>
author | Evan Schoenberg <evan.s@dreskin.net> |
---|---|
date | Sat, 19 Aug 2006 01:50:10 +0000 |
parents | |
children | 01daacf7b771 |
comparison
equal
deleted
inserted
replaced
14191:009db0b357b5 | 14192:60b1bc8dbf37 |
---|---|
1 /** | |
2 * @file util.h Utility Functions | |
3 * @ingroup core | |
4 * | |
5 * gaim | |
6 * | |
7 * Gaim is the legal property of its developers, whose names are too numerous | |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 * | |
25 * @todo Rename the functions so that they live somewhere in the gaim | |
26 * namespace. | |
27 */ | |
28 #ifndef _GAIM_UTIL_H_ | |
29 #define _GAIM_UTIL_H_ | |
30 | |
31 #include <stdio.h> | |
32 | |
33 #include "account.h" | |
34 #include "xmlnode.h" | |
35 | |
36 #ifdef __cplusplus | |
37 extern "C" { | |
38 #endif | |
39 | |
40 typedef struct _GaimMenuAction | |
41 { | |
42 char *label; | |
43 GaimCallback callback; | |
44 gpointer data; | |
45 GList *children; | |
46 } GaimMenuAction; | |
47 | |
48 typedef char *(*GaimInfoFieldFormatCallback)(const char *field, size_t len); | |
49 | |
50 /** | |
51 * A key-value pair. | |
52 * | |
53 * This is used by, among other things, gaim_gtk_combo* functions to pass in a | |
54 * list of key-value pairs so it can display a user-friendly value. | |
55 */ | |
56 typedef struct _GaimKeyValuePair | |
57 { | |
58 gchar *key; | |
59 void *value; | |
60 | |
61 } GaimKeyValuePair; | |
62 | |
63 /** | |
64 * Creates a new GaimMenuAction. | |
65 * | |
66 * @param label The text label to display for this action. | |
67 * @param callback The function to be called when the action is used on | |
68 * the selected item. | |
69 * @param data Additional data to be passed to the callback. | |
70 * @param children A GList of GaimMenuActions to be added as a submenu | |
71 * of the action. | |
72 * @return The GaimMenuAction. | |
73 */ | |
74 GaimMenuAction *gaim_menu_action_new(const char *label, GaimCallback callback, | |
75 gpointer data, GList *children); | |
76 | |
77 /** | |
78 * Frees a GaimMenuAction | |
79 * | |
80 * @param act The GaimMenuAction to free. | |
81 */ | |
82 void gaim_menu_action_free(GaimMenuAction *act); | |
83 | |
84 /**************************************************************************/ | |
85 /** @name Base16 Functions */ | |
86 /**************************************************************************/ | |
87 /*@{*/ | |
88 | |
89 /** | |
90 * Converts a chunk of binary data to its base-16 equivalent. | |
91 * | |
92 * @param data The data to convert. | |
93 * @param len The length of the data. | |
94 * | |
95 * @return The base-16 string in the ASCII encoding. Must be | |
96 * g_free'd when no longer needed. | |
97 * | |
98 * @see gaim_base16_decode() | |
99 */ | |
100 gchar *gaim_base16_encode(const guchar *data, gsize len); | |
101 | |
102 /** | |
103 * Converts an ASCII string of base-16 encoded data to | |
104 * the binary equivalent. | |
105 * | |
106 * @param str The base-16 string to convert to raw data. | |
107 * @param ret_len The length of the returned data. You can | |
108 * pass in NULL if you're sure that you know | |
109 * the length of the decoded data, or if you | |
110 * know you'll be able to use strlen to | |
111 * determine the length, etc. | |
112 * | |
113 * @return The raw data. Must be g_free'd when no longer needed. | |
114 * | |
115 * @see gaim_base16_encode() | |
116 */ | |
117 guchar *gaim_base16_decode(const char *str, gsize *ret_len); | |
118 | |
119 /*@}*/ | |
120 | |
121 /**************************************************************************/ | |
122 /** @name Base64 Functions */ | |
123 /**************************************************************************/ | |
124 /*@{*/ | |
125 | |
126 /** | |
127 * Converts a chunk of binary data to its base-64 equivalent. | |
128 * | |
129 * @param data The data to convert. | |
130 * @param len The length of the data. | |
131 * | |
132 * @return The base-64 string in the ASCII encoding. Must be | |
133 * g_free'd when no longer needed. | |
134 * | |
135 * @see gaim_base64_decode() | |
136 */ | |
137 gchar *gaim_base64_encode(const guchar *data, gsize len); | |
138 | |
139 /** | |
140 * Converts an ASCII string of base-64 encoded data to | |
141 * the binary equivalent. | |
142 * | |
143 * @param str The base-64 string to convert to raw data. | |
144 * @param ret_len The length of the returned data. You can | |
145 * pass in NULL if you're sure that you know | |
146 * the length of the decoded data, or if you | |
147 * know you'll be able to use strlen to | |
148 * determine the length, etc. | |
149 * | |
150 * @return The raw data. Must be g_free'd when no longer needed. | |
151 * | |
152 * @see gaim_base64_encode() | |
153 */ | |
154 guchar *gaim_base64_decode(const char *str, gsize *ret_len); | |
155 | |
156 /*@}*/ | |
157 | |
158 /**************************************************************************/ | |
159 /** @name Quoted Printable Functions */ | |
160 /**************************************************************************/ | |
161 /*@{*/ | |
162 | |
163 /** | |
164 * Converts a quoted printable string back to its readable equivalent. | |
165 * What is a quoted printable string, you ask? It's an encoding used | |
166 * to transmit binary data as ASCII. It's intended purpose is to send | |
167 * e-mails containing non-ASCII characters. Wikipedia has a pretty good | |
168 * explanation. Also see RFC 2045. | |
169 * | |
170 * @param str The quoted printable ASCII string to convert to raw data. | |
171 * @param ret_len The length of the returned data. | |
172 * | |
173 * @return The readable string. Must be g_free'd when no longer needed. | |
174 */ | |
175 guchar *gaim_quotedp_decode(const char *str, gsize *ret_len); | |
176 | |
177 /*@}*/ | |
178 | |
179 /**************************************************************************/ | |
180 /** @name MIME Functions */ | |
181 /**************************************************************************/ | |
182 /*@{*/ | |
183 | |
184 /** | |
185 * Converts a MIME header field string back to its readable equivalent | |
186 * according to RFC 2047. Basically, a header is plain ASCII and can | |
187 * contain any number of sections called "encoded-words." The format | |
188 * of an encoded word is =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= | |
189 * =? designates the beginning of the encoded-word | |
190 * ?= designates the end of the encoded-word | |
191 * | |
192 * An encoded word is segmented into three pieces by the use of a | |
193 * question mark. The first piece is the character set, the second | |
194 * piece is the encoding, and the third piece is the encoded text. | |
195 * | |
196 * @param str The ASCII string, possibly containing any number of | |
197 * encoded-word sections. | |
198 * | |
199 * @return The string, with any encoded-word sections decoded and | |
200 * converted to UTF-8. Must be g_free'd when no longer | |
201 * needed. | |
202 */ | |
203 char *gaim_mime_decode_field(const char *str); | |
204 | |
205 /*@}*/ | |
206 | |
207 | |
208 /**************************************************************************/ | |
209 /** @name Date/Time Functions */ | |
210 /**************************************************************************/ | |
211 /*@{*/ | |
212 | |
213 /** | |
214 * Formats a time into the specified format. | |
215 * | |
216 * This is essentially strftime(), but it has a static buffer | |
217 * and handles the UTF-8 conversion for the caller. | |
218 * | |
219 * This function also provides the GNU %z formatter if the underlying C | |
220 * library doesn't. However, the format string parser is very naive, which | |
221 * means that conversions specifiers to %z cannot be guaranteed. The GNU | |
222 * strftime(3) man page describes %z as: 'The time-zone as hour offset from | |
223 * GMT. Required to emit RFC822-conformant dates | |
224 * (using "%a, %d %b %Y %H:%M:%S %z"). (GNU)' | |
225 * | |
226 * On Windows, this function also converts the results for %Z from a timezone | |
227 * name (as returned by the system strftime() %Z format string) to a timezone | |
228 * abbreviation (as is the case on Unix). As with %z, conversion specifiers | |
229 * should not be used. | |
230 * | |
231 * @param format The format string, in UTF-8 | |
232 * @param tm The time to format, or @c NULL to use the current local time | |
233 * | |
234 * @return The formatted time, in UTF-8. | |
235 * | |
236 * @note @a format is required to be in UTF-8. This differs from strftime(), | |
237 * where the format is provided in the locale charset. | |
238 */ | |
239 const char *gaim_utf8_strftime(const char *format, const struct tm *tm); | |
240 | |
241 /** | |
242 * Formats a time into the user's preferred short date format. | |
243 * | |
244 * The returned string is stored in a static buffer, so the result | |
245 * should be g_strdup()'d if it's going to be kept. | |
246 * | |
247 * @param tm The time to format, or @c NULL to use the current local time | |
248 * | |
249 * @return The date, formatted as per the user's settings. | |
250 */ | |
251 const char *gaim_date_format_short(const struct tm *tm); | |
252 | |
253 /** | |
254 * Formats a time into the user's preferred short date plus time format. | |
255 * | |
256 * The returned string is stored in a static buffer, so the result | |
257 * should be g_strdup()'d if it's going to be kept. | |
258 * | |
259 * @param tm The time to format, or @c NULL to use the current local time | |
260 * | |
261 * @return The timestamp, formatted as per the user's settings. | |
262 */ | |
263 const char *gaim_date_format_long(const struct tm *tm); | |
264 | |
265 /** | |
266 * Formats a time into the user's preferred full date and time format. | |
267 * | |
268 * The returned string is stored in a static buffer, so the result | |
269 * should be g_strdup()'d if it's going to be kept. | |
270 * | |
271 * @param tm The time to format, or @c NULL to use the current local time | |
272 * | |
273 * @return The date and time, formatted as per the user's settings. | |
274 */ | |
275 const char *gaim_date_format_full(const struct tm *tm); | |
276 | |
277 /** | |
278 * Formats a time into the user's preferred time format. | |
279 * | |
280 * The returned string is stored in a static buffer, so the result | |
281 * should be g_strdup()'d if it's going to be kept. | |
282 * | |
283 * @param tm The time to format, or @c NULL to use the current local time | |
284 * | |
285 * @return The time, formatted as per the user's settings. | |
286 */ | |
287 const char *gaim_time_format(const struct tm *tm); | |
288 | |
289 /** | |
290 * Builds a time_t from the supplied information. | |
291 * | |
292 * @param year The year. | |
293 * @param month The month. | |
294 * @param day The day. | |
295 * @param hour The hour. | |
296 * @param min The minute. | |
297 * @param sec The second. | |
298 * | |
299 * @return A time_t. | |
300 */ | |
301 time_t gaim_time_build(int year, int month, int day, int hour, | |
302 int min, int sec); | |
303 | |
304 /** Used by gaim_str_to_time to indicate no timezone offset was | |
305 * specified in the timestamp string. */ | |
306 #define GAIM_NO_TZ_OFF -500000 | |
307 | |
308 /** | |
309 * Parses a timestamp in jabber, ISO8601, or MM/DD/YYYY format and returns | |
310 * a time_t. | |
311 * | |
312 * @param timestamp The timestamp | |
313 * @param utc Assume UTC if no timezone specified | |
314 * @param tm If not @c NULL, the caller can get a copy of the | |
315 * struct tm used to calculate the time_t return value. | |
316 * @param tz_off If not @c NULL, the caller can get a copy of the | |
317 * timezone offset (from UTC) used to calculate the time_t | |
318 * return value. Note: Zero is a valid offset. As such, | |
319 * the value of the macro @c GAIM_NO_TZ_OFF indicates no | |
320 * offset was specified (which means that the local | |
321 * timezone was used in the calculation). | |
322 * @param rest If not @c NULL, the caller can get a pointer to the | |
323 * part of @a timestamp left over after parsing is | |
324 * completed, if it's not the end of @a timestamp. | |
325 * | |
326 * @return A time_t. | |
327 */ | |
328 time_t gaim_str_to_time(const char *timestamp, gboolean utc, | |
329 struct tm *tm, long *tz_off, const char **rest); | |
330 | |
331 /*@}*/ | |
332 | |
333 | |
334 /**************************************************************************/ | |
335 /** @name Markup Functions */ | |
336 /**************************************************************************/ | |
337 /*@{*/ | |
338 | |
339 /** | |
340 * Finds an HTML tag matching the given name. | |
341 * | |
342 * This locates an HTML tag's start and end, and stores its attributes | |
343 * in a GData hash table. The names of the attributes are lower-cased | |
344 * in the hash table, and the name of the tag is case insensitive. | |
345 * | |
346 * @param needle The name of the tag | |
347 * @param haystack The null-delimited string to search in | |
348 * @param start A pointer to the start of the tag if found | |
349 * @param end A pointer to the end of the tag if found | |
350 * @param attributes The attributes, if the tag was found. This should | |
351 * be freed with g_datalist_clear(). | |
352 * @return TRUE if the tag was found | |
353 */ | |
354 gboolean gaim_markup_find_tag(const char *needle, const char *haystack, | |
355 const char **start, const char **end, | |
356 GData **attributes); | |
357 | |
358 /** | |
359 * Extracts a field of data from HTML. | |
360 * | |
361 * This is a scary function. See protocols/msn/msn.c and | |
362 * protocols/yahoo/yahoo_profile.c for example usage. | |
363 * | |
364 * @param str The string to parse. | |
365 * @param len The size of str. | |
366 * @param dest The destination GString to append the new | |
367 * field info to. | |
368 * @param start_token The beginning token. | |
369 * @param skip The number of characters to skip after the | |
370 * start token. | |
371 * @param end_token The ending token. | |
372 * @param check_value The value that the last character must meet. | |
373 * @param no_value_token The token indicating no value is given. | |
374 * @param display_name The short descriptive name to display for this token. | |
375 * @param is_link TRUE if this should be a link, or FALSE otherwise. | |
376 * @param link_prefix The prefix for the link. | |
377 * @param format_cb A callback to format the value before adding it. | |
378 * | |
379 * @return TRUE if successful, or FALSE otherwise. | |
380 */ | |
381 gboolean gaim_markup_extract_info_field(const char *str, int len, GString *dest, | |
382 const char *start_token, int skip, | |
383 const char *end_token, char check_value, | |
384 const char *no_value_token, | |
385 const char *display_name, gboolean is_link, | |
386 const char *link_prefix, | |
387 GaimInfoFieldFormatCallback format_cb); | |
388 | |
389 /** | |
390 * Converts HTML markup to XHTML. | |
391 * | |
392 * @param html The HTML markup. | |
393 * @param dest_xhtml The destination XHTML output. | |
394 * @param dest_plain The destination plain-text output. | |
395 */ | |
396 void gaim_markup_html_to_xhtml(const char *html, char **dest_xhtml, | |
397 char **dest_plain); | |
398 | |
399 /** | |
400 * Strips HTML tags from a string. | |
401 * | |
402 * @param str The string to strip HTML from. | |
403 * | |
404 * @return The new string without HTML. This must be freed. | |
405 */ | |
406 char *gaim_markup_strip_html(const char *str); | |
407 | |
408 /** | |
409 * Adds the necessary HTML code to turn URIs into HTML links in a string. | |
410 * | |
411 * @param str The string to linkify. | |
412 * | |
413 * @return The linkified text. | |
414 */ | |
415 char *gaim_markup_linkify(const char *str); | |
416 | |
417 /** | |
418 * Unescapes HTML entities to their literal characters. | |
419 * For example "&" is replaced by '&' and so on. | |
420 * Actually only "&", """, "<" and ">" are currently | |
421 * supported. | |
422 * | |
423 * @param html The string in which to unescape any HTML entities | |
424 * | |
425 * @return the text with HTML entities literalized | |
426 */ | |
427 char *gaim_unescape_html(const char *html); | |
428 | |
429 /** | |
430 * Returns a newly allocated substring of the HTML UTF-8 string "str". | |
431 * The markup is preserved such that the substring will have the same | |
432 * formatting as original string, even though some tags may have been | |
433 * opened before "x", or may close after "y". All open tags are closed | |
434 * at the end of the returned string, in the proper order. | |
435 * | |
436 * Note that x and y are in character offsets, not byte offsets, and | |
437 * are offsets into an unformatted version of str. Because of this, | |
438 * this function may be sensitive to changes in GtkIMHtml and may break | |
439 * when used with other UI's. libgaim users are encouraged to report and | |
440 * work out any problems encountered. | |
441 * | |
442 * @param str The input NUL terminated, HTML, UTF-8 (or ASCII) string. | |
443 * @param x The character offset into an unformatted version of str to | |
444 * begin at. | |
445 * @param y The character offset (into an unformatted vesion of str) of | |
446 * one past the last character to include in the slice. | |
447 * | |
448 * @return The HTML slice of string, with all formatting retained. | |
449 */ | |
450 char *gaim_markup_slice(const char *str, guint x, guint y); | |
451 | |
452 /** | |
453 * Returns a newly allocated string containing the name of the tag | |
454 * located at "tag". Tag is expected to point to a '<', and contain | |
455 * a '>' sometime after that. If there is no '>' and the string is | |
456 * not NUL terminated, this function can be expected to segfault. | |
457 * | |
458 * @param tag The string starting a HTML tag. | |
459 * @return A string containing the name of the tag. | |
460 */ | |
461 char *gaim_markup_get_tag_name(const char *tag); | |
462 | |
463 /*@}*/ | |
464 | |
465 | |
466 /**************************************************************************/ | |
467 /** @name Path/Filename Functions */ | |
468 /**************************************************************************/ | |
469 /*@{*/ | |
470 | |
471 /** | |
472 * Returns the user's home directory. | |
473 * | |
474 * @return The user's home directory. | |
475 * | |
476 * @see gaim_user_dir() | |
477 */ | |
478 const gchar *gaim_home_dir(void); | |
479 | |
480 /** | |
481 * Returns the gaim settings directory in the user's home directory. | |
482 * This is usually ~/.gaim | |
483 * | |
484 * @return The gaim settings directory. | |
485 * | |
486 * @see gaim_home_dir() | |
487 */ | |
488 const char *gaim_user_dir(void); | |
489 | |
490 /** | |
491 * Define a custom gaim settings directory, overriding the default (user's home directory/.gaim) | |
492 * @param dir The custom settings directory | |
493 */ | |
494 void gaim_util_set_user_dir(const char *dir); | |
495 | |
496 /** | |
497 * Builds a complete path from the root, making any directories along | |
498 * the path which do not already exist. | |
499 * | |
500 * @param path The path you wish to create. Note that it must start | |
501 * from the root or this function will fail. | |
502 * @param mode Unix-style permissions for this directory. | |
503 * | |
504 * @return 0 for success, nonzero on any error. | |
505 */ | |
506 int gaim_build_dir(const char *path, int mode); | |
507 | |
508 /** | |
509 * Write a string of data to a file of the given name in the Gaim | |
510 * user directory ($HOME/.gaim by default). The data is typically | |
511 * a serialized version of one of Gaim's config files, such as | |
512 * prefs.xml, accounts.xml, etc. And the string is typically | |
513 * obtained using xmlnode_to_formatted_str. However, this function | |
514 * should work fine for saving binary files as well. | |
515 * | |
516 * @param filename The basename of the file to write in the gaim_user_dir. | |
517 * @param data A null-terminated string of data to write. | |
518 * @param size The size of the data to save. If data is | |
519 * null-terminated you can pass in -1. | |
520 * | |
521 * @return TRUE if the file was written successfully. FALSE otherwise. | |
522 */ | |
523 gboolean gaim_util_write_data_to_file(const char *filename, const char *data, | |
524 size_t size); | |
525 | |
526 /** | |
527 * Read the contents of a given file and parse the results into an | |
528 * xmlnode tree structure. This is intended to be used to read | |
529 * Gaim's configuration xml files (prefs.xml, pounces.xml, etc.) | |
530 * | |
531 * @param filename The basename of the file to open in the gaim_user_dir. | |
532 * @param description A very short description of the contents of this | |
533 * file. This is used in error messages shown to the | |
534 * user when the file can not be opened. For example, | |
535 * "preferences," or "buddy pounces." | |
536 * | |
537 * @return An xmlnode tree of the contents of the given file. Or NULL, if | |
538 * the file does not exist or there was an error reading the file. | |
539 */ | |
540 xmlnode *gaim_util_read_xml_from_file(const char *filename, | |
541 const char *description); | |
542 | |
543 /** | |
544 * Creates a temporary file and returns a file pointer to it. | |
545 * | |
546 * This is like mkstemp(), but returns a file pointer and uses a | |
547 * pre-set template. It uses the semantics of tempnam() for the | |
548 * directory to use and allocates the space for the file path. | |
549 * | |
550 * The caller is responsible for closing the file and removing it when | |
551 * done, as well as freeing the space pointed to by @a path with | |
552 * g_free(). | |
553 * | |
554 * @param path The returned path to the temp file. | |
555 * @param binary Text or binary, for platforms where it matters. | |
556 * | |
557 * @return A file pointer to the temporary file, or @c NULL on failure. | |
558 */ | |
559 FILE *gaim_mkstemp(char **path, gboolean binary); | |
560 | |
561 /** | |
562 * Checks if the given program name is valid and executable. | |
563 * | |
564 * @param program The file name of the application. | |
565 * | |
566 * @return TRUE if the program is runable. | |
567 */ | |
568 gboolean gaim_program_is_valid(const char *program); | |
569 | |
570 /** | |
571 * Check if running GNOME. | |
572 * | |
573 * @return TRUE if running GNOME, FALSE otherwise. | |
574 */ | |
575 gboolean gaim_running_gnome(void); | |
576 | |
577 /** | |
578 * Check if running KDE. | |
579 * | |
580 * @return TRUE if running KDE, FALSE otherwise. | |
581 */ | |
582 gboolean gaim_running_kde(void); | |
583 | |
584 /** | |
585 * Returns the IP address from a socket file descriptor. | |
586 * | |
587 * @param fd The socket file descriptor. | |
588 * | |
589 * @return The IP address, or @c NULL on error. | |
590 */ | |
591 char *gaim_fd_get_ip(int fd); | |
592 | |
593 /*@}*/ | |
594 | |
595 | |
596 /**************************************************************************/ | |
597 /** @name String Functions */ | |
598 /**************************************************************************/ | |
599 /*@{*/ | |
600 | |
601 /** | |
602 * Normalizes a string, so that it is suitable for comparison. | |
603 * | |
604 * The returned string will point to a static buffer, so if the | |
605 * string is intended to be kept long-term, you <i>must</i> | |
606 * g_strdup() it. Also, calling normalize() twice in the same line | |
607 * will lead to problems. | |
608 * | |
609 * @param account The account the string belongs to, or NULL if you do | |
610 * not know the account. If you use NULL, the string | |
611 * will still be normalized, but if the PRPL uses a | |
612 * custom normalization function then the string may | |
613 * not be normalized correctly. | |
614 * @param str The string to normalize. | |
615 * | |
616 * @return A pointer to the normalized version stored in a static buffer. | |
617 */ | |
618 const char *gaim_normalize(const GaimAccount *account, const char *str); | |
619 | |
620 /** | |
621 * Normalizes a string, so that it is suitable for comparison. | |
622 * | |
623 * This is one possible implementation for the PRPL callback | |
624 * function "normalize." It returns a lowercase and UTF-8 | |
625 * normalized version of the string. | |
626 * | |
627 * @param account The account the string belongs to. | |
628 * @param str The string to normalize. | |
629 * | |
630 * @return A pointer to the normalized version stored in a static buffer. | |
631 */ | |
632 const char *gaim_normalize_nocase(const GaimAccount *account, const char *str); | |
633 | |
634 /** | |
635 * Compares two strings to see if the first contains the second as | |
636 * a proper prefix. | |
637 * | |
638 * @param s The string to check. | |
639 * @param p The prefix in question. | |
640 * | |
641 * @return TRUE if p is a prefix of s, otherwise FALSE. | |
642 */ | |
643 gboolean gaim_str_has_prefix(const char *s, const char *p); | |
644 | |
645 /** | |
646 * Compares two strings to see if the second is a proper suffix | |
647 * of the first. | |
648 * | |
649 * @param s The string to check. | |
650 * @param x The suffix in question. | |
651 * | |
652 * @return TRUE if x is a a suffix of s, otherwise FALSE. | |
653 */ | |
654 gboolean gaim_str_has_suffix(const char *s, const char *x); | |
655 | |
656 /** | |
657 * Duplicates a string and replaces all newline characters from the | |
658 * source string with HTML linebreaks. | |
659 * | |
660 * @param src The source string. | |
661 * | |
662 * @return The new string. Must be g_free'd by the caller. | |
663 */ | |
664 gchar *gaim_strdup_withhtml(const gchar *src); | |
665 | |
666 /** | |
667 * Ensures that all linefeeds have a matching carriage return. | |
668 * | |
669 * @param str The source string. | |
670 * | |
671 * @return The string with carriage returns. | |
672 */ | |
673 char *gaim_str_add_cr(const char *str); | |
674 | |
675 /** | |
676 * Strips all instances of the given character from the | |
677 * given string. The string is modified in place. This | |
678 * is useful for stripping new line characters, for example. | |
679 * | |
680 * Example usage: | |
681 * gaim_str_strip_char(my_dumb_string, '\n'); | |
682 * | |
683 * @param str The string to strip characters from. | |
684 * @param thechar The character to strip from the given string. | |
685 */ | |
686 void gaim_str_strip_char(char *str, char thechar); | |
687 | |
688 /** | |
689 * Given a string, this replaces all instances of one character | |
690 * with another. This happens inline (the original string IS | |
691 * modified). | |
692 * | |
693 * @param string The string from which to replace stuff. | |
694 * @param delimiter The character you want replaced. | |
695 * @param replacement The character you want inserted in place | |
696 * of the delimiting character. | |
697 */ | |
698 void gaim_util_chrreplace(char *string, char delimiter, | |
699 char replacement); | |
700 | |
701 /** | |
702 * Given a string, this replaces one substring with another | |
703 * and returns a newly allocated string. | |
704 * | |
705 * @param string The string from which to replace stuff. | |
706 * @param delimiter The substring you want replaced. | |
707 * @param replacement The substring you want inserted in place | |
708 * of the delimiting substring. | |
709 * | |
710 * @return A new string, after performing the substitution. | |
711 * free this with g_free(). | |
712 */ | |
713 gchar *gaim_strreplace(const char *string, const char *delimiter, | |
714 const char *replacement); | |
715 | |
716 | |
717 /** | |
718 * Given a string, this replaces any utf-8 substrings in that string with | |
719 * the corresponding numerical character reference, and returns a newly | |
720 * allocated string. | |
721 * | |
722 * @param in The string which might contain utf-8 substrings | |
723 * | |
724 * @return A new string, with utf-8 replaced with numerical character | |
725 * references, free this with g_free() | |
726 */ | |
727 char *gaim_utf8_ncr_encode(const char *in); | |
728 | |
729 | |
730 /** | |
731 * Given a string, this replaces any numerical character references | |
732 * in that string with the corresponding actual utf-8 substrings, | |
733 * and returns a newly allocated string. | |
734 * | |
735 * @param in The string which might contain numerical character references. | |
736 * | |
737 * @return A new string, with numerical character references | |
738 * replaced with actual utf-8, free this with g_free(). | |
739 */ | |
740 char *gaim_utf8_ncr_decode(const char *in); | |
741 | |
742 | |
743 /** | |
744 * Given a string, this replaces one substring with another | |
745 * ignoring case and returns a newly allocated string. | |
746 * | |
747 * @param string The string from which to replace stuff. | |
748 * @param delimiter The substring you want replaced. | |
749 * @param replacement The substring you want inserted in place | |
750 * of the delimiting substring. | |
751 * | |
752 * @return A new string, after performing the substitution. | |
753 * free this with g_free(). | |
754 */ | |
755 gchar *gaim_strcasereplace(const char *string, const char *delimiter, | |
756 const char *replacement); | |
757 | |
758 /** | |
759 * This is like strstr, except that it ignores ASCII case in | |
760 * searching for the substring. | |
761 * | |
762 * @param haystack The string to search in. | |
763 * @param needle The substring to find. | |
764 * | |
765 * @return the location of the substring if found, or NULL if not | |
766 */ | |
767 const char *gaim_strcasestr(const char *haystack, const char *needle); | |
768 | |
769 /** | |
770 * Returns a string representing a filesize in the appropriate | |
771 * units (MB, KB, GB, etc.) | |
772 * | |
773 * @param size The size | |
774 * | |
775 * @return The string in units form. This must be freed. | |
776 */ | |
777 char *gaim_str_size_to_units(size_t size); | |
778 | |
779 /** | |
780 * Converts seconds into a human-readable form. | |
781 * | |
782 * @param sec The seconds. | |
783 * | |
784 * @return A human-readable form, containing days, hours, minutes, and | |
785 * seconds. | |
786 */ | |
787 char *gaim_str_seconds_to_string(guint sec); | |
788 | |
789 /** | |
790 * Converts a binary string into a NUL terminated ascii string, | |
791 * replacing nonascii characters and characters below SPACE (including | |
792 * NUL) into \\xyy, where yy are two hex digits. Also backslashes are | |
793 * changed into two backslashes (\\\\). The returned, newly allocated | |
794 * string can be outputted to the console, and must be g_free()d. | |
795 * | |
796 * @param binary A string of random data, possibly with embedded NULs | |
797 * and such. | |
798 * @param len The length in bytes of the input string. Must not be 0. | |
799 * | |
800 * @return A newly allocated ASCIIZ string. | |
801 */ | |
802 char *gaim_str_binary_to_ascii(const unsigned char *binary, guint len); | |
803 /*@}*/ | |
804 | |
805 | |
806 /**************************************************************************/ | |
807 /** @name URI/URL Functions */ | |
808 /**************************************************************************/ | |
809 /*@{*/ | |
810 | |
811 /** | |
812 * Parses a URL, returning its host, port, file path, username and password. | |
813 * | |
814 * The returned data must be freed. | |
815 * | |
816 * @param url The URL to parse. | |
817 * @param ret_host The returned host. | |
818 * @param ret_port The returned port. | |
819 * @param ret_path The returned path. | |
820 * @param ret_user The returned username. | |
821 * @param ret_passwd The returned password. | |
822 */ | |
823 gboolean gaim_url_parse(const char *url, char **ret_host, int *ret_port, | |
824 char **ret_path, char **ret_user, char **ret_passwd); | |
825 | |
826 typedef void (*GaimURLFetchCallback) (gpointer data, const char *buf, gsize len); | |
827 | |
828 /** | |
829 * Fetches the data from a URL, and passes it to a callback function. | |
830 * | |
831 * @param url The URL. | |
832 * @param full TRUE if this is the full URL, or FALSE if it's a | |
833 * partial URL. | |
834 * @param user_agent The user agent field to use, or NULL. | |
835 * @param http11 TRUE if HTTP/1.1 should be used to download the file. | |
836 * @param cb The callback function. | |
837 * @param data The user data to pass to the callback function. | |
838 */ | |
839 #define gaim_url_fetch(url, full, user_agent, http11, cb, data) \ | |
840 gaim_url_fetch_request(url, full, user_agent, http11, NULL, \ | |
841 FALSE, cb, data); | |
842 | |
843 /** | |
844 * Fetches the data from a URL, and passes it to a callback function. | |
845 * | |
846 * @param url The URL. | |
847 * @param full TRUE if this is the full URL, or FALSE if it's a | |
848 * partial URL. | |
849 * @param user_agent The user agent field to use, or NULL. | |
850 * @param http11 TRUE if HTTP/1.1 should be used to download the file. | |
851 * @param request A HTTP request to send to the server instead of the | |
852 * standard GET | |
853 * @param include_headers if TRUE, include the HTTP headers in the | |
854 * response | |
855 * @param cb The callback function. | |
856 * @param data The user data to pass to the callback function. | |
857 */ | |
858 void gaim_url_fetch_request(const char *url, gboolean full, | |
859 const char *user_agent, gboolean http11, | |
860 const char *request, gboolean include_headers, | |
861 GaimURLFetchCallback cb, void *data); | |
862 | |
863 /** | |
864 * Decodes a URL into a plain string. | |
865 * | |
866 * This will change hex codes and such to their ascii equivalents. | |
867 * | |
868 * @param str The string to translate. | |
869 * | |
870 * @return The resulting string. | |
871 */ | |
872 const char *gaim_url_decode(const char *str); | |
873 | |
874 /** | |
875 * Encodes a URL into an escaped string. | |
876 * | |
877 * This will change non-alphanumeric characters to hex codes. | |
878 * | |
879 * @param str The string to translate. | |
880 * | |
881 * @return The resulting string. | |
882 */ | |
883 const char *gaim_url_encode(const char *str); | |
884 | |
885 /** | |
886 * Checks if the given email address is syntactically valid. | |
887 * | |
888 * @param address The email address to validate. | |
889 * | |
890 * @return True if the email address is syntactically correct. | |
891 */ | |
892 gboolean gaim_email_is_valid(const char *address); | |
893 | |
894 /** | |
895 * This function extracts a list of URIs from the a "text/uri-list" | |
896 * string. It was "borrowed" from gnome_uri_list_extract_uris | |
897 * | |
898 * @param uri_list An uri-list in the standard format. | |
899 * | |
900 * @return A GList containing strings allocated with g_malloc | |
901 * that have been splitted from uri-list. | |
902 */ | |
903 GList *gaim_uri_list_extract_uris(const gchar *uri_list); | |
904 | |
905 /** | |
906 * This function extracts a list of filenames from a | |
907 * "text/uri-list" string. It was "borrowed" from | |
908 * gnome_uri_list_extract_filenames | |
909 * | |
910 * @param uri_list A uri-list in the standard format. | |
911 * | |
912 * @return A GList containing strings allocated with g_malloc that | |
913 * contain the filenames in the uri-list. Note that unlike | |
914 * gaim_uri_list_extract_uris() function, this will discard | |
915 * any non-file uri from the result value. | |
916 */ | |
917 GList *gaim_uri_list_extract_filenames(const gchar *uri_list); | |
918 | |
919 /*@}*/ | |
920 | |
921 /************************************************************************** | |
922 * UTF8 String Functions | |
923 **************************************************************************/ | |
924 /*@{*/ | |
925 | |
926 /** | |
927 * Attempts to convert a string to UTF-8 from an unknown encoding. | |
928 * | |
929 * This function checks the locale and tries sane defaults. | |
930 * | |
931 * @param str The source string. | |
932 * | |
933 * @return The UTF-8 string, or @c NULL if it could not be converted. | |
934 */ | |
935 gchar *gaim_utf8_try_convert(const char *str); | |
936 | |
937 /** | |
938 * Salvages the valid UTF-8 characters from a string, replacing any | |
939 * invalid characters with a filler character (currently hardcoded to | |
940 * '?'). | |
941 * | |
942 * @param str The source string. | |
943 * | |
944 * @return A valid UTF-8 string. | |
945 */ | |
946 gchar *gaim_utf8_salvage(const char *str); | |
947 | |
948 /** | |
949 * Compares two UTF-8 strings case-insensitively. | |
950 * | |
951 * @param a The first string. | |
952 * @param b The second string. | |
953 * | |
954 * @return -1 if @a is less than @a b. | |
955 * 0 if @a is equal to @a b. | |
956 * 1 if @a is greater than @a b. | |
957 */ | |
958 int gaim_utf8_strcasecmp(const char *a, const char *b); | |
959 | |
960 /** | |
961 * Case insensitive search for a word in a string. The needle string | |
962 * must be contained in the haystack string and not be immediately | |
963 * preceded or immediately followed by another alpha-numeric character. | |
964 * | |
965 * @param haystack The string to search in. | |
966 * @param needle The substring to find. | |
967 * | |
968 * @return TRUE if haystack has the word, otherwise FALSE | |
969 */ | |
970 gboolean gaim_utf8_has_word(const char *haystack, const char *needle); | |
971 | |
972 /** | |
973 * Prints a UTF-8 message to the given file stream. The function | |
974 * tries to convert the UTF-8 message to user's locale. If this | |
975 * is not possible, the original UTF-8 text will be printed. | |
976 * | |
977 * @param filestream The file stream (e.g. STDOUT or STDERR) | |
978 * @param message The message to print. | |
979 */ | |
980 void gaim_print_utf8_to_console(FILE *filestream, char *message); | |
981 | |
982 /** | |
983 * Checks for messages starting with "/me " | |
984 * | |
985 * @param message The message to check | |
986 * @param len The message length, or -1 | |
987 * | |
988 * @return TRUE if it starts with /me, and it has been removed, otherwise FALSE | |
989 */ | |
990 gboolean gaim_message_meify(char *message, size_t len); | |
991 | |
992 /** | |
993 * Removes the underscore characters from a string used identify the mnemonic | |
994 * character. | |
995 * | |
996 * @param in The string to strip | |
997 * | |
998 * @return The stripped string | |
999 */ | |
1000 char *gaim_text_strip_mnemonic(const char *in); | |
1001 | |
1002 /*@}*/ | |
1003 | |
1004 /** | |
1005 * Adds 8 to something. | |
1006 * | |
1007 * Blame SimGuy. | |
1008 * | |
1009 * @param x The number to add 8 to. | |
1010 * | |
1011 * @return x + 8 | |
1012 */ | |
1013 #define gaim_add_eight(x) ((x)+8) | |
1014 | |
1015 /** | |
1016 * Does the reverse of gaim_escape_filename | |
1017 * | |
1018 * This will change hex codes and such to their ascii equivalents. | |
1019 * | |
1020 * @param str The string to translate. | |
1021 * | |
1022 * @return The resulting string. | |
1023 */ | |
1024 const char *gaim_unescape_filename(const char *str); | |
1025 | |
1026 /** | |
1027 * Escapes filesystem-unfriendly characters from a filename | |
1028 * | |
1029 * @param str The string to translate. | |
1030 * | |
1031 * @return The resulting string. | |
1032 */ | |
1033 const char *gaim_escape_filename(const char *str); | |
1034 | |
1035 #ifdef __cplusplus | |
1036 } | |
1037 #endif | |
1038 | |
1039 #endif /* _GAIM_UTIL_H_ */ |