From 1f699f792313fe06ccb667c8c1811fcadf549064 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 23 Jun 2005 16:58:58 +0000 Subject: [PATCH] * src/graphics.c: cleaned caca_get_html() --- src/graphics.c | 198 ++++++++++++++++++++----------------------------- 1 file changed, 82 insertions(+), 116 deletions(-) diff --git a/src/graphics.c b/src/graphics.c index 147aa72..a3f663f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1801,94 +1801,61 @@ static int const html_palette[] = */ char* caca_get_html(void) { - char *buffer; - unsigned int x,y; - int f,b; - - /* 13000 -> css palette - 40 -> max size used for a pixel (plus 10, never know)*/ - - buffer = malloc((13000 + ((_caca_width*_caca_height)*40))*sizeof(char)); - - /* HTML header */ - sprintf(buffer, "\n\nGenerated by libcaca "VERSION"\n"); - /* CSS */ - sprintf(buffer, "%s\n\n\n",buffer); + cur += sprintf(cur, "\n\n\n"); - /* Table */ - sprintf(buffer, "%s\n", buffer,caca_get_height()); + cur += sprintf(cur, "
\n", + "font-family: monospace, fixed; font-weight: bold;"); - for(y=0;y<_caca_height;y++) + for(y = 0; y < _caca_height; y++) { - sprintf(buffer, - "%s
",buffer); - - for(x=0;x<_caca_width;x++) + for(x = 0; x < _caca_width; x += len) { - int len; - int i; - uint8_t *attr = cache_attr + x + y * _caca_width; - - /* Use colspan option to factorize cells with same attributes - (see below) */ - len=1; - while(x + len < _caca_width - && (attr[len]>>4) == (attr[0]>>4) && - (attr[len]&0x0f) == (attr[0]&0x0f)) - len++; - - if(len==1) - { - sprintf(buffer, - "%s",buffer, - cache_attr[x+y*caca_get_width()]>>4, - cache_attr[x+y*caca_get_width()]&0x0f, - cache_char[x+y*caca_get_width()]); - } - else + uint8_t *cur_attr = cache_attr + y * _caca_width; + uint8_t *cur_char = cache_char + y * _caca_width; + + cur += sprintf(cur, "", cur_attr[x]); + + for(len = 0; + x + len < _caca_width && cur_attr[x + len] == cur_attr[x]; + len++) { - sprintf(buffer, - "%s\n",buffer); + /* New line */ + cur += sprintf(cur, "
\n"); } - /* Footer */ - sprintf(buffer, "%s
%c",buffer, - cache_attr[x+y*caca_get_width()]>> 4, - cache_attr[x+y*caca_get_width()]&0x0f, - len+1); - - for(i=0;i",buffer); - + if(cur_char[x + len] == ' ') + cur += sprintf(cur, " "); + else + cur += sprintf(cur, "%c", cur_char[x + len]); } - + cur += sprintf(cur, ""); } - sprintf(buffer, "%s
\n\n\n",buffer); + cur += sprintf(cur, "\n"); - /* Crop to really used size */ - buffer = realloc(buffer, (strlen(buffer)+1) * sizeof(char)); + /* Crop to really used size */ + buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char)); - return buffer; + return buffer; } /** \brief Generate HTML3 representation of current image. @@ -1900,52 +1867,51 @@ char* caca_get_html(void) */ char* caca_get_html3(void) { - char *buffer, *cur; - unsigned int x, y, len; + char *buffer, *cur; + unsigned int x, y, len; - /* 13000 -> css palette - * 40 -> max size used for a pixel (plus 10, never know)*/ - /* FIXME: Check this value */ - buffer = malloc((13000 + ((_caca_width*_caca_height) * 40)) * sizeof(char)); - cur = buffer; + /* 13000 -> css palette + * 40 -> max size used for a pixel (plus 10, never know)*/ + /* FIXME: Check this value */ + buffer = malloc((13000 + ((_caca_width*_caca_height) * 40)) * sizeof(char)); + cur = buffer; - /* Table */ - cur += sprintf(cur, "
\n", - "font-family: monospace, fixed; font-weight: bold;"); + cur += sprintf(cur, "
\n", + "font-family: monospace, fixed; font-weight: bold;"); - for(y = 0; y < _caca_height; y++) - { - for(x = 0; x < _caca_width; x += len) - { - uint8_t *cur_attr = cache_attr + y * _caca_width; - uint8_t *cur_char = cache_char + y * _caca_width; - - cur += sprintf(cur, - "", - html_palette[cur_attr[x] & 0x0f], - html_palette[cur_attr[x] >> 4]); - - for(len = 0; - x + len < _caca_width && cur_attr[x + len] == cur_attr[x]; - len++) - { - if(cur_char[x + len] == ' ') - cur += sprintf(cur, " "); - else - cur += sprintf(cur, "%c", cur_char[x + len]); - } - cur += sprintf(cur, ""); - } - cur += sprintf(cur, "
\n"); - } - - /* Footer */ - cur += sprintf(cur, "
\n"); + for(y = 0; y < _caca_height; y++) + { + for(x = 0; x < _caca_width; x += len) + { + uint8_t *cur_attr = cache_attr + y * _caca_width; + uint8_t *cur_char = cache_char + y * _caca_width; - /* Crop to really used size */ - buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char)); + cur += sprintf(cur, + "", + html_palette[cur_attr[x] & 0x0f], + html_palette[cur_attr[x] >> 4]); - return buffer; + for(len = 0; + x + len < _caca_width && cur_attr[x + len] == cur_attr[x]; + len++) + { + if(cur_char[x + len] == ' ') + cur += sprintf(cur, " "); + else + cur += sprintf(cur, "%c", cur_char[x + len]); + } + cur += sprintf(cur, ""); + } + /* New line */ + cur += sprintf(cur, "
\n"); + } + + cur += sprintf(cur, "
\n"); + + /* Crop to really used size */ + buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char)); + + return buffer; } static int const irc_palette[] =