Changeset 3209 for libcaca/trunk
- Timestamp:
- Nov 2, 2008, 6:38:37 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/codec/export.c
r3184 r3209 482 482 /* The HTML table markup: less than 1000 bytes 483 483 * A line: 10 chars for "<tr></tr>\n" 484 * A glyph: up to 4 4 chars for "<td bgcolor=\"#xxxxxx\"><font color=\"#xxxxxx\">"485 * up to 45 chars for "<tt><b><i><u><blink></blink></u></i></b></tt>"484 * A glyph: up to 48 chars for "<td bgcolor=\"#xxxxxx\"><tt><font color=\"#xxxxxx\">" 485 * up to 36 chars for "<b><i><u><blink></blink></u></i></b>" 486 486 * up to 9 chars for "&#xxxxxx;" (far less for pure ASCII) 487 * 1 2 chars for "</font></td>" */488 *bytes = 1000 + cv->height * (10 + maxcols * (4 4 + 45 + 9 + 12));487 * 17 chars for "</font></tt></td>" */ 488 *bytes = 1000 + cv->height * (10 + maxcols * (48 + 36 + 9 + 17)); 489 489 cur = data = malloc(*bytes); 490 490 … … 501 501 for(x = 0; x < cv->width; x += len) 502 502 { 503 int i, needfont ;503 int i, needfont = 0; 504 504 int thistab = 0; 505 505 … … 507 507 * (see below) */ 508 508 len = 1; 509 while((x + len < cv->width) && (lineattr[x + len] == lineattr[x])) 509 while((x + len < cv->width) 510 && 511 (caca_attr_to_ansi_bg(lineattr[x + len]) 512 == 513 caca_attr_to_ansi_bg(lineattr[x])) 514 && 515 ((caca_attr_to_ansi_bg(lineattr[x]) < 0x10) 516 ? 517 (_caca_attr_to_rgb24bg(lineattr[x + len]) 518 && 519 _caca_attr_to_rgb24bg(lineattr[x])) 520 : 521 1)) 510 522 len++; 511 523 … … 526 538 cur += sprintf(cur, ">"); 527 539 528 needfont = caca_attr_to_ansi_fg(lineattr[x]) < 0x10;529 530 if(needfont)531 cur += sprintf(cur, "<font color=\"#%.06lx\">", (unsigned long int)532 _caca_attr_to_rgb24fg(lineattr[x]));533 534 540 cur += sprintf(cur, "<tt>"); 535 if(lineattr[x] & CACA_BOLD)536 cur += sprintf(cur, "<b>");537 if(lineattr[x] & CACA_ITALICS)538 cur += sprintf(cur, "<i>");539 if(lineattr[x] & CACA_UNDERLINE)540 cur += sprintf(cur, "<u>");541 if(lineattr[x] & CACA_BLINK)542 cur += sprintf(cur, "<blink>");543 541 544 542 for(i = 0; i < len; i++) 545 543 { 544 if((! i) || (lineattr[x + i] != lineattr[x + i - 1])) 545 { 546 needfont = caca_attr_to_ansi_fg(lineattr[x + i]) < 0x10; 547 548 if(needfont) 549 cur += sprintf(cur, "<font color=\"#%.06lx\">", (unsigned long int) 550 _caca_attr_to_rgb24fg(lineattr[x + i])); 551 552 if(lineattr[x + i] & CACA_BOLD) 553 cur += sprintf(cur, "<b>"); 554 if(lineattr[x + i] & CACA_ITALICS) 555 cur += sprintf(cur, "<i>"); 556 if(lineattr[x + i] & CACA_UNDERLINE) 557 cur += sprintf(cur, "<u>"); 558 if(lineattr[x + i] & CACA_BLINK) 559 cur += sprintf(cur, "<blink>"); 560 } 561 546 562 if(linechar[x + i] == CACA_MAGIC_FULLWIDTH) 547 563 ; 548 564 else if(linechar[x + i] <= 0x00000020) 549 565 { 566 /* Control characters and space converted to 567 * U+00A0 NO-BREAK SPACE, a.k.a. " " in HTML, 568 * but we use the equivalent numeric character 569 * reference   so this will work in plain 570 * XHTML with no DTD too. We also expand tabs 571 * here, since they are not honored in HTML. */ 550 572 if(linechar[x + i] == 0x00000009) 551 573 { 552 574 while((x + i + taboff + 1) % 8) 553 575 { 554 cur += sprintf(cur, "& nbsp;");576 cur += sprintf(cur, " "); 555 577 taboff ++; 556 578 } 557 579 } 558 cur += sprintf(cur, "& nbsp;");580 cur += sprintf(cur, " "); 559 581 } 560 582 else if(linechar[x + i] == '&') … … 572 594 else 573 595 cur += sprintf(cur, "&#%i;", (unsigned int)linechar[x + i]); 596 597 if (((i + 1) == len) || (lineattr[x + i + 1] != lineattr[x + i])) 598 { 599 if(lineattr[x + i] & CACA_BLINK) 600 cur += sprintf(cur, "</blink>"); 601 if(lineattr[x + i] & CACA_UNDERLINE) 602 cur += sprintf(cur, "</u>"); 603 if(lineattr[x + i] & CACA_ITALICS) 604 cur += sprintf(cur, "</i>"); 605 if(lineattr[x + i] & CACA_BOLD) 606 cur += sprintf(cur, "</b>"); 607 608 if(needfont) 609 cur += sprintf(cur, "</font>"); 610 } 574 611 } 575 612 576 if(lineattr[x] & CACA_BLINK)577 cur += sprintf(cur, "</blink>");578 if(lineattr[x] & CACA_UNDERLINE)579 cur += sprintf(cur, "</u>");580 if(lineattr[x] & CACA_ITALICS)581 cur += sprintf(cur, "</i>");582 if(lineattr[x] & CACA_BOLD)583 cur += sprintf(cur, "</b>");584 613 cur += sprintf(cur, "</tt>"); 585 586 if(needfont)587 cur += sprintf(cur, "</font>");588 614 cur += sprintf(cur, "</td>"); 589 615 }
Note: See TracChangeset
for help on using the changeset viewer.