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) { |