| @@ -549,6 +549,31 @@ static int x11_error_handler(Display *dpy, XErrorEvent *xevent) | |||
| static void x11_put_glyph(caca_display_t *dp, int x, int y, int yoff, | |||
| int w, int h, uint32_t attr, uint32_t ch) | |||
| { | |||
| static uint8_t const udlr[] = | |||
| { | |||
| /* 0x2500 - 0x250f: ─ . │ . . . . . . . . . ┌ . . . */ | |||
| 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, | |||
| /* 0x2510 - 0x251f: ┐ . . . └ . . . ┘ . . . ├ . . . */ | |||
| 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, | |||
| 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, | |||
| /* 0x2520 - 0x252f: . . . . ┤ . . . . . . . ┬ . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, | |||
| /* 0x2530 - 0x253f: . . . . ┴ . . . . . . . ┼ . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, | |||
| /* 0x2540 - 0x254f: . . . . . . . . . . . . . . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| /* 0x2550 - 0x255f: ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ */ | |||
| 0x0a, 0xa0, 0x12, 0x21, 0x22, 0x18, 0x24, 0x28, | |||
| 0x42, 0x81, 0x82, 0x48, 0x84, 0x88, 0x52, 0xa1, | |||
| /* 0x2560 - 0x256c: ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ */ | |||
| 0xa2, 0x58, 0xa4, 0xa8, 0x1a, 0x25, 0x2a, 0x4a, | |||
| 0x85, 0x8a, 0x5a, 0xa5, 0xaa, | |||
| }; | |||
| Display *dpy = dp->drv.p->dpy; | |||
| Pixmap px = dp->drv.p->pixmap; | |||
| GC gc = dp->drv.p->gc; | |||
| @@ -574,38 +599,10 @@ static void x11_put_glyph(caca_display_t *dp, int x, int y, int yoff, | |||
| * such as the CP437 gradients and half blocks. For unknown | |||
| * characters, print what cucul_utf32_to_ascii() returns. */ | |||
| if(ch >= 0x2500 && ch <= 0x256c) | |||
| if(ch >= 0x2500 && ch <= 0x256c && udlr[ch - 0x2500]) | |||
| { | |||
| static uint8_t const udlr[] = | |||
| { | |||
| /* 0x2500 - 0x250f: ─ . │ . . . . . . . . . ┌ . . . */ | |||
| 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, | |||
| /* 0x2510 - 0x251f: ┐ . . . └ . . . ┘ . . . ├ . . . */ | |||
| 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, | |||
| 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, | |||
| /* 0x2520 - 0x252f: . . . . ┤ . . . . . . . ┬ . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, | |||
| /* 0x2530 - 0x253f: . . . . ┴ . . . . . . . ┼ . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, | |||
| /* 0x2540 - 0x254f: . . . . . . . . . . . . . . . . */ | |||
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
| /* 0x2550 - 0x255f: ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ */ | |||
| 0x0a, 0xa0, 0x12, 0x21, 0x22, 0x18, 0x24, 0x28, | |||
| 0x42, 0x81, 0x82, 0x48, 0x84, 0x88, 0x52, 0xa1, | |||
| /* 0x2560 - 0x256c: ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ */ | |||
| 0xa2, 0x58, 0xa4, 0xa8, 0x1a, 0x25, 0x2a, 0x4a, | |||
| 0x85, 0x8a, 0x5a, 0xa5, 0xaa, | |||
| }; | |||
| uint16_t D = udlr[ch - 0x2500]; | |||
| if(!D) | |||
| goto next_try; | |||
| if(D & 0x04) | |||
| XFillRectangle(dpy, px, gc, x, y + h / 2, fw / 2 + 1, 1); | |||
| @@ -657,7 +654,6 @@ static void x11_put_glyph(caca_display_t *dp, int x, int y, int yoff, | |||
| return; | |||
| } | |||
| next_try: | |||
| switch(ch) | |||
| { | |||