Mercurial > pidgin
comparison src/util.c @ 7107:9220c7490cd1
[gaim-migrate @ 7672]
This is a big one: normalize() -> gaim_normalize, linkify_text() ->
gaim_markup_linkify(), gaim_get_size_string() -> gaim_str_size_to_units(),
and moved clean_pid() to main.c.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 01 Oct 2003 06:17:28 +0000 |
parents | db6bd3e794d8 |
children | 6faeeecab0dc |
comparison
equal
deleted
inserted
replaced
7106:db6bd3e794d8 | 7107:9220c7490cd1 |
---|---|
134 ret = g_strdup_printf("%d %s.", min, ngettext("minute","minutes",min)); | 134 ret = g_strdup_printf("%d %s.", min, ngettext("minute","minutes",min)); |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 return ret; | 138 return ret; |
139 } | |
140 | |
141 char *linkify_text(const char *text) | |
142 { | |
143 const char *c, *t, *q = NULL; | |
144 char *tmp; | |
145 char url_buf[BUF_LEN * 4]; | |
146 GString *ret = g_string_new(""); | |
147 /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ | |
148 | |
149 c = text; | |
150 while (*c) { | |
151 if(!q && (*c == '\"' || *c == '\'')) { | |
152 q = c; | |
153 } else if(q) { | |
154 if(*c == *q) | |
155 q = NULL; | |
156 } else if (!g_ascii_strncasecmp(c, "<A", 2)) { | |
157 while (1) { | |
158 if (!g_ascii_strncasecmp(c, "/A>", 3)) { | |
159 break; | |
160 } | |
161 ret = g_string_append_c(ret, *c); | |
162 c++; | |
163 if (!(*c)) | |
164 break; | |
165 } | |
166 } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || | |
167 (!g_ascii_strncasecmp(c, "https://", 8)))) { | |
168 t = c; | |
169 while (1) { | |
170 if (badchar(*t)) { | |
171 | |
172 if (*(t) == ',' && (*(t + 1) != ' ')) { | |
173 t++; | |
174 continue; | |
175 } | |
176 | |
177 if (*(t - 1) == '.') | |
178 t--; | |
179 strncpy(url_buf, c, t - c); | |
180 url_buf[t - c] = 0; | |
181 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
182 url_buf, url_buf); | |
183 c = t; | |
184 break; | |
185 } | |
186 if (!t) | |
187 break; | |
188 t++; | |
189 | |
190 } | |
191 } else if (!g_ascii_strncasecmp(c, "www.", 4)) { | |
192 if (c[4] != '.') { | |
193 t = c; | |
194 while (1) { | |
195 if (badchar(*t)) { | |
196 if (t - c == 4) { | |
197 break; | |
198 } | |
199 | |
200 if (*(t) == ',' && (*(t + 1) != ' ')) { | |
201 t++; | |
202 continue; | |
203 } | |
204 | |
205 if (*(t - 1) == '.') | |
206 t--; | |
207 strncpy(url_buf, c, t - c); | |
208 url_buf[t - c] = 0; | |
209 g_string_append_printf(ret, | |
210 "<A HREF=\"http://%s\">%s</A>", url_buf, | |
211 url_buf); | |
212 c = t; | |
213 break; | |
214 } | |
215 if (!t) | |
216 break; | |
217 t++; | |
218 } | |
219 } | |
220 } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { | |
221 t = c; | |
222 while (1) { | |
223 if (badchar(*t)) { | |
224 if (*(t - 1) == '.') | |
225 t--; | |
226 strncpy(url_buf, c, t - c); | |
227 url_buf[t - c] = 0; | |
228 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
229 url_buf, url_buf); | |
230 c = t; | |
231 break; | |
232 } | |
233 if (!t) | |
234 break; | |
235 t++; | |
236 | |
237 } | |
238 } else if (!g_ascii_strncasecmp(c, "ftp.", 4)) { | |
239 if (c[4] != '.') { | |
240 t = c; | |
241 while (1) { | |
242 if (badchar(*t)) { | |
243 if (t - c == 4) { | |
244 break; | |
245 } | |
246 if (*(t - 1) == '.') | |
247 t--; | |
248 strncpy(url_buf, c, t - c); | |
249 url_buf[t - c] = 0; | |
250 g_string_append_printf(ret, | |
251 "<A HREF=\"ftp://%s\">%s</A>", url_buf, | |
252 url_buf); | |
253 c = t; | |
254 break; | |
255 } | |
256 if (!t) | |
257 break; | |
258 t++; | |
259 } | |
260 } | |
261 } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { | |
262 t = c; | |
263 while (1) { | |
264 if (badchar(*t)) { | |
265 if (*(t - 1) == '.') | |
266 t--; | |
267 strncpy(url_buf, c, t - c); | |
268 url_buf[t - c] = 0; | |
269 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
270 url_buf, url_buf); | |
271 c = t; | |
272 break; | |
273 } | |
274 if (!t) | |
275 break; | |
276 t++; | |
277 | |
278 } | |
279 } else if (c != text && (*c == '@')) { | |
280 char *tmp; | |
281 int flag; | |
282 int len = 0; | |
283 const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; | |
284 url_buf[0] = 0; | |
285 | |
286 if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) | |
287 flag = 0; | |
288 else | |
289 flag = 1; | |
290 | |
291 t = c; | |
292 while (flag) { | |
293 if (badchar(*t)) { | |
294 ret = g_string_truncate(ret, ret->len - (len - 1)); | |
295 break; | |
296 } else { | |
297 len++; | |
298 tmp = g_malloc(len + 1); | |
299 tmp[len] = 0; | |
300 tmp[0] = *t; | |
301 strncpy(tmp + 1, url_buf, len - 1); | |
302 strcpy(url_buf, tmp); | |
303 url_buf[len] = 0; | |
304 g_free(tmp); | |
305 t--; | |
306 if (t < text) { | |
307 ret = g_string_assign(ret, ""); | |
308 break; | |
309 } | |
310 } | |
311 } | |
312 | |
313 t = c + 1; | |
314 | |
315 while (flag) { | |
316 if (badchar(*t)) { | |
317 char *d; | |
318 | |
319 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) | |
320 *d = '\0'; | |
321 | |
322 g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", | |
323 url_buf, url_buf); | |
324 c = t; | |
325 | |
326 break; | |
327 } else { | |
328 strncat(url_buf, t, 1); | |
329 len++; | |
330 url_buf[len] = 0; | |
331 } | |
332 | |
333 t++; | |
334 } | |
335 } | |
336 | |
337 if (*c == 0) | |
338 break; | |
339 | |
340 ret = g_string_append_c(ret, *c); | |
341 c++; | |
342 | |
343 } | |
344 tmp = ret->str; | |
345 g_string_free(ret, FALSE); | |
346 return tmp; | |
347 } | 139 } |
348 | 140 |
349 | 141 |
350 static const char alphabet[] = | 142 static const char alphabet[] = |
351 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | 143 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
500 | 292 |
501 *raw = data; | 293 *raw = data; |
502 return len/2; | 294 return len/2; |
503 } | 295 } |
504 | 296 |
505 char *normalize(const char *s) | 297 char *gaim_normalize(const char *s) |
506 { | 298 { |
507 static char buf[BUF_LEN]; | 299 static char buf[BUF_LEN]; |
508 char *tmp; | 300 char *tmp; |
509 int i, j; | 301 int i, j; |
510 | 302 |
534 time_t tme; | 326 time_t tme; |
535 time(&tme); | 327 time(&tme); |
536 strftime(date, sizeof(date), "%H:%M:%S", localtime(&tme)); | 328 strftime(date, sizeof(date), "%H:%M:%S", localtime(&tme)); |
537 return date; | 329 return date; |
538 } | 330 } |
539 | |
540 void clean_pid(void) | |
541 { | |
542 #ifndef _WIN32 | |
543 int status; | |
544 pid_t pid; | |
545 | |
546 do { | |
547 pid = waitpid(-1, &status, WNOHANG); | |
548 } while (pid != 0 && pid != (pid_t)-1); | |
549 if(pid == (pid_t)-1 && errno != ECHILD) { | |
550 char errmsg[BUFSIZ]; | |
551 snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); | |
552 perror(errmsg); | |
553 } | |
554 #endif | |
555 } | |
556 | |
557 | 331 |
558 /* Look for %n, %d, or %t in msg, and replace with the sender's name, date, | 332 /* Look for %n, %d, or %t in msg, and replace with the sender's name, date, |
559 or time */ | 333 or time */ |
560 char *away_subs(const char *msg, const char *name) | 334 char *away_subs(const char *msg, const char *name) |
561 { | 335 { |
1002 } | 776 } |
1003 | 777 |
1004 return ret; | 778 return ret; |
1005 } | 779 } |
1006 | 780 |
1007 char *gaim_get_size_string(size_t size) | 781 char * |
782 gaim_str_size_to_units(size_t size) | |
1008 { | 783 { |
1009 static const char *size_str[4] = { "bytes", "KB", "MB", "GB" }; | 784 static const char *size_str[4] = { "bytes", "KB", "MB", "GB" }; |
1010 float size_mag; | 785 float size_mag; |
1011 int size_index = 0; | 786 int size_index = 0; |
1012 | 787 |
1609 str2[j] = '\0'; | 1384 str2[j] = '\0'; |
1610 | 1385 |
1611 return str2; | 1386 return str2; |
1612 } | 1387 } |
1613 | 1388 |
1389 char * | |
1390 gaim_markup_linkify(const char *text) | |
1391 { | |
1392 const char *c, *t, *q = NULL; | |
1393 char *tmp; | |
1394 char url_buf[BUF_LEN * 4]; | |
1395 GString *ret = g_string_new(""); | |
1396 /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ | |
1397 | |
1398 c = text; | |
1399 while (*c) { | |
1400 if(!q && (*c == '\"' || *c == '\'')) { | |
1401 q = c; | |
1402 } else if(q) { | |
1403 if(*c == *q) | |
1404 q = NULL; | |
1405 } else if (!g_ascii_strncasecmp(c, "<A", 2)) { | |
1406 while (1) { | |
1407 if (!g_ascii_strncasecmp(c, "/A>", 3)) { | |
1408 break; | |
1409 } | |
1410 ret = g_string_append_c(ret, *c); | |
1411 c++; | |
1412 if (!(*c)) | |
1413 break; | |
1414 } | |
1415 } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || | |
1416 (!g_ascii_strncasecmp(c, "https://", 8)))) { | |
1417 t = c; | |
1418 while (1) { | |
1419 if (badchar(*t)) { | |
1420 | |
1421 if (*(t) == ',' && (*(t + 1) != ' ')) { | |
1422 t++; | |
1423 continue; | |
1424 } | |
1425 | |
1426 if (*(t - 1) == '.') | |
1427 t--; | |
1428 strncpy(url_buf, c, t - c); | |
1429 url_buf[t - c] = 0; | |
1430 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
1431 url_buf, url_buf); | |
1432 c = t; | |
1433 break; | |
1434 } | |
1435 if (!t) | |
1436 break; | |
1437 t++; | |
1438 | |
1439 } | |
1440 } else if (!g_ascii_strncasecmp(c, "www.", 4)) { | |
1441 if (c[4] != '.') { | |
1442 t = c; | |
1443 while (1) { | |
1444 if (badchar(*t)) { | |
1445 if (t - c == 4) { | |
1446 break; | |
1447 } | |
1448 | |
1449 if (*(t) == ',' && (*(t + 1) != ' ')) { | |
1450 t++; | |
1451 continue; | |
1452 } | |
1453 | |
1454 if (*(t - 1) == '.') | |
1455 t--; | |
1456 strncpy(url_buf, c, t - c); | |
1457 url_buf[t - c] = 0; | |
1458 g_string_append_printf(ret, | |
1459 "<A HREF=\"http://%s\">%s</A>", url_buf, | |
1460 url_buf); | |
1461 c = t; | |
1462 break; | |
1463 } | |
1464 if (!t) | |
1465 break; | |
1466 t++; | |
1467 } | |
1468 } | |
1469 } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { | |
1470 t = c; | |
1471 while (1) { | |
1472 if (badchar(*t)) { | |
1473 if (*(t - 1) == '.') | |
1474 t--; | |
1475 strncpy(url_buf, c, t - c); | |
1476 url_buf[t - c] = 0; | |
1477 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
1478 url_buf, url_buf); | |
1479 c = t; | |
1480 break; | |
1481 } | |
1482 if (!t) | |
1483 break; | |
1484 t++; | |
1485 | |
1486 } | |
1487 } else if (!g_ascii_strncasecmp(c, "ftp.", 4)) { | |
1488 if (c[4] != '.') { | |
1489 t = c; | |
1490 while (1) { | |
1491 if (badchar(*t)) { | |
1492 if (t - c == 4) { | |
1493 break; | |
1494 } | |
1495 if (*(t - 1) == '.') | |
1496 t--; | |
1497 strncpy(url_buf, c, t - c); | |
1498 url_buf[t - c] = 0; | |
1499 g_string_append_printf(ret, | |
1500 "<A HREF=\"ftp://%s\">%s</A>", url_buf, | |
1501 url_buf); | |
1502 c = t; | |
1503 break; | |
1504 } | |
1505 if (!t) | |
1506 break; | |
1507 t++; | |
1508 } | |
1509 } | |
1510 } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { | |
1511 t = c; | |
1512 while (1) { | |
1513 if (badchar(*t)) { | |
1514 if (*(t - 1) == '.') | |
1515 t--; | |
1516 strncpy(url_buf, c, t - c); | |
1517 url_buf[t - c] = 0; | |
1518 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
1519 url_buf, url_buf); | |
1520 c = t; | |
1521 break; | |
1522 } | |
1523 if (!t) | |
1524 break; | |
1525 t++; | |
1526 | |
1527 } | |
1528 } else if (c != text && (*c == '@')) { | |
1529 char *tmp; | |
1530 int flag; | |
1531 int len = 0; | |
1532 const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; | |
1533 url_buf[0] = 0; | |
1534 | |
1535 if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) | |
1536 flag = 0; | |
1537 else | |
1538 flag = 1; | |
1539 | |
1540 t = c; | |
1541 while (flag) { | |
1542 if (badchar(*t)) { | |
1543 ret = g_string_truncate(ret, ret->len - (len - 1)); | |
1544 break; | |
1545 } else { | |
1546 len++; | |
1547 tmp = g_malloc(len + 1); | |
1548 tmp[len] = 0; | |
1549 tmp[0] = *t; | |
1550 strncpy(tmp + 1, url_buf, len - 1); | |
1551 strcpy(url_buf, tmp); | |
1552 url_buf[len] = 0; | |
1553 g_free(tmp); | |
1554 t--; | |
1555 if (t < text) { | |
1556 ret = g_string_assign(ret, ""); | |
1557 break; | |
1558 } | |
1559 } | |
1560 } | |
1561 | |
1562 t = c + 1; | |
1563 | |
1564 while (flag) { | |
1565 if (badchar(*t)) { | |
1566 char *d; | |
1567 | |
1568 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) | |
1569 *d = '\0'; | |
1570 | |
1571 g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", | |
1572 url_buf, url_buf); | |
1573 c = t; | |
1574 | |
1575 break; | |
1576 } else { | |
1577 strncat(url_buf, t, 1); | |
1578 len++; | |
1579 url_buf[len] = 0; | |
1580 } | |
1581 | |
1582 t++; | |
1583 } | |
1584 } | |
1585 | |
1586 if (*c == 0) | |
1587 break; | |
1588 | |
1589 ret = g_string_append_c(ret, *c); | |
1590 c++; | |
1591 | |
1592 } | |
1593 tmp = ret->str; | |
1594 g_string_free(ret, FALSE); | |
1595 return tmp; | |
1596 } | |
1597 | |
1614 gboolean | 1598 gboolean |
1615 gaim_url_parse(const char *url, char **ret_host, int *ret_port, | 1599 gaim_url_parse(const char *url, char **ret_host, int *ret_port, |
1616 char **ret_path) | 1600 char **ret_path) |
1617 { | 1601 { |
1618 char scan_info[255]; | 1602 char scan_info[255]; |