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++; |
