diff --git a/front-end b/front-end index 420353e..855d308 160000 --- a/front-end +++ b/front-end @@ -1 +1 @@ -Subproject commit 420353efc9bdfc6bf4ffbd180b97bc49c4fdc3d5 +Subproject commit 855d308962c6232a5bb9df21c3ab93622d220a06 diff --git a/user/character_sets.h b/user/character_sets.h index ae79948..436f743 100644 --- a/user/character_sets.h +++ b/user/character_sets.h @@ -19,143 +19,352 @@ * Based on rxvt-unicode screen.C table. */ static const u16 codepage_0[] ESP_CONST_DATA = - {// Unicode ASCII SYM + { // Unicode ASCII SYM // %%BEGIN:0%% - 0x2666, // 96 ` ♦ - 0x2592, // 97 a ▒ - 0x2409, // 98 b HT - 0x240c, // 99 c FF - 0x240d, // 100 d CR - 0x240a, // 101 e LF - 0x00b0, // 102 f ° - 0x00b1, // 103 g ± - 0x2424, // 104 h NL - 0x240b, // 105 i VT - 0x2518, // 106 j ┘ - 0x2510, // 107 k ┐ - 0x250c, // 108 l ┌ - 0x2514, // 109 m └ - 0x253c, // 110 n ┼ - 0x23ba, // 111 o ⎺ - 0x23bb, // 112 p ⎻ - 0x2500, // 113 q ─ - 0x23bc, // 114 r ⎼ - 0x23bd, // 115 s ⎽ - 0x251c, // 116 t ├ - 0x2524, // 117 u ┤ - 0x2534, // 118 v ┴ - 0x252c, // 119 w ┬ - 0x2502, // 120 x │ - 0x2264, // 121 y ≤ - 0x2265, // 122 z ≥ - 0x03c0, // 123 { π - 0x2260, // 124 | ≠ - 0x20a4, // 125 } £ - 0x00b7, // 126 ~ · + u'♦', // 0x2666 96 ` + u'▒', // 0x2592 97 a + u'␉', // 0x2409 98 b + u'␌', // 0x240c 99 c FF + u'␍', // 0x240d 100 d CR + u'␊', // 0x240a 101 e LF + u'°', // 0x00b0 102 f + u'±', // 0x00b1 103 g + u'␤', // 0x2424 104 h NL + u'␋', // 0x240b 105 i VT + u'┘', // 0x2518 106 j + u'┐', // 0x2510 107 k + u'┌', // 0x250c 108 l + u'└', // 0x2514 109 m + u'┼', // 0x253c 110 n + u'⎺', // 0x23ba 111 o + u'⎻', // 0x23bb 112 p + u'─', // 0x2500 113 q + u'⎼', // 0x23bc 114 r + u'⎽', // 0x23bd 115 s + u'├', // 0x251c 116 t + u'┤', // 0x2524 117 u + u'┴', // 0x2534 118 v + u'┬', // 0x252c 119 w + u'│', // 0x2502 120 x + u'≤', // 0x2264 121 y + u'≥', // 0x2265 122 z + u'π', // 0x03c0 123 { + u'≠', // 0x2260 124 | + u'£', // 0x20a4 125 } + u'·', // 0x00b7 126 ~ // %%END:0%% }; #define CODEPAGE_1_BEGIN 33 #define CODEPAGE_1_END 126 +// DOS, thin and double lines, arrows, angles, diagonals, thick border static const u16 codepage_1[] ESP_CONST_DATA = - {// Unicode ASCII SYM DOS + {// Unicode ASCII DOS // %%BEGIN:1%% - 0x263A, // 33 ! ☺ (1) - low ASCII symbols from DOS, moved to +32 - 0x263B, // 34 " ☻ (2) - 0x2665, // 35 # ♥ (3) - 0x2666, // 36 $ ♦ (4) - 0x2663, // 37 % ♣ (5) - 0x2660, // 38 & ♠ (6) - 0x2022, // 39 ' • (7) - inverse dot and circle left out, can be done with SGR - 0x231B, // 40 ( ⌛ - hourglass (timer icon) - 0x25CB, // 41 ) ○ (9) - 0x21AF, // 42 * ↯ - electricity (lightning monitor...) - 0x266A, // 43 + ♪ (13) - 0x266B, // 44 , ♫ (14) - 0x263C, // 45 - ☼ (15) - 0x2302, // 46 . ⌂ (127) - 0x2622, // 47 / ☢ - radioactivity (geiger counter...) - 0x2591, // 48 0 ░ (176) - this block is kept aligned and ordered from DOS, moved -128 - 0x2592, // 49 1 ▒ (177) - 0x2593, // 50 2 ▓ (178) - 0x2502, // 51 3 │ (179) - 0x2524, // 52 4 ┤ (180) - 0x2561, // 53 5 ╡ (181) - 0x2562, // 54 6 ╢ (182) - 0x2556, // 55 7 ╖ (183) - 0x2555, // 56 8 ╕ (184) - 0x2563, // 57 9 ╣ (185) - 0x2551, // 58 : ║ (186) - 0x2557, // 59 ; ╗ (187) - 0x255D, // 60 < ╝ (188) - 0x255C, // 61 = ╜ (189) - 0x255B, // 62 > ╛ (190) - 0x2510, // 63 ? ┐ (191) - 0x2514, // 64 @ └ (192) - 0x2534, // 65 A ┴ (193) - 0x252C, // 66 B ┬ (194) - 0x251C, // 67 C ├ (195) - 0x2500, // 68 D ─ (196) - 0x253C, // 69 E ┼ (197) - 0x255E, // 70 F ╞ (198) - 0x255F, // 71 G ╟ (199) - 0x255A, // 72 H ╚ (200) - 0x2554, // 73 I ╔ (201) - 0x2569, // 74 J ╩ (202) - 0x2566, // 75 K ╦ (203) - 0x2560, // 76 L ╠ (204) - 0x2550, // 77 M ═ (205) - 0x256C, // 78 N ╬ (206) - 0x2567, // 79 O ╧ (207) - 0x2568, // 80 P ╨ (208) - 0x2564, // 81 Q ╤ (209) - 0x2565, // 82 R ╥ (210) - 0x2559, // 83 S ╙ (211) - 0x2558, // 84 T ╘ (212) - 0x2552, // 85 U ╒ (213) - 0x2553, // 86 V ╓ (214) - 0x256B, // 87 W ╫ (215) - 0x256A, // 88 X ╪ (216) - 0x2518, // 89 Y ┘ (217) - 0x250C, // 90 Z ┌ (218) - 0x2588, // 91 [ █ (219) - 0x2584, // 92 \ ▄ (220) - 0x258C, // 93 ] ▌ (221) - 0x2590, // 94 ^ ▐ (222) - 0x2580, // 95 _ ▀ (223) - 0x2195, // 96 ` ↕ (18) - moved from low DOS ASCII - 0x2191, // 97 a ↑ (24) - 0x2193, // 98 b ↓ (25) - 0x2192, // 99 c → (26) - 0x2190, // 100 d ← (27) - 0x2194, // 101 e ↔ (29) - 0x25B2, // 102 f ▲ (30) - 0x25BC, // 103 g ▼ (31) - 0x25BA, // 104 h ► (16) - 0x25C4, // 105 i ◄ (17) - 0x25E2, // 106 j ◢ - added for slanted corners - 0x25E3, // 107 k ◣ - 0x25E4, // 108 l ◤ - 0x25E5, // 109 m ◥ - 0x256D, // 110 n ╭ - rounded corners - 0x256E, // 111 o ╮ - 0x256F, // 112 p ╯ - 0x2570, // 113 q ╰ - 0x0, // 114 r - free positions for future expansion - 0x0, // 115 s - 0x0, // 116 t - 0x0, // 117 u - 0x0, // 118 v - 0x0, // 119 w - 0x0, // 120 x - 0x0, // 121 y - 0x0, // 122 z - 0x0, // 123 { - 0x0, // 124 | - 0x2714, // 125 } ✔ - checkboxes or checklist items - 0x2718, // 126 ~ ✘ + u'☺', // 0x263A, 33 ! (1) - low ASCII symbols from DOS, moved to +32 + u'☻', // 0x263B, 34 " (2) + u'♥', // 0x2665, 35 # (3) + u'♦', // 0x2666, 36 $ (4) + u'♣', // 0x2663, 37 % (5) + u'♠', // 0x2660, 38 & (6) + u'•', // 0x2022, 39 ' (7) - inverse dot and circle left out, can be done with SGR + u'⌛', // 0x231B, 40 ( - hourglass (timer icon) + u'○', // 0x25CB, 41 ) (9) + u'↯', // 0x21AF, 42 * - electricity (lightning monitor...) + u'♪', // 0x266A, 43 + (13) + u'♫', // 0x266B, 44 , (14) + u'☼', // 0x263C, 45 - (15) + u'⌂', // 0x2302, 46 . (127) + u'☢', // 0x2622, 47 / - radioactivity (geiger counter...) + u'░', // 0x2591, 48 0 (176) - this block is kept aligned and ordered from DOS, moved -128 + u'▒', // 0x2592, 49 1 (177) + u'▓', // 0x2593, 50 2 (178) + u'│', // 0x2502, 51 3 (179) + u'┤', // 0x2524, 52 4 (180) + u'╡', // 0x2561, 53 5 (181) + u'╢', // 0x2562, 54 6 (182) + u'╖', // 0x2556, 55 7 (183) + u'╕', // 0x2555, 56 8 (184) + u'╣', // 0x2563, 57 9 (185) + u'║', // 0x2551, 58 : (186) + u'╗', // 0x2557, 59 ; (187) + u'╝', // 0x255D, 60 < (188) + u'╜', // 0x255C, 61 = (189) + u'╛', // 0x255B, 62 > (190) + u'┐', // 0x2510, 63 ? (191) + u'└', // 0x2514, 64 @ (192) + u'┴', // 0x2534, 65 A (193) + u'┬', // 0x252C, 66 B (194) + u'├', // 0x251C, 67 C (195) + u'─', // 0x2500, 68 D (196) + u'┼', // 0x253C, 69 E (197) + u'╞', // 0x255E, 70 F (198) + u'╟', // 0x255F, 71 G (199) + u'╚', // 0x255A, 72 H (200) + u'╔', // 0x2554, 73 I (201) + u'╩', // 0x2569, 74 J (202) + u'╦', // 0x2566, 75 K (203) + u'╠', // 0x2560, 76 L (204) + u'═', // 0x2550, 77 M (205) + u'╬', // 0x256C, 78 N (206) + u'╧', // 0x2567, 79 O (207) + u'╨', // 0x2568, 80 P (208) + u'╤', // 0x2564, 81 Q (209) + u'╥', // 0x2565, 82 R (210) + u'╙', // 0x2559, 83 S (211) + u'╘', // 0x2558, 84 T (212) + u'╒', // 0x2552, 85 U (213) + u'╓', // 0x2553, 86 V (214) + u'╫', // 0x256B, 87 W (215) + u'╪', // 0x256A, 88 X (216) + u'┘', // 0x2518, 89 Y (217) + u'┌', // 0x250C, 90 Z (218) + u'█', // 0x2588, 91 [ (219) + u'▄', // 0x2584, 92 \ (220) + u'▌', // 0x258C, 93 ] (221) + u'▐', // 0x2590, 94 ^ (222) + u'▀', // 0x2580, 95 _ (223) + u'↕', // 0x2195, 96 ` (18) - moved from low DOS ASCII + u'↑', // 0x2191, 97 a (24) + u'↓', // 0x2193, 98 b (25) + u'→', // 0x2192, 99 c (26) + u'←', // 0x2190, 100 d (27) + u'↔', // 0x2194, 101 e (29) + u'▲', // 0x25B2, 102 f (30) + u'▼', // 0x25BC, 103 g (31) + u'►', // 0x25BA, 104 h (16) + u'◄', // 0x25C4, 105 i (17) + u'◢', // 0x25E2, 106 j - added for slanted corners + u'◣', // 0x25E3, 107 k + u'◤', // 0x25E4, 108 l + u'◥', // 0x25E5, 109 m + u'╭', // 0x256D, 110 n - rounded corners + u'╮', // 0x256E, 111 o + u'╯', // 0x256F, 112 p + u'╰', // 0x2570, 113 q + u'╱', // 0x0, 114 r - right up diagonal + u'╲', // 0x0, 115 s - right down diagonal + u'╳', // 0x0, 116 t + u'↺', // 0x0, 117 u + u'↻', // 0x0, 118 v + u'¶', // 0x0, 119 w + u'⏻', // 0x0, 120 x + 0xE0B0, // powerline right triangle (filled), 121 y + 0xE0B1, // powerline right triangle (hollow), 122 z + 0xE0B2, // powerline left triangle (filled), 123 { + 0xE0B3, // powerline left triangle (hollow), 124 | - reserved + u'✔', // 0x2714, 125 } - checkboxes or checklist items + u'✘', // 0x2718, 126 ~ // %%END:1%% }; +#define CODEPAGE_2_BEGIN 33 +#define CODEPAGE_2_END 126 + +// blocks, thick and split lines, line butts +static const u16 codepage_2[] ESP_CONST_DATA = + {// Unicode ASCII DOS + // %%BEGIN:2%% + u'▁', // 0x2581, 33 ! - those are ordered this way to allow easy calculating of the right code (for graphs) + u'▂', // 0x2582, 34 " + u'▃', // 0x2583, 35 # + u'▄', // 0x2584, 36 $ + u'▅', // 0x2585, 37 % + u'▆', // 0x2586, 38 & + u'▇', // 0x2587, 39 ' - 7-eighths + u'█', // 0x2588, 40 ( - full block, shared by both sequences + u'▉', // 0x2589, 41 ) - those grow thinner, to re-use the full block + u'▊', // 0x258A, 42 * + u'▋', // 0x258B, 43 + + u'▌', // 0x258C, 44 , + u'▍', // 0x258D, 45 - + u'▎', // 0x258E, 46 . + u'▏', // 0x258F, 47 / + u'▔', // 0x2594, 48 0 - complementary symbols + u'▕', // 0x2595, 49 1 + u'▐', // 0x2590, 50 2 + u'▀', // 0x2580, 51 3 + u'▘', // 0x2598, 52 4 - top-left, top-right, bottom-right, bottom-left + u'▝', // 0x259D, 53 5 + u'▗', // 0x2597, 54 6 + u'▖', // 0x2596, 55 7 + u'▟', // 0x259F, 56 8 + u'▙', // 0x2599, 57 9 + u'▛', // 0x259B, 58 : + u'▜', // 0x259C, 59 ; + u'▞', // 0x259E, 60 < - complementary diagonals + u'▚', // 0x259A, 61 = + u'━', // 0x, 62 > - here are thick and thin lines and their joins. it's really quite arbitrary, based on the unicode order, excluding single lines + u'┃', // 0x, 63 ? + u'┍', // 0x, 64 @ + u'┎', // 0x, 65 A + u'┏', // 0x, 66 B + u'┑', // 0x, 67 C + u'┒', // 0x, 68 D + u'┓', // 0x, 69 E + u'┕', // 0x, 70 F + u'┖', // 0x, 71 G + u'┗', // 0x, 72 H + u'┙', // 0x, 73 I + u'┚', // 0x, 74 J + u'┛', // 0x, 75 K + u'┝', // 0x, 76 L + u'┞', // 0x, 77 M + u'┟', // 0x, 78 N + u'┠', // 0x, 79 O + u'┡', // 0x, 80 P + u'┢', // 0x, 81 Q + u'┣', // 0x, 82 R + u'┥', // 0x, 83 S + u'┦', // 0x, 84 T + u'┧', // 0x, 85 U + u'┨', // 0x, 86 V + u'┩', // 0x, 87 W + u'┪', // 0x, 88 X + u'┫', // 0x, 89 Y + u'┭', // 0x, 90 Z + u'┮', // 0x, 91 [ + u'┯', // 0x, 92 \ . + u'┰', // 0x, 93 ] + u'┱', // 0x, 94 ^ + u'┲', // 0x, 95 _ + u'┳', // 0x, 96 ` + u'┵', // 0x, 97 a + u'┶', // 0x, 98 b + u'┷', // 0x, 99 c + u'┸', // 0x, 100 d + u'┹', // 0x, 101 e + u'┺', // 0x, 102 f + u'┻', // 0x, 103 g + u'┽', // 0x, 104 h + u'┾', // 0x, 105 i + u'┿', // 0x, 106 j + u'╀', // 0x, 107 k + u'╁', // 0x, 108 l + u'╂', // 0x, 109 m + u'╃', // 0x, 110 n + u'╄', // 0x, 111 o + u'╅', // 0x, 112 p + u'╆', // 0x, 113 q + u'╇', // 0x, 114 r + u'╈', // 0x, 115 s + u'╉', // 0x, 116 t + u'╊', // 0x, 117 u + u'╋', // 0x, 118 v + u'╴', // 0x, 119 w - butts + u'╵', // 0x, 120 x + u'╶', // 0x, 121 y + u'╷', // 0x, 122 z + u'╸', // 0x, 123 { + u'╹', // 0x, 124 | + u'╺', // 0x, 125 } + u'╻', // 0x, 126 ~ + // %%END:2%% + }; + +#define CODEPAGE_3_BEGIN 33 +#define CODEPAGE_3_END 48 + +// dashed lines, split straight lines +static const u16 codepage_3[] ESP_CONST_DATA = + {// Unicode ASCII DOS + // %%BEGIN:3%% + u'╌', // 0x, 33 ! + u'┄', // 0x, 34 " + u'┈', // 0x, 35 # + u'╍', // 0x, 36 $ + u'┅', // 0x, 37 % + u'┉', // 0x, 38 & + u'╎', // 0x, 39 ' + u'┆', // 0x, 40 ( + u'┊', // 0x, 41 ) + u'╏', // 0x, 42 * + u'┇', // 0x, 43 + + u'┋', // 0x, 44 , + u'╼', // 0x, 45 - + u'╽', // 0x, 46 . + u'╾', // 0x, 47 / + u'╿', // 0x, 48 0 + // %%END:3%% +// u'\0', // 0x, 49 1 +// u'\0', // 0x, 50 2 +// u'\0', // 0x, 51 3 +// u'\0', // 0x, 52 4 +// u'\0', // 0x, 53 5 +// u'\0', // 0x, 54 6 +// u'\0', // 0x, 55 7 +// u'\0', // 0x, 56 8 +// u'\0', // 0x, 57 9 +// u'\0', // 0x, 58 : +// u'\0', // 0x, 59 ; +// u'\0', // 0x, 60 < +// u'\0', // 0x, 61 = +// u'\0', // 0x, 62 > +// u'\0', // 0x, 63 ? +// u'\0', // 0x, 64 @ +// u'\0', // 0x, 65 A +// u'\0', // 0x, 66 B +// u'\0', // 0x, 67 C +// u'\0', // 0x, 68 D +// u'\0', // 0x, 69 E +// u'\0', // 0x, 70 F +// u'\0', // 0x, 71 G +// u'\0', // 0x, 72 H +// u'\0', // 0x, 73 I +// u'\0', // 0x, 74 J +// u'\0', // 0x, 75 K +// u'\0', // 0x, 76 L +// u'\0', // 0x, 77 M +// u'\0', // 0x, 78 N +// u'\0', // 0x, 79 O +// u'\0', // 0x, 80 P +// u'\0', // 0x, 81 Q +// u'\0', // 0x, 82 R +// u'\0', // 0x, 83 S +// u'\0', // 0x, 84 T +// u'\0', // 0x, 85 U +// u'\0', // 0x, 86 V +// u'\0', // 0x, 87 W +// u'\0', // 0x, 88 X +// u'\0', // 0x, 89 Y +// u'\0', // 0x, 90 Z +// u'\0', // 0x, 91 [ +// u'\0', // 0x, 92 \ . +// u'\0', // 0x, 93 ] +// u'\0', // 0x, 94 ^ +// u'\0', // 0x, 95 _ +// u'\0', // 0x, 96 ` +// u'\0', // 0x, 97 a +// u'\0', // 0x, 98 b +// u'\0', // 0x, 99 c +// u'\0', // 0x, 100 d +// u'\0', // 0x, 101 e +// u'\0', // 0x, 102 f +// u'\0', // 0x, 103 g +// u'\0', // 0x, 104 h +// u'\0', // 0x, 105 i +// u'\0', // 0x, 106 j +// u'\0', // 0x, 107 k +// u'\0', // 0x, 108 l +// u'\0', // 0x, 109 m +// u'\0', // 0x, 110 n +// u'\0', // 0x, 111 o +// u'\0', // 0x, 112 p +// u'\0', // 0x, 113 q +// u'\0', // 0x, 114 r +// u'\0', // 0x, 115 s +// u'\0', // 0x, 116 t +// u'\0', // 0x, 117 u +// u'\0', // 0x, 118 v +// u'\0', // 0x, 119 w +// u'\0', // 0x, 120 x +// u'\0', // 0x, 121 y +// u'\0', // 0x, 122 z +// u'\0', // 0x, 123 { +// u'\0', // 0x, 124 | +// u'\0', // 0x, 125 } +// u'\0', // 0x, 126 ~ + }; + #endif //ESPTERM_CHARACTER_SETS_H_H diff --git a/user/screen.c b/user/screen.c index 755aa44..68e6854 100644 --- a/user/screen.c +++ b/user/screen.c @@ -1794,6 +1794,20 @@ utf8_remap(char *out, char g, char charset) } break; + case CS_2_BLOCKS_LINES: /* ESPTerm Character Rom 2 */ + if ((g >= CODEPAGE_2_BEGIN) && (g <= CODEPAGE_2_END)) { + n = codepage_2[g - CODEPAGE_2_BEGIN]; + if (n) utf = n; + } + break; + + case CS_3_LINES_EXTRA: /* ESPTerm Character Rom 3 */ + if ((g >= CODEPAGE_3_BEGIN) && (g <= CODEPAGE_3_END)) { + n = codepage_3[g - CODEPAGE_3_BEGIN]; + if (n) utf = n; + } + break; + case CS_A_UKASCII: /* UK, replaces # with GBP */ if (g == '#') utf = 0x20a4; // £ break; diff --git a/user/screen.h b/user/screen.h index e38f776..422384c 100644 --- a/user/screen.h +++ b/user/screen.h @@ -156,6 +156,8 @@ typedef enum { CS_A_UKASCII = 'A', CS_0_DEC_SUPPLEMENTAL = '0', CS_1_DOS_437 = '1', + CS_2_BLOCKS_LINES = '2', + CS_3_LINES_EXTRA = '3', } CHARSET; enum ScreenSerializeTopic {