Changeset 3237
- Timestamp:
- Nov 3, 2008, 7:16:38 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/codec/export.c
r3236 r3237 383 383 * A glyph: 47 chars for "<span style="color:#xxx;background-color:#xxx">" 384 384 * 83 chars for ";font-weight..." 385 * up to 9 chars for "&#xxxxxx;", far less for pure ASCII385 * up to 10 chars for "&#xxxxxxx;", far less for pure ASCII 386 386 * 7 chars for "</span>" */ 387 *bytes = 1000 + cv->height * (7 + cv->width * (47 + 83 + 9+ 7));387 *bytes = 1000 + cv->height * (7 + cv->width * (47 + 83 + 10 + 7)); 388 388 cur = data = malloc(*bytes); 389 389 390 390 /* HTML header */ 391 cur += sprintf(cur, "<html><head>\n"); 391 392 cur += sprintf(cur, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"); 393 cur += sprintf(cur, " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"); 394 cur += sprintf(cur, "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">"); 395 cur += sprintf(cur, "<head>\n"); 392 396 cur += sprintf(cur, "<title>Generated by libcaca %s</title>\n", 393 397 caca_get_version()); 394 398 cur += sprintf(cur, "</head><body>\n"); 395 399 396 cur += sprintf(cur, "<div cellpadding='0' cellspacing='0' style='%s'>\n",400 cur += sprintf(cur, "<div style=\"%s\">\n", 397 401 "font-family: monospace, fixed; font-weight: bold;"); 398 402 … … 405 409 { 406 410 cur += sprintf(cur, "<span style=\""); 407 if(caca_attr_to_ansi_fg(lineattr[x]) < 0x10)411 if(caca_attr_to_ansi_fg(lineattr[x]) != CACA_DEFAULT) 408 412 cur += sprintf(cur, ";color:#%.03x", 409 413 caca_attr_to_rgb12_fg(lineattr[x])); … … 427 431 if(linechar[x + len] == CACA_MAGIC_FULLWIDTH) 428 432 ; 429 else if(linechar[x + len] <= 0x00000020) 430 cur += sprintf(cur, " "); 433 else if((linechar[x + len] <= 0x00000020) 434 || 435 ((linechar[x + len] >= 0x0000007f) 436 && 437 (linechar[x + len] <= 0x000000a0))) 438 { 439 /* Control characters and space converted to 440 * U+00A0 NO-BREAK SPACE, a.k.a. " " in HTML, 441 * but we use the equivalent numeric character 442 * reference   so this will work in plain 443 * XHTML with no DTD too. */ 444 cur += sprintf(cur, " "); 445 } 446 else if(linechar[x + len] == '&') 447 cur += sprintf(cur, "&"); 448 else if(linechar[x + len] == '<') 449 cur += sprintf(cur, "<"); 450 else if(linechar[x + len] == '>') 451 cur += sprintf(cur, ">"); 452 else if(linechar[x + len] == '\"') 453 cur += sprintf(cur, """); 454 else if(linechar[x + len] == '\'') 455 cur += sprintf(cur, "'"); 431 456 else if(linechar[x + len] < 0x00000080) 432 457 cur += sprintf(cur, "%c", (uint8_t)linechar[x + len]); 458 else if((linechar[x + len] <= 0x0010fffd) 459 && 460 ((linechar[x + len] & 0x0000fffe) != 0x0000fffe) 461 && 462 ((linechar[x + len] < 0x0000d800) 463 || 464 (linechar[x + len] > 0x0000dfff))) 465 cur += sprintf(cur, "&#%i;", (unsigned int)linechar[x + len]); 433 466 else 434 cur += sprintf(cur, "&#%i;", 435 (unsigned int)linechar[x + len]); 467 /* non-character codepoints become U+FFFD 468 * REPLACEMENT CHARACTER */ 469 cur += sprintf(cur, "&#%i;", (unsigned int)0x0000fffd); 436 470 } 437 471 cur += sprintf(cur, "</span>");
Note: See TracChangeset
for help on using the changeset viewer.