| @@ -215,32 +215,36 @@ static void export_utf8(cucul_canvas_t *cv, cucul_buffer_t *ex) | |||||
| uint32_t *lineattr = cv->attr + y * cv->width; | uint32_t *lineattr = cv->attr + y * cv->width; | ||||
| uint32_t *linechar = cv->chars + y * cv->width; | uint32_t *linechar = cv->chars + y * cv->width; | ||||
| uint8_t prevfg = -1; | |||||
| uint8_t prevbg = -1; | |||||
| uint8_t prevfg = 0x10; | |||||
| uint8_t prevbg = 0x10; | |||||
| for(x = 0; x < cv->width; x++) | for(x = 0; x < cv->width; x++) | ||||
| { | { | ||||
| uint8_t fg = palette[_cucul_argb32_to_ansi4fg(lineattr[x])]; | |||||
| uint8_t bg = palette[_cucul_argb32_to_ansi4bg(lineattr[x])]; | |||||
| uint32_t attr = lineattr[x]; | |||||
| uint32_t ch = linechar[x]; | uint32_t ch = linechar[x]; | ||||
| uint8_t fg, bg; | |||||
| fg = ((attr & 0xffff) == CUCUL_COLOR_DEFAULT) ? | |||||
| 0x10 : palette[_cucul_argb32_to_ansi4fg(attr)]; | |||||
| bg = ((attr >> 16) == CUCUL_COLOR_TRANSPARENT) ? | |||||
| 0x10 : palette[_cucul_argb32_to_ansi4bg(attr)]; | |||||
| /* TODO: the [0 could be omitted in some cases */ | |||||
| if(fg != prevfg || bg != prevbg) | if(fg != prevfg || bg != prevbg) | ||||
| { | { | ||||
| cur += sprintf(cur, "\033[0;"); | |||||
| cur += sprintf(cur, "\033[0"); | |||||
| if(fg < 8) | if(fg < 8) | ||||
| if(bg < 8) | |||||
| cur += sprintf(cur, "3%d;4%dm", fg, bg); | |||||
| else | |||||
| cur += sprintf(cur, "5;3%d;4%d;10%dm", | |||||
| fg, bg - 8, bg - 8); | |||||
| else | |||||
| if(bg < 8) | |||||
| cur += sprintf(cur, "1;3%d;4%d;9%dm", | |||||
| fg - 8, bg, fg - 8); | |||||
| else | |||||
| cur += sprintf(cur, "5;1;3%d;4%d;9%d;10%dm", | |||||
| fg - 8, bg - 8, fg - 8, bg - 8); | |||||
| cur += sprintf(cur, ";3%d", fg); | |||||
| else if(fg < 16) | |||||
| cur += sprintf(cur, ";1;3%d;9%d", fg - 8, fg - 8); | |||||
| if(bg < 8) | |||||
| cur += sprintf(cur, ";4%d", bg); | |||||
| else if(bg < 16) | |||||
| cur += sprintf(cur, ";5;4%d;10%d", bg - 8, bg - 8); | |||||
| cur += sprintf(cur, "m"); | |||||
| } | } | ||||
| cur += cucul_utf32_to_utf8(cur, ch); | cur += cucul_utf32_to_utf8(cur, ch); | ||||
| @@ -249,7 +253,10 @@ static void export_utf8(cucul_canvas_t *cv, cucul_buffer_t *ex) | |||||
| prevbg = bg; | prevbg = bg; | ||||
| } | } | ||||
| cur += sprintf(cur, "\033[0m\r\n"); | |||||
| if(prevfg != 0x10 || prevbg != 0x10) | |||||
| cur += sprintf(cur, "\033[0m"); | |||||
| cur += sprintf(cur, "\r\n"); | |||||
| } | } | ||||
| /* Crop to really used size */ | /* Crop to really used size */ | ||||