Mercurial > pidgin
comparison libpurple/plugins/log_reader.c @ 17467:0e22098e1421
Rework the Trillian log reader code to make it easier to understand.
References #1344
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Mon, 04 Jun 2007 04:33:28 +0000 |
parents | f94251004e7d |
children | beeef78409b2 |
comparison
equal
deleted
inserted
replaced
17466:1aa324c47042 | 17467:0e22098e1421 |
---|---|
1480 * <a href=" | 1480 * <a href=" |
1481 * Then, replace the next ")" with: | 1481 * Then, replace the next ")" with: |
1482 * "> | 1482 * "> |
1483 * Then, replace the next " " (or add this if the end-of-line is reached) with: | 1483 * Then, replace the next " " (or add this if the end-of-line is reached) with: |
1484 * </a> | 1484 * </a> |
1485 * | |
1486 * As implemented, this isn't perfect, but it should cover common cases. | |
1485 */ | 1487 */ |
1486 link_temp_line = NULL; | 1488 link_temp_line = NULL; |
1487 while ((link = strstr(line, "(Link: "))) { | 1489 while ((link = strstr(line, "(Link: "))) |
1488 GString *temp; | 1490 { |
1489 | 1491 char *tmp = link; |
1490 *link = '\0'; | 1492 |
1491 temp = g_string_new(line); | 1493 link += 7; |
1492 g_string_append(temp, "<a href=\""); | 1494 if (*link) |
1493 | 1495 { |
1494 link += (sizeof("(Link: ") - 1); | 1496 char *end_paren; |
1495 if (*link) { | 1497 char *space; |
1496 while (*link && *link != ')') { | 1498 GString *temp; |
1497 g_string_append_c(temp, *link); | 1499 |
1498 link++; | 1500 if (!(end_paren = strstr(link, ")"))) |
1501 { | |
1502 /* Something is not as we expect. Bail out. */ | |
1503 break; | |
1499 } | 1504 } |
1500 if (*link) | 1505 |
1501 link++; | 1506 *tmp = '\0'; |
1502 | 1507 temp = g_string_new(line); |
1508 | |
1509 /* Start an <a> tag. */ | |
1510 g_string_append(temp, "<a href=\""); | |
1511 | |
1512 /* Append up to the ) */ | |
1513 g_string_append_len(temp, link, end_paren - link); | |
1514 | |
1515 /* Finish the <a> tag. */ | |
1503 g_string_append(temp, "\">"); | 1516 g_string_append(temp, "\">"); |
1504 while (*link && *link != ' ') { | 1517 |
1505 g_string_append_c(temp, *link); | 1518 /* The \r is a bit of a hack to keep there from being a \r in |
1506 link++; | 1519 * the link text, which may not matter. */ |
1520 if ((space = strstr(end_paren, " ")) || (space = strstr(end_paren, "\r"))) | |
1521 { | |
1522 g_string_append_len(temp, end_paren + 1, space - end_paren - 1); | |
1523 | |
1524 /* Close the <a> tag. */ | |
1525 g_string_append(temp, "</a>"); | |
1526 | |
1527 space++; | |
1528 if (*space) | |
1529 { | |
1530 g_string_append_c(temp, ' '); | |
1531 /* Keep the rest of the line. */ | |
1532 g_string_append(temp, space); | |
1533 } | |
1507 } | 1534 } |
1508 g_string_append(temp, "</a>"); | 1535 else |
1509 | 1536 { |
1510 g_string_append(temp, link); | 1537 /* There is no space before the end of the line. */ |
1511 | 1538 g_string_append(temp, end_paren + 1); |
1512 /* Free the last round's line. */ | 1539 /* Close the <a> tag. */ |
1513 if (link_temp_line) | 1540 g_string_append(temp, "</a>"); |
1514 g_free(line); | 1541 } |
1515 | 1542 |
1516 line = temp->str; | 1543 g_free(link_temp_line); |
1517 g_string_free(temp, FALSE); | 1544 line = g_string_free(temp, FALSE); |
1518 | 1545 |
1519 /* Save this memory location so we can free it later. */ | 1546 /* Save this memory location so we can free it later. */ |
1520 link_temp_line = line; | 1547 link_temp_line = line; |
1521 } | 1548 } |
1522 } | 1549 } |
1652 if (footer) | 1679 if (footer) |
1653 g_string_append(formatted, footer); | 1680 g_string_append(formatted, footer); |
1654 | 1681 |
1655 g_string_append_c(formatted, '\n'); | 1682 g_string_append_c(formatted, '\n'); |
1656 | 1683 |
1657 if (link_temp_line) | 1684 g_free(link_temp_line); |
1658 g_free(link_temp_line); | |
1659 | 1685 |
1660 c++; | 1686 c++; |
1661 line = c; | 1687 line = c; |
1662 } else | 1688 } else |
1663 c++; | 1689 c++; |