|
|
@@ -27,7 +27,7 @@ |
|
|
|
#include <caca.h> |
|
|
|
|
|
|
|
enum mode { GRAY, HALFBLOCKS, QUARTERBLOCKS } mode; |
|
|
|
enum charset { ASCII, UTF8 } charset; |
|
|
|
enum charset { SPACES, ASCII, UTF8 } charset; |
|
|
|
|
|
|
|
static void list_fonts(void); |
|
|
|
static void add_char(unsigned long int); |
|
|
@@ -46,7 +46,7 @@ int main(int argc, char *argv[]) |
|
|
|
if(argc < 2) |
|
|
|
{ |
|
|
|
fprintf(stderr, |
|
|
|
"Usage: %s [--half|--quarter] [--ascii|--utf8] <font>\n", |
|
|
|
"Usage: %s [--half|--quarter] [--spaces|--ascii|--utf8] <font>\n", |
|
|
|
argv[0]); |
|
|
|
list_fonts(); |
|
|
|
return -1; |
|
|
@@ -70,7 +70,13 @@ int main(int argc, char *argv[]) |
|
|
|
mode = GRAY; |
|
|
|
} |
|
|
|
|
|
|
|
if((!strcmp(argv[1], "--ascii") || !strcmp(argv[1], "-a")) && argc > 2) |
|
|
|
if((!strcmp(argv[1], "--spaces") || !strcmp(argv[1], "-s")) && argc > 2) |
|
|
|
{ |
|
|
|
flag2 = "--spaces "; |
|
|
|
charset = SPACES; |
|
|
|
argv++; argc--; |
|
|
|
} |
|
|
|
else if((!strcmp(argv[1], "--ascii") || !strcmp(argv[1], "-a")) && argc > 2) |
|
|
|
{ |
|
|
|
flag2 = "--ascii "; |
|
|
|
charset = ASCII; |
|
|
@@ -190,6 +196,10 @@ static void add_char(unsigned long int ch) |
|
|
|
{ |
|
|
|
static char const * chars[][16] = |
|
|
|
{ |
|
|
|
{ "_", "_", "_", "_", " " }, |
|
|
|
{ " ", "_", "_", "_" }, |
|
|
|
{ " ", "_", "_", "_", "_", "_", "_", "_", |
|
|
|
"_", "_", "_", "_", "_", "_", "_", "_" }, |
|
|
|
{ "#", "$", ":", ".", " " }, |
|
|
|
{ " ", "\"", "m", "#" }, |
|
|
|
{ " ", "`", "'", "\"", ",", "[", "/", "P", |
|
|
@@ -200,11 +210,23 @@ static void add_char(unsigned long int ch) |
|
|
|
"▗", "▚", "▐", "▜", "▄", "▙", "▟", "█" } |
|
|
|
}; |
|
|
|
|
|
|
|
static uint8_t fgs[][4] = |
|
|
|
{ |
|
|
|
{ CACA_DEFAULT, CACA_DARKGRAY, CACA_LIGHTGRAY, CACA_WHITE }, |
|
|
|
{ CACA_DEFAULT, CACA_DEFAULT, CACA_DEFAULT, CACA_DEFAULT }, |
|
|
|
}; |
|
|
|
|
|
|
|
static uint8_t bgs[][4] = |
|
|
|
{ |
|
|
|
{ CACA_DEFAULT, CACA_DARKGRAY, CACA_LIGHTGRAY, CACA_WHITE }, |
|
|
|
{ CACA_DEFAULT, CACA_DEFAULT, CACA_DEFAULT, CACA_DEFAULT }, |
|
|
|
}; |
|
|
|
|
|
|
|
char const **str; |
|
|
|
void *buf; |
|
|
|
size_t len; |
|
|
|
unsigned int x, y, myw, mygw; |
|
|
|
int off = 0; |
|
|
|
int coff = 0, aoff = 0; |
|
|
|
int full = caca_utf32_is_fullwidth(ch); |
|
|
|
|
|
|
|
caca_set_canvas_size(onechar, full ? 2 : 1, 1); |
|
|
@@ -219,37 +241,60 @@ static void add_char(unsigned long int ch) |
|
|
|
|
|
|
|
switch(charset) |
|
|
|
{ |
|
|
|
case SPACES: |
|
|
|
coff = 0; aoff = 0; |
|
|
|
break; |
|
|
|
case ASCII: |
|
|
|
off = 0; |
|
|
|
coff = 3; aoff = 1; |
|
|
|
break; |
|
|
|
case UTF8: |
|
|
|
off = 3; |
|
|
|
coff = 6; aoff = 1; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
switch(mode) |
|
|
|
{ |
|
|
|
case GRAY: |
|
|
|
str = chars[off]; |
|
|
|
str = chars[coff]; |
|
|
|
for(y = 0; y < h; y++) |
|
|
|
for(x = 0; x < myw; x++) |
|
|
|
{ |
|
|
|
uint8_t c = image[4 * (x + y * iw) + 2]; |
|
|
|
|
|
|
|
if(c >= 0xa0) |
|
|
|
if(c >= 0xc0) |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][3], bgs[aoff][3]); |
|
|
|
caca_put_str(out, x, y, str[0]); |
|
|
|
} |
|
|
|
else if(c >= 0x90) |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][2], bgs[aoff][2]); |
|
|
|
caca_put_str(out, x, y, str[0]); |
|
|
|
} |
|
|
|
else if(c >= 0x80) |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][2], bgs[aoff][2]); |
|
|
|
caca_put_str(out, x, y, str[1]); |
|
|
|
} |
|
|
|
else if(c >= 0x40) |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][1], bgs[aoff][1]); |
|
|
|
caca_put_str(out, x, y, str[2]); |
|
|
|
} |
|
|
|
else if(c >= 0x20) |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][1], bgs[aoff][1]); |
|
|
|
caca_put_str(out, x, y, str[3]); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
caca_set_color_ansi(out, fgs[aoff][0], bgs[aoff][0]); |
|
|
|
caca_put_str(out, x, y, str[4]); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
case HALFBLOCKS: |
|
|
|
str = chars[off + 1]; |
|
|
|
str = chars[coff + 1]; |
|
|
|
for(y = 0; y < gh; y++) |
|
|
|
for(x = 0; x < mygw; x++) |
|
|
|
{ |
|
|
@@ -260,7 +305,7 @@ static void add_char(unsigned long int ch) |
|
|
|
} |
|
|
|
break; |
|
|
|
case QUARTERBLOCKS: |
|
|
|
str = chars[off + 2]; |
|
|
|
str = chars[coff + 2]; |
|
|
|
for(y = 0; y < gh; y++) |
|
|
|
for(x = 0; x < mygw; x++) |
|
|
|
{ |
|
|
@@ -275,6 +320,8 @@ static void add_char(unsigned long int ch) |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
caca_set_color_ansi(out, CACA_DEFAULT, CACA_DEFAULT); |
|
|
|
|
|
|
|
if(ch == ' ' || ch == 0xa0) |
|
|
|
{ |
|
|
|
caca_draw_line(out, mygw - 1, 0, mygw - 1, gh - 1, '$'); |
|
|
|