2021-01-18 22:48:54 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Merge pull request #11 from rdebath/patch-attribute-order Update attribute rendering process
diff --git a/main.c b/main.c index 8105f27..934f8dd 100644 --- a/main.c +++ b/main.c @@ -45,20 +45,21 @@ get_pair(Term *term, int row, int col) inverse = term->row == row && term->col == col ? !inverse : inverse; cell = term->addr[row][col]; inverse = cell.attr & A_INVERSE ? !inverse : inverse; + fore = cell.pair >> 4; + back = cell.pair & 0xF; + if (cell.attr & (A_ITALIC | A_CROSSED)) + fore = 0x2; + else if (cell.attr & A_UNDERLINE) + fore = 0x6; + else if (cell.attr & A_DIM) + fore = 0x8; if (inverse) { - fore = cell.pair & 0xF; - back = cell.pair >> 4; - } else { - fore = cell.pair >> 4; - back = cell.pair & 0xF; + uint8_t t; + t = fore; fore = back; back = t; } - if (cell.attr & (A_DIM | A_UNDERLINE)) - fore = 0x6; - else if (cell.attr & (A_ITALIC | A_CROSSED)) - fore = 0x2; if (cell.attr & A_BOLD) fore |= 0x8; - if (cell.attr & A_BRIGHTBG) + if (cell.attr & A_BLINK) back |= 0x8; if ((cell.attr & A_INVISIBLE) != 0) fore = back; return (fore << 4) | (back & 0xF); diff --git a/term.c b/term.c index 156ebab..9268278 100644 --- a/term.c +++ b/term.c @@ -645,6 +645,9 @@ sgr(Term *term, int n, int *params) case 2: term->attr |= A_DIM; break; + case 3: + term->attr |= A_ITALIC; + break; case 4: term->attr |= A_UNDERLINE; break; @@ -673,10 +676,16 @@ sgr(Term *term, int n, int *params) term->mode |= M_DISPCTRL; break; case 21: - term->attr &= ~A_BOLD; +#ifndef OLDLINUX + term->attr |= A_UNDERLINE; /* Linux say should be: DOUBLE_ULINE */ break; +#endif case 22: term->attr &= ~A_DIM; + term->attr &= ~A_BOLD; + break; + case 23: + term->attr &= ~A_ITALIC; break; case 24: term->attr &= ~A_UNDERLINE; @@ -748,12 +757,10 @@ sgr(Term *term, int n, int *params) term->pair = (term->pair & 0xF0) | DEF_BACK; break; case 90: case 91: case 92: case 93: case 94: case 95: case 96: case 97: - term->pair = ((number - 90) << 4) | (term->pair & 0x0F); - term->attr |= A_BOLD; + term->pair = ((number - 90 + 8) << 4) | (term->pair & 0x0F); break; case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: - term->pair = (term->pair & 0xF0) | (number - 100); - term->attr |= A_BRIGHTBG; + term->pair = (term->pair & 0xF0) | (number - 100 + 8); break; default: logfmt("UNS: SGR %d\n", number); diff --git a/term.h b/term.h index 1bf5384..097aeee 100644 --- a/term.h +++ b/term.h @@ -7,7 +7,6 @@ #define A_INVERSE 0x20 #define A_INVISIBLE 0x40 #define A_CROSSED 0x80 -#define A_BRIGHTBG A_BLINK #define M_DISPCTRL 0x0001 #define M_INSERT 0x0002