diff --git a/cucul/export.c b/cucul/export.c index 20f3e43..938f836 100644 --- a/cucul/export.c +++ b/cucul/export.c @@ -502,15 +502,21 @@ static void export_irc(cucul_canvas_t *cv, cucul_buffer_t *ex) uint32_t *lineattr = cv->attr + 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++) { - 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]; + uint8_t fg = palette[_cucul_argb32_to_ansi4fg(attr)]; + uint8_t bg = palette[_cucul_argb32_to_ansi4bg(attr)]; uint32_t ch = linechar[x]; + if((attr & 0xffff) == CUCUL_COLOR_DEFAULT) + fg = 0x10; + + if((attr >> 16) == CUCUL_COLOR_TRANSPARENT) + bg = 0x10; #if 0 if(bg == prevbg) { @@ -538,7 +544,23 @@ static void export_irc(cucul_canvas_t *cv, cucul_buffer_t *ex) #else if(bg != prevbg || fg != prevfg) { - cur += sprintf(cur, "\x03%d,%d", fg, bg); + if(bg == 0x10) + { + if(fg == 0x10) + cur += sprintf(cur, "\x0f"); + else if(prevbg == 0x10) + cur += sprintf(cur, "\x03%d", fg); + else + cur += sprintf(cur, "\x0f\x03%d", fg); + } + else + { + if(fg == 0x10) + cur += sprintf(cur, "\x0f\x03,%d", bg); + else + cur += sprintf(cur, "\x03%d,%d", fg, bg); + } + if(ch >= (uint32_t)'0' && ch <= (uint32_t)'9') cur += sprintf(cur, "\x02\x02"); }