diff options
Diffstat (limited to 'src/box-drawing.hh')
-rw-r--r-- | src/box-drawing.hh | 863 |
1 files changed, 863 insertions, 0 deletions
diff --git a/src/box-drawing.hh b/src/box-drawing.hh new file mode 100644 index 00000000..282c0f8b --- /dev/null +++ b/src/box-drawing.hh @@ -0,0 +1,863 @@ +/* + * Copyright © 2014, 2023 Egmont Koblinger + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see <https://www.gnu.org/licenses/>. + */ + +#pragma once + +/* + * Define the user-defined literal suffix "_str2bin" which interprets a + * byte string as binary number. + * Even bytes (e.g. ' ', '.', '0') mean bit 0. + * Odd bytes (e.g. '#', '%', '1') mean bit 1. + */ +constexpr uint32_t operator""_str2bin(char const* str, + std::size_t len) +{ + auto val = uint32_t{0}; + while (*str) { + val = (val << 1) | (static_cast<unsigned char>(*str) & 1); + ++str; + } + return val; +} + +/* + * Definition of most of the glyphs in the 2500..257F range as 5x5 bitmaps + * (bits 24..0 in the obvious order), see bug 709556 and ../doc/boxes.txt + */ +static constinit uint32_t const _vte_draw_box_drawing_bitmaps[128] = { + + /* U+2500 - BOX DRAWINGS LIGHT HORIZONTAL */ + " " + " " + "#####" + " " + " "_str2bin, + + /* U+2501 - BOX DRAWINGS HEAVY HORIZONTAL */ + " " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+2502 - BOX DRAWINGS LIGHT VERTICAL */ + " # " + " # " + " # " + " # " + " # "_str2bin, + + /* U+2503 - BOX DRAWINGS HEAVY VERTICAL */ + " ### " + " ### " + " ### " + " ### " + " ### "_str2bin, + + /* U+2504 - BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2505 - BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2506 - BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2507 - BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2508 - BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2509 - BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+250A - BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+250B - BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+250C - BOX DRAWINGS LIGHT DOWN AND RIGHT */ + " " + " " + " ###" + " # " + " # "_str2bin, + + /* U+250D - BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY */ + " " + " ###" + " ###" + " ###" + " # "_str2bin, + + /* U+250E - BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT */ + " " + " " + " ####" + " ### " + " ### "_str2bin, + + /* U+250F - BOX DRAWINGS HEAVY DOWN AND RIGHT */ + " " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2510 - BOX DRAWINGS LIGHT DOWN AND LEFT */ + " " + " " + "### " + " # " + " # "_str2bin, + + /* U+2511 - BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY */ + " " + "### " + "### " + "### " + " # "_str2bin, + + /* U+2512 - BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT */ + " " + " " + "#### " + " ### " + " ### "_str2bin, + + /* U+2513 - BOX DRAWINGS HEAVY DOWN AND LEFT */ + " " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+2514 - BOX DRAWINGS LIGHT UP AND RIGHT */ + " # " + " # " + " ###" + " " + " "_str2bin, + + /* U+2515 - BOX DRAWINGS UP LIGHT AND RIGHT HEAVY */ + " # " + " ###" + " ###" + " ###" + " "_str2bin, + + /* U+2516 - BOX DRAWINGS UP HEAVY AND RIGHT LIGHT */ + " ### " + " ### " + " ####" + " " + " "_str2bin, + + /* U+2517 - BOX DRAWINGS HEAVY UP AND RIGHT */ + " ### " + " ####" + " ####" + " ####" + " "_str2bin, + + /* U+2518 - BOX DRAWINGS LIGHT UP AND LEFT */ + " # " + " # " + "### " + " " + " "_str2bin, + + /* U+2519 - BOX DRAWINGS UP LIGHT AND LEFT HEAVY */ + " # " + "### " + "### " + "### " + " "_str2bin, + + /* U+251A - BOX DRAWINGS UP HEAVY AND LEFT LIGHT */ + " ### " + " ### " + "#### " + " " + " "_str2bin, + + /* U+251B - BOX DRAWINGS HEAVY UP AND LEFT */ + " ### " + "#### " + "#### " + "#### " + " "_str2bin, + + /* U+251C - BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + " # " + " # " + " ###" + " # " + " # "_str2bin, + + /* U+251D - BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY */ + " # " + " ###" + " ###" + " ###" + " # "_str2bin, + + /* U+251E - BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT */ + " ### " + " ### " + " ####" + " # " + " # "_str2bin, + + /* U+251F - BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT */ + " # " + " # " + " ####" + " ### " + " ### "_str2bin, + + /* U+2520 - BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT */ + " ### " + " ### " + " ####" + " ### " + " ### "_str2bin, + + /* U+2521 - BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY */ + " ### " + " ####" + " ####" + " ####" + " # "_str2bin, + + /* U+2522 - BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY */ + " # " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2523 - BOX DRAWINGS HEAVY VERTICAL AND RIGHT */ + " ### " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2524 - BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + " # " + " # " + "### " + " # " + " # "_str2bin, + + /* U+2525 - BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY */ + " # " + "### " + "### " + "### " + " # "_str2bin, + + /* U+2526 - BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT */ + " ### " + " ### " + "#### " + " # " + " # "_str2bin, + + /* U+2527 - BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT */ + " # " + " # " + "#### " + " ### " + " ### "_str2bin, + + /* U+2528 - BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT */ + " ### " + " ### " + "#### " + " ### " + " ### "_str2bin, + + /* U+2529 - BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY */ + " ### " + "#### " + "#### " + "#### " + " # "_str2bin, + + /* U+252A - BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY */ + " # " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+252B - BOX DRAWINGS HEAVY VERTICAL AND LEFT */ + " ### " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+252C - BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + " " + " " + "#####" + " # " + " # "_str2bin, + + /* U+252D - BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT */ + " " + "### " + "#####" + "### " + " # "_str2bin, + + /* U+252E - BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT */ + " " + " ###" + "#####" + " ###" + " # "_str2bin, + + /* U+252F - BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY */ + " " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2530 - BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT */ + " " + " " + "#####" + " ### " + " ### "_str2bin, + + /* U+2531 - BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY */ + " " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+2532 - BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY */ + " " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+2533 - BOX DRAWINGS HEAVY DOWN AND HORIZONTAL */ + " " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+2534 - BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + " # " + " # " + "#####" + " " + " "_str2bin, + + /* U+2535 - BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT */ + " # " + "### " + "#####" + "### " + " "_str2bin, + + /* U+2536 - BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT */ + " # " + " ###" + "#####" + " ###" + " "_str2bin, + + /* U+2537 - BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+2538 - BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " " + " "_str2bin, + + /* U+2539 - BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY */ + " ### " + "#### " + "#####" + "#### " + " "_str2bin, + + /* U+253A - BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY */ + " ### " + " ####" + "#####" + " ####" + " "_str2bin, + + /* U+253B - BOX DRAWINGS HEAVY UP AND HORIZONTAL */ + " ### " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+253C - BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + " # " + " # " + "#####" + " # " + " # "_str2bin, + + /* U+253D - BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT */ + " # " + "### " + "#####" + "### " + " # "_str2bin, + + /* U+253E - BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT */ + " # " + " ###" + "#####" + " ###" + " # "_str2bin, + + /* U+253F - BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2540 - BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " # " + " # "_str2bin, + + /* U+2541 - BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT */ + " # " + " # " + "#####" + " ### " + " ### "_str2bin, + + /* U+2542 - BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " ### " + " ### "_str2bin, + + /* U+2543 - BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT */ + " ### " + "#### " + "#####" + "#### " + " # "_str2bin, + + /* U+2544 - BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT */ + " ### " + " ####" + "#####" + " ####" + " # "_str2bin, + + /* U+2545 - BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT */ + " # " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+2546 - BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT */ + " # " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+2547 - BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY */ + " ### " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2548 - BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+2549 - BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY */ + " ### " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+254A - BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY */ + " ### " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+254B - BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL */ + " ### " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+254C - BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+254D - BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+254E - BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+254F - BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2550 - BOX DRAWINGS DOUBLE HORIZONTAL */ + " " + "#####" + " " + "#####" + " "_str2bin, + + /* U+2551 - BOX DRAWINGS DOUBLE VERTICAL */ + " # # " + " # # " + " # # " + " # # " + " # # "_str2bin, + + /* U+2552 - BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ + " " + " ###" + " # " + " ###" + " # "_str2bin, + + /* U+2553 - BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE */ + " " + " " + " ####" + " # # " + " # # "_str2bin, + + /* U+2554 - BOX DRAWINGS DOUBLE DOWN AND RIGHT */ + " " + " ####" + " # " + " # ##" + " # # "_str2bin, + + /* U+2555 - BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE */ + " " + "### " + " # " + "### " + " # "_str2bin, + + /* U+2556 - BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE */ + " " + " " + "#### " + " # # " + " # # "_str2bin, + + /* U+2557 - BOX DRAWINGS DOUBLE DOWN AND LEFT */ + " " + "#### " + " # " + "## # " + " # # "_str2bin, + + /* U+2558 - BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ + " # " + " ###" + " # " + " ###" + " "_str2bin, + + /* U+2559 - BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ + " # # " + " # # " + " ####" + " " + " "_str2bin, + + /* U+255A - BOX DRAWINGS DOUBLE UP AND RIGHT */ + " # # " + " # ##" + " # " + " ####" + " "_str2bin, + + /* U+255B - BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ + " # " + "### " + " # " + "### " + " "_str2bin, + + /* U+255C - BOX DRAWINGS UP DOUBLE AND LEFT SINGLE */ + " # # " + " # # " + "#### " + " " + " "_str2bin, + + /* U+255D - BOX DRAWINGS DOUBLE UP AND LEFT */ + " # # " + "## # " + " # " + "#### " + " "_str2bin, + + /* U+255E - BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ + " # " + " ###" + " # " + " ###" + " # "_str2bin, + + /* U+255F - BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ + " # # " + " # # " + " # ##" + " # # " + " # # "_str2bin, + + /* U+2560 - BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ + " # # " + " # ##" + " # " + " # ##" + " # # "_str2bin, + + /* U+2561 - BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */ + " # " + "### " + " # " + "### " + " # "_str2bin, + + /* U+2562 - BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE */ + " # # " + " # # " + "## # " + " # # " + " # # "_str2bin, + + /* U+2563 - BOX DRAWINGS DOUBLE VERTICAL AND LEFT */ + " # # " + "## # " + " # " + "## # " + " # # "_str2bin, + + /* U+2564 - BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE */ + " " + "#####" + " " + "#####" + " # "_str2bin, + + /* U+2565 - BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE */ + " " + " " + "#####" + " # # " + " # # "_str2bin, + + /* U+2566 - BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ + " " + "#####" + " " + "## ##" + " # # "_str2bin, + + /* U+2567 - BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ + " # " + "#####" + " " + "#####" + " "_str2bin, + + /* U+2568 - BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ + " # # " + " # # " + "#####" + " " + " "_str2bin, + + /* U+2569 - BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ + " # # " + "## ##" + " " + "#####" + " "_str2bin, + + /* U+256A - BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ + " # " + "#####" + " # " + "#####" + " # "_str2bin, + + /* U+256B - BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE */ + " # # " + " # # " + "#####" + " # # " + " # # "_str2bin, + + /* U+256C - BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ + " # # " + "## ##" + " " + "## ##" + " # # "_str2bin, + + /* U+256D - BOX DRAWINGS LIGHT ARC DOWN AND RIGHT */ + 0, /* not handled here */ + + /* U+256E - BOX DRAWINGS LIGHT ARC DOWN AND LEFT */ + 0, /* not handled here */ + + /* U+256F - BOX DRAWINGS LIGHT ARC UP AND LEFT */ + 0, /* not handled here */ + + /* U+2570 - BOX DRAWINGS LIGHT ARC UP AND RIGHT */ + 0, /* not handled here */ + + /* U+2571 - BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT */ + 0, /* not handled here */ + + /* U+2572 - BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT */ + 0, /* not handled here */ + + /* U+2573 - BOX DRAWINGS LIGHT DIAGONAL CROSS */ + 0, /* not handled here */ + + /* U+2574 - BOX DRAWINGS LIGHT LEFT */ + " " + " " + "### " + " " + " "_str2bin, + + /* U+2575 - BOX DRAWINGS LIGHT UP */ + " # " + " # " + " # " + " " + " "_str2bin, + + /* U+2576 - BOX DRAWINGS LIGHT RIGHT */ + " " + " " + " ###" + " " + " "_str2bin, + + /* U+2577 - BOX DRAWINGS LIGHT DOWN */ + " " + " " + " # " + " # " + " # "_str2bin, + + /* U+2578 - BOX DRAWINGS HEAVY LEFT */ + " " + "### " + "### " + "### " + " "_str2bin, + + /* U+2579 - BOX DRAWINGS HEAVY UP */ + " ### " + " ### " + " ### " + " " + " "_str2bin, + + /* U+257A - BOX DRAWINGS HEAVY RIGHT */ + " " + " ###" + " ###" + " ###" + " "_str2bin, + + /* U+257B - BOX DRAWINGS HEAVY DOWN */ + " " + " " + " ### " + " ### " + " ### "_str2bin, + + /* U+257C - BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT */ + " " + " ###" + "#####" + " ###" + " "_str2bin, + + /* U+257D - BOX DRAWINGS LIGHT UP AND HEAVY DOWN */ + " # " + " # " + " ### " + " ### " + " ### "_str2bin, + + /* U+257E - BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT */ + " " + "### " + "#####" + "### " + " "_str2bin, + + /* U+257F - BOX DRAWINGS HEAVY UP AND LIGHT DOWN */ + " ### " + " ### " + " ### " + " # " + " # "_str2bin, + +}; |