Mercurial > pidgin
comparison src/html.c @ 5107:b99910bfedd2
[gaim-migrate @ 5470]
this mostly completes html_to_xhtml() except for dealing with <hr> tags,
which I'm really not too worried about right now
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Fri, 11 Apr 2003 07:07:05 +0000 |
| parents | a20a644e0da4 |
| children | 496ea7c1b77b |
comparison
equal
deleted
inserted
replaced
| 5106:7b218dde1d73 | 5107:b99910bfedd2 |
|---|---|
| 411 } | 411 } |
| 412 } else { /* opening tag */ | 412 } else { /* opening tag */ |
| 413 ALLOW_TAG("a"); | 413 ALLOW_TAG("a"); |
| 414 ALLOW_TAG_ALT("b", "strong"); | 414 ALLOW_TAG_ALT("b", "strong"); |
| 415 ALLOW_TAG("blockquote"); | 415 ALLOW_TAG("blockquote"); |
| 416 ALLOW_TAG("body"); | |
| 417 ALLOW_TAG_ALT("bold", "strong"); | 416 ALLOW_TAG_ALT("bold", "strong"); |
| 418 ALLOW_TAG("br"); | 417 ALLOW_TAG("br"); |
| 419 ALLOW_TAG("cite"); | 418 ALLOW_TAG("cite"); |
| 420 ALLOW_TAG("div"); | 419 ALLOW_TAG("div"); |
| 421 ALLOW_TAG("em"); | 420 ALLOW_TAG("em"); |
| 422 ALLOW_TAG("font"); /* FIXME: not valid, need to translate */ | |
| 423 ALLOW_TAG("h1"); | 421 ALLOW_TAG("h1"); |
| 424 ALLOW_TAG("h2"); | 422 ALLOW_TAG("h2"); |
| 425 ALLOW_TAG("h3"); | 423 ALLOW_TAG("h3"); |
| 426 ALLOW_TAG("h4"); | 424 ALLOW_TAG("h4"); |
| 427 ALLOW_TAG("h5"); | 425 ALLOW_TAG("h5"); |
| 473 tags = g_list_prepend(tags, pt); | 471 tags = g_list_prepend(tags, pt); |
| 474 c = strchr(c, '>') + 1; | 472 c = strchr(c, '>') + 1; |
| 475 xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); | 473 xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); |
| 476 continue; | 474 continue; |
| 477 } | 475 } |
| 476 if(!g_ascii_strncasecmp(c, "<font", 5) && (*(c+5) == '>' || *(c+5) == ' ')) { | |
| 477 const char *p = c; | |
| 478 GString *style = g_string_new(""); | |
| 479 struct gaim_parse_tag *pt; | |
| 480 while(*p && *p != '>') { | |
| 481 if(!g_ascii_strncasecmp(p, "color=", strlen("color="))) { | |
| 482 const char *q = p + strlen("color="); | |
| 483 GString *color = g_string_new(""); | |
| 484 if(*q == '\'' || *q == '\"') | |
| 485 q++; | |
| 486 while(*q && *q != '\"' && *q != '\'' && *q != ' ') { | |
| 487 color = g_string_append_c(color, *q); | |
| 488 q++; | |
| 489 } | |
| 490 g_string_append_printf(style, "color: %s; ", color->str); | |
| 491 g_string_free(color, TRUE); | |
| 492 p = q; | |
| 493 } else if(!g_ascii_strncasecmp(p, "face=", strlen("face="))) { | |
| 494 const char *q = p + strlen("face="); | |
| 495 gboolean space_allowed = FALSE; | |
| 496 GString *face = g_string_new(""); | |
| 497 if(*q == '\'' || *q == '\"') { | |
| 498 space_allowed = TRUE; | |
| 499 q++; | |
| 500 } | |
| 501 while(*q && *q != '\"' && *q != '\'' && (space_allowed || *q != ' ')) { | |
| 502 face = g_string_append_c(face, *q); | |
| 503 q++; | |
| 504 } | |
| 505 g_string_append_printf(style, "font-family: %s; ", face->str); | |
| 506 g_string_free(face, TRUE); | |
| 507 p = q; | |
| 508 } else if(!g_ascii_strncasecmp(p, "size=", strlen("size="))) { | |
| 509 const char *q = p + strlen("size="); | |
| 510 int sz; | |
| 511 const char *size = "medium"; | |
| 512 if(*q == '\'' || *q == '\"') | |
| 513 q++; | |
| 514 sz = atoi(q); | |
| 515 if(sz < 3) | |
| 516 size = "smaller"; | |
| 517 else if(sz > 3) | |
| 518 size = "larger"; | |
| 519 g_string_append_printf(style, "font-size: %s; ", size); | |
| 520 p = q; | |
| 521 } | |
| 522 p++; | |
| 523 } | |
| 524 c = strchr(c, '>') + 1; | |
| 525 pt = g_new0(struct gaim_parse_tag, 1); | |
| 526 pt->src_tag = "font"; | |
| 527 pt->dest_tag = "span"; | |
| 528 tags = g_list_prepend(tags, pt); | |
| 529 xhtml = g_string_append(xhtml, "<span"); | |
| 530 if(style->len) | |
| 531 g_string_append_printf(xhtml, " style='%s'", style->str); | |
| 532 xhtml = g_string_append_c(xhtml, '>'); | |
| 533 g_string_free(style, TRUE); | |
| 534 continue; | |
| 535 } | |
| 536 if(!g_ascii_strncasecmp(c, "<body ", 6)) { | |
| 537 const char *p = c; | |
| 538 gboolean did_something = FALSE; | |
| 539 while(*p && *p != '>') { | |
| 540 if(!g_ascii_strncasecmp(p, "bgcolor=", strlen("bgcolor="))) { | |
| 541 const char *q = p + strlen("bgcolor="); | |
| 542 struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); | |
| 543 GString *color = g_string_new(""); | |
| 544 if(*q == '\'' || *q == '\"') | |
| 545 q++; | |
| 546 while(*q && *q != '\"' && *q != '\'' && *q != ' ') { | |
| 547 color = g_string_append_c(color, *q); | |
| 548 q++; | |
| 549 } | |
| 550 g_string_append_printf(xhtml, "<span style='background: %s;'>", color->str); | |
| 551 g_string_free(color, TRUE); | |
| 552 c = strchr(c, '>') + 1; | |
| 553 pt->src_tag = "body"; | |
| 554 pt->dest_tag = "span"; | |
| 555 tags = g_list_prepend(tags, pt); | |
| 556 did_something = TRUE; | |
| 557 break; | |
| 558 } | |
| 559 p++; | |
| 560 } | |
| 561 if(did_something) continue; | |
| 562 } | |
| 563 /* this has to come after the special case for bgcolor */ | |
| 564 ALLOW_TAG("body"); | |
| 478 if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { | 565 if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { |
| 479 char *p = strstr(c + strlen("<!--"), "-->"); | 566 char *p = strstr(c + strlen("<!--"), "-->"); |
| 480 if(p) { | 567 if(p) { |
| 481 xhtml = g_string_append(xhtml, "<!--"); | 568 xhtml = g_string_append(xhtml, "<!--"); |
| 482 c += strlen("<!--"); | 569 c += strlen("<!--"); |
