From fb45861275aa417ed4e0dae2b97ef79ec3f3d96b Mon Sep 17 00:00:00 2001 From: pancake Date: Tue, 13 Jan 2015 01:22:33 +0100 Subject: [PATCH] Support RGB colors in scr.html --- libr/cons/grep.c | 19 ++++++++++++++++++- libr/cons/rgb.c | 5 +++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/libr/cons/grep.c b/libr/cons/grep.c index 0cb7e8ced3..29bc431b53 100644 --- a/libr/cons/grep.c +++ b/libr/cons/grep.c @@ -302,6 +302,15 @@ R_API int r_cons_grep_line(char *buf, int len) { return len; } +static const char *gethtmlrgb(const char *str) { + static char buf[32]; + ut8 r, g, b; + r = g = b = 0; + r_cons_rgb_parse (str, &r, &g, &b, 0); + sprintf (buf, "#%02x%02x%02x", r, g, b); + return buf; +} + static const char *gethtmlcolor(const char ptrch, const char *def) { switch (ptrch) { case '0': return "#000"; // BLACK @@ -351,7 +360,7 @@ R_API int r_cons_html_print(const char *ptr) { } esc = 2; continue; - } else + } else if (esc == 2) { // TODO: use dword comparison here if (ptr[0]=='2' && ptr[1]=='J') { @@ -361,6 +370,14 @@ R_API int r_cons_html_print(const char *ptr) { str = ptr; continue; } else + if (!strncmp (ptr, "38;5;", 5)) { + char *end = strchr (ptr, 'm'); + printf ("", gethtmlrgb (ptr)); + fflush (stdout); + ptr = end; + str = ptr + 1; + esc = 0; + } else if (ptr[0]=='0' && ptr[1]==';' && ptr[2]=='0') { r_cons_gotoxy (0, 0); ptr += 4; diff --git a/libr/cons/rgb.c b/libr/cons/rgb.c index 8e77325ad8..f029c53d43 100644 --- a/libr/cons/rgb.c +++ b/libr/cons/rgb.c @@ -87,7 +87,8 @@ R_API int r_cons_rgb_parse (const char *p, ut8 *r, ut8 *g, ut8 *b, int *is_bg) { //const double k = (256/6); if (!p) return 0; if (*p==0x1b) p++; - if (*p!='[') return 0; + //if (*p!='[') return 0; + if (*p!='[') p--; switch (p[1]) { case '1': bold=255; p+=2; break; case '3': isbg=0; break; @@ -99,7 +100,7 @@ R_API int r_cons_rgb_parse (const char *p, ut8 *r, ut8 *g, ut8 *b, int *is_bg) { int x, y, z; int n = atoi (p+6); unrgb (n, &x, &y, &z); - SETRGB (x,y,z); + SETRGB (x, y, z); } else { /* truecolor */ p += 6;