Ignore:
Timestamp:
May 5, 2006, 7:08:51 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Exporter now generates valid ANSI, with CP437 characters.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/export.c

    r925 r926  
    300300    unsigned int x, y;
    301301
    302     /* 23 bytes assumed for max length per pixel ('\e[5;1;3x;4y;9x;10ym' plus
    303      * 4 max bytes for a UTF-8 character).
     302    uint8_t prevfg = -1;
     303    uint8_t prevbg = -1;
     304
     305    /* 16 bytes assumed for max length per pixel ('\e[5;1;3x;4ym' plus
     306     * 1 byte for a CP437 character).
    304307     * Add height*9 to that (zeroes color at the end and jump to next line) */
    305     ex->size = (cv->height * 9) + (cv->width * cv->height * 23);
     308    ex->size = (cv->height * 9) + (cv->width * cv->height * 16);
    306309    ex->data = malloc(ex->size);
    307310
     
    312315        uint32_t *lineattr = cv->attr + y * cv->width;
    313316        uint32_t *linechar = cv->chars + y * cv->width;
    314 
    315         uint8_t prevfg = -1;
    316         uint8_t prevbg = -1;
    317317
    318318        for(x = 0; x < cv->width; x++)
     
    330330                        cur += sprintf(cur, "3%d;4%dm", fg, bg);
    331331                    else
    332                         cur += sprintf(cur, "5;3%d;4%d;10%dm",
    333                                             fg, bg - 8, bg - 8);
     332                        cur += sprintf(cur, "5;3%d;4%dm", fg, bg - 8);
    334333                else
    335334                    if(bg < 8)
    336                         cur += sprintf(cur, "1;3%d;4%d;9%dm",
    337                                             fg - 8, bg, fg - 8);
     335                        cur += sprintf(cur, "1;3%d;4%dm", fg - 8, bg);
    338336                    else
    339                         cur += sprintf(cur, "5;1;3%d;4%d;9%d;10%dm",
    340                                             fg - 8, bg - 8, fg - 8, bg - 8);
    341             }
    342 
    343             *cur++ = (ch >= 0x20 && ch < 0x7f) ? ch : '?';
     337                        cur += sprintf(cur, "5;1;3%d;4%dm", fg - 8, bg - 8);
     338            }
     339
     340            *cur++ = _cucul_utf32_to_cp437(ch);
    344341
    345342            prevfg = fg;
     
    347344        }
    348345
    349         cur += sprintf(cur, "\033[0m\r\n");
     346        if(cv->width != 80)
     347        {
     348            cur += sprintf(cur, "\033[0m\r\n");
     349            prevfg = -1;
     350            prevbg = -1;
     351        }
    350352    }
    351353
Note: See TracChangeset for help on using the changeset viewer.