|
Lines 1410-1417
Link Here
|
| 1410 |
gaim_markup_linkify(const char *text) |
1410 |
gaim_markup_linkify(const char *text) |
| 1411 |
{ |
1411 |
{ |
| 1412 |
const char *c, *t, *q = NULL; |
1412 |
const char *c, *t, *q = NULL; |
| 1413 |
char *tmp, *tmpurlbuf; |
1413 |
char *tmp, *tmpurlbuf, *url_buf; |
| 1414 |
char url_buf[BUF_LEN * 4]; |
|
|
| 1415 |
gunichar g; |
1414 |
gunichar g; |
| 1416 |
gboolean inside_html = FALSE; |
1415 |
gboolean inside_html = FALSE; |
| 1417 |
int inside_paren = 0; |
1416 |
int inside_paren = 0; |
|
Lines 1467-1477
Link Here
|
| 1467 |
t--; |
1466 |
t--; |
| 1468 |
} |
1467 |
} |
| 1469 |
|
1468 |
|
| 1470 |
strncpy(url_buf, c, t - c); |
1469 |
url_buf = g_strndup(c, t - c); |
| 1471 |
url_buf[t - c] = 0; |
|
|
| 1472 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1470 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1473 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
1471 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 1474 |
tmpurlbuf, url_buf); |
1472 |
tmpurlbuf, url_buf); |
|
|
1473 |
g_free(url_buf); |
| 1475 |
g_free(tmpurlbuf); |
1474 |
g_free(tmpurlbuf); |
| 1476 |
c = t; |
1475 |
c = t; |
| 1477 |
break; |
1476 |
break; |
|
Lines 1500-1511
Link Here
|
| 1500 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
1499 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
| 1501 |
t--; |
1500 |
t--; |
| 1502 |
} |
1501 |
} |
| 1503 |
strncpy(url_buf, c, t - c); |
1502 |
url_buf = g_strndup(c, t - c); |
| 1504 |
url_buf[t - c] = 0; |
|
|
| 1505 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1503 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1506 |
g_string_append_printf(ret, |
1504 |
g_string_append_printf(ret, |
| 1507 |
"<A HREF=\"http://%s\">%s</A>", tmpurlbuf, |
1505 |
"<A HREF=\"http://%s\">%s</A>", tmpurlbuf, |
| 1508 |
url_buf); |
1506 |
url_buf); |
|
|
1507 |
g_free(url_buf); |
| 1509 |
g_free(tmpurlbuf); |
1508 |
g_free(tmpurlbuf); |
| 1510 |
c = t; |
1509 |
c = t; |
| 1511 |
break; |
1510 |
break; |
|
Lines 1524-1534
Link Here
|
| 1524 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
1523 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
| 1525 |
t--; |
1524 |
t--; |
| 1526 |
} |
1525 |
} |
| 1527 |
strncpy(url_buf, c, t - c); |
1526 |
g_strndup(c, t - c); |
| 1528 |
url_buf[t - c] = 0; |
|
|
| 1529 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1527 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1530 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
1528 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 1531 |
tmpurlbuf, url_buf); |
1529 |
tmpurlbuf, url_buf); |
|
|
1530 |
g_free(url_buf); |
| 1532 |
g_free(tmpurlbuf); |
1531 |
g_free(tmpurlbuf); |
| 1533 |
c = t; |
1532 |
c = t; |
| 1534 |
break; |
1533 |
break; |
|
Lines 1551-1562
Link Here
|
| 1551 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
1550 |
if ((*(t - 1) == ')' && (inside_paren > 0))) { |
| 1552 |
t--; |
1551 |
t--; |
| 1553 |
} |
1552 |
} |
| 1554 |
strncpy(url_buf, c, t - c); |
1553 |
url_buf = g_strndup(c, t - c); |
| 1555 |
url_buf[t - c] = 0; |
|
|
| 1556 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1554 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1557 |
g_string_append_printf(ret, |
1555 |
g_string_append_printf(ret, |
| 1558 |
"<A HREF=\"ftp://%s\">%s</A>", tmpurlbuf, |
1556 |
"<A HREF=\"ftp://%s\">%s</A>", tmpurlbuf, |
| 1559 |
url_buf); |
1557 |
url_buf); |
|
|
1558 |
g_free(url_buf); |
| 1560 |
g_free(tmpurlbuf); |
1559 |
g_free(tmpurlbuf); |
| 1561 |
c = t; |
1560 |
c = t; |
| 1562 |
break; |
1561 |
break; |
|
Lines 1572-1582
Link Here
|
| 1572 |
if (badchar(*t) || badentity(t)) { |
1571 |
if (badchar(*t) || badentity(t)) { |
| 1573 |
if (*(t - 1) == '.') |
1572 |
if (*(t - 1) == '.') |
| 1574 |
t--; |
1573 |
t--; |
| 1575 |
strncpy(url_buf, c, t - c); |
1574 |
url_buf = g_strndup(c, t - c); |
| 1576 |
url_buf[t - c] = 0; |
|
|
| 1577 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1575 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1578 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
1576 |
g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 1579 |
tmpurlbuf, url_buf); |
1577 |
tmpurlbuf, url_buf); |
|
|
1578 |
g_free(url_buf); |
| 1580 |
g_free(tmpurlbuf); |
1579 |
g_free(tmpurlbuf); |
| 1581 |
c = t; |
1580 |
c = t; |
| 1582 |
break; |
1581 |
break; |
|
Lines 1590-1604
Link Here
|
| 1590 |
int flag; |
1589 |
int flag; |
| 1591 |
GString *gurl_buf; |
1590 |
GString *gurl_buf; |
| 1592 |
const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
1591 |
const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
| 1593 |
url_buf[0] = 0; |
|
|
| 1594 |
|
1592 |
|
| 1595 |
if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
1593 |
if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
| 1596 |
flag = 0; |
1594 |
flag = 0; |
| 1597 |
else |
1595 |
else { |
| 1598 |
flag = 1; |
1596 |
flag = 1; |
|
|
1597 |
gurl_buf = g_string_new(""); |
| 1598 |
} |
| 1599 |
|
1599 |
|
| 1600 |
t = c; |
1600 |
t = c; |
| 1601 |
gurl_buf = g_string_new(""); |
|
|
| 1602 |
while (flag) { |
1601 |
while (flag) { |
| 1603 |
/* iterate backwards grabbing the local part of an email address */ |
1602 |
/* iterate backwards grabbing the local part of an email address */ |
| 1604 |
g = g_utf8_get_char(t); |
1603 |
g = g_utf8_get_char(t); |
|
Lines 1626-1636
Link Here
|
| 1626 |
if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { |
1625 |
if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { |
| 1627 |
char *d; |
1626 |
char *d; |
| 1628 |
|
1627 |
|
| 1629 |
strcpy(url_buf, gurl_buf->str); |
1628 |
url_buf = g_string_free(gurl_buf, FALSE); |
| 1630 |
|
1629 |
|
| 1631 |
/* strip off trailing periods */ |
1630 |
/* strip off trailing periods */ |
| 1632 |
for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
1631 |
if (strlen(url_buf) > 0) { |
| 1633 |
*d = '\0'; |
1632 |
for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
|
|
1633 |
*d = '\0'; |
| 1634 |
} |
| 1634 |
|
1635 |
|
| 1635 |
tmpurlbuf = gaim_unescape_html(url_buf); |
1636 |
tmpurlbuf = gaim_unescape_html(url_buf); |
| 1636 |
if (gaim_email_is_valid(tmpurlbuf)) { |
1637 |
if (gaim_email_is_valid(tmpurlbuf)) { |
|
Lines 1639-1644
Link Here
|
| 1639 |
} else { |
1640 |
} else { |
| 1640 |
g_string_append(ret, url_buf); |
1641 |
g_string_append(ret, url_buf); |
| 1641 |
} |
1642 |
} |
|
|
1643 |
g_free(url_buf); |
| 1642 |
g_free(tmpurlbuf); |
1644 |
g_free(tmpurlbuf); |
| 1643 |
c = t; |
1645 |
c = t; |
| 1644 |
|
1646 |
|
|
Lines 1648-1654
Link Here
|
| 1648 |
t = g_utf8_find_next_char(t, NULL); |
1650 |
t = g_utf8_find_next_char(t, NULL); |
| 1649 |
} |
1651 |
} |
| 1650 |
} |
1652 |
} |
| 1651 |
g_string_free(gurl_buf, TRUE); |
|
|
| 1652 |
} |
1653 |
} |
| 1653 |
|
1654 |
|
| 1654 |
if(*c == ')' && !inside_html) { |
1655 |
if(*c == ')' && !inside_html) { |