pax_global_header 0000666 0000000 0000000 00000000064 14773035472 0014526 g ustar 00root root 0000000 0000000 52 comment=69f8e9a1f866f6d4f682040d872ab93f3360f6df
termpaint-0.3.1/ 0000775 0000000 0000000 00000000000 14773035472 0013532 5 ustar 00root root 0000000 0000000 termpaint-0.3.1/.cirrus.yml 0000664 0000000 0000000 00000000572 14773035472 0015646 0 ustar 00root root 0000000 0000000 macos_instance:
image: ghcr.io/cirruslabs/macos-ventura-xcode:14.2
task:
name: ci/cirrus/macOS
setup_script: |-
brew install meson pkg-config
info_script: |-
uname -a
git log --pretty=oneline -n1
configure_script: |-
meson -Db_lundef=false _build
compile_script: |-
ninja -v -C _build
test_script: |-
cd tests
../_build/testtermpaint
termpaint-0.3.1/.gitattributes 0000664 0000000 0000000 00000000115 14773035472 0016422 0 ustar 00root root 0000000 0000000 *.h diff=cpp
*.c diff=cpp
*.cpp diff=cpp
*.inc linguist-language=c
termpaint-0.3.1/.gitignore 0000664 0000000 0000000 00000000016 14773035472 0015517 0 ustar 00root root 0000000 0000000 _build
_local
termpaint-0.3.1/COPYING 0000664 0000000 0000000 00000002400 14773035472 0014561 0 ustar 00root root 0000000 0000000 Permission is hereby granted, free of charge, to any person or
organization obtaining a copy of the software and accompanying
documentation covered by this license (the "Software") to use, reproduce,
display, distribute, execute, and transmit the Software, and to prepare
derivative works of the Software, and to permit third-parties to whom
the Software is furnished to do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated
by a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO
EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE
BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
termpaint-0.3.1/README.md 0000664 0000000 0000000 00000004014 14773035472 0015010 0 ustar 00root root 0000000 0000000
Termpaint
Low level terminal interface library for modern terminals.
## Documentation
The full documentation for Termpaint can be found [here](https://termpaint.namepad.de/latest/).
## Building / Installing
$ meson setup -Dprefix=$HOME/opt/termpaint/ _build
$ ninja -C _build
$ ninja -C _build install
## Example
See [Getting started](https://termpaint.namepad.de/latest/getting-started.html) or [full source](doc/getting-started.c).
integration = termpaintx_full_integration_setup_terminal_fullscreen(
"+kbdsig +kbdsigint",
event_callback, &quit,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
termpaint_surface_clear(surface,
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_surface_write_with_colors(surface,
0, 0,
"Hello World",
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_terminal_flush(terminal, false);
while (!quit) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
break;
}
}
termpaint_terminal_free_with_restore(terminal);
## Included examples
* attrdemo [demo/attrs.c](demo/attrs.c)
Show attributes and colors.
* playground [playground2.cpp](playground2.cpp)
Show keyboard events.
* life [demo/life.c](demo/life.c)
A simple "Conway's Game of Life" demo.
* shuffle [demo/shuffle.c](demo/shuffle.c)
A simple shuffle numbers demo.
* textwrap [demo/textwrap.c](demo/textwrap.c)
Usage of text measurement to wrap text.
## Why?
See this [blog post](https://tty.uchuujin.de/2020/11/journey-of-termpaint/).
## License
Termpaint is licensed under the [Boost Software License 1.0](COPYING) termpaint-0.3.1/charclassification.inc 0000664 0000000 0000000 00000115702 14773035472 0020064 0 ustar 00root root 0000000 0000000 static const uint16_t termpaint_char_width_offsets_default[0x45] = {
0,
450,
453,
530,
554,
749,
764,
788,
931,
932,
933,
934,
936,
937,
938,
939,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
};
static const uint16_t termpaint_char_width_data_default[] = {
// U+000000,
NEW_WIDTH(0x0000, 1), // U+000000
NEW_WIDTH(0x0300, 0), // U+000300
NEW_WIDTH(0x0370, 1), // U+000370
NEW_WIDTH(0x0483, 0), // U+000483
NEW_WIDTH(0x048a, 1), // U+00048a
NEW_WIDTH(0x0591, 0), // U+000591
NEW_WIDTH(0x05be, 1), // U+0005be
NEW_WIDTH(0x05bf, 0), // U+0005bf
NEW_WIDTH(0x05c0, 1), // U+0005c0
NEW_WIDTH(0x05c1, 0), // U+0005c1
NEW_WIDTH(0x05c3, 1), // U+0005c3
NEW_WIDTH(0x05c4, 0), // U+0005c4
NEW_WIDTH(0x05c6, 1), // U+0005c6
NEW_WIDTH(0x05c7, 0), // U+0005c7
NEW_WIDTH(0x05c8, 1), // U+0005c8
NEW_WIDTH(0x0600, 0), // U+000600
NEW_WIDTH(0x0606, 1), // U+000606
NEW_WIDTH(0x0610, 0), // U+000610
NEW_WIDTH(0x061b, 1), // U+00061b
NEW_WIDTH(0x061c, 0), // U+00061c
NEW_WIDTH(0x061d, 1), // U+00061d
NEW_WIDTH(0x064b, 0), // U+00064b
NEW_WIDTH(0x0660, 1), // U+000660
NEW_WIDTH(0x0670, 0), // U+000670
NEW_WIDTH(0x0671, 1), // U+000671
NEW_WIDTH(0x06d6, 0), // U+0006d6
NEW_WIDTH(0x06de, 1), // U+0006de
NEW_WIDTH(0x06df, 0), // U+0006df
NEW_WIDTH(0x06e5, 1), // U+0006e5
NEW_WIDTH(0x06e7, 0), // U+0006e7
NEW_WIDTH(0x06e9, 1), // U+0006e9
NEW_WIDTH(0x06ea, 0), // U+0006ea
NEW_WIDTH(0x06ee, 1), // U+0006ee
NEW_WIDTH(0x070f, 0), // U+00070f
NEW_WIDTH(0x0710, 1), // U+000710
NEW_WIDTH(0x0711, 0), // U+000711
NEW_WIDTH(0x0712, 1), // U+000712
NEW_WIDTH(0x0730, 0), // U+000730
NEW_WIDTH(0x074b, 1), // U+00074b
NEW_WIDTH(0x07a6, 0), // U+0007a6
NEW_WIDTH(0x07b1, 1), // U+0007b1
NEW_WIDTH(0x07eb, 0), // U+0007eb
NEW_WIDTH(0x07f4, 1), // U+0007f4
NEW_WIDTH(0x07fd, 0), // U+0007fd
NEW_WIDTH(0x07fe, 1), // U+0007fe
NEW_WIDTH(0x0816, 0), // U+000816
NEW_WIDTH(0x081a, 1), // U+00081a
NEW_WIDTH(0x081b, 0), // U+00081b
NEW_WIDTH(0x0824, 1), // U+000824
NEW_WIDTH(0x0825, 0), // U+000825
NEW_WIDTH(0x0828, 1), // U+000828
NEW_WIDTH(0x0829, 0), // U+000829
NEW_WIDTH(0x082e, 1), // U+00082e
NEW_WIDTH(0x0859, 0), // U+000859
NEW_WIDTH(0x085c, 1), // U+00085c
NEW_WIDTH(0x0890, 0), // U+000890
NEW_WIDTH(0x0892, 1), // U+000892
NEW_WIDTH(0x0898, 0), // U+000898
NEW_WIDTH(0x08a0, 1), // U+0008a0
NEW_WIDTH(0x08ca, 0), // U+0008ca
NEW_WIDTH(0x0903, 1), // U+000903
NEW_WIDTH(0x093a, 0), // U+00093a
NEW_WIDTH(0x093b, 1), // U+00093b
NEW_WIDTH(0x093c, 0), // U+00093c
NEW_WIDTH(0x093d, 1), // U+00093d
NEW_WIDTH(0x0941, 0), // U+000941
NEW_WIDTH(0x0949, 1), // U+000949
NEW_WIDTH(0x094d, 0), // U+00094d
NEW_WIDTH(0x094e, 1), // U+00094e
NEW_WIDTH(0x0951, 0), // U+000951
NEW_WIDTH(0x0958, 1), // U+000958
NEW_WIDTH(0x0962, 0), // U+000962
NEW_WIDTH(0x0964, 1), // U+000964
NEW_WIDTH(0x0981, 0), // U+000981
NEW_WIDTH(0x0982, 1), // U+000982
NEW_WIDTH(0x09bc, 0), // U+0009bc
NEW_WIDTH(0x09bd, 1), // U+0009bd
NEW_WIDTH(0x09c1, 0), // U+0009c1
NEW_WIDTH(0x09c5, 1), // U+0009c5
NEW_WIDTH(0x09cd, 0), // U+0009cd
NEW_WIDTH(0x09ce, 1), // U+0009ce
NEW_WIDTH(0x09e2, 0), // U+0009e2
NEW_WIDTH(0x09e4, 1), // U+0009e4
NEW_WIDTH(0x09fe, 0), // U+0009fe
NEW_WIDTH(0x09ff, 1), // U+0009ff
NEW_WIDTH(0x0a01, 0), // U+000a01
NEW_WIDTH(0x0a03, 1), // U+000a03
NEW_WIDTH(0x0a3c, 0), // U+000a3c
NEW_WIDTH(0x0a3d, 1), // U+000a3d
NEW_WIDTH(0x0a41, 0), // U+000a41
NEW_WIDTH(0x0a43, 1), // U+000a43
NEW_WIDTH(0x0a47, 0), // U+000a47
NEW_WIDTH(0x0a49, 1), // U+000a49
NEW_WIDTH(0x0a4b, 0), // U+000a4b
NEW_WIDTH(0x0a4e, 1), // U+000a4e
NEW_WIDTH(0x0a51, 0), // U+000a51
NEW_WIDTH(0x0a52, 1), // U+000a52
NEW_WIDTH(0x0a70, 0), // U+000a70
NEW_WIDTH(0x0a72, 1), // U+000a72
NEW_WIDTH(0x0a75, 0), // U+000a75
NEW_WIDTH(0x0a76, 1), // U+000a76
NEW_WIDTH(0x0a81, 0), // U+000a81
NEW_WIDTH(0x0a83, 1), // U+000a83
NEW_WIDTH(0x0abc, 0), // U+000abc
NEW_WIDTH(0x0abd, 1), // U+000abd
NEW_WIDTH(0x0ac1, 0), // U+000ac1
NEW_WIDTH(0x0ac6, 1), // U+000ac6
NEW_WIDTH(0x0ac7, 0), // U+000ac7
NEW_WIDTH(0x0ac9, 1), // U+000ac9
NEW_WIDTH(0x0acd, 0), // U+000acd
NEW_WIDTH(0x0ace, 1), // U+000ace
NEW_WIDTH(0x0ae2, 0), // U+000ae2
NEW_WIDTH(0x0ae4, 1), // U+000ae4
NEW_WIDTH(0x0afa, 0), // U+000afa
NEW_WIDTH(0x0b00, 1), // U+000b00
NEW_WIDTH(0x0b01, 0), // U+000b01
NEW_WIDTH(0x0b02, 1), // U+000b02
NEW_WIDTH(0x0b3c, 0), // U+000b3c
NEW_WIDTH(0x0b3d, 1), // U+000b3d
NEW_WIDTH(0x0b3f, 0), // U+000b3f
NEW_WIDTH(0x0b40, 1), // U+000b40
NEW_WIDTH(0x0b41, 0), // U+000b41
NEW_WIDTH(0x0b45, 1), // U+000b45
NEW_WIDTH(0x0b4d, 0), // U+000b4d
NEW_WIDTH(0x0b4e, 1), // U+000b4e
NEW_WIDTH(0x0b55, 0), // U+000b55
NEW_WIDTH(0x0b57, 1), // U+000b57
NEW_WIDTH(0x0b62, 0), // U+000b62
NEW_WIDTH(0x0b64, 1), // U+000b64
NEW_WIDTH(0x0b82, 0), // U+000b82
NEW_WIDTH(0x0b83, 1), // U+000b83
NEW_WIDTH(0x0bc0, 0), // U+000bc0
NEW_WIDTH(0x0bc1, 1), // U+000bc1
NEW_WIDTH(0x0bcd, 0), // U+000bcd
NEW_WIDTH(0x0bce, 1), // U+000bce
NEW_WIDTH(0x0c00, 0), // U+000c00
NEW_WIDTH(0x0c01, 1), // U+000c01
NEW_WIDTH(0x0c04, 0), // U+000c04
NEW_WIDTH(0x0c05, 1), // U+000c05
NEW_WIDTH(0x0c3c, 0), // U+000c3c
NEW_WIDTH(0x0c3d, 1), // U+000c3d
NEW_WIDTH(0x0c3e, 0), // U+000c3e
NEW_WIDTH(0x0c41, 1), // U+000c41
NEW_WIDTH(0x0c46, 0), // U+000c46
NEW_WIDTH(0x0c49, 1), // U+000c49
NEW_WIDTH(0x0c4a, 0), // U+000c4a
NEW_WIDTH(0x0c4e, 1), // U+000c4e
NEW_WIDTH(0x0c55, 0), // U+000c55
NEW_WIDTH(0x0c57, 1), // U+000c57
NEW_WIDTH(0x0c62, 0), // U+000c62
NEW_WIDTH(0x0c64, 1), // U+000c64
NEW_WIDTH(0x0c81, 0), // U+000c81
NEW_WIDTH(0x0c82, 1), // U+000c82
NEW_WIDTH(0x0cbc, 0), // U+000cbc
NEW_WIDTH(0x0cbd, 1), // U+000cbd
NEW_WIDTH(0x0cbf, 0), // U+000cbf
NEW_WIDTH(0x0cc0, 1), // U+000cc0
NEW_WIDTH(0x0cc6, 0), // U+000cc6
NEW_WIDTH(0x0cc7, 1), // U+000cc7
NEW_WIDTH(0x0ccc, 0), // U+000ccc
NEW_WIDTH(0x0cce, 1), // U+000cce
NEW_WIDTH(0x0ce2, 0), // U+000ce2
NEW_WIDTH(0x0ce4, 1), // U+000ce4
NEW_WIDTH(0x0d00, 0), // U+000d00
NEW_WIDTH(0x0d02, 1), // U+000d02
NEW_WIDTH(0x0d3b, 0), // U+000d3b
NEW_WIDTH(0x0d3d, 1), // U+000d3d
NEW_WIDTH(0x0d41, 0), // U+000d41
NEW_WIDTH(0x0d45, 1), // U+000d45
NEW_WIDTH(0x0d4d, 0), // U+000d4d
NEW_WIDTH(0x0d4e, 1), // U+000d4e
NEW_WIDTH(0x0d62, 0), // U+000d62
NEW_WIDTH(0x0d64, 1), // U+000d64
NEW_WIDTH(0x0d81, 0), // U+000d81
NEW_WIDTH(0x0d82, 1), // U+000d82
NEW_WIDTH(0x0dca, 0), // U+000dca
NEW_WIDTH(0x0dcb, 1), // U+000dcb
NEW_WIDTH(0x0dd2, 0), // U+000dd2
NEW_WIDTH(0x0dd5, 1), // U+000dd5
NEW_WIDTH(0x0dd6, 0), // U+000dd6
NEW_WIDTH(0x0dd7, 1), // U+000dd7
NEW_WIDTH(0x0e31, 0), // U+000e31
NEW_WIDTH(0x0e32, 1), // U+000e32
NEW_WIDTH(0x0e34, 0), // U+000e34
NEW_WIDTH(0x0e3b, 1), // U+000e3b
NEW_WIDTH(0x0e47, 0), // U+000e47
NEW_WIDTH(0x0e4f, 1), // U+000e4f
NEW_WIDTH(0x0eb1, 0), // U+000eb1
NEW_WIDTH(0x0eb2, 1), // U+000eb2
NEW_WIDTH(0x0eb4, 0), // U+000eb4
NEW_WIDTH(0x0ebd, 1), // U+000ebd
NEW_WIDTH(0x0ec8, 0), // U+000ec8
NEW_WIDTH(0x0ece, 1), // U+000ece
NEW_WIDTH(0x0f18, 0), // U+000f18
NEW_WIDTH(0x0f1a, 1), // U+000f1a
NEW_WIDTH(0x0f35, 0), // U+000f35
NEW_WIDTH(0x0f36, 1), // U+000f36
NEW_WIDTH(0x0f37, 0), // U+000f37
NEW_WIDTH(0x0f38, 1), // U+000f38
NEW_WIDTH(0x0f39, 0), // U+000f39
NEW_WIDTH(0x0f3a, 1), // U+000f3a
NEW_WIDTH(0x0f71, 0), // U+000f71
NEW_WIDTH(0x0f7f, 1), // U+000f7f
NEW_WIDTH(0x0f80, 0), // U+000f80
NEW_WIDTH(0x0f85, 1), // U+000f85
NEW_WIDTH(0x0f86, 0), // U+000f86
NEW_WIDTH(0x0f88, 1), // U+000f88
NEW_WIDTH(0x0f8d, 0), // U+000f8d
NEW_WIDTH(0x0f98, 1), // U+000f98
NEW_WIDTH(0x0f99, 0), // U+000f99
NEW_WIDTH(0x0fbd, 1), // U+000fbd
NEW_WIDTH(0x0fc6, 0), // U+000fc6
NEW_WIDTH(0x0fc7, 1), // U+000fc7
NEW_WIDTH(0x102d, 0), // U+00102d
NEW_WIDTH(0x1031, 1), // U+001031
NEW_WIDTH(0x1032, 0), // U+001032
NEW_WIDTH(0x1038, 1), // U+001038
NEW_WIDTH(0x1039, 0), // U+001039
NEW_WIDTH(0x103b, 1), // U+00103b
NEW_WIDTH(0x103d, 0), // U+00103d
NEW_WIDTH(0x103f, 1), // U+00103f
NEW_WIDTH(0x1058, 0), // U+001058
NEW_WIDTH(0x105a, 1), // U+00105a
NEW_WIDTH(0x105e, 0), // U+00105e
NEW_WIDTH(0x1061, 1), // U+001061
NEW_WIDTH(0x1071, 0), // U+001071
NEW_WIDTH(0x1075, 1), // U+001075
NEW_WIDTH(0x1082, 0), // U+001082
NEW_WIDTH(0x1083, 1), // U+001083
NEW_WIDTH(0x1085, 0), // U+001085
NEW_WIDTH(0x1087, 1), // U+001087
NEW_WIDTH(0x108d, 0), // U+00108d
NEW_WIDTH(0x108e, 1), // U+00108e
NEW_WIDTH(0x109d, 0), // U+00109d
NEW_WIDTH(0x109e, 1), // U+00109e
NEW_WIDTH(0x1100, 2), // U+001100
NEW_WIDTH(0x1160, 0), // U+001160
NEW_WIDTH(0x1200, 1), // U+001200
NEW_WIDTH(0x135d, 0), // U+00135d
NEW_WIDTH(0x1360, 1), // U+001360
NEW_WIDTH(0x1712, 0), // U+001712
NEW_WIDTH(0x1715, 1), // U+001715
NEW_WIDTH(0x1732, 0), // U+001732
NEW_WIDTH(0x1734, 1), // U+001734
NEW_WIDTH(0x1752, 0), // U+001752
NEW_WIDTH(0x1754, 1), // U+001754
NEW_WIDTH(0x1772, 0), // U+001772
NEW_WIDTH(0x1774, 1), // U+001774
NEW_WIDTH(0x17b4, 0), // U+0017b4
NEW_WIDTH(0x17b6, 1), // U+0017b6
NEW_WIDTH(0x17b7, 0), // U+0017b7
NEW_WIDTH(0x17be, 1), // U+0017be
NEW_WIDTH(0x17c6, 0), // U+0017c6
NEW_WIDTH(0x17c7, 1), // U+0017c7
NEW_WIDTH(0x17c9, 0), // U+0017c9
NEW_WIDTH(0x17d4, 1), // U+0017d4
NEW_WIDTH(0x17dd, 0), // U+0017dd
NEW_WIDTH(0x17de, 1), // U+0017de
NEW_WIDTH(0x180b, 0), // U+00180b
NEW_WIDTH(0x1810, 1), // U+001810
NEW_WIDTH(0x1885, 0), // U+001885
NEW_WIDTH(0x1887, 1), // U+001887
NEW_WIDTH(0x18a9, 0), // U+0018a9
NEW_WIDTH(0x18aa, 1), // U+0018aa
NEW_WIDTH(0x1920, 0), // U+001920
NEW_WIDTH(0x1923, 1), // U+001923
NEW_WIDTH(0x1927, 0), // U+001927
NEW_WIDTH(0x1929, 1), // U+001929
NEW_WIDTH(0x1932, 0), // U+001932
NEW_WIDTH(0x1933, 1), // U+001933
NEW_WIDTH(0x1939, 0), // U+001939
NEW_WIDTH(0x193c, 1), // U+00193c
NEW_WIDTH(0x1a17, 0), // U+001a17
NEW_WIDTH(0x1a19, 1), // U+001a19
NEW_WIDTH(0x1a1b, 0), // U+001a1b
NEW_WIDTH(0x1a1c, 1), // U+001a1c
NEW_WIDTH(0x1a56, 0), // U+001a56
NEW_WIDTH(0x1a57, 1), // U+001a57
NEW_WIDTH(0x1a58, 0), // U+001a58
NEW_WIDTH(0x1a5f, 1), // U+001a5f
NEW_WIDTH(0x1a60, 0), // U+001a60
NEW_WIDTH(0x1a61, 1), // U+001a61
NEW_WIDTH(0x1a62, 0), // U+001a62
NEW_WIDTH(0x1a63, 1), // U+001a63
NEW_WIDTH(0x1a65, 0), // U+001a65
NEW_WIDTH(0x1a6d, 1), // U+001a6d
NEW_WIDTH(0x1a73, 0), // U+001a73
NEW_WIDTH(0x1a7d, 1), // U+001a7d
NEW_WIDTH(0x1a7f, 0), // U+001a7f
NEW_WIDTH(0x1a80, 1), // U+001a80
NEW_WIDTH(0x1ab0, 0), // U+001ab0
NEW_WIDTH(0x1acf, 1), // U+001acf
NEW_WIDTH(0x1b00, 0), // U+001b00
NEW_WIDTH(0x1b04, 1), // U+001b04
NEW_WIDTH(0x1b34, 0), // U+001b34
NEW_WIDTH(0x1b35, 1), // U+001b35
NEW_WIDTH(0x1b36, 0), // U+001b36
NEW_WIDTH(0x1b3b, 1), // U+001b3b
NEW_WIDTH(0x1b3c, 0), // U+001b3c
NEW_WIDTH(0x1b3d, 1), // U+001b3d
NEW_WIDTH(0x1b42, 0), // U+001b42
NEW_WIDTH(0x1b43, 1), // U+001b43
NEW_WIDTH(0x1b6b, 0), // U+001b6b
NEW_WIDTH(0x1b74, 1), // U+001b74
NEW_WIDTH(0x1b80, 0), // U+001b80
NEW_WIDTH(0x1b82, 1), // U+001b82
NEW_WIDTH(0x1ba2, 0), // U+001ba2
NEW_WIDTH(0x1ba6, 1), // U+001ba6
NEW_WIDTH(0x1ba8, 0), // U+001ba8
NEW_WIDTH(0x1baa, 1), // U+001baa
NEW_WIDTH(0x1bab, 0), // U+001bab
NEW_WIDTH(0x1bae, 1), // U+001bae
NEW_WIDTH(0x1be6, 0), // U+001be6
NEW_WIDTH(0x1be7, 1), // U+001be7
NEW_WIDTH(0x1be8, 0), // U+001be8
NEW_WIDTH(0x1bea, 1), // U+001bea
NEW_WIDTH(0x1bed, 0), // U+001bed
NEW_WIDTH(0x1bee, 1), // U+001bee
NEW_WIDTH(0x1bef, 0), // U+001bef
NEW_WIDTH(0x1bf2, 1), // U+001bf2
NEW_WIDTH(0x1c2c, 0), // U+001c2c
NEW_WIDTH(0x1c34, 1), // U+001c34
NEW_WIDTH(0x1c36, 0), // U+001c36
NEW_WIDTH(0x1c38, 1), // U+001c38
NEW_WIDTH(0x1cd0, 0), // U+001cd0
NEW_WIDTH(0x1cd3, 1), // U+001cd3
NEW_WIDTH(0x1cd4, 0), // U+001cd4
NEW_WIDTH(0x1ce1, 1), // U+001ce1
NEW_WIDTH(0x1ce2, 0), // U+001ce2
NEW_WIDTH(0x1ce9, 1), // U+001ce9
NEW_WIDTH(0x1ced, 0), // U+001ced
NEW_WIDTH(0x1cee, 1), // U+001cee
NEW_WIDTH(0x1cf4, 0), // U+001cf4
NEW_WIDTH(0x1cf5, 1), // U+001cf5
NEW_WIDTH(0x1cf8, 0), // U+001cf8
NEW_WIDTH(0x1cfa, 1), // U+001cfa
NEW_WIDTH(0x1dc0, 0), // U+001dc0
NEW_WIDTH(0x1e00, 1), // U+001e00
NEW_WIDTH(0x200b, 0), // U+00200b
NEW_WIDTH(0x2010, 1), // U+002010
NEW_WIDTH(0x202a, 0), // U+00202a
NEW_WIDTH(0x202f, 1), // U+00202f
NEW_WIDTH(0x2060, 0), // U+002060
NEW_WIDTH(0x2065, 1), // U+002065
NEW_WIDTH(0x2066, 0), // U+002066
NEW_WIDTH(0x2070, 1), // U+002070
NEW_WIDTH(0x20d0, 0), // U+0020d0
NEW_WIDTH(0x20f1, 1), // U+0020f1
NEW_WIDTH(0x231a, 2), // U+00231a
NEW_WIDTH(0x231c, 1), // U+00231c
NEW_WIDTH(0x2329, 2), // U+002329
NEW_WIDTH(0x232b, 1), // U+00232b
NEW_WIDTH(0x23e9, 2), // U+0023e9
NEW_WIDTH(0x23ed, 1), // U+0023ed
NEW_WIDTH(0x23f0, 2), // U+0023f0
NEW_WIDTH(0x23f1, 1), // U+0023f1
NEW_WIDTH(0x23f3, 2), // U+0023f3
NEW_WIDTH(0x23f4, 1), // U+0023f4
NEW_WIDTH(0x25fd, 2), // U+0025fd
NEW_WIDTH(0x25ff, 1), // U+0025ff
NEW_WIDTH(0x2614, 2), // U+002614
NEW_WIDTH(0x2616, 1), // U+002616
NEW_WIDTH(0x2648, 2), // U+002648
NEW_WIDTH(0x2654, 1), // U+002654
NEW_WIDTH(0x267f, 2), // U+00267f
NEW_WIDTH(0x2680, 1), // U+002680
NEW_WIDTH(0x2693, 2), // U+002693
NEW_WIDTH(0x2694, 1), // U+002694
NEW_WIDTH(0x26a1, 2), // U+0026a1
NEW_WIDTH(0x26a2, 1), // U+0026a2
NEW_WIDTH(0x26aa, 2), // U+0026aa
NEW_WIDTH(0x26ac, 1), // U+0026ac
NEW_WIDTH(0x26bd, 2), // U+0026bd
NEW_WIDTH(0x26bf, 1), // U+0026bf
NEW_WIDTH(0x26c4, 2), // U+0026c4
NEW_WIDTH(0x26c6, 1), // U+0026c6
NEW_WIDTH(0x26ce, 2), // U+0026ce
NEW_WIDTH(0x26cf, 1), // U+0026cf
NEW_WIDTH(0x26d4, 2), // U+0026d4
NEW_WIDTH(0x26d5, 1), // U+0026d5
NEW_WIDTH(0x26ea, 2), // U+0026ea
NEW_WIDTH(0x26eb, 1), // U+0026eb
NEW_WIDTH(0x26f2, 2), // U+0026f2
NEW_WIDTH(0x26f4, 1), // U+0026f4
NEW_WIDTH(0x26f5, 2), // U+0026f5
NEW_WIDTH(0x26f6, 1), // U+0026f6
NEW_WIDTH(0x26fa, 2), // U+0026fa
NEW_WIDTH(0x26fb, 1), // U+0026fb
NEW_WIDTH(0x26fd, 2), // U+0026fd
NEW_WIDTH(0x26fe, 1), // U+0026fe
NEW_WIDTH(0x2705, 2), // U+002705
NEW_WIDTH(0x2706, 1), // U+002706
NEW_WIDTH(0x270a, 2), // U+00270a
NEW_WIDTH(0x270c, 1), // U+00270c
NEW_WIDTH(0x2728, 2), // U+002728
NEW_WIDTH(0x2729, 1), // U+002729
NEW_WIDTH(0x274c, 2), // U+00274c
NEW_WIDTH(0x274d, 1), // U+00274d
NEW_WIDTH(0x274e, 2), // U+00274e
NEW_WIDTH(0x274f, 1), // U+00274f
NEW_WIDTH(0x2753, 2), // U+002753
NEW_WIDTH(0x2756, 1), // U+002756
NEW_WIDTH(0x2757, 2), // U+002757
NEW_WIDTH(0x2758, 1), // U+002758
NEW_WIDTH(0x2795, 2), // U+002795
NEW_WIDTH(0x2798, 1), // U+002798
NEW_WIDTH(0x27b0, 2), // U+0027b0
NEW_WIDTH(0x27b1, 1), // U+0027b1
NEW_WIDTH(0x27bf, 2), // U+0027bf
NEW_WIDTH(0x27c0, 1), // U+0027c0
NEW_WIDTH(0x2b1b, 2), // U+002b1b
NEW_WIDTH(0x2b1d, 1), // U+002b1d
NEW_WIDTH(0x2b50, 2), // U+002b50
NEW_WIDTH(0x2b51, 1), // U+002b51
NEW_WIDTH(0x2b55, 2), // U+002b55
NEW_WIDTH(0x2b56, 1), // U+002b56
NEW_WIDTH(0x2cef, 0), // U+002cef
NEW_WIDTH(0x2cf2, 1), // U+002cf2
NEW_WIDTH(0x2d7f, 0), // U+002d7f
NEW_WIDTH(0x2d80, 1), // U+002d80
NEW_WIDTH(0x2de0, 0), // U+002de0
NEW_WIDTH(0x2e00, 1), // U+002e00
NEW_WIDTH(0x2e80, 2), // U+002e80
NEW_WIDTH(0x2e9a, 1), // U+002e9a
NEW_WIDTH(0x2e9b, 2), // U+002e9b
NEW_WIDTH(0x2ef4, 1), // U+002ef4
NEW_WIDTH(0x2f00, 2), // U+002f00
NEW_WIDTH(0x2fd6, 1), // U+002fd6
NEW_WIDTH(0x2ff0, 2), // U+002ff0
NEW_WIDTH(0x2ffc, 1), // U+002ffc
NEW_WIDTH(0x3000, 2), // U+003000
NEW_WIDTH(0x302a, 0), // U+00302a
NEW_WIDTH(0x302e, 2), // U+00302e
NEW_WIDTH(0x303f, 1), // U+00303f
NEW_WIDTH(0x3041, 2), // U+003041
NEW_WIDTH(0x3097, 1), // U+003097
NEW_WIDTH(0x3099, 0), // U+003099
NEW_WIDTH(0x309b, 2), // U+00309b
NEW_WIDTH(0x3100, 1), // U+003100
NEW_WIDTH(0x3105, 2), // U+003105
NEW_WIDTH(0x3130, 1), // U+003130
NEW_WIDTH(0x3131, 2), // U+003131
NEW_WIDTH(0x318f, 1), // U+00318f
NEW_WIDTH(0x3190, 2), // U+003190
NEW_WIDTH(0x31e4, 1), // U+0031e4
NEW_WIDTH(0x31f0, 2), // U+0031f0
NEW_WIDTH(0x321f, 1), // U+00321f
NEW_WIDTH(0x3220, 2), // U+003220
NEW_WIDTH(0x3248, 1), // U+003248
NEW_WIDTH(0x3250, 2), // U+003250
// U+004000,
NEW_WIDTH(0x0000, 2), // U+004000
NEW_WIDTH(0x0dc0, 1), // U+004dc0
NEW_WIDTH(0x0e00, 2), // U+004e00
// U+008000,
NEW_WIDTH(0x0000, 2), // U+008000
NEW_WIDTH(0x248d, 1), // U+00a48d
NEW_WIDTH(0x2490, 2), // U+00a490
NEW_WIDTH(0x24c7, 1), // U+00a4c7
NEW_WIDTH(0x266f, 0), // U+00a66f
NEW_WIDTH(0x2673, 1), // U+00a673
NEW_WIDTH(0x2674, 0), // U+00a674
NEW_WIDTH(0x267e, 1), // U+00a67e
NEW_WIDTH(0x269e, 0), // U+00a69e
NEW_WIDTH(0x26a0, 1), // U+00a6a0
NEW_WIDTH(0x26f0, 0), // U+00a6f0
NEW_WIDTH(0x26f2, 1), // U+00a6f2
NEW_WIDTH(0x2802, 0), // U+00a802
NEW_WIDTH(0x2803, 1), // U+00a803
NEW_WIDTH(0x2806, 0), // U+00a806
NEW_WIDTH(0x2807, 1), // U+00a807
NEW_WIDTH(0x280b, 0), // U+00a80b
NEW_WIDTH(0x280c, 1), // U+00a80c
NEW_WIDTH(0x2825, 0), // U+00a825
NEW_WIDTH(0x2827, 1), // U+00a827
NEW_WIDTH(0x282c, 0), // U+00a82c
NEW_WIDTH(0x282d, 1), // U+00a82d
NEW_WIDTH(0x28c4, 0), // U+00a8c4
NEW_WIDTH(0x28c6, 1), // U+00a8c6
NEW_WIDTH(0x28e0, 0), // U+00a8e0
NEW_WIDTH(0x28f2, 1), // U+00a8f2
NEW_WIDTH(0x28ff, 0), // U+00a8ff
NEW_WIDTH(0x2900, 1), // U+00a900
NEW_WIDTH(0x2926, 0), // U+00a926
NEW_WIDTH(0x292e, 1), // U+00a92e
NEW_WIDTH(0x2947, 0), // U+00a947
NEW_WIDTH(0x2952, 1), // U+00a952
NEW_WIDTH(0x2960, 2), // U+00a960
NEW_WIDTH(0x297d, 1), // U+00a97d
NEW_WIDTH(0x2980, 0), // U+00a980
NEW_WIDTH(0x2983, 1), // U+00a983
NEW_WIDTH(0x29b3, 0), // U+00a9b3
NEW_WIDTH(0x29b4, 1), // U+00a9b4
NEW_WIDTH(0x29b6, 0), // U+00a9b6
NEW_WIDTH(0x29ba, 1), // U+00a9ba
NEW_WIDTH(0x29bc, 0), // U+00a9bc
NEW_WIDTH(0x29be, 1), // U+00a9be
NEW_WIDTH(0x29e5, 0), // U+00a9e5
NEW_WIDTH(0x29e6, 1), // U+00a9e6
NEW_WIDTH(0x2a29, 0), // U+00aa29
NEW_WIDTH(0x2a2f, 1), // U+00aa2f
NEW_WIDTH(0x2a31, 0), // U+00aa31
NEW_WIDTH(0x2a33, 1), // U+00aa33
NEW_WIDTH(0x2a35, 0), // U+00aa35
NEW_WIDTH(0x2a37, 1), // U+00aa37
NEW_WIDTH(0x2a43, 0), // U+00aa43
NEW_WIDTH(0x2a44, 1), // U+00aa44
NEW_WIDTH(0x2a4c, 0), // U+00aa4c
NEW_WIDTH(0x2a4d, 1), // U+00aa4d
NEW_WIDTH(0x2a7c, 0), // U+00aa7c
NEW_WIDTH(0x2a7d, 1), // U+00aa7d
NEW_WIDTH(0x2ab0, 0), // U+00aab0
NEW_WIDTH(0x2ab1, 1), // U+00aab1
NEW_WIDTH(0x2ab2, 0), // U+00aab2
NEW_WIDTH(0x2ab5, 1), // U+00aab5
NEW_WIDTH(0x2ab7, 0), // U+00aab7
NEW_WIDTH(0x2ab9, 1), // U+00aab9
NEW_WIDTH(0x2abe, 0), // U+00aabe
NEW_WIDTH(0x2ac0, 1), // U+00aac0
NEW_WIDTH(0x2ac1, 0), // U+00aac1
NEW_WIDTH(0x2ac2, 1), // U+00aac2
NEW_WIDTH(0x2aec, 0), // U+00aaec
NEW_WIDTH(0x2aee, 1), // U+00aaee
NEW_WIDTH(0x2af6, 0), // U+00aaf6
NEW_WIDTH(0x2af7, 1), // U+00aaf7
NEW_WIDTH(0x2be5, 0), // U+00abe5
NEW_WIDTH(0x2be6, 1), // U+00abe6
NEW_WIDTH(0x2be8, 0), // U+00abe8
NEW_WIDTH(0x2be9, 1), // U+00abe9
NEW_WIDTH(0x2bed, 0), // U+00abed
NEW_WIDTH(0x2bee, 1), // U+00abee
NEW_WIDTH(0x2c00, 2), // U+00ac00
// U+00c000,
NEW_WIDTH(0x0000, 2), // U+00c000
NEW_WIDTH(0x17a4, 1), // U+00d7a4
NEW_WIDTH(0x3900, 2), // U+00f900
NEW_WIDTH(0x3b00, 1), // U+00fb00
NEW_WIDTH(0x3b1e, 0), // U+00fb1e
NEW_WIDTH(0x3b1f, 1), // U+00fb1f
NEW_WIDTH(0x3e00, 0), // U+00fe00
NEW_WIDTH(0x3e10, 2), // U+00fe10
NEW_WIDTH(0x3e1a, 1), // U+00fe1a
NEW_WIDTH(0x3e20, 0), // U+00fe20
NEW_WIDTH(0x3e30, 2), // U+00fe30
NEW_WIDTH(0x3e53, 1), // U+00fe53
NEW_WIDTH(0x3e54, 2), // U+00fe54
NEW_WIDTH(0x3e67, 1), // U+00fe67
NEW_WIDTH(0x3e68, 2), // U+00fe68
NEW_WIDTH(0x3e6c, 1), // U+00fe6c
NEW_WIDTH(0x3eff, 0), // U+00feff
NEW_WIDTH(0x3f00, 1), // U+00ff00
NEW_WIDTH(0x3f01, 2), // U+00ff01
NEW_WIDTH(0x3f61, 1), // U+00ff61
NEW_WIDTH(0x3fe0, 2), // U+00ffe0
NEW_WIDTH(0x3fe7, 1), // U+00ffe7
NEW_WIDTH(0x3ff9, 0), // U+00fff9
NEW_WIDTH(0x3ffc, 1), // U+00fffc
// U+010000,
NEW_WIDTH(0x0000, 1), // U+010000
NEW_WIDTH(0x01fd, 0), // U+0101fd
NEW_WIDTH(0x01fe, 1), // U+0101fe
NEW_WIDTH(0x02e0, 0), // U+0102e0
NEW_WIDTH(0x02e1, 1), // U+0102e1
NEW_WIDTH(0x0376, 0), // U+010376
NEW_WIDTH(0x037b, 1), // U+01037b
NEW_WIDTH(0x0a01, 0), // U+010a01
NEW_WIDTH(0x0a04, 1), // U+010a04
NEW_WIDTH(0x0a05, 0), // U+010a05
NEW_WIDTH(0x0a07, 1), // U+010a07
NEW_WIDTH(0x0a0c, 0), // U+010a0c
NEW_WIDTH(0x0a10, 1), // U+010a10
NEW_WIDTH(0x0a38, 0), // U+010a38
NEW_WIDTH(0x0a3b, 1), // U+010a3b
NEW_WIDTH(0x0a3f, 0), // U+010a3f
NEW_WIDTH(0x0a40, 1), // U+010a40
NEW_WIDTH(0x0ae5, 0), // U+010ae5
NEW_WIDTH(0x0ae7, 1), // U+010ae7
NEW_WIDTH(0x0d24, 0), // U+010d24
NEW_WIDTH(0x0d28, 1), // U+010d28
NEW_WIDTH(0x0eab, 0), // U+010eab
NEW_WIDTH(0x0ead, 1), // U+010ead
NEW_WIDTH(0x0f46, 0), // U+010f46
NEW_WIDTH(0x0f51, 1), // U+010f51
NEW_WIDTH(0x0f82, 0), // U+010f82
NEW_WIDTH(0x0f86, 1), // U+010f86
NEW_WIDTH(0x1001, 0), // U+011001
NEW_WIDTH(0x1002, 1), // U+011002
NEW_WIDTH(0x1038, 0), // U+011038
NEW_WIDTH(0x1047, 1), // U+011047
NEW_WIDTH(0x1070, 0), // U+011070
NEW_WIDTH(0x1071, 1), // U+011071
NEW_WIDTH(0x1073, 0), // U+011073
NEW_WIDTH(0x1075, 1), // U+011075
NEW_WIDTH(0x107f, 0), // U+01107f
NEW_WIDTH(0x1082, 1), // U+011082
NEW_WIDTH(0x10b3, 0), // U+0110b3
NEW_WIDTH(0x10b7, 1), // U+0110b7
NEW_WIDTH(0x10b9, 0), // U+0110b9
NEW_WIDTH(0x10bb, 1), // U+0110bb
NEW_WIDTH(0x10bd, 0), // U+0110bd
NEW_WIDTH(0x10be, 1), // U+0110be
NEW_WIDTH(0x10c2, 0), // U+0110c2
NEW_WIDTH(0x10c3, 1), // U+0110c3
NEW_WIDTH(0x10cd, 0), // U+0110cd
NEW_WIDTH(0x10ce, 1), // U+0110ce
NEW_WIDTH(0x1100, 0), // U+011100
NEW_WIDTH(0x1103, 1), // U+011103
NEW_WIDTH(0x1127, 0), // U+011127
NEW_WIDTH(0x112c, 1), // U+01112c
NEW_WIDTH(0x112d, 0), // U+01112d
NEW_WIDTH(0x1135, 1), // U+011135
NEW_WIDTH(0x1173, 0), // U+011173
NEW_WIDTH(0x1174, 1), // U+011174
NEW_WIDTH(0x1180, 0), // U+011180
NEW_WIDTH(0x1182, 1), // U+011182
NEW_WIDTH(0x11b6, 0), // U+0111b6
NEW_WIDTH(0x11bf, 1), // U+0111bf
NEW_WIDTH(0x11c9, 0), // U+0111c9
NEW_WIDTH(0x11cd, 1), // U+0111cd
NEW_WIDTH(0x11cf, 0), // U+0111cf
NEW_WIDTH(0x11d0, 1), // U+0111d0
NEW_WIDTH(0x122f, 0), // U+01122f
NEW_WIDTH(0x1232, 1), // U+011232
NEW_WIDTH(0x1234, 0), // U+011234
NEW_WIDTH(0x1235, 1), // U+011235
NEW_WIDTH(0x1236, 0), // U+011236
NEW_WIDTH(0x1238, 1), // U+011238
NEW_WIDTH(0x123e, 0), // U+01123e
NEW_WIDTH(0x123f, 1), // U+01123f
NEW_WIDTH(0x12df, 0), // U+0112df
NEW_WIDTH(0x12e0, 1), // U+0112e0
NEW_WIDTH(0x12e3, 0), // U+0112e3
NEW_WIDTH(0x12eb, 1), // U+0112eb
NEW_WIDTH(0x1300, 0), // U+011300
NEW_WIDTH(0x1302, 1), // U+011302
NEW_WIDTH(0x133b, 0), // U+01133b
NEW_WIDTH(0x133d, 1), // U+01133d
NEW_WIDTH(0x1340, 0), // U+011340
NEW_WIDTH(0x1341, 1), // U+011341
NEW_WIDTH(0x1366, 0), // U+011366
NEW_WIDTH(0x136d, 1), // U+01136d
NEW_WIDTH(0x1370, 0), // U+011370
NEW_WIDTH(0x1375, 1), // U+011375
NEW_WIDTH(0x1438, 0), // U+011438
NEW_WIDTH(0x1440, 1), // U+011440
NEW_WIDTH(0x1442, 0), // U+011442
NEW_WIDTH(0x1445, 1), // U+011445
NEW_WIDTH(0x1446, 0), // U+011446
NEW_WIDTH(0x1447, 1), // U+011447
NEW_WIDTH(0x145e, 0), // U+01145e
NEW_WIDTH(0x145f, 1), // U+01145f
NEW_WIDTH(0x14b3, 0), // U+0114b3
NEW_WIDTH(0x14b9, 1), // U+0114b9
NEW_WIDTH(0x14ba, 0), // U+0114ba
NEW_WIDTH(0x14bb, 1), // U+0114bb
NEW_WIDTH(0x14bf, 0), // U+0114bf
NEW_WIDTH(0x14c1, 1), // U+0114c1
NEW_WIDTH(0x14c2, 0), // U+0114c2
NEW_WIDTH(0x14c4, 1), // U+0114c4
NEW_WIDTH(0x15b2, 0), // U+0115b2
NEW_WIDTH(0x15b6, 1), // U+0115b6
NEW_WIDTH(0x15bc, 0), // U+0115bc
NEW_WIDTH(0x15be, 1), // U+0115be
NEW_WIDTH(0x15bf, 0), // U+0115bf
NEW_WIDTH(0x15c1, 1), // U+0115c1
NEW_WIDTH(0x15dc, 0), // U+0115dc
NEW_WIDTH(0x15de, 1), // U+0115de
NEW_WIDTH(0x1633, 0), // U+011633
NEW_WIDTH(0x163b, 1), // U+01163b
NEW_WIDTH(0x163d, 0), // U+01163d
NEW_WIDTH(0x163e, 1), // U+01163e
NEW_WIDTH(0x163f, 0), // U+01163f
NEW_WIDTH(0x1641, 1), // U+011641
NEW_WIDTH(0x16ab, 0), // U+0116ab
NEW_WIDTH(0x16ac, 1), // U+0116ac
NEW_WIDTH(0x16ad, 0), // U+0116ad
NEW_WIDTH(0x16ae, 1), // U+0116ae
NEW_WIDTH(0x16b0, 0), // U+0116b0
NEW_WIDTH(0x16b6, 1), // U+0116b6
NEW_WIDTH(0x16b7, 0), // U+0116b7
NEW_WIDTH(0x16b8, 1), // U+0116b8
NEW_WIDTH(0x171d, 0), // U+01171d
NEW_WIDTH(0x1720, 1), // U+011720
NEW_WIDTH(0x1722, 0), // U+011722
NEW_WIDTH(0x1726, 1), // U+011726
NEW_WIDTH(0x1727, 0), // U+011727
NEW_WIDTH(0x172c, 1), // U+01172c
NEW_WIDTH(0x182f, 0), // U+01182f
NEW_WIDTH(0x1838, 1), // U+011838
NEW_WIDTH(0x1839, 0), // U+011839
NEW_WIDTH(0x183b, 1), // U+01183b
NEW_WIDTH(0x193b, 0), // U+01193b
NEW_WIDTH(0x193d, 1), // U+01193d
NEW_WIDTH(0x193e, 0), // U+01193e
NEW_WIDTH(0x193f, 1), // U+01193f
NEW_WIDTH(0x1943, 0), // U+011943
NEW_WIDTH(0x1944, 1), // U+011944
NEW_WIDTH(0x19d4, 0), // U+0119d4
NEW_WIDTH(0x19d8, 1), // U+0119d8
NEW_WIDTH(0x19da, 0), // U+0119da
NEW_WIDTH(0x19dc, 1), // U+0119dc
NEW_WIDTH(0x19e0, 0), // U+0119e0
NEW_WIDTH(0x19e1, 1), // U+0119e1
NEW_WIDTH(0x1a01, 0), // U+011a01
NEW_WIDTH(0x1a0b, 1), // U+011a0b
NEW_WIDTH(0x1a33, 0), // U+011a33
NEW_WIDTH(0x1a39, 1), // U+011a39
NEW_WIDTH(0x1a3b, 0), // U+011a3b
NEW_WIDTH(0x1a3f, 1), // U+011a3f
NEW_WIDTH(0x1a47, 0), // U+011a47
NEW_WIDTH(0x1a48, 1), // U+011a48
NEW_WIDTH(0x1a51, 0), // U+011a51
NEW_WIDTH(0x1a57, 1), // U+011a57
NEW_WIDTH(0x1a59, 0), // U+011a59
NEW_WIDTH(0x1a5c, 1), // U+011a5c
NEW_WIDTH(0x1a8a, 0), // U+011a8a
NEW_WIDTH(0x1a97, 1), // U+011a97
NEW_WIDTH(0x1a98, 0), // U+011a98
NEW_WIDTH(0x1a9a, 1), // U+011a9a
NEW_WIDTH(0x1c30, 0), // U+011c30
NEW_WIDTH(0x1c37, 1), // U+011c37
NEW_WIDTH(0x1c38, 0), // U+011c38
NEW_WIDTH(0x1c3e, 1), // U+011c3e
NEW_WIDTH(0x1c3f, 0), // U+011c3f
NEW_WIDTH(0x1c40, 1), // U+011c40
NEW_WIDTH(0x1c92, 0), // U+011c92
NEW_WIDTH(0x1ca8, 1), // U+011ca8
NEW_WIDTH(0x1caa, 0), // U+011caa
NEW_WIDTH(0x1cb1, 1), // U+011cb1
NEW_WIDTH(0x1cb2, 0), // U+011cb2
NEW_WIDTH(0x1cb4, 1), // U+011cb4
NEW_WIDTH(0x1cb5, 0), // U+011cb5
NEW_WIDTH(0x1cb7, 1), // U+011cb7
NEW_WIDTH(0x1d31, 0), // U+011d31
NEW_WIDTH(0x1d37, 1), // U+011d37
NEW_WIDTH(0x1d3a, 0), // U+011d3a
NEW_WIDTH(0x1d3b, 1), // U+011d3b
NEW_WIDTH(0x1d3c, 0), // U+011d3c
NEW_WIDTH(0x1d3e, 1), // U+011d3e
NEW_WIDTH(0x1d3f, 0), // U+011d3f
NEW_WIDTH(0x1d46, 1), // U+011d46
NEW_WIDTH(0x1d47, 0), // U+011d47
NEW_WIDTH(0x1d48, 1), // U+011d48
NEW_WIDTH(0x1d90, 0), // U+011d90
NEW_WIDTH(0x1d92, 1), // U+011d92
NEW_WIDTH(0x1d95, 0), // U+011d95
NEW_WIDTH(0x1d96, 1), // U+011d96
NEW_WIDTH(0x1d97, 0), // U+011d97
NEW_WIDTH(0x1d98, 1), // U+011d98
NEW_WIDTH(0x1ef3, 0), // U+011ef3
NEW_WIDTH(0x1ef5, 1), // U+011ef5
NEW_WIDTH(0x3430, 0), // U+013430
NEW_WIDTH(0x3439, 1), // U+013439
// U+014000,
NEW_WIDTH(0x0000, 1), // U+014000
NEW_WIDTH(0x2af0, 0), // U+016af0
NEW_WIDTH(0x2af5, 1), // U+016af5
NEW_WIDTH(0x2b30, 0), // U+016b30
NEW_WIDTH(0x2b37, 1), // U+016b37
NEW_WIDTH(0x2f4f, 0), // U+016f4f
NEW_WIDTH(0x2f50, 1), // U+016f50
NEW_WIDTH(0x2f8f, 0), // U+016f8f
NEW_WIDTH(0x2f93, 1), // U+016f93
NEW_WIDTH(0x2fe0, 2), // U+016fe0
NEW_WIDTH(0x2fe4, 0), // U+016fe4
NEW_WIDTH(0x2fe5, 1), // U+016fe5
NEW_WIDTH(0x2ff0, 2), // U+016ff0
NEW_WIDTH(0x2ff2, 1), // U+016ff2
NEW_WIDTH(0x3000, 2), // U+017000
// U+018000,
NEW_WIDTH(0x0000, 2), // U+018000
NEW_WIDTH(0x07f8, 1), // U+0187f8
NEW_WIDTH(0x0800, 2), // U+018800
NEW_WIDTH(0x0cd6, 1), // U+018cd6
NEW_WIDTH(0x0d00, 2), // U+018d00
NEW_WIDTH(0x0d09, 1), // U+018d09
NEW_WIDTH(0x2ff0, 2), // U+01aff0
NEW_WIDTH(0x2ff4, 1), // U+01aff4
NEW_WIDTH(0x2ff5, 2), // U+01aff5
NEW_WIDTH(0x2ffc, 1), // U+01affc
NEW_WIDTH(0x2ffd, 2), // U+01affd
NEW_WIDTH(0x2fff, 1), // U+01afff
NEW_WIDTH(0x3000, 2), // U+01b000
NEW_WIDTH(0x3123, 1), // U+01b123
NEW_WIDTH(0x3150, 2), // U+01b150
NEW_WIDTH(0x3153, 1), // U+01b153
NEW_WIDTH(0x3164, 2), // U+01b164
NEW_WIDTH(0x3168, 1), // U+01b168
NEW_WIDTH(0x3170, 2), // U+01b170
NEW_WIDTH(0x32fc, 1), // U+01b2fc
NEW_WIDTH(0x3c9d, 0), // U+01bc9d
NEW_WIDTH(0x3c9f, 1), // U+01bc9f
NEW_WIDTH(0x3ca0, 0), // U+01bca0
NEW_WIDTH(0x3ca4, 1), // U+01bca4
// U+01c000,
NEW_WIDTH(0x0000, 1), // U+01c000
NEW_WIDTH(0x0f00, 0), // U+01cf00
NEW_WIDTH(0x0f2e, 1), // U+01cf2e
NEW_WIDTH(0x0f30, 0), // U+01cf30
NEW_WIDTH(0x0f47, 1), // U+01cf47
NEW_WIDTH(0x1167, 0), // U+01d167
NEW_WIDTH(0x116a, 1), // U+01d16a
NEW_WIDTH(0x1173, 0), // U+01d173
NEW_WIDTH(0x1183, 1), // U+01d183
NEW_WIDTH(0x1185, 0), // U+01d185
NEW_WIDTH(0x118c, 1), // U+01d18c
NEW_WIDTH(0x11aa, 0), // U+01d1aa
NEW_WIDTH(0x11ae, 1), // U+01d1ae
NEW_WIDTH(0x1242, 0), // U+01d242
NEW_WIDTH(0x1245, 1), // U+01d245
NEW_WIDTH(0x1a00, 0), // U+01da00
NEW_WIDTH(0x1a37, 1), // U+01da37
NEW_WIDTH(0x1a3b, 0), // U+01da3b
NEW_WIDTH(0x1a6d, 1), // U+01da6d
NEW_WIDTH(0x1a75, 0), // U+01da75
NEW_WIDTH(0x1a76, 1), // U+01da76
NEW_WIDTH(0x1a84, 0), // U+01da84
NEW_WIDTH(0x1a85, 1), // U+01da85
NEW_WIDTH(0x1a9b, 0), // U+01da9b
NEW_WIDTH(0x1aa0, 1), // U+01daa0
NEW_WIDTH(0x1aa1, 0), // U+01daa1
NEW_WIDTH(0x1ab0, 1), // U+01dab0
NEW_WIDTH(0x2000, 0), // U+01e000
NEW_WIDTH(0x2007, 1), // U+01e007
NEW_WIDTH(0x2008, 0), // U+01e008
NEW_WIDTH(0x2019, 1), // U+01e019
NEW_WIDTH(0x201b, 0), // U+01e01b
NEW_WIDTH(0x2022, 1), // U+01e022
NEW_WIDTH(0x2023, 0), // U+01e023
NEW_WIDTH(0x2025, 1), // U+01e025
NEW_WIDTH(0x2026, 0), // U+01e026
NEW_WIDTH(0x202b, 1), // U+01e02b
NEW_WIDTH(0x2130, 0), // U+01e130
NEW_WIDTH(0x2137, 1), // U+01e137
NEW_WIDTH(0x22ae, 0), // U+01e2ae
NEW_WIDTH(0x22af, 1), // U+01e2af
NEW_WIDTH(0x22ec, 0), // U+01e2ec
NEW_WIDTH(0x22f0, 1), // U+01e2f0
NEW_WIDTH(0x28d0, 0), // U+01e8d0
NEW_WIDTH(0x28d7, 1), // U+01e8d7
NEW_WIDTH(0x2944, 0), // U+01e944
NEW_WIDTH(0x294b, 1), // U+01e94b
NEW_WIDTH(0x3004, 2), // U+01f004
NEW_WIDTH(0x3005, 1), // U+01f005
NEW_WIDTH(0x30cf, 2), // U+01f0cf
NEW_WIDTH(0x30d0, 1), // U+01f0d0
NEW_WIDTH(0x318e, 2), // U+01f18e
NEW_WIDTH(0x318f, 1), // U+01f18f
NEW_WIDTH(0x3191, 2), // U+01f191
NEW_WIDTH(0x319b, 1), // U+01f19b
NEW_WIDTH(0x3200, 2), // U+01f200
NEW_WIDTH(0x3203, 1), // U+01f203
NEW_WIDTH(0x3210, 2), // U+01f210
NEW_WIDTH(0x323c, 1), // U+01f23c
NEW_WIDTH(0x3240, 2), // U+01f240
NEW_WIDTH(0x3249, 1), // U+01f249
NEW_WIDTH(0x3250, 2), // U+01f250
NEW_WIDTH(0x3252, 1), // U+01f252
NEW_WIDTH(0x3260, 2), // U+01f260
NEW_WIDTH(0x3266, 1), // U+01f266
NEW_WIDTH(0x3300, 2), // U+01f300
NEW_WIDTH(0x3321, 1), // U+01f321
NEW_WIDTH(0x332d, 2), // U+01f32d
NEW_WIDTH(0x3336, 1), // U+01f336
NEW_WIDTH(0x3337, 2), // U+01f337
NEW_WIDTH(0x337d, 1), // U+01f37d
NEW_WIDTH(0x337e, 2), // U+01f37e
NEW_WIDTH(0x3394, 1), // U+01f394
NEW_WIDTH(0x33a0, 2), // U+01f3a0
NEW_WIDTH(0x33cb, 1), // U+01f3cb
NEW_WIDTH(0x33cf, 2), // U+01f3cf
NEW_WIDTH(0x33d4, 1), // U+01f3d4
NEW_WIDTH(0x33e0, 2), // U+01f3e0
NEW_WIDTH(0x33f1, 1), // U+01f3f1
NEW_WIDTH(0x33f4, 2), // U+01f3f4
NEW_WIDTH(0x33f5, 1), // U+01f3f5
NEW_WIDTH(0x33f8, 2), // U+01f3f8
NEW_WIDTH(0x343f, 1), // U+01f43f
NEW_WIDTH(0x3440, 2), // U+01f440
NEW_WIDTH(0x3441, 1), // U+01f441
NEW_WIDTH(0x3442, 2), // U+01f442
NEW_WIDTH(0x34fd, 1), // U+01f4fd
NEW_WIDTH(0x34ff, 2), // U+01f4ff
NEW_WIDTH(0x353e, 1), // U+01f53e
NEW_WIDTH(0x354b, 2), // U+01f54b
NEW_WIDTH(0x354f, 1), // U+01f54f
NEW_WIDTH(0x3550, 2), // U+01f550
NEW_WIDTH(0x3568, 1), // U+01f568
NEW_WIDTH(0x357a, 2), // U+01f57a
NEW_WIDTH(0x357b, 1), // U+01f57b
NEW_WIDTH(0x3595, 2), // U+01f595
NEW_WIDTH(0x3597, 1), // U+01f597
NEW_WIDTH(0x35a4, 2), // U+01f5a4
NEW_WIDTH(0x35a5, 1), // U+01f5a5
NEW_WIDTH(0x35fb, 2), // U+01f5fb
NEW_WIDTH(0x3650, 1), // U+01f650
NEW_WIDTH(0x3680, 2), // U+01f680
NEW_WIDTH(0x36c6, 1), // U+01f6c6
NEW_WIDTH(0x36cc, 2), // U+01f6cc
NEW_WIDTH(0x36cd, 1), // U+01f6cd
NEW_WIDTH(0x36d0, 2), // U+01f6d0
NEW_WIDTH(0x36d3, 1), // U+01f6d3
NEW_WIDTH(0x36d5, 2), // U+01f6d5
NEW_WIDTH(0x36d8, 1), // U+01f6d8
NEW_WIDTH(0x36dd, 2), // U+01f6dd
NEW_WIDTH(0x36e0, 1), // U+01f6e0
NEW_WIDTH(0x36eb, 2), // U+01f6eb
NEW_WIDTH(0x36ed, 1), // U+01f6ed
NEW_WIDTH(0x36f4, 2), // U+01f6f4
NEW_WIDTH(0x36fd, 1), // U+01f6fd
NEW_WIDTH(0x37e0, 2), // U+01f7e0
NEW_WIDTH(0x37ec, 1), // U+01f7ec
NEW_WIDTH(0x37f0, 2), // U+01f7f0
NEW_WIDTH(0x37f1, 1), // U+01f7f1
NEW_WIDTH(0x390c, 2), // U+01f90c
NEW_WIDTH(0x393b, 1), // U+01f93b
NEW_WIDTH(0x393c, 2), // U+01f93c
NEW_WIDTH(0x3946, 1), // U+01f946
NEW_WIDTH(0x3947, 2), // U+01f947
NEW_WIDTH(0x3a00, 1), // U+01fa00
NEW_WIDTH(0x3a70, 2), // U+01fa70
NEW_WIDTH(0x3a75, 1), // U+01fa75
NEW_WIDTH(0x3a78, 2), // U+01fa78
NEW_WIDTH(0x3a7d, 1), // U+01fa7d
NEW_WIDTH(0x3a80, 2), // U+01fa80
NEW_WIDTH(0x3a87, 1), // U+01fa87
NEW_WIDTH(0x3a90, 2), // U+01fa90
NEW_WIDTH(0x3aad, 1), // U+01faad
NEW_WIDTH(0x3ab0, 2), // U+01fab0
NEW_WIDTH(0x3abb, 1), // U+01fabb
NEW_WIDTH(0x3ac0, 2), // U+01fac0
NEW_WIDTH(0x3ac6, 1), // U+01fac6
NEW_WIDTH(0x3ad0, 2), // U+01fad0
NEW_WIDTH(0x3ada, 1), // U+01fada
NEW_WIDTH(0x3ae0, 2), // U+01fae0
NEW_WIDTH(0x3ae8, 1), // U+01fae8
NEW_WIDTH(0x3af0, 2), // U+01faf0
NEW_WIDTH(0x3af7, 1), // U+01faf7
// U+020000,
NEW_WIDTH(0x0000, 2), // U+020000
// U+024000,
NEW_WIDTH(0x0000, 2), // U+024000
// U+028000,
NEW_WIDTH(0x0000, 2), // U+028000
// U+02c000,
NEW_WIDTH(0x0000, 2), // U+02c000
NEW_WIDTH(0x3ffe, 1), // U+02fffe
// U+030000,
NEW_WIDTH(0x0000, 2), // U+030000
// U+034000,
NEW_WIDTH(0x0000, 2), // U+034000
// U+038000,
NEW_WIDTH(0x0000, 2), // U+038000
// U+03c000,
NEW_WIDTH(0x0000, 2), // U+03c000
NEW_WIDTH(0x3ffe, 1), // U+03fffe
// U+040000,
NEW_WIDTH(0x0000, 1), // U+040000
// U+044000,
NEW_WIDTH(0x0000, 1), // U+044000
// U+048000,
NEW_WIDTH(0x0000, 1), // U+048000
// U+04c000,
NEW_WIDTH(0x0000, 1), // U+04c000
// U+050000,
NEW_WIDTH(0x0000, 1), // U+050000
// U+054000,
NEW_WIDTH(0x0000, 1), // U+054000
// U+058000,
NEW_WIDTH(0x0000, 1), // U+058000
// U+05c000,
NEW_WIDTH(0x0000, 1), // U+05c000
// U+060000,
NEW_WIDTH(0x0000, 1), // U+060000
// U+064000,
NEW_WIDTH(0x0000, 1), // U+064000
// U+068000,
NEW_WIDTH(0x0000, 1), // U+068000
// U+06c000,
NEW_WIDTH(0x0000, 1), // U+06c000
// U+070000,
NEW_WIDTH(0x0000, 1), // U+070000
// U+074000,
NEW_WIDTH(0x0000, 1), // U+074000
// U+078000,
NEW_WIDTH(0x0000, 1), // U+078000
// U+07c000,
NEW_WIDTH(0x0000, 1), // U+07c000
// U+080000,
NEW_WIDTH(0x0000, 1), // U+080000
// U+084000,
NEW_WIDTH(0x0000, 1), // U+084000
// U+088000,
NEW_WIDTH(0x0000, 1), // U+088000
// U+08c000,
NEW_WIDTH(0x0000, 1), // U+08c000
// U+090000,
NEW_WIDTH(0x0000, 1), // U+090000
// U+094000,
NEW_WIDTH(0x0000, 1), // U+094000
// U+098000,
NEW_WIDTH(0x0000, 1), // U+098000
// U+09c000,
NEW_WIDTH(0x0000, 1), // U+09c000
// U+0a0000,
NEW_WIDTH(0x0000, 1), // U+0a0000
// U+0a4000,
NEW_WIDTH(0x0000, 1), // U+0a4000
// U+0a8000,
NEW_WIDTH(0x0000, 1), // U+0a8000
// U+0ac000,
NEW_WIDTH(0x0000, 1), // U+0ac000
// U+0b0000,
NEW_WIDTH(0x0000, 1), // U+0b0000
// U+0b4000,
NEW_WIDTH(0x0000, 1), // U+0b4000
// U+0b8000,
NEW_WIDTH(0x0000, 1), // U+0b8000
// U+0bc000,
NEW_WIDTH(0x0000, 1), // U+0bc000
// U+0c0000,
NEW_WIDTH(0x0000, 1), // U+0c0000
// U+0c4000,
NEW_WIDTH(0x0000, 1), // U+0c4000
// U+0c8000,
NEW_WIDTH(0x0000, 1), // U+0c8000
// U+0cc000,
NEW_WIDTH(0x0000, 1), // U+0cc000
// U+0d0000,
NEW_WIDTH(0x0000, 1), // U+0d0000
// U+0d4000,
NEW_WIDTH(0x0000, 1), // U+0d4000
// U+0d8000,
NEW_WIDTH(0x0000, 1), // U+0d8000
// U+0dc000,
NEW_WIDTH(0x0000, 1), // U+0dc000
// U+0e0000,
NEW_WIDTH(0x0000, 1), // U+0e0000
NEW_WIDTH(0x0001, 0), // U+0e0001
NEW_WIDTH(0x0002, 1), // U+0e0002
NEW_WIDTH(0x0020, 0), // U+0e0020
NEW_WIDTH(0x0080, 1), // U+0e0080
NEW_WIDTH(0x0100, 0), // U+0e0100
NEW_WIDTH(0x01f0, 1), // U+0e01f0
// U+0e4000,
NEW_WIDTH(0x0000, 1), // U+0e4000
// U+0e8000,
NEW_WIDTH(0x0000, 1), // U+0e8000
// U+0ec000,
NEW_WIDTH(0x0000, 1), // U+0ec000
// U+0f0000,
NEW_WIDTH(0x0000, 1), // U+0f0000
// U+0f4000,
NEW_WIDTH(0x0000, 1), // U+0f4000
// U+0f8000,
NEW_WIDTH(0x0000, 1), // U+0f8000
// U+0fc000,
NEW_WIDTH(0x0000, 1), // U+0fc000
// U+100000,
NEW_WIDTH(0x0000, 1), // U+100000
// U+104000,
NEW_WIDTH(0x0000, 1), // U+104000
// U+108000,
NEW_WIDTH(0x0000, 1), // U+108000
// U+10c000,
NEW_WIDTH(0x0000, 1), // U+10c000
}; termpaint-0.3.1/charclassification_konsole_2018.inc 0000664 0000000 0000000 00000111051 14773035472 0022261 0 ustar 00root root 0000000 0000000 static const uint16_t termpaint_char_width_offsets_konsole_2018[0x45] = {
0,
454,
457,
532,
558,
727,
737,
749,
866,
867,
868,
869,
871,
872,
873,
874,
876,
877,
878,
879,
880,
881,
882,
883,
884,
885,
886,
887,
888,
889,
890,
891,
892,
893,
894,
895,
896,
897,
898,
899,
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
};
static const uint16_t termpaint_char_width_data_konsole_2018[] = {
// U+000000,
NEW_WIDTH(0x0000, 1), // U+000000
NEW_WIDTH(0x0001, -1), // U+000001
NEW_WIDTH(0x0020, 1), // U+000020
NEW_WIDTH(0x007f, -1), // U+00007f
NEW_WIDTH(0x00a0, 1), // U+0000a0
NEW_WIDTH(0x0300, 0), // U+000300
NEW_WIDTH(0x0370, 1), // U+000370
NEW_WIDTH(0x0483, 0), // U+000483
NEW_WIDTH(0x048a, 1), // U+00048a
NEW_WIDTH(0x0591, 0), // U+000591
NEW_WIDTH(0x05be, 1), // U+0005be
NEW_WIDTH(0x05bf, 0), // U+0005bf
NEW_WIDTH(0x05c0, 1), // U+0005c0
NEW_WIDTH(0x05c1, 0), // U+0005c1
NEW_WIDTH(0x05c3, 1), // U+0005c3
NEW_WIDTH(0x05c4, 0), // U+0005c4
NEW_WIDTH(0x05c6, 1), // U+0005c6
NEW_WIDTH(0x05c7, 0), // U+0005c7
NEW_WIDTH(0x05c8, 1), // U+0005c8
NEW_WIDTH(0x0600, 0), // U+000600
NEW_WIDTH(0x0606, 1), // U+000606
NEW_WIDTH(0x0610, 0), // U+000610
NEW_WIDTH(0x061b, 1), // U+00061b
NEW_WIDTH(0x061c, 0), // U+00061c
NEW_WIDTH(0x061d, 1), // U+00061d
NEW_WIDTH(0x064b, 0), // U+00064b
NEW_WIDTH(0x0660, 1), // U+000660
NEW_WIDTH(0x0670, 0), // U+000670
NEW_WIDTH(0x0671, 1), // U+000671
NEW_WIDTH(0x06d6, 0), // U+0006d6
NEW_WIDTH(0x06de, 1), // U+0006de
NEW_WIDTH(0x06df, 0), // U+0006df
NEW_WIDTH(0x06e5, 1), // U+0006e5
NEW_WIDTH(0x06e7, 0), // U+0006e7
NEW_WIDTH(0x06e9, 1), // U+0006e9
NEW_WIDTH(0x06ea, 0), // U+0006ea
NEW_WIDTH(0x06ee, 1), // U+0006ee
NEW_WIDTH(0x070f, 0), // U+00070f
NEW_WIDTH(0x0710, 1), // U+000710
NEW_WIDTH(0x0711, 0), // U+000711
NEW_WIDTH(0x0712, 1), // U+000712
NEW_WIDTH(0x0730, 0), // U+000730
NEW_WIDTH(0x074b, 1), // U+00074b
NEW_WIDTH(0x07a6, 0), // U+0007a6
NEW_WIDTH(0x07b1, 1), // U+0007b1
NEW_WIDTH(0x07eb, 0), // U+0007eb
NEW_WIDTH(0x07f4, 1), // U+0007f4
NEW_WIDTH(0x07fd, 0), // U+0007fd
NEW_WIDTH(0x07fe, 1), // U+0007fe
NEW_WIDTH(0x0816, 0), // U+000816
NEW_WIDTH(0x081a, 1), // U+00081a
NEW_WIDTH(0x081b, 0), // U+00081b
NEW_WIDTH(0x0824, 1), // U+000824
NEW_WIDTH(0x0825, 0), // U+000825
NEW_WIDTH(0x0828, 1), // U+000828
NEW_WIDTH(0x0829, 0), // U+000829
NEW_WIDTH(0x082e, 1), // U+00082e
NEW_WIDTH(0x0859, 0), // U+000859
NEW_WIDTH(0x085c, 1), // U+00085c
NEW_WIDTH(0x08d3, 0), // U+0008d3
NEW_WIDTH(0x0903, 1), // U+000903
NEW_WIDTH(0x093a, 0), // U+00093a
NEW_WIDTH(0x093b, 1), // U+00093b
NEW_WIDTH(0x093c, 0), // U+00093c
NEW_WIDTH(0x093d, 1), // U+00093d
NEW_WIDTH(0x0941, 0), // U+000941
NEW_WIDTH(0x0949, 1), // U+000949
NEW_WIDTH(0x094d, 0), // U+00094d
NEW_WIDTH(0x094e, 1), // U+00094e
NEW_WIDTH(0x0951, 0), // U+000951
NEW_WIDTH(0x0958, 1), // U+000958
NEW_WIDTH(0x0962, 0), // U+000962
NEW_WIDTH(0x0964, 1), // U+000964
NEW_WIDTH(0x0981, 0), // U+000981
NEW_WIDTH(0x0982, 1), // U+000982
NEW_WIDTH(0x09bc, 0), // U+0009bc
NEW_WIDTH(0x09bd, 1), // U+0009bd
NEW_WIDTH(0x09c1, 0), // U+0009c1
NEW_WIDTH(0x09c5, 1), // U+0009c5
NEW_WIDTH(0x09cd, 0), // U+0009cd
NEW_WIDTH(0x09ce, 1), // U+0009ce
NEW_WIDTH(0x09e2, 0), // U+0009e2
NEW_WIDTH(0x09e4, 1), // U+0009e4
NEW_WIDTH(0x09fe, 0), // U+0009fe
NEW_WIDTH(0x09ff, 1), // U+0009ff
NEW_WIDTH(0x0a01, 0), // U+000a01
NEW_WIDTH(0x0a03, 1), // U+000a03
NEW_WIDTH(0x0a3c, 0), // U+000a3c
NEW_WIDTH(0x0a3d, 1), // U+000a3d
NEW_WIDTH(0x0a41, 0), // U+000a41
NEW_WIDTH(0x0a43, 1), // U+000a43
NEW_WIDTH(0x0a47, 0), // U+000a47
NEW_WIDTH(0x0a49, 1), // U+000a49
NEW_WIDTH(0x0a4b, 0), // U+000a4b
NEW_WIDTH(0x0a4e, 1), // U+000a4e
NEW_WIDTH(0x0a51, 0), // U+000a51
NEW_WIDTH(0x0a52, 1), // U+000a52
NEW_WIDTH(0x0a70, 0), // U+000a70
NEW_WIDTH(0x0a72, 1), // U+000a72
NEW_WIDTH(0x0a75, 0), // U+000a75
NEW_WIDTH(0x0a76, 1), // U+000a76
NEW_WIDTH(0x0a81, 0), // U+000a81
NEW_WIDTH(0x0a83, 1), // U+000a83
NEW_WIDTH(0x0abc, 0), // U+000abc
NEW_WIDTH(0x0abd, 1), // U+000abd
NEW_WIDTH(0x0ac1, 0), // U+000ac1
NEW_WIDTH(0x0ac6, 1), // U+000ac6
NEW_WIDTH(0x0ac7, 0), // U+000ac7
NEW_WIDTH(0x0ac9, 1), // U+000ac9
NEW_WIDTH(0x0acd, 0), // U+000acd
NEW_WIDTH(0x0ace, 1), // U+000ace
NEW_WIDTH(0x0ae2, 0), // U+000ae2
NEW_WIDTH(0x0ae4, 1), // U+000ae4
NEW_WIDTH(0x0afa, 0), // U+000afa
NEW_WIDTH(0x0b00, 1), // U+000b00
NEW_WIDTH(0x0b01, 0), // U+000b01
NEW_WIDTH(0x0b02, 1), // U+000b02
NEW_WIDTH(0x0b3c, 0), // U+000b3c
NEW_WIDTH(0x0b3d, 1), // U+000b3d
NEW_WIDTH(0x0b3f, 0), // U+000b3f
NEW_WIDTH(0x0b40, 1), // U+000b40
NEW_WIDTH(0x0b41, 0), // U+000b41
NEW_WIDTH(0x0b45, 1), // U+000b45
NEW_WIDTH(0x0b4d, 0), // U+000b4d
NEW_WIDTH(0x0b4e, 1), // U+000b4e
NEW_WIDTH(0x0b56, 0), // U+000b56
NEW_WIDTH(0x0b57, 1), // U+000b57
NEW_WIDTH(0x0b62, 0), // U+000b62
NEW_WIDTH(0x0b64, 1), // U+000b64
NEW_WIDTH(0x0b82, 0), // U+000b82
NEW_WIDTH(0x0b83, 1), // U+000b83
NEW_WIDTH(0x0bc0, 0), // U+000bc0
NEW_WIDTH(0x0bc1, 1), // U+000bc1
NEW_WIDTH(0x0bcd, 0), // U+000bcd
NEW_WIDTH(0x0bce, 1), // U+000bce
NEW_WIDTH(0x0c00, 0), // U+000c00
NEW_WIDTH(0x0c01, 1), // U+000c01
NEW_WIDTH(0x0c04, 0), // U+000c04
NEW_WIDTH(0x0c05, 1), // U+000c05
NEW_WIDTH(0x0c3e, 0), // U+000c3e
NEW_WIDTH(0x0c41, 1), // U+000c41
NEW_WIDTH(0x0c46, 0), // U+000c46
NEW_WIDTH(0x0c49, 1), // U+000c49
NEW_WIDTH(0x0c4a, 0), // U+000c4a
NEW_WIDTH(0x0c4e, 1), // U+000c4e
NEW_WIDTH(0x0c55, 0), // U+000c55
NEW_WIDTH(0x0c57, 1), // U+000c57
NEW_WIDTH(0x0c62, 0), // U+000c62
NEW_WIDTH(0x0c64, 1), // U+000c64
NEW_WIDTH(0x0c81, 0), // U+000c81
NEW_WIDTH(0x0c82, 1), // U+000c82
NEW_WIDTH(0x0cbc, 0), // U+000cbc
NEW_WIDTH(0x0cbd, 1), // U+000cbd
NEW_WIDTH(0x0cbf, 0), // U+000cbf
NEW_WIDTH(0x0cc0, 1), // U+000cc0
NEW_WIDTH(0x0cc6, 0), // U+000cc6
NEW_WIDTH(0x0cc7, 1), // U+000cc7
NEW_WIDTH(0x0ccc, 0), // U+000ccc
NEW_WIDTH(0x0cce, 1), // U+000cce
NEW_WIDTH(0x0ce2, 0), // U+000ce2
NEW_WIDTH(0x0ce4, 1), // U+000ce4
NEW_WIDTH(0x0d00, 0), // U+000d00
NEW_WIDTH(0x0d02, 1), // U+000d02
NEW_WIDTH(0x0d3b, 0), // U+000d3b
NEW_WIDTH(0x0d3d, 1), // U+000d3d
NEW_WIDTH(0x0d41, 0), // U+000d41
NEW_WIDTH(0x0d45, 1), // U+000d45
NEW_WIDTH(0x0d4d, 0), // U+000d4d
NEW_WIDTH(0x0d4e, 1), // U+000d4e
NEW_WIDTH(0x0d62, 0), // U+000d62
NEW_WIDTH(0x0d64, 1), // U+000d64
NEW_WIDTH(0x0dca, 0), // U+000dca
NEW_WIDTH(0x0dcb, 1), // U+000dcb
NEW_WIDTH(0x0dd2, 0), // U+000dd2
NEW_WIDTH(0x0dd5, 1), // U+000dd5
NEW_WIDTH(0x0dd6, 0), // U+000dd6
NEW_WIDTH(0x0dd7, 1), // U+000dd7
NEW_WIDTH(0x0e31, 0), // U+000e31
NEW_WIDTH(0x0e32, 1), // U+000e32
NEW_WIDTH(0x0e34, 0), // U+000e34
NEW_WIDTH(0x0e3b, 1), // U+000e3b
NEW_WIDTH(0x0e47, 0), // U+000e47
NEW_WIDTH(0x0e4f, 1), // U+000e4f
NEW_WIDTH(0x0eb1, 0), // U+000eb1
NEW_WIDTH(0x0eb2, 1), // U+000eb2
NEW_WIDTH(0x0eb4, 0), // U+000eb4
NEW_WIDTH(0x0eba, 1), // U+000eba
NEW_WIDTH(0x0ebb, 0), // U+000ebb
NEW_WIDTH(0x0ebd, 1), // U+000ebd
NEW_WIDTH(0x0ec8, 0), // U+000ec8
NEW_WIDTH(0x0ece, 1), // U+000ece
NEW_WIDTH(0x0f18, 0), // U+000f18
NEW_WIDTH(0x0f1a, 1), // U+000f1a
NEW_WIDTH(0x0f35, 0), // U+000f35
NEW_WIDTH(0x0f36, 1), // U+000f36
NEW_WIDTH(0x0f37, 0), // U+000f37
NEW_WIDTH(0x0f38, 1), // U+000f38
NEW_WIDTH(0x0f39, 0), // U+000f39
NEW_WIDTH(0x0f3a, 1), // U+000f3a
NEW_WIDTH(0x0f71, 0), // U+000f71
NEW_WIDTH(0x0f7f, 1), // U+000f7f
NEW_WIDTH(0x0f80, 0), // U+000f80
NEW_WIDTH(0x0f85, 1), // U+000f85
NEW_WIDTH(0x0f86, 0), // U+000f86
NEW_WIDTH(0x0f88, 1), // U+000f88
NEW_WIDTH(0x0f8d, 0), // U+000f8d
NEW_WIDTH(0x0f98, 1), // U+000f98
NEW_WIDTH(0x0f99, 0), // U+000f99
NEW_WIDTH(0x0fbd, 1), // U+000fbd
NEW_WIDTH(0x0fc6, 0), // U+000fc6
NEW_WIDTH(0x0fc7, 1), // U+000fc7
NEW_WIDTH(0x102d, 0), // U+00102d
NEW_WIDTH(0x1031, 1), // U+001031
NEW_WIDTH(0x1032, 0), // U+001032
NEW_WIDTH(0x1038, 1), // U+001038
NEW_WIDTH(0x1039, 0), // U+001039
NEW_WIDTH(0x103b, 1), // U+00103b
NEW_WIDTH(0x103d, 0), // U+00103d
NEW_WIDTH(0x103f, 1), // U+00103f
NEW_WIDTH(0x1058, 0), // U+001058
NEW_WIDTH(0x105a, 1), // U+00105a
NEW_WIDTH(0x105e, 0), // U+00105e
NEW_WIDTH(0x1061, 1), // U+001061
NEW_WIDTH(0x1071, 0), // U+001071
NEW_WIDTH(0x1075, 1), // U+001075
NEW_WIDTH(0x1082, 0), // U+001082
NEW_WIDTH(0x1083, 1), // U+001083
NEW_WIDTH(0x1085, 0), // U+001085
NEW_WIDTH(0x1087, 1), // U+001087
NEW_WIDTH(0x108d, 0), // U+00108d
NEW_WIDTH(0x108e, 1), // U+00108e
NEW_WIDTH(0x109d, 0), // U+00109d
NEW_WIDTH(0x109e, 1), // U+00109e
NEW_WIDTH(0x1100, 2), // U+001100
NEW_WIDTH(0x1160, 0), // U+001160
NEW_WIDTH(0x1161, 1), // U+001161
NEW_WIDTH(0x135d, 0), // U+00135d
NEW_WIDTH(0x1360, 1), // U+001360
NEW_WIDTH(0x1712, 0), // U+001712
NEW_WIDTH(0x1715, 1), // U+001715
NEW_WIDTH(0x1732, 0), // U+001732
NEW_WIDTH(0x1735, 1), // U+001735
NEW_WIDTH(0x1752, 0), // U+001752
NEW_WIDTH(0x1754, 1), // U+001754
NEW_WIDTH(0x1772, 0), // U+001772
NEW_WIDTH(0x1774, 1), // U+001774
NEW_WIDTH(0x17b4, 0), // U+0017b4
NEW_WIDTH(0x17b6, 1), // U+0017b6
NEW_WIDTH(0x17b7, 0), // U+0017b7
NEW_WIDTH(0x17be, 1), // U+0017be
NEW_WIDTH(0x17c6, 0), // U+0017c6
NEW_WIDTH(0x17c7, 1), // U+0017c7
NEW_WIDTH(0x17c9, 0), // U+0017c9
NEW_WIDTH(0x17d4, 1), // U+0017d4
NEW_WIDTH(0x17dd, 0), // U+0017dd
NEW_WIDTH(0x17de, 1), // U+0017de
NEW_WIDTH(0x180b, 0), // U+00180b
NEW_WIDTH(0x180f, 1), // U+00180f
NEW_WIDTH(0x1885, 0), // U+001885
NEW_WIDTH(0x1887, 1), // U+001887
NEW_WIDTH(0x18a9, 0), // U+0018a9
NEW_WIDTH(0x18aa, 1), // U+0018aa
NEW_WIDTH(0x1920, 0), // U+001920
NEW_WIDTH(0x1923, 1), // U+001923
NEW_WIDTH(0x1927, 0), // U+001927
NEW_WIDTH(0x1929, 1), // U+001929
NEW_WIDTH(0x1932, 0), // U+001932
NEW_WIDTH(0x1933, 1), // U+001933
NEW_WIDTH(0x1939, 0), // U+001939
NEW_WIDTH(0x193c, 1), // U+00193c
NEW_WIDTH(0x1a17, 0), // U+001a17
NEW_WIDTH(0x1a19, 1), // U+001a19
NEW_WIDTH(0x1a1b, 0), // U+001a1b
NEW_WIDTH(0x1a1c, 1), // U+001a1c
NEW_WIDTH(0x1a56, 0), // U+001a56
NEW_WIDTH(0x1a57, 1), // U+001a57
NEW_WIDTH(0x1a58, 0), // U+001a58
NEW_WIDTH(0x1a5f, 1), // U+001a5f
NEW_WIDTH(0x1a60, 0), // U+001a60
NEW_WIDTH(0x1a61, 1), // U+001a61
NEW_WIDTH(0x1a62, 0), // U+001a62
NEW_WIDTH(0x1a63, 1), // U+001a63
NEW_WIDTH(0x1a65, 0), // U+001a65
NEW_WIDTH(0x1a6d, 1), // U+001a6d
NEW_WIDTH(0x1a73, 0), // U+001a73
NEW_WIDTH(0x1a7d, 1), // U+001a7d
NEW_WIDTH(0x1a7f, 0), // U+001a7f
NEW_WIDTH(0x1a80, 1), // U+001a80
NEW_WIDTH(0x1ab0, 0), // U+001ab0
NEW_WIDTH(0x1abf, 1), // U+001abf
NEW_WIDTH(0x1b00, 0), // U+001b00
NEW_WIDTH(0x1b04, 1), // U+001b04
NEW_WIDTH(0x1b34, 0), // U+001b34
NEW_WIDTH(0x1b35, 1), // U+001b35
NEW_WIDTH(0x1b36, 0), // U+001b36
NEW_WIDTH(0x1b3b, 1), // U+001b3b
NEW_WIDTH(0x1b3c, 0), // U+001b3c
NEW_WIDTH(0x1b3d, 1), // U+001b3d
NEW_WIDTH(0x1b42, 0), // U+001b42
NEW_WIDTH(0x1b43, 1), // U+001b43
NEW_WIDTH(0x1b6b, 0), // U+001b6b
NEW_WIDTH(0x1b74, 1), // U+001b74
NEW_WIDTH(0x1b80, 0), // U+001b80
NEW_WIDTH(0x1b82, 1), // U+001b82
NEW_WIDTH(0x1ba2, 0), // U+001ba2
NEW_WIDTH(0x1ba6, 1), // U+001ba6
NEW_WIDTH(0x1ba8, 0), // U+001ba8
NEW_WIDTH(0x1baa, 1), // U+001baa
NEW_WIDTH(0x1bab, 0), // U+001bab
NEW_WIDTH(0x1bae, 1), // U+001bae
NEW_WIDTH(0x1be6, 0), // U+001be6
NEW_WIDTH(0x1be7, 1), // U+001be7
NEW_WIDTH(0x1be8, 0), // U+001be8
NEW_WIDTH(0x1bea, 1), // U+001bea
NEW_WIDTH(0x1bed, 0), // U+001bed
NEW_WIDTH(0x1bee, 1), // U+001bee
NEW_WIDTH(0x1bef, 0), // U+001bef
NEW_WIDTH(0x1bf2, 1), // U+001bf2
NEW_WIDTH(0x1c2c, 0), // U+001c2c
NEW_WIDTH(0x1c34, 1), // U+001c34
NEW_WIDTH(0x1c36, 0), // U+001c36
NEW_WIDTH(0x1c38, 1), // U+001c38
NEW_WIDTH(0x1cd0, 0), // U+001cd0
NEW_WIDTH(0x1cd3, 1), // U+001cd3
NEW_WIDTH(0x1cd4, 0), // U+001cd4
NEW_WIDTH(0x1ce1, 1), // U+001ce1
NEW_WIDTH(0x1ce2, 0), // U+001ce2
NEW_WIDTH(0x1ce9, 1), // U+001ce9
NEW_WIDTH(0x1ced, 0), // U+001ced
NEW_WIDTH(0x1cee, 1), // U+001cee
NEW_WIDTH(0x1cf4, 0), // U+001cf4
NEW_WIDTH(0x1cf5, 1), // U+001cf5
NEW_WIDTH(0x1cf8, 0), // U+001cf8
NEW_WIDTH(0x1cfa, 1), // U+001cfa
NEW_WIDTH(0x1dc0, 0), // U+001dc0
NEW_WIDTH(0x1dfa, 1), // U+001dfa
NEW_WIDTH(0x1dfb, 0), // U+001dfb
NEW_WIDTH(0x1e00, 1), // U+001e00
NEW_WIDTH(0x200b, 0), // U+00200b
NEW_WIDTH(0x2010, 1), // U+002010
NEW_WIDTH(0x202a, 0), // U+00202a
NEW_WIDTH(0x202f, 1), // U+00202f
NEW_WIDTH(0x2060, 0), // U+002060
NEW_WIDTH(0x2065, 1), // U+002065
NEW_WIDTH(0x2066, 0), // U+002066
NEW_WIDTH(0x2070, 1), // U+002070
NEW_WIDTH(0x20d0, 0), // U+0020d0
NEW_WIDTH(0x20f1, 1), // U+0020f1
NEW_WIDTH(0x231a, 2), // U+00231a
NEW_WIDTH(0x231c, 1), // U+00231c
NEW_WIDTH(0x2329, 2), // U+002329
NEW_WIDTH(0x232b, 1), // U+00232b
NEW_WIDTH(0x23e9, 2), // U+0023e9
NEW_WIDTH(0x23ed, 1), // U+0023ed
NEW_WIDTH(0x23f0, 2), // U+0023f0
NEW_WIDTH(0x23f1, 1), // U+0023f1
NEW_WIDTH(0x23f3, 2), // U+0023f3
NEW_WIDTH(0x23f4, 1), // U+0023f4
NEW_WIDTH(0x25fd, 2), // U+0025fd
NEW_WIDTH(0x25ff, 1), // U+0025ff
NEW_WIDTH(0x2614, 2), // U+002614
NEW_WIDTH(0x2616, 1), // U+002616
NEW_WIDTH(0x2648, 2), // U+002648
NEW_WIDTH(0x2654, 1), // U+002654
NEW_WIDTH(0x267f, 2), // U+00267f
NEW_WIDTH(0x2680, 1), // U+002680
NEW_WIDTH(0x2693, 2), // U+002693
NEW_WIDTH(0x2694, 1), // U+002694
NEW_WIDTH(0x26a1, 2), // U+0026a1
NEW_WIDTH(0x26a2, 1), // U+0026a2
NEW_WIDTH(0x26aa, 2), // U+0026aa
NEW_WIDTH(0x26ac, 1), // U+0026ac
NEW_WIDTH(0x26bd, 2), // U+0026bd
NEW_WIDTH(0x26bf, 1), // U+0026bf
NEW_WIDTH(0x26c4, 2), // U+0026c4
NEW_WIDTH(0x26c6, 1), // U+0026c6
NEW_WIDTH(0x26ce, 2), // U+0026ce
NEW_WIDTH(0x26cf, 1), // U+0026cf
NEW_WIDTH(0x26d4, 2), // U+0026d4
NEW_WIDTH(0x26d5, 1), // U+0026d5
NEW_WIDTH(0x26ea, 2), // U+0026ea
NEW_WIDTH(0x26eb, 1), // U+0026eb
NEW_WIDTH(0x26f2, 2), // U+0026f2
NEW_WIDTH(0x26f4, 1), // U+0026f4
NEW_WIDTH(0x26f5, 2), // U+0026f5
NEW_WIDTH(0x26f6, 1), // U+0026f6
NEW_WIDTH(0x26fa, 2), // U+0026fa
NEW_WIDTH(0x26fb, 1), // U+0026fb
NEW_WIDTH(0x26fd, 2), // U+0026fd
NEW_WIDTH(0x26fe, 1), // U+0026fe
NEW_WIDTH(0x2705, 2), // U+002705
NEW_WIDTH(0x2706, 1), // U+002706
NEW_WIDTH(0x270a, 2), // U+00270a
NEW_WIDTH(0x270c, 1), // U+00270c
NEW_WIDTH(0x2728, 2), // U+002728
NEW_WIDTH(0x2729, 1), // U+002729
NEW_WIDTH(0x274c, 2), // U+00274c
NEW_WIDTH(0x274d, 1), // U+00274d
NEW_WIDTH(0x274e, 2), // U+00274e
NEW_WIDTH(0x274f, 1), // U+00274f
NEW_WIDTH(0x2753, 2), // U+002753
NEW_WIDTH(0x2756, 1), // U+002756
NEW_WIDTH(0x2757, 2), // U+002757
NEW_WIDTH(0x2758, 1), // U+002758
NEW_WIDTH(0x2795, 2), // U+002795
NEW_WIDTH(0x2798, 1), // U+002798
NEW_WIDTH(0x27b0, 2), // U+0027b0
NEW_WIDTH(0x27b1, 1), // U+0027b1
NEW_WIDTH(0x27bf, 2), // U+0027bf
NEW_WIDTH(0x27c0, 1), // U+0027c0
NEW_WIDTH(0x2b1b, 2), // U+002b1b
NEW_WIDTH(0x2b1d, 1), // U+002b1d
NEW_WIDTH(0x2b50, 2), // U+002b50
NEW_WIDTH(0x2b51, 1), // U+002b51
NEW_WIDTH(0x2b55, 2), // U+002b55
NEW_WIDTH(0x2b56, 1), // U+002b56
NEW_WIDTH(0x2cef, 0), // U+002cef
NEW_WIDTH(0x2cf2, 1), // U+002cf2
NEW_WIDTH(0x2d7f, 0), // U+002d7f
NEW_WIDTH(0x2d80, 1), // U+002d80
NEW_WIDTH(0x2de0, 0), // U+002de0
NEW_WIDTH(0x2e00, 1), // U+002e00
NEW_WIDTH(0x2e80, 2), // U+002e80
NEW_WIDTH(0x2e9a, 1), // U+002e9a
NEW_WIDTH(0x2e9b, 2), // U+002e9b
NEW_WIDTH(0x2ef4, 1), // U+002ef4
NEW_WIDTH(0x2f00, 2), // U+002f00
NEW_WIDTH(0x2fd6, 1), // U+002fd6
NEW_WIDTH(0x2ff0, 2), // U+002ff0
NEW_WIDTH(0x2ffc, 1), // U+002ffc
NEW_WIDTH(0x3000, 2), // U+003000
NEW_WIDTH(0x302a, 0), // U+00302a
NEW_WIDTH(0x302e, 2), // U+00302e
NEW_WIDTH(0x303f, 1), // U+00303f
NEW_WIDTH(0x3041, 2), // U+003041
NEW_WIDTH(0x3097, 1), // U+003097
NEW_WIDTH(0x3099, 0), // U+003099
NEW_WIDTH(0x309b, 2), // U+00309b
NEW_WIDTH(0x3100, 1), // U+003100
NEW_WIDTH(0x3105, 2), // U+003105
NEW_WIDTH(0x3130, 1), // U+003130
NEW_WIDTH(0x3131, 2), // U+003131
NEW_WIDTH(0x318f, 1), // U+00318f
NEW_WIDTH(0x3190, 2), // U+003190
NEW_WIDTH(0x31bb, 1), // U+0031bb
NEW_WIDTH(0x31c0, 2), // U+0031c0
NEW_WIDTH(0x31e4, 1), // U+0031e4
NEW_WIDTH(0x31f0, 2), // U+0031f0
NEW_WIDTH(0x321f, 1), // U+00321f
NEW_WIDTH(0x3220, 2), // U+003220
NEW_WIDTH(0x3248, 1), // U+003248
NEW_WIDTH(0x3250, 2), // U+003250
NEW_WIDTH(0x32ff, 1), // U+0032ff
NEW_WIDTH(0x3300, 2), // U+003300
// U+004000,
NEW_WIDTH(0x0000, 2), // U+004000
NEW_WIDTH(0x0dc0, 1), // U+004dc0
NEW_WIDTH(0x0e00, 2), // U+004e00
// U+008000,
NEW_WIDTH(0x0000, 2), // U+008000
NEW_WIDTH(0x248d, 1), // U+00a48d
NEW_WIDTH(0x2490, 2), // U+00a490
NEW_WIDTH(0x24c7, 1), // U+00a4c7
NEW_WIDTH(0x266f, 0), // U+00a66f
NEW_WIDTH(0x2673, 1), // U+00a673
NEW_WIDTH(0x2674, 0), // U+00a674
NEW_WIDTH(0x267e, 1), // U+00a67e
NEW_WIDTH(0x269e, 0), // U+00a69e
NEW_WIDTH(0x26a0, 1), // U+00a6a0
NEW_WIDTH(0x26f0, 0), // U+00a6f0
NEW_WIDTH(0x26f2, 1), // U+00a6f2
NEW_WIDTH(0x2802, 0), // U+00a802
NEW_WIDTH(0x2803, 1), // U+00a803
NEW_WIDTH(0x2806, 0), // U+00a806
NEW_WIDTH(0x2807, 1), // U+00a807
NEW_WIDTH(0x280b, 0), // U+00a80b
NEW_WIDTH(0x280c, 1), // U+00a80c
NEW_WIDTH(0x2825, 0), // U+00a825
NEW_WIDTH(0x2827, 1), // U+00a827
NEW_WIDTH(0x28c4, 0), // U+00a8c4
NEW_WIDTH(0x28c6, 1), // U+00a8c6
NEW_WIDTH(0x28e0, 0), // U+00a8e0
NEW_WIDTH(0x28f2, 1), // U+00a8f2
NEW_WIDTH(0x28ff, 0), // U+00a8ff
NEW_WIDTH(0x2900, 1), // U+00a900
NEW_WIDTH(0x2926, 0), // U+00a926
NEW_WIDTH(0x292e, 1), // U+00a92e
NEW_WIDTH(0x2947, 0), // U+00a947
NEW_WIDTH(0x2952, 1), // U+00a952
NEW_WIDTH(0x2960, 2), // U+00a960
NEW_WIDTH(0x297d, 1), // U+00a97d
NEW_WIDTH(0x2980, 0), // U+00a980
NEW_WIDTH(0x2983, 1), // U+00a983
NEW_WIDTH(0x29b3, 0), // U+00a9b3
NEW_WIDTH(0x29b4, 1), // U+00a9b4
NEW_WIDTH(0x29b6, 0), // U+00a9b6
NEW_WIDTH(0x29ba, 1), // U+00a9ba
NEW_WIDTH(0x29bc, 0), // U+00a9bc
NEW_WIDTH(0x29bd, 1), // U+00a9bd
NEW_WIDTH(0x29e5, 0), // U+00a9e5
NEW_WIDTH(0x29e6, 1), // U+00a9e6
NEW_WIDTH(0x2a29, 0), // U+00aa29
NEW_WIDTH(0x2a2f, 1), // U+00aa2f
NEW_WIDTH(0x2a31, 0), // U+00aa31
NEW_WIDTH(0x2a33, 1), // U+00aa33
NEW_WIDTH(0x2a35, 0), // U+00aa35
NEW_WIDTH(0x2a37, 1), // U+00aa37
NEW_WIDTH(0x2a43, 0), // U+00aa43
NEW_WIDTH(0x2a44, 1), // U+00aa44
NEW_WIDTH(0x2a4c, 0), // U+00aa4c
NEW_WIDTH(0x2a4d, 1), // U+00aa4d
NEW_WIDTH(0x2a7c, 0), // U+00aa7c
NEW_WIDTH(0x2a7d, 1), // U+00aa7d
NEW_WIDTH(0x2ab0, 0), // U+00aab0
NEW_WIDTH(0x2ab1, 1), // U+00aab1
NEW_WIDTH(0x2ab2, 0), // U+00aab2
NEW_WIDTH(0x2ab5, 1), // U+00aab5
NEW_WIDTH(0x2ab7, 0), // U+00aab7
NEW_WIDTH(0x2ab9, 1), // U+00aab9
NEW_WIDTH(0x2abe, 0), // U+00aabe
NEW_WIDTH(0x2ac0, 1), // U+00aac0
NEW_WIDTH(0x2ac1, 0), // U+00aac1
NEW_WIDTH(0x2ac2, 1), // U+00aac2
NEW_WIDTH(0x2aec, 0), // U+00aaec
NEW_WIDTH(0x2aee, 1), // U+00aaee
NEW_WIDTH(0x2af6, 0), // U+00aaf6
NEW_WIDTH(0x2af7, 1), // U+00aaf7
NEW_WIDTH(0x2be5, 0), // U+00abe5
NEW_WIDTH(0x2be6, 1), // U+00abe6
NEW_WIDTH(0x2be8, 0), // U+00abe8
NEW_WIDTH(0x2be9, 1), // U+00abe9
NEW_WIDTH(0x2bed, 0), // U+00abed
NEW_WIDTH(0x2bee, 1), // U+00abee
NEW_WIDTH(0x2c00, 2), // U+00ac00
// U+00c000,
NEW_WIDTH(0x0000, 2), // U+00c000
NEW_WIDTH(0x17a4, 1), // U+00d7a4
NEW_WIDTH(0x1800, -1), // U+00d800
NEW_WIDTH(0x2000, 1), // U+00e000
NEW_WIDTH(0x3900, 2), // U+00f900
NEW_WIDTH(0x3b00, 1), // U+00fb00
NEW_WIDTH(0x3b1e, 0), // U+00fb1e
NEW_WIDTH(0x3b1f, 1), // U+00fb1f
NEW_WIDTH(0x3e00, 0), // U+00fe00
NEW_WIDTH(0x3e10, 2), // U+00fe10
NEW_WIDTH(0x3e1a, 1), // U+00fe1a
NEW_WIDTH(0x3e20, 0), // U+00fe20
NEW_WIDTH(0x3e30, 2), // U+00fe30
NEW_WIDTH(0x3e53, 1), // U+00fe53
NEW_WIDTH(0x3e54, 2), // U+00fe54
NEW_WIDTH(0x3e67, 1), // U+00fe67
NEW_WIDTH(0x3e68, 2), // U+00fe68
NEW_WIDTH(0x3e6c, 1), // U+00fe6c
NEW_WIDTH(0x3eff, 0), // U+00feff
NEW_WIDTH(0x3f00, 1), // U+00ff00
NEW_WIDTH(0x3f01, 2), // U+00ff01
NEW_WIDTH(0x3f61, 1), // U+00ff61
NEW_WIDTH(0x3fe0, 2), // U+00ffe0
NEW_WIDTH(0x3fe7, 1), // U+00ffe7
NEW_WIDTH(0x3ff9, 0), // U+00fff9
NEW_WIDTH(0x3ffc, 1), // U+00fffc
// U+010000,
NEW_WIDTH(0x0000, 1), // U+010000
NEW_WIDTH(0x01fd, 0), // U+0101fd
NEW_WIDTH(0x01fe, 1), // U+0101fe
NEW_WIDTH(0x02e0, 0), // U+0102e0
NEW_WIDTH(0x02e1, 1), // U+0102e1
NEW_WIDTH(0x0376, 0), // U+010376
NEW_WIDTH(0x037b, 1), // U+01037b
NEW_WIDTH(0x0a01, 0), // U+010a01
NEW_WIDTH(0x0a04, 1), // U+010a04
NEW_WIDTH(0x0a05, 0), // U+010a05
NEW_WIDTH(0x0a07, 1), // U+010a07
NEW_WIDTH(0x0a0c, 0), // U+010a0c
NEW_WIDTH(0x0a10, 1), // U+010a10
NEW_WIDTH(0x0a38, 0), // U+010a38
NEW_WIDTH(0x0a3b, 1), // U+010a3b
NEW_WIDTH(0x0a3f, 0), // U+010a3f
NEW_WIDTH(0x0a40, 1), // U+010a40
NEW_WIDTH(0x0ae5, 0), // U+010ae5
NEW_WIDTH(0x0ae7, 1), // U+010ae7
NEW_WIDTH(0x0d24, 0), // U+010d24
NEW_WIDTH(0x0d28, 1), // U+010d28
NEW_WIDTH(0x0f46, 0), // U+010f46
NEW_WIDTH(0x0f51, 1), // U+010f51
NEW_WIDTH(0x1001, 0), // U+011001
NEW_WIDTH(0x1002, 1), // U+011002
NEW_WIDTH(0x1038, 0), // U+011038
NEW_WIDTH(0x1047, 1), // U+011047
NEW_WIDTH(0x107f, 0), // U+01107f
NEW_WIDTH(0x1082, 1), // U+011082
NEW_WIDTH(0x10b3, 0), // U+0110b3
NEW_WIDTH(0x10b7, 1), // U+0110b7
NEW_WIDTH(0x10b9, 0), // U+0110b9
NEW_WIDTH(0x10bb, 1), // U+0110bb
NEW_WIDTH(0x10bd, 0), // U+0110bd
NEW_WIDTH(0x10be, 1), // U+0110be
NEW_WIDTH(0x10cd, 0), // U+0110cd
NEW_WIDTH(0x10ce, 1), // U+0110ce
NEW_WIDTH(0x1100, 0), // U+011100
NEW_WIDTH(0x1103, 1), // U+011103
NEW_WIDTH(0x1127, 0), // U+011127
NEW_WIDTH(0x112c, 1), // U+01112c
NEW_WIDTH(0x112d, 0), // U+01112d
NEW_WIDTH(0x1135, 1), // U+011135
NEW_WIDTH(0x1173, 0), // U+011173
NEW_WIDTH(0x1174, 1), // U+011174
NEW_WIDTH(0x1180, 0), // U+011180
NEW_WIDTH(0x1182, 1), // U+011182
NEW_WIDTH(0x11b6, 0), // U+0111b6
NEW_WIDTH(0x11bf, 1), // U+0111bf
NEW_WIDTH(0x11c9, 0), // U+0111c9
NEW_WIDTH(0x11cd, 1), // U+0111cd
NEW_WIDTH(0x122f, 0), // U+01122f
NEW_WIDTH(0x1232, 1), // U+011232
NEW_WIDTH(0x1234, 0), // U+011234
NEW_WIDTH(0x1235, 1), // U+011235
NEW_WIDTH(0x1236, 0), // U+011236
NEW_WIDTH(0x1238, 1), // U+011238
NEW_WIDTH(0x123e, 0), // U+01123e
NEW_WIDTH(0x123f, 1), // U+01123f
NEW_WIDTH(0x12df, 0), // U+0112df
NEW_WIDTH(0x12e0, 1), // U+0112e0
NEW_WIDTH(0x12e3, 0), // U+0112e3
NEW_WIDTH(0x12eb, 1), // U+0112eb
NEW_WIDTH(0x1300, 0), // U+011300
NEW_WIDTH(0x1302, 1), // U+011302
NEW_WIDTH(0x133b, 0), // U+01133b
NEW_WIDTH(0x133d, 1), // U+01133d
NEW_WIDTH(0x1340, 0), // U+011340
NEW_WIDTH(0x1341, 1), // U+011341
NEW_WIDTH(0x1366, 0), // U+011366
NEW_WIDTH(0x136d, 1), // U+01136d
NEW_WIDTH(0x1370, 0), // U+011370
NEW_WIDTH(0x1375, 1), // U+011375
NEW_WIDTH(0x1438, 0), // U+011438
NEW_WIDTH(0x1440, 1), // U+011440
NEW_WIDTH(0x1442, 0), // U+011442
NEW_WIDTH(0x1445, 1), // U+011445
NEW_WIDTH(0x1446, 0), // U+011446
NEW_WIDTH(0x1447, 1), // U+011447
NEW_WIDTH(0x145e, 0), // U+01145e
NEW_WIDTH(0x145f, 1), // U+01145f
NEW_WIDTH(0x14b3, 0), // U+0114b3
NEW_WIDTH(0x14b9, 1), // U+0114b9
NEW_WIDTH(0x14ba, 0), // U+0114ba
NEW_WIDTH(0x14bb, 1), // U+0114bb
NEW_WIDTH(0x14bf, 0), // U+0114bf
NEW_WIDTH(0x14c1, 1), // U+0114c1
NEW_WIDTH(0x14c2, 0), // U+0114c2
NEW_WIDTH(0x14c4, 1), // U+0114c4
NEW_WIDTH(0x15b2, 0), // U+0115b2
NEW_WIDTH(0x15b6, 1), // U+0115b6
NEW_WIDTH(0x15bc, 0), // U+0115bc
NEW_WIDTH(0x15be, 1), // U+0115be
NEW_WIDTH(0x15bf, 0), // U+0115bf
NEW_WIDTH(0x15c1, 1), // U+0115c1
NEW_WIDTH(0x15dc, 0), // U+0115dc
NEW_WIDTH(0x15de, 1), // U+0115de
NEW_WIDTH(0x1633, 0), // U+011633
NEW_WIDTH(0x163b, 1), // U+01163b
NEW_WIDTH(0x163d, 0), // U+01163d
NEW_WIDTH(0x163e, 1), // U+01163e
NEW_WIDTH(0x163f, 0), // U+01163f
NEW_WIDTH(0x1641, 1), // U+011641
NEW_WIDTH(0x16ab, 0), // U+0116ab
NEW_WIDTH(0x16ac, 1), // U+0116ac
NEW_WIDTH(0x16ad, 0), // U+0116ad
NEW_WIDTH(0x16ae, 1), // U+0116ae
NEW_WIDTH(0x16b0, 0), // U+0116b0
NEW_WIDTH(0x16b6, 1), // U+0116b6
NEW_WIDTH(0x16b7, 0), // U+0116b7
NEW_WIDTH(0x16b8, 1), // U+0116b8
NEW_WIDTH(0x171d, 0), // U+01171d
NEW_WIDTH(0x1720, 1), // U+011720
NEW_WIDTH(0x1722, 0), // U+011722
NEW_WIDTH(0x1726, 1), // U+011726
NEW_WIDTH(0x1727, 0), // U+011727
NEW_WIDTH(0x172c, 1), // U+01172c
NEW_WIDTH(0x182f, 0), // U+01182f
NEW_WIDTH(0x1838, 1), // U+011838
NEW_WIDTH(0x1839, 0), // U+011839
NEW_WIDTH(0x183b, 1), // U+01183b
NEW_WIDTH(0x1a01, 0), // U+011a01
NEW_WIDTH(0x1a0b, 1), // U+011a0b
NEW_WIDTH(0x1a33, 0), // U+011a33
NEW_WIDTH(0x1a39, 1), // U+011a39
NEW_WIDTH(0x1a3b, 0), // U+011a3b
NEW_WIDTH(0x1a3f, 1), // U+011a3f
NEW_WIDTH(0x1a47, 0), // U+011a47
NEW_WIDTH(0x1a48, 1), // U+011a48
NEW_WIDTH(0x1a51, 0), // U+011a51
NEW_WIDTH(0x1a57, 1), // U+011a57
NEW_WIDTH(0x1a59, 0), // U+011a59
NEW_WIDTH(0x1a5c, 1), // U+011a5c
NEW_WIDTH(0x1a8a, 0), // U+011a8a
NEW_WIDTH(0x1a97, 1), // U+011a97
NEW_WIDTH(0x1a98, 0), // U+011a98
NEW_WIDTH(0x1a9a, 1), // U+011a9a
NEW_WIDTH(0x1c30, 0), // U+011c30
NEW_WIDTH(0x1c37, 1), // U+011c37
NEW_WIDTH(0x1c38, 0), // U+011c38
NEW_WIDTH(0x1c3e, 1), // U+011c3e
NEW_WIDTH(0x1c3f, 0), // U+011c3f
NEW_WIDTH(0x1c40, 1), // U+011c40
NEW_WIDTH(0x1c92, 0), // U+011c92
NEW_WIDTH(0x1ca8, 1), // U+011ca8
NEW_WIDTH(0x1caa, 0), // U+011caa
NEW_WIDTH(0x1cb1, 1), // U+011cb1
NEW_WIDTH(0x1cb2, 0), // U+011cb2
NEW_WIDTH(0x1cb4, 1), // U+011cb4
NEW_WIDTH(0x1cb5, 0), // U+011cb5
NEW_WIDTH(0x1cb7, 1), // U+011cb7
NEW_WIDTH(0x1d31, 0), // U+011d31
NEW_WIDTH(0x1d37, 1), // U+011d37
NEW_WIDTH(0x1d3a, 0), // U+011d3a
NEW_WIDTH(0x1d3b, 1), // U+011d3b
NEW_WIDTH(0x1d3c, 0), // U+011d3c
NEW_WIDTH(0x1d3e, 1), // U+011d3e
NEW_WIDTH(0x1d3f, 0), // U+011d3f
NEW_WIDTH(0x1d46, 1), // U+011d46
NEW_WIDTH(0x1d47, 0), // U+011d47
NEW_WIDTH(0x1d48, 1), // U+011d48
NEW_WIDTH(0x1d90, 0), // U+011d90
NEW_WIDTH(0x1d92, 1), // U+011d92
NEW_WIDTH(0x1d95, 0), // U+011d95
NEW_WIDTH(0x1d96, 1), // U+011d96
NEW_WIDTH(0x1d97, 0), // U+011d97
NEW_WIDTH(0x1d98, 1), // U+011d98
NEW_WIDTH(0x1ef3, 0), // U+011ef3
NEW_WIDTH(0x1ef5, 1), // U+011ef5
// U+014000,
NEW_WIDTH(0x0000, 1), // U+014000
NEW_WIDTH(0x2af0, 0), // U+016af0
NEW_WIDTH(0x2af5, 1), // U+016af5
NEW_WIDTH(0x2b30, 0), // U+016b30
NEW_WIDTH(0x2b37, 1), // U+016b37
NEW_WIDTH(0x2f8f, 0), // U+016f8f
NEW_WIDTH(0x2f93, 1), // U+016f93
NEW_WIDTH(0x2fe0, 2), // U+016fe0
NEW_WIDTH(0x2fe2, 1), // U+016fe2
NEW_WIDTH(0x3000, 2), // U+017000
// U+018000,
NEW_WIDTH(0x0000, 2), // U+018000
NEW_WIDTH(0x07f2, 1), // U+0187f2
NEW_WIDTH(0x0800, 2), // U+018800
NEW_WIDTH(0x0af3, 1), // U+018af3
NEW_WIDTH(0x3000, 2), // U+01b000
NEW_WIDTH(0x311f, 1), // U+01b11f
NEW_WIDTH(0x3170, 2), // U+01b170
NEW_WIDTH(0x32fc, 1), // U+01b2fc
NEW_WIDTH(0x3c9d, 0), // U+01bc9d
NEW_WIDTH(0x3c9f, 1), // U+01bc9f
NEW_WIDTH(0x3ca0, 0), // U+01bca0
NEW_WIDTH(0x3ca4, 1), // U+01bca4
// U+01c000,
NEW_WIDTH(0x0000, 1), // U+01c000
NEW_WIDTH(0x1167, 0), // U+01d167
NEW_WIDTH(0x116a, 1), // U+01d16a
NEW_WIDTH(0x1173, 0), // U+01d173
NEW_WIDTH(0x1183, 1), // U+01d183
NEW_WIDTH(0x1185, 0), // U+01d185
NEW_WIDTH(0x118c, 1), // U+01d18c
NEW_WIDTH(0x11aa, 0), // U+01d1aa
NEW_WIDTH(0x11ae, 1), // U+01d1ae
NEW_WIDTH(0x1242, 0), // U+01d242
NEW_WIDTH(0x1245, 1), // U+01d245
NEW_WIDTH(0x1a00, 0), // U+01da00
NEW_WIDTH(0x1a37, 1), // U+01da37
NEW_WIDTH(0x1a3b, 0), // U+01da3b
NEW_WIDTH(0x1a6d, 1), // U+01da6d
NEW_WIDTH(0x1a75, 0), // U+01da75
NEW_WIDTH(0x1a76, 1), // U+01da76
NEW_WIDTH(0x1a84, 0), // U+01da84
NEW_WIDTH(0x1a85, 1), // U+01da85
NEW_WIDTH(0x1a9b, 0), // U+01da9b
NEW_WIDTH(0x1aa0, 1), // U+01daa0
NEW_WIDTH(0x1aa1, 0), // U+01daa1
NEW_WIDTH(0x1ab0, 1), // U+01dab0
NEW_WIDTH(0x2000, 0), // U+01e000
NEW_WIDTH(0x2007, 1), // U+01e007
NEW_WIDTH(0x2008, 0), // U+01e008
NEW_WIDTH(0x2019, 1), // U+01e019
NEW_WIDTH(0x201b, 0), // U+01e01b
NEW_WIDTH(0x2022, 1), // U+01e022
NEW_WIDTH(0x2023, 0), // U+01e023
NEW_WIDTH(0x2025, 1), // U+01e025
NEW_WIDTH(0x2026, 0), // U+01e026
NEW_WIDTH(0x202b, 1), // U+01e02b
NEW_WIDTH(0x28d0, 0), // U+01e8d0
NEW_WIDTH(0x28d7, 1), // U+01e8d7
NEW_WIDTH(0x2944, 0), // U+01e944
NEW_WIDTH(0x294b, 1), // U+01e94b
NEW_WIDTH(0x3004, 2), // U+01f004
NEW_WIDTH(0x3005, 1), // U+01f005
NEW_WIDTH(0x30cf, 2), // U+01f0cf
NEW_WIDTH(0x30d0, 1), // U+01f0d0
NEW_WIDTH(0x318e, 2), // U+01f18e
NEW_WIDTH(0x318f, 1), // U+01f18f
NEW_WIDTH(0x3191, 2), // U+01f191
NEW_WIDTH(0x319b, 1), // U+01f19b
NEW_WIDTH(0x31e6, 2), // U+01f1e6
NEW_WIDTH(0x3203, 1), // U+01f203
NEW_WIDTH(0x3210, 2), // U+01f210
NEW_WIDTH(0x323c, 1), // U+01f23c
NEW_WIDTH(0x3240, 2), // U+01f240
NEW_WIDTH(0x3249, 1), // U+01f249
NEW_WIDTH(0x3250, 2), // U+01f250
NEW_WIDTH(0x3252, 1), // U+01f252
NEW_WIDTH(0x3260, 2), // U+01f260
NEW_WIDTH(0x3266, 1), // U+01f266
NEW_WIDTH(0x3300, 2), // U+01f300
NEW_WIDTH(0x3321, 1), // U+01f321
NEW_WIDTH(0x332d, 2), // U+01f32d
NEW_WIDTH(0x3336, 1), // U+01f336
NEW_WIDTH(0x3337, 2), // U+01f337
NEW_WIDTH(0x337d, 1), // U+01f37d
NEW_WIDTH(0x337e, 2), // U+01f37e
NEW_WIDTH(0x3394, 1), // U+01f394
NEW_WIDTH(0x33a0, 2), // U+01f3a0
NEW_WIDTH(0x33cb, 1), // U+01f3cb
NEW_WIDTH(0x33cf, 2), // U+01f3cf
NEW_WIDTH(0x33d4, 1), // U+01f3d4
NEW_WIDTH(0x33e0, 2), // U+01f3e0
NEW_WIDTH(0x33f1, 1), // U+01f3f1
NEW_WIDTH(0x33f4, 2), // U+01f3f4
NEW_WIDTH(0x33f5, 1), // U+01f3f5
NEW_WIDTH(0x33f8, 2), // U+01f3f8
NEW_WIDTH(0x343f, 1), // U+01f43f
NEW_WIDTH(0x3440, 2), // U+01f440
NEW_WIDTH(0x3441, 1), // U+01f441
NEW_WIDTH(0x3442, 2), // U+01f442
NEW_WIDTH(0x34fd, 1), // U+01f4fd
NEW_WIDTH(0x34ff, 2), // U+01f4ff
NEW_WIDTH(0x353e, 1), // U+01f53e
NEW_WIDTH(0x354b, 2), // U+01f54b
NEW_WIDTH(0x354f, 1), // U+01f54f
NEW_WIDTH(0x3550, 2), // U+01f550
NEW_WIDTH(0x3568, 1), // U+01f568
NEW_WIDTH(0x357a, 2), // U+01f57a
NEW_WIDTH(0x357b, 1), // U+01f57b
NEW_WIDTH(0x3595, 2), // U+01f595
NEW_WIDTH(0x3597, 1), // U+01f597
NEW_WIDTH(0x35a4, 2), // U+01f5a4
NEW_WIDTH(0x35a5, 1), // U+01f5a5
NEW_WIDTH(0x35fb, 2), // U+01f5fb
NEW_WIDTH(0x3650, 1), // U+01f650
NEW_WIDTH(0x3680, 2), // U+01f680
NEW_WIDTH(0x36c6, 1), // U+01f6c6
NEW_WIDTH(0x36cc, 2), // U+01f6cc
NEW_WIDTH(0x36cd, 1), // U+01f6cd
NEW_WIDTH(0x36d0, 2), // U+01f6d0
NEW_WIDTH(0x36d3, 1), // U+01f6d3
NEW_WIDTH(0x36eb, 2), // U+01f6eb
NEW_WIDTH(0x36ed, 1), // U+01f6ed
NEW_WIDTH(0x36f4, 2), // U+01f6f4
NEW_WIDTH(0x36fa, 1), // U+01f6fa
NEW_WIDTH(0x3910, 2), // U+01f910
NEW_WIDTH(0x393f, 1), // U+01f93f
NEW_WIDTH(0x3940, 2), // U+01f940
NEW_WIDTH(0x3971, 1), // U+01f971
NEW_WIDTH(0x3973, 2), // U+01f973
NEW_WIDTH(0x3977, 1), // U+01f977
NEW_WIDTH(0x397a, 2), // U+01f97a
NEW_WIDTH(0x397b, 1), // U+01f97b
NEW_WIDTH(0x397c, 2), // U+01f97c
NEW_WIDTH(0x39a3, 1), // U+01f9a3
NEW_WIDTH(0x39b0, 2), // U+01f9b0
NEW_WIDTH(0x39ba, 1), // U+01f9ba
NEW_WIDTH(0x39c0, 2), // U+01f9c0
NEW_WIDTH(0x39c3, 1), // U+01f9c3
NEW_WIDTH(0x39d0, 2), // U+01f9d0
NEW_WIDTH(0x3a00, 1), // U+01fa00
// U+020000,
NEW_WIDTH(0x0000, 2), // U+020000
// U+024000,
NEW_WIDTH(0x0000, 2), // U+024000
// U+028000,
NEW_WIDTH(0x0000, 2), // U+028000
// U+02c000,
NEW_WIDTH(0x0000, 2), // U+02c000
NEW_WIDTH(0x3ffe, 1), // U+02fffe
// U+030000,
NEW_WIDTH(0x0000, 2), // U+030000
// U+034000,
NEW_WIDTH(0x0000, 2), // U+034000
// U+038000,
NEW_WIDTH(0x0000, 2), // U+038000
// U+03c000,
NEW_WIDTH(0x0000, 2), // U+03c000
NEW_WIDTH(0x3ffe, 1), // U+03fffe
// U+040000,
NEW_WIDTH(0x0000, 1), // U+040000
// U+044000,
NEW_WIDTH(0x0000, 1), // U+044000
// U+048000,
NEW_WIDTH(0x0000, 1), // U+048000
// U+04c000,
NEW_WIDTH(0x0000, 1), // U+04c000
// U+050000,
NEW_WIDTH(0x0000, 1), // U+050000
// U+054000,
NEW_WIDTH(0x0000, 1), // U+054000
// U+058000,
NEW_WIDTH(0x0000, 1), // U+058000
// U+05c000,
NEW_WIDTH(0x0000, 1), // U+05c000
// U+060000,
NEW_WIDTH(0x0000, 1), // U+060000
// U+064000,
NEW_WIDTH(0x0000, 1), // U+064000
// U+068000,
NEW_WIDTH(0x0000, 1), // U+068000
// U+06c000,
NEW_WIDTH(0x0000, 1), // U+06c000
// U+070000,
NEW_WIDTH(0x0000, 1), // U+070000
// U+074000,
NEW_WIDTH(0x0000, 1), // U+074000
// U+078000,
NEW_WIDTH(0x0000, 1), // U+078000
// U+07c000,
NEW_WIDTH(0x0000, 1), // U+07c000
// U+080000,
NEW_WIDTH(0x0000, 1), // U+080000
// U+084000,
NEW_WIDTH(0x0000, 1), // U+084000
// U+088000,
NEW_WIDTH(0x0000, 1), // U+088000
// U+08c000,
NEW_WIDTH(0x0000, 1), // U+08c000
// U+090000,
NEW_WIDTH(0x0000, 1), // U+090000
// U+094000,
NEW_WIDTH(0x0000, 1), // U+094000
// U+098000,
NEW_WIDTH(0x0000, 1), // U+098000
// U+09c000,
NEW_WIDTH(0x0000, 1), // U+09c000
// U+0a0000,
NEW_WIDTH(0x0000, 1), // U+0a0000
// U+0a4000,
NEW_WIDTH(0x0000, 1), // U+0a4000
// U+0a8000,
NEW_WIDTH(0x0000, 1), // U+0a8000
// U+0ac000,
NEW_WIDTH(0x0000, 1), // U+0ac000
// U+0b0000,
NEW_WIDTH(0x0000, 1), // U+0b0000
// U+0b4000,
NEW_WIDTH(0x0000, 1), // U+0b4000
// U+0b8000,
NEW_WIDTH(0x0000, 1), // U+0b8000
// U+0bc000,
NEW_WIDTH(0x0000, 1), // U+0bc000
// U+0c0000,
NEW_WIDTH(0x0000, 1), // U+0c0000
// U+0c4000,
NEW_WIDTH(0x0000, 1), // U+0c4000
// U+0c8000,
NEW_WIDTH(0x0000, 1), // U+0c8000
// U+0cc000,
NEW_WIDTH(0x0000, 1), // U+0cc000
// U+0d0000,
NEW_WIDTH(0x0000, 1), // U+0d0000
// U+0d4000,
NEW_WIDTH(0x0000, 1), // U+0d4000
// U+0d8000,
NEW_WIDTH(0x0000, 1), // U+0d8000
// U+0dc000,
NEW_WIDTH(0x0000, 1), // U+0dc000
// U+0e0000,
NEW_WIDTH(0x0000, 1), // U+0e0000
NEW_WIDTH(0x0001, 0), // U+0e0001
NEW_WIDTH(0x0002, 1), // U+0e0002
NEW_WIDTH(0x0020, 0), // U+0e0020
NEW_WIDTH(0x0080, 1), // U+0e0080
NEW_WIDTH(0x0100, 0), // U+0e0100
NEW_WIDTH(0x01f0, 1), // U+0e01f0
// U+0e4000,
NEW_WIDTH(0x0000, 1), // U+0e4000
// U+0e8000,
NEW_WIDTH(0x0000, 1), // U+0e8000
// U+0ec000,
NEW_WIDTH(0x0000, 1), // U+0ec000
// U+0f0000,
NEW_WIDTH(0x0000, 1), // U+0f0000
// U+0f4000,
NEW_WIDTH(0x0000, 1), // U+0f4000
// U+0f8000,
NEW_WIDTH(0x0000, 1), // U+0f8000
// U+0fc000,
NEW_WIDTH(0x0000, 1), // U+0fc000
// U+100000,
NEW_WIDTH(0x0000, 1), // U+100000
// U+104000,
NEW_WIDTH(0x0000, 1), // U+104000
// U+108000,
NEW_WIDTH(0x0000, 1), // U+108000
// U+10c000,
NEW_WIDTH(0x0000, 1), // U+10c000
}; termpaint-0.3.1/charclassification_konsole_2022.inc 0000664 0000000 0000000 00000116525 14773035472 0022267 0 ustar 00root root 0000000 0000000 static const uint16_t termpaint_char_width_offsets_konsole_2022[0x45] = {
0,
454,
457,
534,
564,
759,
774,
798,
941,
942,
943,
944,
946,
947,
948,
949,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
};
static const uint16_t termpaint_char_width_data_konsole_2022[] = {
// U+000000,
NEW_WIDTH(0x0000, 1), // U+000000
NEW_WIDTH(0x0001, -1), // U+000001
NEW_WIDTH(0x0020, 1), // U+000020
NEW_WIDTH(0x007f, -1), // U+00007f
NEW_WIDTH(0x00a0, 1), // U+0000a0
NEW_WIDTH(0x0300, 0), // U+000300
NEW_WIDTH(0x0370, 1), // U+000370
NEW_WIDTH(0x0483, 0), // U+000483
NEW_WIDTH(0x048a, 1), // U+00048a
NEW_WIDTH(0x0591, 0), // U+000591
NEW_WIDTH(0x05be, 1), // U+0005be
NEW_WIDTH(0x05bf, 0), // U+0005bf
NEW_WIDTH(0x05c0, 1), // U+0005c0
NEW_WIDTH(0x05c1, 0), // U+0005c1
NEW_WIDTH(0x05c3, 1), // U+0005c3
NEW_WIDTH(0x05c4, 0), // U+0005c4
NEW_WIDTH(0x05c6, 1), // U+0005c6
NEW_WIDTH(0x05c7, 0), // U+0005c7
NEW_WIDTH(0x05c8, 1), // U+0005c8
NEW_WIDTH(0x0600, 0), // U+000600
NEW_WIDTH(0x0606, 1), // U+000606
NEW_WIDTH(0x0610, 0), // U+000610
NEW_WIDTH(0x061b, 1), // U+00061b
NEW_WIDTH(0x061c, 0), // U+00061c
NEW_WIDTH(0x061d, 1), // U+00061d
NEW_WIDTH(0x064b, 0), // U+00064b
NEW_WIDTH(0x0660, 1), // U+000660
NEW_WIDTH(0x0670, 0), // U+000670
NEW_WIDTH(0x0671, 1), // U+000671
NEW_WIDTH(0x06d6, 0), // U+0006d6
NEW_WIDTH(0x06de, 1), // U+0006de
NEW_WIDTH(0x06df, 0), // U+0006df
NEW_WIDTH(0x06e5, 1), // U+0006e5
NEW_WIDTH(0x06e7, 0), // U+0006e7
NEW_WIDTH(0x06e9, 1), // U+0006e9
NEW_WIDTH(0x06ea, 0), // U+0006ea
NEW_WIDTH(0x06ee, 1), // U+0006ee
NEW_WIDTH(0x070f, 0), // U+00070f
NEW_WIDTH(0x0710, 1), // U+000710
NEW_WIDTH(0x0711, 0), // U+000711
NEW_WIDTH(0x0712, 1), // U+000712
NEW_WIDTH(0x0730, 0), // U+000730
NEW_WIDTH(0x074b, 1), // U+00074b
NEW_WIDTH(0x07a6, 0), // U+0007a6
NEW_WIDTH(0x07b1, 1), // U+0007b1
NEW_WIDTH(0x07eb, 0), // U+0007eb
NEW_WIDTH(0x07f4, 1), // U+0007f4
NEW_WIDTH(0x07fd, 0), // U+0007fd
NEW_WIDTH(0x07fe, 1), // U+0007fe
NEW_WIDTH(0x0816, 0), // U+000816
NEW_WIDTH(0x081a, 1), // U+00081a
NEW_WIDTH(0x081b, 0), // U+00081b
NEW_WIDTH(0x0824, 1), // U+000824
NEW_WIDTH(0x0825, 0), // U+000825
NEW_WIDTH(0x0828, 1), // U+000828
NEW_WIDTH(0x0829, 0), // U+000829
NEW_WIDTH(0x082e, 1), // U+00082e
NEW_WIDTH(0x0859, 0), // U+000859
NEW_WIDTH(0x085c, 1), // U+00085c
NEW_WIDTH(0x0890, 0), // U+000890
NEW_WIDTH(0x0892, 1), // U+000892
NEW_WIDTH(0x0898, 0), // U+000898
NEW_WIDTH(0x08a0, 1), // U+0008a0
NEW_WIDTH(0x08ca, 0), // U+0008ca
NEW_WIDTH(0x0903, 1), // U+000903
NEW_WIDTH(0x093a, 0), // U+00093a
NEW_WIDTH(0x093b, 1), // U+00093b
NEW_WIDTH(0x093c, 0), // U+00093c
NEW_WIDTH(0x093d, 1), // U+00093d
NEW_WIDTH(0x0941, 0), // U+000941
NEW_WIDTH(0x0949, 1), // U+000949
NEW_WIDTH(0x094d, 0), // U+00094d
NEW_WIDTH(0x094e, 1), // U+00094e
NEW_WIDTH(0x0951, 0), // U+000951
NEW_WIDTH(0x0958, 1), // U+000958
NEW_WIDTH(0x0962, 0), // U+000962
NEW_WIDTH(0x0964, 1), // U+000964
NEW_WIDTH(0x0981, 0), // U+000981
NEW_WIDTH(0x0982, 1), // U+000982
NEW_WIDTH(0x09bc, 0), // U+0009bc
NEW_WIDTH(0x09bd, 1), // U+0009bd
NEW_WIDTH(0x09c1, 0), // U+0009c1
NEW_WIDTH(0x09c5, 1), // U+0009c5
NEW_WIDTH(0x09cd, 0), // U+0009cd
NEW_WIDTH(0x09ce, 1), // U+0009ce
NEW_WIDTH(0x09e2, 0), // U+0009e2
NEW_WIDTH(0x09e4, 1), // U+0009e4
NEW_WIDTH(0x09fe, 0), // U+0009fe
NEW_WIDTH(0x09ff, 1), // U+0009ff
NEW_WIDTH(0x0a01, 0), // U+000a01
NEW_WIDTH(0x0a03, 1), // U+000a03
NEW_WIDTH(0x0a3c, 0), // U+000a3c
NEW_WIDTH(0x0a3d, 1), // U+000a3d
NEW_WIDTH(0x0a41, 0), // U+000a41
NEW_WIDTH(0x0a43, 1), // U+000a43
NEW_WIDTH(0x0a47, 0), // U+000a47
NEW_WIDTH(0x0a49, 1), // U+000a49
NEW_WIDTH(0x0a4b, 0), // U+000a4b
NEW_WIDTH(0x0a4e, 1), // U+000a4e
NEW_WIDTH(0x0a51, 0), // U+000a51
NEW_WIDTH(0x0a52, 1), // U+000a52
NEW_WIDTH(0x0a70, 0), // U+000a70
NEW_WIDTH(0x0a72, 1), // U+000a72
NEW_WIDTH(0x0a75, 0), // U+000a75
NEW_WIDTH(0x0a76, 1), // U+000a76
NEW_WIDTH(0x0a81, 0), // U+000a81
NEW_WIDTH(0x0a83, 1), // U+000a83
NEW_WIDTH(0x0abc, 0), // U+000abc
NEW_WIDTH(0x0abd, 1), // U+000abd
NEW_WIDTH(0x0ac1, 0), // U+000ac1
NEW_WIDTH(0x0ac6, 1), // U+000ac6
NEW_WIDTH(0x0ac7, 0), // U+000ac7
NEW_WIDTH(0x0ac9, 1), // U+000ac9
NEW_WIDTH(0x0acd, 0), // U+000acd
NEW_WIDTH(0x0ace, 1), // U+000ace
NEW_WIDTH(0x0ae2, 0), // U+000ae2
NEW_WIDTH(0x0ae4, 1), // U+000ae4
NEW_WIDTH(0x0afa, 0), // U+000afa
NEW_WIDTH(0x0b00, 1), // U+000b00
NEW_WIDTH(0x0b01, 0), // U+000b01
NEW_WIDTH(0x0b02, 1), // U+000b02
NEW_WIDTH(0x0b3c, 0), // U+000b3c
NEW_WIDTH(0x0b3d, 1), // U+000b3d
NEW_WIDTH(0x0b3f, 0), // U+000b3f
NEW_WIDTH(0x0b40, 1), // U+000b40
NEW_WIDTH(0x0b41, 0), // U+000b41
NEW_WIDTH(0x0b45, 1), // U+000b45
NEW_WIDTH(0x0b4d, 0), // U+000b4d
NEW_WIDTH(0x0b4e, 1), // U+000b4e
NEW_WIDTH(0x0b55, 0), // U+000b55
NEW_WIDTH(0x0b57, 1), // U+000b57
NEW_WIDTH(0x0b62, 0), // U+000b62
NEW_WIDTH(0x0b64, 1), // U+000b64
NEW_WIDTH(0x0b82, 0), // U+000b82
NEW_WIDTH(0x0b83, 1), // U+000b83
NEW_WIDTH(0x0bc0, 0), // U+000bc0
NEW_WIDTH(0x0bc1, 1), // U+000bc1
NEW_WIDTH(0x0bcd, 0), // U+000bcd
NEW_WIDTH(0x0bce, 1), // U+000bce
NEW_WIDTH(0x0c00, 0), // U+000c00
NEW_WIDTH(0x0c01, 1), // U+000c01
NEW_WIDTH(0x0c04, 0), // U+000c04
NEW_WIDTH(0x0c05, 1), // U+000c05
NEW_WIDTH(0x0c3c, 0), // U+000c3c
NEW_WIDTH(0x0c3d, 1), // U+000c3d
NEW_WIDTH(0x0c3e, 0), // U+000c3e
NEW_WIDTH(0x0c41, 1), // U+000c41
NEW_WIDTH(0x0c46, 0), // U+000c46
NEW_WIDTH(0x0c49, 1), // U+000c49
NEW_WIDTH(0x0c4a, 0), // U+000c4a
NEW_WIDTH(0x0c4e, 1), // U+000c4e
NEW_WIDTH(0x0c55, 0), // U+000c55
NEW_WIDTH(0x0c57, 1), // U+000c57
NEW_WIDTH(0x0c62, 0), // U+000c62
NEW_WIDTH(0x0c64, 1), // U+000c64
NEW_WIDTH(0x0c81, 0), // U+000c81
NEW_WIDTH(0x0c82, 1), // U+000c82
NEW_WIDTH(0x0cbc, 0), // U+000cbc
NEW_WIDTH(0x0cbd, 1), // U+000cbd
NEW_WIDTH(0x0cbf, 0), // U+000cbf
NEW_WIDTH(0x0cc0, 1), // U+000cc0
NEW_WIDTH(0x0cc6, 0), // U+000cc6
NEW_WIDTH(0x0cc7, 1), // U+000cc7
NEW_WIDTH(0x0ccc, 0), // U+000ccc
NEW_WIDTH(0x0cce, 1), // U+000cce
NEW_WIDTH(0x0ce2, 0), // U+000ce2
NEW_WIDTH(0x0ce4, 1), // U+000ce4
NEW_WIDTH(0x0d00, 0), // U+000d00
NEW_WIDTH(0x0d02, 1), // U+000d02
NEW_WIDTH(0x0d3b, 0), // U+000d3b
NEW_WIDTH(0x0d3d, 1), // U+000d3d
NEW_WIDTH(0x0d41, 0), // U+000d41
NEW_WIDTH(0x0d45, 1), // U+000d45
NEW_WIDTH(0x0d4d, 0), // U+000d4d
NEW_WIDTH(0x0d4e, 1), // U+000d4e
NEW_WIDTH(0x0d62, 0), // U+000d62
NEW_WIDTH(0x0d64, 1), // U+000d64
NEW_WIDTH(0x0d81, 0), // U+000d81
NEW_WIDTH(0x0d82, 1), // U+000d82
NEW_WIDTH(0x0dca, 0), // U+000dca
NEW_WIDTH(0x0dcb, 1), // U+000dcb
NEW_WIDTH(0x0dd2, 0), // U+000dd2
NEW_WIDTH(0x0dd5, 1), // U+000dd5
NEW_WIDTH(0x0dd6, 0), // U+000dd6
NEW_WIDTH(0x0dd7, 1), // U+000dd7
NEW_WIDTH(0x0e31, 0), // U+000e31
NEW_WIDTH(0x0e32, 1), // U+000e32
NEW_WIDTH(0x0e34, 0), // U+000e34
NEW_WIDTH(0x0e3b, 1), // U+000e3b
NEW_WIDTH(0x0e47, 0), // U+000e47
NEW_WIDTH(0x0e4f, 1), // U+000e4f
NEW_WIDTH(0x0eb1, 0), // U+000eb1
NEW_WIDTH(0x0eb2, 1), // U+000eb2
NEW_WIDTH(0x0eb4, 0), // U+000eb4
NEW_WIDTH(0x0ebd, 1), // U+000ebd
NEW_WIDTH(0x0ec8, 0), // U+000ec8
NEW_WIDTH(0x0ece, 1), // U+000ece
NEW_WIDTH(0x0f18, 0), // U+000f18
NEW_WIDTH(0x0f1a, 1), // U+000f1a
NEW_WIDTH(0x0f35, 0), // U+000f35
NEW_WIDTH(0x0f36, 1), // U+000f36
NEW_WIDTH(0x0f37, 0), // U+000f37
NEW_WIDTH(0x0f38, 1), // U+000f38
NEW_WIDTH(0x0f39, 0), // U+000f39
NEW_WIDTH(0x0f3a, 1), // U+000f3a
NEW_WIDTH(0x0f71, 0), // U+000f71
NEW_WIDTH(0x0f7f, 1), // U+000f7f
NEW_WIDTH(0x0f80, 0), // U+000f80
NEW_WIDTH(0x0f85, 1), // U+000f85
NEW_WIDTH(0x0f86, 0), // U+000f86
NEW_WIDTH(0x0f88, 1), // U+000f88
NEW_WIDTH(0x0f8d, 0), // U+000f8d
NEW_WIDTH(0x0f98, 1), // U+000f98
NEW_WIDTH(0x0f99, 0), // U+000f99
NEW_WIDTH(0x0fbd, 1), // U+000fbd
NEW_WIDTH(0x0fc6, 0), // U+000fc6
NEW_WIDTH(0x0fc7, 1), // U+000fc7
NEW_WIDTH(0x102d, 0), // U+00102d
NEW_WIDTH(0x1031, 1), // U+001031
NEW_WIDTH(0x1032, 0), // U+001032
NEW_WIDTH(0x1038, 1), // U+001038
NEW_WIDTH(0x1039, 0), // U+001039
NEW_WIDTH(0x103b, 1), // U+00103b
NEW_WIDTH(0x103d, 0), // U+00103d
NEW_WIDTH(0x103f, 1), // U+00103f
NEW_WIDTH(0x1058, 0), // U+001058
NEW_WIDTH(0x105a, 1), // U+00105a
NEW_WIDTH(0x105e, 0), // U+00105e
NEW_WIDTH(0x1061, 1), // U+001061
NEW_WIDTH(0x1071, 0), // U+001071
NEW_WIDTH(0x1075, 1), // U+001075
NEW_WIDTH(0x1082, 0), // U+001082
NEW_WIDTH(0x1083, 1), // U+001083
NEW_WIDTH(0x1085, 0), // U+001085
NEW_WIDTH(0x1087, 1), // U+001087
NEW_WIDTH(0x108d, 0), // U+00108d
NEW_WIDTH(0x108e, 1), // U+00108e
NEW_WIDTH(0x109d, 0), // U+00109d
NEW_WIDTH(0x109e, 1), // U+00109e
NEW_WIDTH(0x1100, 2), // U+001100
NEW_WIDTH(0x1160, 0), // U+001160
NEW_WIDTH(0x1200, 1), // U+001200
NEW_WIDTH(0x135d, 0), // U+00135d
NEW_WIDTH(0x1360, 1), // U+001360
NEW_WIDTH(0x1712, 0), // U+001712
NEW_WIDTH(0x1715, 1), // U+001715
NEW_WIDTH(0x1732, 0), // U+001732
NEW_WIDTH(0x1734, 1), // U+001734
NEW_WIDTH(0x1752, 0), // U+001752
NEW_WIDTH(0x1754, 1), // U+001754
NEW_WIDTH(0x1772, 0), // U+001772
NEW_WIDTH(0x1774, 1), // U+001774
NEW_WIDTH(0x17b4, 0), // U+0017b4
NEW_WIDTH(0x17b6, 1), // U+0017b6
NEW_WIDTH(0x17b7, 0), // U+0017b7
NEW_WIDTH(0x17be, 1), // U+0017be
NEW_WIDTH(0x17c6, 0), // U+0017c6
NEW_WIDTH(0x17c7, 1), // U+0017c7
NEW_WIDTH(0x17c9, 0), // U+0017c9
NEW_WIDTH(0x17d4, 1), // U+0017d4
NEW_WIDTH(0x17dd, 0), // U+0017dd
NEW_WIDTH(0x17de, 1), // U+0017de
NEW_WIDTH(0x180b, 0), // U+00180b
NEW_WIDTH(0x1810, 1), // U+001810
NEW_WIDTH(0x1885, 0), // U+001885
NEW_WIDTH(0x1887, 1), // U+001887
NEW_WIDTH(0x18a9, 0), // U+0018a9
NEW_WIDTH(0x18aa, 1), // U+0018aa
NEW_WIDTH(0x1920, 0), // U+001920
NEW_WIDTH(0x1923, 1), // U+001923
NEW_WIDTH(0x1927, 0), // U+001927
NEW_WIDTH(0x1929, 1), // U+001929
NEW_WIDTH(0x1932, 0), // U+001932
NEW_WIDTH(0x1933, 1), // U+001933
NEW_WIDTH(0x1939, 0), // U+001939
NEW_WIDTH(0x193c, 1), // U+00193c
NEW_WIDTH(0x1a17, 0), // U+001a17
NEW_WIDTH(0x1a19, 1), // U+001a19
NEW_WIDTH(0x1a1b, 0), // U+001a1b
NEW_WIDTH(0x1a1c, 1), // U+001a1c
NEW_WIDTH(0x1a56, 0), // U+001a56
NEW_WIDTH(0x1a57, 1), // U+001a57
NEW_WIDTH(0x1a58, 0), // U+001a58
NEW_WIDTH(0x1a5f, 1), // U+001a5f
NEW_WIDTH(0x1a60, 0), // U+001a60
NEW_WIDTH(0x1a61, 1), // U+001a61
NEW_WIDTH(0x1a62, 0), // U+001a62
NEW_WIDTH(0x1a63, 1), // U+001a63
NEW_WIDTH(0x1a65, 0), // U+001a65
NEW_WIDTH(0x1a6d, 1), // U+001a6d
NEW_WIDTH(0x1a73, 0), // U+001a73
NEW_WIDTH(0x1a7d, 1), // U+001a7d
NEW_WIDTH(0x1a7f, 0), // U+001a7f
NEW_WIDTH(0x1a80, 1), // U+001a80
NEW_WIDTH(0x1ab0, 0), // U+001ab0
NEW_WIDTH(0x1acf, 1), // U+001acf
NEW_WIDTH(0x1b00, 0), // U+001b00
NEW_WIDTH(0x1b04, 1), // U+001b04
NEW_WIDTH(0x1b34, 0), // U+001b34
NEW_WIDTH(0x1b35, 1), // U+001b35
NEW_WIDTH(0x1b36, 0), // U+001b36
NEW_WIDTH(0x1b3b, 1), // U+001b3b
NEW_WIDTH(0x1b3c, 0), // U+001b3c
NEW_WIDTH(0x1b3d, 1), // U+001b3d
NEW_WIDTH(0x1b42, 0), // U+001b42
NEW_WIDTH(0x1b43, 1), // U+001b43
NEW_WIDTH(0x1b6b, 0), // U+001b6b
NEW_WIDTH(0x1b74, 1), // U+001b74
NEW_WIDTH(0x1b80, 0), // U+001b80
NEW_WIDTH(0x1b82, 1), // U+001b82
NEW_WIDTH(0x1ba2, 0), // U+001ba2
NEW_WIDTH(0x1ba6, 1), // U+001ba6
NEW_WIDTH(0x1ba8, 0), // U+001ba8
NEW_WIDTH(0x1baa, 1), // U+001baa
NEW_WIDTH(0x1bab, 0), // U+001bab
NEW_WIDTH(0x1bae, 1), // U+001bae
NEW_WIDTH(0x1be6, 0), // U+001be6
NEW_WIDTH(0x1be7, 1), // U+001be7
NEW_WIDTH(0x1be8, 0), // U+001be8
NEW_WIDTH(0x1bea, 1), // U+001bea
NEW_WIDTH(0x1bed, 0), // U+001bed
NEW_WIDTH(0x1bee, 1), // U+001bee
NEW_WIDTH(0x1bef, 0), // U+001bef
NEW_WIDTH(0x1bf2, 1), // U+001bf2
NEW_WIDTH(0x1c2c, 0), // U+001c2c
NEW_WIDTH(0x1c34, 1), // U+001c34
NEW_WIDTH(0x1c36, 0), // U+001c36
NEW_WIDTH(0x1c38, 1), // U+001c38
NEW_WIDTH(0x1cd0, 0), // U+001cd0
NEW_WIDTH(0x1cd3, 1), // U+001cd3
NEW_WIDTH(0x1cd4, 0), // U+001cd4
NEW_WIDTH(0x1ce1, 1), // U+001ce1
NEW_WIDTH(0x1ce2, 0), // U+001ce2
NEW_WIDTH(0x1ce9, 1), // U+001ce9
NEW_WIDTH(0x1ced, 0), // U+001ced
NEW_WIDTH(0x1cee, 1), // U+001cee
NEW_WIDTH(0x1cf4, 0), // U+001cf4
NEW_WIDTH(0x1cf5, 1), // U+001cf5
NEW_WIDTH(0x1cf8, 0), // U+001cf8
NEW_WIDTH(0x1cfa, 1), // U+001cfa
NEW_WIDTH(0x1dc0, 0), // U+001dc0
NEW_WIDTH(0x1e00, 1), // U+001e00
NEW_WIDTH(0x200b, 0), // U+00200b
NEW_WIDTH(0x2010, 1), // U+002010
NEW_WIDTH(0x202a, 0), // U+00202a
NEW_WIDTH(0x202f, 1), // U+00202f
NEW_WIDTH(0x2060, 0), // U+002060
NEW_WIDTH(0x2065, 1), // U+002065
NEW_WIDTH(0x2066, 0), // U+002066
NEW_WIDTH(0x2070, 1), // U+002070
NEW_WIDTH(0x20d0, 0), // U+0020d0
NEW_WIDTH(0x20f1, 1), // U+0020f1
NEW_WIDTH(0x231a, 2), // U+00231a
NEW_WIDTH(0x231c, 1), // U+00231c
NEW_WIDTH(0x2329, 2), // U+002329
NEW_WIDTH(0x232b, 1), // U+00232b
NEW_WIDTH(0x23e9, 2), // U+0023e9
NEW_WIDTH(0x23ed, 1), // U+0023ed
NEW_WIDTH(0x23f0, 2), // U+0023f0
NEW_WIDTH(0x23f1, 1), // U+0023f1
NEW_WIDTH(0x23f3, 2), // U+0023f3
NEW_WIDTH(0x23f4, 1), // U+0023f4
NEW_WIDTH(0x25fd, 2), // U+0025fd
NEW_WIDTH(0x25ff, 1), // U+0025ff
NEW_WIDTH(0x2614, 2), // U+002614
NEW_WIDTH(0x2616, 1), // U+002616
NEW_WIDTH(0x2648, 2), // U+002648
NEW_WIDTH(0x2654, 1), // U+002654
NEW_WIDTH(0x267f, 2), // U+00267f
NEW_WIDTH(0x2680, 1), // U+002680
NEW_WIDTH(0x2693, 2), // U+002693
NEW_WIDTH(0x2694, 1), // U+002694
NEW_WIDTH(0x26a1, 2), // U+0026a1
NEW_WIDTH(0x26a2, 1), // U+0026a2
NEW_WIDTH(0x26aa, 2), // U+0026aa
NEW_WIDTH(0x26ac, 1), // U+0026ac
NEW_WIDTH(0x26bd, 2), // U+0026bd
NEW_WIDTH(0x26bf, 1), // U+0026bf
NEW_WIDTH(0x26c4, 2), // U+0026c4
NEW_WIDTH(0x26c6, 1), // U+0026c6
NEW_WIDTH(0x26ce, 2), // U+0026ce
NEW_WIDTH(0x26cf, 1), // U+0026cf
NEW_WIDTH(0x26d4, 2), // U+0026d4
NEW_WIDTH(0x26d5, 1), // U+0026d5
NEW_WIDTH(0x26ea, 2), // U+0026ea
NEW_WIDTH(0x26eb, 1), // U+0026eb
NEW_WIDTH(0x26f2, 2), // U+0026f2
NEW_WIDTH(0x26f4, 1), // U+0026f4
NEW_WIDTH(0x26f5, 2), // U+0026f5
NEW_WIDTH(0x26f6, 1), // U+0026f6
NEW_WIDTH(0x26fa, 2), // U+0026fa
NEW_WIDTH(0x26fb, 1), // U+0026fb
NEW_WIDTH(0x26fd, 2), // U+0026fd
NEW_WIDTH(0x26fe, 1), // U+0026fe
NEW_WIDTH(0x2705, 2), // U+002705
NEW_WIDTH(0x2706, 1), // U+002706
NEW_WIDTH(0x270a, 2), // U+00270a
NEW_WIDTH(0x270c, 1), // U+00270c
NEW_WIDTH(0x2728, 2), // U+002728
NEW_WIDTH(0x2729, 1), // U+002729
NEW_WIDTH(0x274c, 2), // U+00274c
NEW_WIDTH(0x274d, 1), // U+00274d
NEW_WIDTH(0x274e, 2), // U+00274e
NEW_WIDTH(0x274f, 1), // U+00274f
NEW_WIDTH(0x2753, 2), // U+002753
NEW_WIDTH(0x2756, 1), // U+002756
NEW_WIDTH(0x2757, 2), // U+002757
NEW_WIDTH(0x2758, 1), // U+002758
NEW_WIDTH(0x2795, 2), // U+002795
NEW_WIDTH(0x2798, 1), // U+002798
NEW_WIDTH(0x27b0, 2), // U+0027b0
NEW_WIDTH(0x27b1, 1), // U+0027b1
NEW_WIDTH(0x27bf, 2), // U+0027bf
NEW_WIDTH(0x27c0, 1), // U+0027c0
NEW_WIDTH(0x2b1b, 2), // U+002b1b
NEW_WIDTH(0x2b1d, 1), // U+002b1d
NEW_WIDTH(0x2b50, 2), // U+002b50
NEW_WIDTH(0x2b51, 1), // U+002b51
NEW_WIDTH(0x2b55, 2), // U+002b55
NEW_WIDTH(0x2b56, 1), // U+002b56
NEW_WIDTH(0x2cef, 0), // U+002cef
NEW_WIDTH(0x2cf2, 1), // U+002cf2
NEW_WIDTH(0x2d7f, 0), // U+002d7f
NEW_WIDTH(0x2d80, 1), // U+002d80
NEW_WIDTH(0x2de0, 0), // U+002de0
NEW_WIDTH(0x2e00, 1), // U+002e00
NEW_WIDTH(0x2e80, 2), // U+002e80
NEW_WIDTH(0x2e9a, 1), // U+002e9a
NEW_WIDTH(0x2e9b, 2), // U+002e9b
NEW_WIDTH(0x2ef4, 1), // U+002ef4
NEW_WIDTH(0x2f00, 2), // U+002f00
NEW_WIDTH(0x2fd6, 1), // U+002fd6
NEW_WIDTH(0x2ff0, 2), // U+002ff0
NEW_WIDTH(0x2ffc, 1), // U+002ffc
NEW_WIDTH(0x3000, 2), // U+003000
NEW_WIDTH(0x302a, 0), // U+00302a
NEW_WIDTH(0x302e, 2), // U+00302e
NEW_WIDTH(0x303f, 1), // U+00303f
NEW_WIDTH(0x3041, 2), // U+003041
NEW_WIDTH(0x3097, 1), // U+003097
NEW_WIDTH(0x3099, 0), // U+003099
NEW_WIDTH(0x309b, 2), // U+00309b
NEW_WIDTH(0x3100, 1), // U+003100
NEW_WIDTH(0x3105, 2), // U+003105
NEW_WIDTH(0x3130, 1), // U+003130
NEW_WIDTH(0x3131, 2), // U+003131
NEW_WIDTH(0x318f, 1), // U+00318f
NEW_WIDTH(0x3190, 2), // U+003190
NEW_WIDTH(0x31e4, 1), // U+0031e4
NEW_WIDTH(0x31f0, 2), // U+0031f0
NEW_WIDTH(0x321f, 1), // U+00321f
NEW_WIDTH(0x3220, 2), // U+003220
NEW_WIDTH(0x3248, 1), // U+003248
NEW_WIDTH(0x3250, 2), // U+003250
// U+004000,
NEW_WIDTH(0x0000, 2), // U+004000
NEW_WIDTH(0x0dc0, 1), // U+004dc0
NEW_WIDTH(0x0e00, 2), // U+004e00
// U+008000,
NEW_WIDTH(0x0000, 2), // U+008000
NEW_WIDTH(0x248d, 1), // U+00a48d
NEW_WIDTH(0x2490, 2), // U+00a490
NEW_WIDTH(0x24c7, 1), // U+00a4c7
NEW_WIDTH(0x266f, 0), // U+00a66f
NEW_WIDTH(0x2673, 1), // U+00a673
NEW_WIDTH(0x2674, 0), // U+00a674
NEW_WIDTH(0x267e, 1), // U+00a67e
NEW_WIDTH(0x269e, 0), // U+00a69e
NEW_WIDTH(0x26a0, 1), // U+00a6a0
NEW_WIDTH(0x26f0, 0), // U+00a6f0
NEW_WIDTH(0x26f2, 1), // U+00a6f2
NEW_WIDTH(0x2802, 0), // U+00a802
NEW_WIDTH(0x2803, 1), // U+00a803
NEW_WIDTH(0x2806, 0), // U+00a806
NEW_WIDTH(0x2807, 1), // U+00a807
NEW_WIDTH(0x280b, 0), // U+00a80b
NEW_WIDTH(0x280c, 1), // U+00a80c
NEW_WIDTH(0x2825, 0), // U+00a825
NEW_WIDTH(0x2827, 1), // U+00a827
NEW_WIDTH(0x282c, 0), // U+00a82c
NEW_WIDTH(0x282d, 1), // U+00a82d
NEW_WIDTH(0x28c4, 0), // U+00a8c4
NEW_WIDTH(0x28c6, 1), // U+00a8c6
NEW_WIDTH(0x28e0, 0), // U+00a8e0
NEW_WIDTH(0x28f2, 1), // U+00a8f2
NEW_WIDTH(0x28ff, 0), // U+00a8ff
NEW_WIDTH(0x2900, 1), // U+00a900
NEW_WIDTH(0x2926, 0), // U+00a926
NEW_WIDTH(0x292e, 1), // U+00a92e
NEW_WIDTH(0x2947, 0), // U+00a947
NEW_WIDTH(0x2952, 1), // U+00a952
NEW_WIDTH(0x2960, 2), // U+00a960
NEW_WIDTH(0x297d, 1), // U+00a97d
NEW_WIDTH(0x2980, 0), // U+00a980
NEW_WIDTH(0x2983, 1), // U+00a983
NEW_WIDTH(0x29b3, 0), // U+00a9b3
NEW_WIDTH(0x29b4, 1), // U+00a9b4
NEW_WIDTH(0x29b6, 0), // U+00a9b6
NEW_WIDTH(0x29ba, 1), // U+00a9ba
NEW_WIDTH(0x29bc, 0), // U+00a9bc
NEW_WIDTH(0x29be, 1), // U+00a9be
NEW_WIDTH(0x29e5, 0), // U+00a9e5
NEW_WIDTH(0x29e6, 1), // U+00a9e6
NEW_WIDTH(0x2a29, 0), // U+00aa29
NEW_WIDTH(0x2a2f, 1), // U+00aa2f
NEW_WIDTH(0x2a31, 0), // U+00aa31
NEW_WIDTH(0x2a33, 1), // U+00aa33
NEW_WIDTH(0x2a35, 0), // U+00aa35
NEW_WIDTH(0x2a37, 1), // U+00aa37
NEW_WIDTH(0x2a43, 0), // U+00aa43
NEW_WIDTH(0x2a44, 1), // U+00aa44
NEW_WIDTH(0x2a4c, 0), // U+00aa4c
NEW_WIDTH(0x2a4d, 1), // U+00aa4d
NEW_WIDTH(0x2a7c, 0), // U+00aa7c
NEW_WIDTH(0x2a7d, 1), // U+00aa7d
NEW_WIDTH(0x2ab0, 0), // U+00aab0
NEW_WIDTH(0x2ab1, 1), // U+00aab1
NEW_WIDTH(0x2ab2, 0), // U+00aab2
NEW_WIDTH(0x2ab5, 1), // U+00aab5
NEW_WIDTH(0x2ab7, 0), // U+00aab7
NEW_WIDTH(0x2ab9, 1), // U+00aab9
NEW_WIDTH(0x2abe, 0), // U+00aabe
NEW_WIDTH(0x2ac0, 1), // U+00aac0
NEW_WIDTH(0x2ac1, 0), // U+00aac1
NEW_WIDTH(0x2ac2, 1), // U+00aac2
NEW_WIDTH(0x2aec, 0), // U+00aaec
NEW_WIDTH(0x2aee, 1), // U+00aaee
NEW_WIDTH(0x2af6, 0), // U+00aaf6
NEW_WIDTH(0x2af7, 1), // U+00aaf7
NEW_WIDTH(0x2be5, 0), // U+00abe5
NEW_WIDTH(0x2be6, 1), // U+00abe6
NEW_WIDTH(0x2be8, 0), // U+00abe8
NEW_WIDTH(0x2be9, 1), // U+00abe9
NEW_WIDTH(0x2bed, 0), // U+00abed
NEW_WIDTH(0x2bee, 1), // U+00abee
NEW_WIDTH(0x2c00, 2), // U+00ac00
// U+00c000,
NEW_WIDTH(0x0000, 2), // U+00c000
NEW_WIDTH(0x17a4, 1), // U+00d7a4
NEW_WIDTH(0x17b0, 0), // U+00d7b0
NEW_WIDTH(0x17c7, 1), // U+00d7c7
NEW_WIDTH(0x17cb, 0), // U+00d7cb
NEW_WIDTH(0x17fc, 1), // U+00d7fc
NEW_WIDTH(0x1800, -1), // U+00d800
NEW_WIDTH(0x2000, 1), // U+00e000
NEW_WIDTH(0x3900, 2), // U+00f900
NEW_WIDTH(0x3b00, 1), // U+00fb00
NEW_WIDTH(0x3b1e, 0), // U+00fb1e
NEW_WIDTH(0x3b1f, 1), // U+00fb1f
NEW_WIDTH(0x3e00, 0), // U+00fe00
NEW_WIDTH(0x3e10, 2), // U+00fe10
NEW_WIDTH(0x3e1a, 1), // U+00fe1a
NEW_WIDTH(0x3e20, 0), // U+00fe20
NEW_WIDTH(0x3e30, 2), // U+00fe30
NEW_WIDTH(0x3e53, 1), // U+00fe53
NEW_WIDTH(0x3e54, 2), // U+00fe54
NEW_WIDTH(0x3e67, 1), // U+00fe67
NEW_WIDTH(0x3e68, 2), // U+00fe68
NEW_WIDTH(0x3e6c, 1), // U+00fe6c
NEW_WIDTH(0x3eff, 0), // U+00feff
NEW_WIDTH(0x3f00, 1), // U+00ff00
NEW_WIDTH(0x3f01, 2), // U+00ff01
NEW_WIDTH(0x3f61, 1), // U+00ff61
NEW_WIDTH(0x3fe0, 2), // U+00ffe0
NEW_WIDTH(0x3fe7, 1), // U+00ffe7
NEW_WIDTH(0x3ff9, 0), // U+00fff9
NEW_WIDTH(0x3ffc, 1), // U+00fffc
// U+010000,
NEW_WIDTH(0x0000, 1), // U+010000
NEW_WIDTH(0x01fd, 0), // U+0101fd
NEW_WIDTH(0x01fe, 1), // U+0101fe
NEW_WIDTH(0x02e0, 0), // U+0102e0
NEW_WIDTH(0x02e1, 1), // U+0102e1
NEW_WIDTH(0x0376, 0), // U+010376
NEW_WIDTH(0x037b, 1), // U+01037b
NEW_WIDTH(0x0a01, 0), // U+010a01
NEW_WIDTH(0x0a04, 1), // U+010a04
NEW_WIDTH(0x0a05, 0), // U+010a05
NEW_WIDTH(0x0a07, 1), // U+010a07
NEW_WIDTH(0x0a0c, 0), // U+010a0c
NEW_WIDTH(0x0a10, 1), // U+010a10
NEW_WIDTH(0x0a38, 0), // U+010a38
NEW_WIDTH(0x0a3b, 1), // U+010a3b
NEW_WIDTH(0x0a3f, 0), // U+010a3f
NEW_WIDTH(0x0a40, 1), // U+010a40
NEW_WIDTH(0x0ae5, 0), // U+010ae5
NEW_WIDTH(0x0ae7, 1), // U+010ae7
NEW_WIDTH(0x0d24, 0), // U+010d24
NEW_WIDTH(0x0d28, 1), // U+010d28
NEW_WIDTH(0x0eab, 0), // U+010eab
NEW_WIDTH(0x0ead, 1), // U+010ead
NEW_WIDTH(0x0f46, 0), // U+010f46
NEW_WIDTH(0x0f51, 1), // U+010f51
NEW_WIDTH(0x0f82, 0), // U+010f82
NEW_WIDTH(0x0f86, 1), // U+010f86
NEW_WIDTH(0x1001, 0), // U+011001
NEW_WIDTH(0x1002, 1), // U+011002
NEW_WIDTH(0x1038, 0), // U+011038
NEW_WIDTH(0x1047, 1), // U+011047
NEW_WIDTH(0x1070, 0), // U+011070
NEW_WIDTH(0x1071, 1), // U+011071
NEW_WIDTH(0x1073, 0), // U+011073
NEW_WIDTH(0x1075, 1), // U+011075
NEW_WIDTH(0x107f, 0), // U+01107f
NEW_WIDTH(0x1082, 1), // U+011082
NEW_WIDTH(0x10b3, 0), // U+0110b3
NEW_WIDTH(0x10b7, 1), // U+0110b7
NEW_WIDTH(0x10b9, 0), // U+0110b9
NEW_WIDTH(0x10bb, 1), // U+0110bb
NEW_WIDTH(0x10bd, 0), // U+0110bd
NEW_WIDTH(0x10be, 1), // U+0110be
NEW_WIDTH(0x10c2, 0), // U+0110c2
NEW_WIDTH(0x10c3, 1), // U+0110c3
NEW_WIDTH(0x10cd, 0), // U+0110cd
NEW_WIDTH(0x10ce, 1), // U+0110ce
NEW_WIDTH(0x1100, 0), // U+011100
NEW_WIDTH(0x1103, 1), // U+011103
NEW_WIDTH(0x1127, 0), // U+011127
NEW_WIDTH(0x112c, 1), // U+01112c
NEW_WIDTH(0x112d, 0), // U+01112d
NEW_WIDTH(0x1135, 1), // U+011135
NEW_WIDTH(0x1173, 0), // U+011173
NEW_WIDTH(0x1174, 1), // U+011174
NEW_WIDTH(0x1180, 0), // U+011180
NEW_WIDTH(0x1182, 1), // U+011182
NEW_WIDTH(0x11b6, 0), // U+0111b6
NEW_WIDTH(0x11bf, 1), // U+0111bf
NEW_WIDTH(0x11c9, 0), // U+0111c9
NEW_WIDTH(0x11cd, 1), // U+0111cd
NEW_WIDTH(0x11cf, 0), // U+0111cf
NEW_WIDTH(0x11d0, 1), // U+0111d0
NEW_WIDTH(0x122f, 0), // U+01122f
NEW_WIDTH(0x1232, 1), // U+011232
NEW_WIDTH(0x1234, 0), // U+011234
NEW_WIDTH(0x1235, 1), // U+011235
NEW_WIDTH(0x1236, 0), // U+011236
NEW_WIDTH(0x1238, 1), // U+011238
NEW_WIDTH(0x123e, 0), // U+01123e
NEW_WIDTH(0x123f, 1), // U+01123f
NEW_WIDTH(0x12df, 0), // U+0112df
NEW_WIDTH(0x12e0, 1), // U+0112e0
NEW_WIDTH(0x12e3, 0), // U+0112e3
NEW_WIDTH(0x12eb, 1), // U+0112eb
NEW_WIDTH(0x1300, 0), // U+011300
NEW_WIDTH(0x1302, 1), // U+011302
NEW_WIDTH(0x133b, 0), // U+01133b
NEW_WIDTH(0x133d, 1), // U+01133d
NEW_WIDTH(0x1340, 0), // U+011340
NEW_WIDTH(0x1341, 1), // U+011341
NEW_WIDTH(0x1366, 0), // U+011366
NEW_WIDTH(0x136d, 1), // U+01136d
NEW_WIDTH(0x1370, 0), // U+011370
NEW_WIDTH(0x1375, 1), // U+011375
NEW_WIDTH(0x1438, 0), // U+011438
NEW_WIDTH(0x1440, 1), // U+011440
NEW_WIDTH(0x1442, 0), // U+011442
NEW_WIDTH(0x1445, 1), // U+011445
NEW_WIDTH(0x1446, 0), // U+011446
NEW_WIDTH(0x1447, 1), // U+011447
NEW_WIDTH(0x145e, 0), // U+01145e
NEW_WIDTH(0x145f, 1), // U+01145f
NEW_WIDTH(0x14b3, 0), // U+0114b3
NEW_WIDTH(0x14b9, 1), // U+0114b9
NEW_WIDTH(0x14ba, 0), // U+0114ba
NEW_WIDTH(0x14bb, 1), // U+0114bb
NEW_WIDTH(0x14bf, 0), // U+0114bf
NEW_WIDTH(0x14c1, 1), // U+0114c1
NEW_WIDTH(0x14c2, 0), // U+0114c2
NEW_WIDTH(0x14c4, 1), // U+0114c4
NEW_WIDTH(0x15b2, 0), // U+0115b2
NEW_WIDTH(0x15b6, 1), // U+0115b6
NEW_WIDTH(0x15bc, 0), // U+0115bc
NEW_WIDTH(0x15be, 1), // U+0115be
NEW_WIDTH(0x15bf, 0), // U+0115bf
NEW_WIDTH(0x15c1, 1), // U+0115c1
NEW_WIDTH(0x15dc, 0), // U+0115dc
NEW_WIDTH(0x15de, 1), // U+0115de
NEW_WIDTH(0x1633, 0), // U+011633
NEW_WIDTH(0x163b, 1), // U+01163b
NEW_WIDTH(0x163d, 0), // U+01163d
NEW_WIDTH(0x163e, 1), // U+01163e
NEW_WIDTH(0x163f, 0), // U+01163f
NEW_WIDTH(0x1641, 1), // U+011641
NEW_WIDTH(0x16ab, 0), // U+0116ab
NEW_WIDTH(0x16ac, 1), // U+0116ac
NEW_WIDTH(0x16ad, 0), // U+0116ad
NEW_WIDTH(0x16ae, 1), // U+0116ae
NEW_WIDTH(0x16b0, 0), // U+0116b0
NEW_WIDTH(0x16b6, 1), // U+0116b6
NEW_WIDTH(0x16b7, 0), // U+0116b7
NEW_WIDTH(0x16b8, 1), // U+0116b8
NEW_WIDTH(0x171d, 0), // U+01171d
NEW_WIDTH(0x1720, 1), // U+011720
NEW_WIDTH(0x1722, 0), // U+011722
NEW_WIDTH(0x1726, 1), // U+011726
NEW_WIDTH(0x1727, 0), // U+011727
NEW_WIDTH(0x172c, 1), // U+01172c
NEW_WIDTH(0x182f, 0), // U+01182f
NEW_WIDTH(0x1838, 1), // U+011838
NEW_WIDTH(0x1839, 0), // U+011839
NEW_WIDTH(0x183b, 1), // U+01183b
NEW_WIDTH(0x193b, 0), // U+01193b
NEW_WIDTH(0x193d, 1), // U+01193d
NEW_WIDTH(0x193e, 0), // U+01193e
NEW_WIDTH(0x193f, 1), // U+01193f
NEW_WIDTH(0x1943, 0), // U+011943
NEW_WIDTH(0x1944, 1), // U+011944
NEW_WIDTH(0x19d4, 0), // U+0119d4
NEW_WIDTH(0x19d8, 1), // U+0119d8
NEW_WIDTH(0x19da, 0), // U+0119da
NEW_WIDTH(0x19dc, 1), // U+0119dc
NEW_WIDTH(0x19e0, 0), // U+0119e0
NEW_WIDTH(0x19e1, 1), // U+0119e1
NEW_WIDTH(0x1a01, 0), // U+011a01
NEW_WIDTH(0x1a0b, 1), // U+011a0b
NEW_WIDTH(0x1a33, 0), // U+011a33
NEW_WIDTH(0x1a39, 1), // U+011a39
NEW_WIDTH(0x1a3b, 0), // U+011a3b
NEW_WIDTH(0x1a3f, 1), // U+011a3f
NEW_WIDTH(0x1a47, 0), // U+011a47
NEW_WIDTH(0x1a48, 1), // U+011a48
NEW_WIDTH(0x1a51, 0), // U+011a51
NEW_WIDTH(0x1a57, 1), // U+011a57
NEW_WIDTH(0x1a59, 0), // U+011a59
NEW_WIDTH(0x1a5c, 1), // U+011a5c
NEW_WIDTH(0x1a8a, 0), // U+011a8a
NEW_WIDTH(0x1a97, 1), // U+011a97
NEW_WIDTH(0x1a98, 0), // U+011a98
NEW_WIDTH(0x1a9a, 1), // U+011a9a
NEW_WIDTH(0x1c30, 0), // U+011c30
NEW_WIDTH(0x1c37, 1), // U+011c37
NEW_WIDTH(0x1c38, 0), // U+011c38
NEW_WIDTH(0x1c3e, 1), // U+011c3e
NEW_WIDTH(0x1c3f, 0), // U+011c3f
NEW_WIDTH(0x1c40, 1), // U+011c40
NEW_WIDTH(0x1c92, 0), // U+011c92
NEW_WIDTH(0x1ca8, 1), // U+011ca8
NEW_WIDTH(0x1caa, 0), // U+011caa
NEW_WIDTH(0x1cb1, 1), // U+011cb1
NEW_WIDTH(0x1cb2, 0), // U+011cb2
NEW_WIDTH(0x1cb4, 1), // U+011cb4
NEW_WIDTH(0x1cb5, 0), // U+011cb5
NEW_WIDTH(0x1cb7, 1), // U+011cb7
NEW_WIDTH(0x1d31, 0), // U+011d31
NEW_WIDTH(0x1d37, 1), // U+011d37
NEW_WIDTH(0x1d3a, 0), // U+011d3a
NEW_WIDTH(0x1d3b, 1), // U+011d3b
NEW_WIDTH(0x1d3c, 0), // U+011d3c
NEW_WIDTH(0x1d3e, 1), // U+011d3e
NEW_WIDTH(0x1d3f, 0), // U+011d3f
NEW_WIDTH(0x1d46, 1), // U+011d46
NEW_WIDTH(0x1d47, 0), // U+011d47
NEW_WIDTH(0x1d48, 1), // U+011d48
NEW_WIDTH(0x1d90, 0), // U+011d90
NEW_WIDTH(0x1d92, 1), // U+011d92
NEW_WIDTH(0x1d95, 0), // U+011d95
NEW_WIDTH(0x1d96, 1), // U+011d96
NEW_WIDTH(0x1d97, 0), // U+011d97
NEW_WIDTH(0x1d98, 1), // U+011d98
NEW_WIDTH(0x1ef3, 0), // U+011ef3
NEW_WIDTH(0x1ef5, 1), // U+011ef5
NEW_WIDTH(0x3430, 0), // U+013430
NEW_WIDTH(0x3439, 1), // U+013439
// U+014000,
NEW_WIDTH(0x0000, 1), // U+014000
NEW_WIDTH(0x2af0, 0), // U+016af0
NEW_WIDTH(0x2af5, 1), // U+016af5
NEW_WIDTH(0x2b30, 0), // U+016b30
NEW_WIDTH(0x2b37, 1), // U+016b37
NEW_WIDTH(0x2f4f, 0), // U+016f4f
NEW_WIDTH(0x2f50, 1), // U+016f50
NEW_WIDTH(0x2f8f, 0), // U+016f8f
NEW_WIDTH(0x2f93, 1), // U+016f93
NEW_WIDTH(0x2fe0, 2), // U+016fe0
NEW_WIDTH(0x2fe4, 0), // U+016fe4
NEW_WIDTH(0x2fe5, 1), // U+016fe5
NEW_WIDTH(0x2ff0, 2), // U+016ff0
NEW_WIDTH(0x2ff2, 1), // U+016ff2
NEW_WIDTH(0x3000, 2), // U+017000
// U+018000,
NEW_WIDTH(0x0000, 2), // U+018000
NEW_WIDTH(0x07f8, 1), // U+0187f8
NEW_WIDTH(0x0800, 2), // U+018800
NEW_WIDTH(0x0cd6, 1), // U+018cd6
NEW_WIDTH(0x0d00, 2), // U+018d00
NEW_WIDTH(0x0d09, 1), // U+018d09
NEW_WIDTH(0x2ff0, 2), // U+01aff0
NEW_WIDTH(0x2ff4, 1), // U+01aff4
NEW_WIDTH(0x2ff5, 2), // U+01aff5
NEW_WIDTH(0x2ffc, 1), // U+01affc
NEW_WIDTH(0x2ffd, 2), // U+01affd
NEW_WIDTH(0x2fff, 1), // U+01afff
NEW_WIDTH(0x3000, 2), // U+01b000
NEW_WIDTH(0x3123, 1), // U+01b123
NEW_WIDTH(0x3150, 2), // U+01b150
NEW_WIDTH(0x3153, 1), // U+01b153
NEW_WIDTH(0x3164, 2), // U+01b164
NEW_WIDTH(0x3168, 1), // U+01b168
NEW_WIDTH(0x3170, 2), // U+01b170
NEW_WIDTH(0x32fc, 1), // U+01b2fc
NEW_WIDTH(0x3c9d, 0), // U+01bc9d
NEW_WIDTH(0x3c9f, 1), // U+01bc9f
NEW_WIDTH(0x3ca0, 0), // U+01bca0
NEW_WIDTH(0x3ca4, 1), // U+01bca4
// U+01c000,
NEW_WIDTH(0x0000, 1), // U+01c000
NEW_WIDTH(0x0f00, 0), // U+01cf00
NEW_WIDTH(0x0f2e, 1), // U+01cf2e
NEW_WIDTH(0x0f30, 0), // U+01cf30
NEW_WIDTH(0x0f47, 1), // U+01cf47
NEW_WIDTH(0x1167, 0), // U+01d167
NEW_WIDTH(0x116a, 1), // U+01d16a
NEW_WIDTH(0x1173, 0), // U+01d173
NEW_WIDTH(0x1183, 1), // U+01d183
NEW_WIDTH(0x1185, 0), // U+01d185
NEW_WIDTH(0x118c, 1), // U+01d18c
NEW_WIDTH(0x11aa, 0), // U+01d1aa
NEW_WIDTH(0x11ae, 1), // U+01d1ae
NEW_WIDTH(0x1242, 0), // U+01d242
NEW_WIDTH(0x1245, 1), // U+01d245
NEW_WIDTH(0x1a00, 0), // U+01da00
NEW_WIDTH(0x1a37, 1), // U+01da37
NEW_WIDTH(0x1a3b, 0), // U+01da3b
NEW_WIDTH(0x1a6d, 1), // U+01da6d
NEW_WIDTH(0x1a75, 0), // U+01da75
NEW_WIDTH(0x1a76, 1), // U+01da76
NEW_WIDTH(0x1a84, 0), // U+01da84
NEW_WIDTH(0x1a85, 1), // U+01da85
NEW_WIDTH(0x1a9b, 0), // U+01da9b
NEW_WIDTH(0x1aa0, 1), // U+01daa0
NEW_WIDTH(0x1aa1, 0), // U+01daa1
NEW_WIDTH(0x1ab0, 1), // U+01dab0
NEW_WIDTH(0x2000, 0), // U+01e000
NEW_WIDTH(0x2007, 1), // U+01e007
NEW_WIDTH(0x2008, 0), // U+01e008
NEW_WIDTH(0x2019, 1), // U+01e019
NEW_WIDTH(0x201b, 0), // U+01e01b
NEW_WIDTH(0x2022, 1), // U+01e022
NEW_WIDTH(0x2023, 0), // U+01e023
NEW_WIDTH(0x2025, 1), // U+01e025
NEW_WIDTH(0x2026, 0), // U+01e026
NEW_WIDTH(0x202b, 1), // U+01e02b
NEW_WIDTH(0x2130, 0), // U+01e130
NEW_WIDTH(0x2137, 1), // U+01e137
NEW_WIDTH(0x22ae, 0), // U+01e2ae
NEW_WIDTH(0x22af, 1), // U+01e2af
NEW_WIDTH(0x22ec, 0), // U+01e2ec
NEW_WIDTH(0x22f0, 1), // U+01e2f0
NEW_WIDTH(0x28d0, 0), // U+01e8d0
NEW_WIDTH(0x28d7, 1), // U+01e8d7
NEW_WIDTH(0x2944, 0), // U+01e944
NEW_WIDTH(0x294b, 1), // U+01e94b
NEW_WIDTH(0x3004, 2), // U+01f004
NEW_WIDTH(0x3005, 1), // U+01f005
NEW_WIDTH(0x30cf, 2), // U+01f0cf
NEW_WIDTH(0x30d0, 1), // U+01f0d0
NEW_WIDTH(0x318e, 2), // U+01f18e
NEW_WIDTH(0x318f, 1), // U+01f18f
NEW_WIDTH(0x3191, 2), // U+01f191
NEW_WIDTH(0x319b, 1), // U+01f19b
NEW_WIDTH(0x31e6, 2), // U+01f1e6
NEW_WIDTH(0x3203, 1), // U+01f203
NEW_WIDTH(0x3210, 2), // U+01f210
NEW_WIDTH(0x323c, 1), // U+01f23c
NEW_WIDTH(0x3240, 2), // U+01f240
NEW_WIDTH(0x3249, 1), // U+01f249
NEW_WIDTH(0x3250, 2), // U+01f250
NEW_WIDTH(0x3252, 1), // U+01f252
NEW_WIDTH(0x3260, 2), // U+01f260
NEW_WIDTH(0x3266, 1), // U+01f266
NEW_WIDTH(0x3300, 2), // U+01f300
NEW_WIDTH(0x3321, 1), // U+01f321
NEW_WIDTH(0x332d, 2), // U+01f32d
NEW_WIDTH(0x3336, 1), // U+01f336
NEW_WIDTH(0x3337, 2), // U+01f337
NEW_WIDTH(0x337d, 1), // U+01f37d
NEW_WIDTH(0x337e, 2), // U+01f37e
NEW_WIDTH(0x3394, 1), // U+01f394
NEW_WIDTH(0x33a0, 2), // U+01f3a0
NEW_WIDTH(0x33cb, 1), // U+01f3cb
NEW_WIDTH(0x33cf, 2), // U+01f3cf
NEW_WIDTH(0x33d4, 1), // U+01f3d4
NEW_WIDTH(0x33e0, 2), // U+01f3e0
NEW_WIDTH(0x33f1, 1), // U+01f3f1
NEW_WIDTH(0x33f4, 2), // U+01f3f4
NEW_WIDTH(0x33f5, 1), // U+01f3f5
NEW_WIDTH(0x33f8, 2), // U+01f3f8
NEW_WIDTH(0x343f, 1), // U+01f43f
NEW_WIDTH(0x3440, 2), // U+01f440
NEW_WIDTH(0x3441, 1), // U+01f441
NEW_WIDTH(0x3442, 2), // U+01f442
NEW_WIDTH(0x34fd, 1), // U+01f4fd
NEW_WIDTH(0x34ff, 2), // U+01f4ff
NEW_WIDTH(0x353e, 1), // U+01f53e
NEW_WIDTH(0x354b, 2), // U+01f54b
NEW_WIDTH(0x354f, 1), // U+01f54f
NEW_WIDTH(0x3550, 2), // U+01f550
NEW_WIDTH(0x3568, 1), // U+01f568
NEW_WIDTH(0x357a, 2), // U+01f57a
NEW_WIDTH(0x357b, 1), // U+01f57b
NEW_WIDTH(0x3595, 2), // U+01f595
NEW_WIDTH(0x3597, 1), // U+01f597
NEW_WIDTH(0x35a4, 2), // U+01f5a4
NEW_WIDTH(0x35a5, 1), // U+01f5a5
NEW_WIDTH(0x35fb, 2), // U+01f5fb
NEW_WIDTH(0x3650, 1), // U+01f650
NEW_WIDTH(0x3680, 2), // U+01f680
NEW_WIDTH(0x36c6, 1), // U+01f6c6
NEW_WIDTH(0x36cc, 2), // U+01f6cc
NEW_WIDTH(0x36cd, 1), // U+01f6cd
NEW_WIDTH(0x36d0, 2), // U+01f6d0
NEW_WIDTH(0x36d3, 1), // U+01f6d3
NEW_WIDTH(0x36d5, 2), // U+01f6d5
NEW_WIDTH(0x36d8, 1), // U+01f6d8
NEW_WIDTH(0x36dd, 2), // U+01f6dd
NEW_WIDTH(0x36e0, 1), // U+01f6e0
NEW_WIDTH(0x36eb, 2), // U+01f6eb
NEW_WIDTH(0x36ed, 1), // U+01f6ed
NEW_WIDTH(0x36f4, 2), // U+01f6f4
NEW_WIDTH(0x36fd, 1), // U+01f6fd
NEW_WIDTH(0x37e0, 2), // U+01f7e0
NEW_WIDTH(0x37ec, 1), // U+01f7ec
NEW_WIDTH(0x37f0, 2), // U+01f7f0
NEW_WIDTH(0x37f1, 1), // U+01f7f1
NEW_WIDTH(0x390c, 2), // U+01f90c
NEW_WIDTH(0x393b, 1), // U+01f93b
NEW_WIDTH(0x393c, 2), // U+01f93c
NEW_WIDTH(0x3946, 1), // U+01f946
NEW_WIDTH(0x3947, 2), // U+01f947
NEW_WIDTH(0x3a00, 1), // U+01fa00
NEW_WIDTH(0x3a70, 2), // U+01fa70
NEW_WIDTH(0x3a75, 1), // U+01fa75
NEW_WIDTH(0x3a78, 2), // U+01fa78
NEW_WIDTH(0x3a7d, 1), // U+01fa7d
NEW_WIDTH(0x3a80, 2), // U+01fa80
NEW_WIDTH(0x3a87, 1), // U+01fa87
NEW_WIDTH(0x3a90, 2), // U+01fa90
NEW_WIDTH(0x3aad, 1), // U+01faad
NEW_WIDTH(0x3ab0, 2), // U+01fab0
NEW_WIDTH(0x3abb, 1), // U+01fabb
NEW_WIDTH(0x3ac0, 2), // U+01fac0
NEW_WIDTH(0x3ac6, 1), // U+01fac6
NEW_WIDTH(0x3ad0, 2), // U+01fad0
NEW_WIDTH(0x3ada, 1), // U+01fada
NEW_WIDTH(0x3ae0, 2), // U+01fae0
NEW_WIDTH(0x3ae8, 1), // U+01fae8
NEW_WIDTH(0x3af0, 2), // U+01faf0
NEW_WIDTH(0x3af7, 1), // U+01faf7
// U+020000,
NEW_WIDTH(0x0000, 2), // U+020000
// U+024000,
NEW_WIDTH(0x0000, 2), // U+024000
// U+028000,
NEW_WIDTH(0x0000, 2), // U+028000
// U+02c000,
NEW_WIDTH(0x0000, 2), // U+02c000
NEW_WIDTH(0x3ffe, 1), // U+02fffe
// U+030000,
NEW_WIDTH(0x0000, 2), // U+030000
// U+034000,
NEW_WIDTH(0x0000, 2), // U+034000
// U+038000,
NEW_WIDTH(0x0000, 2), // U+038000
// U+03c000,
NEW_WIDTH(0x0000, 2), // U+03c000
NEW_WIDTH(0x3ffe, 1), // U+03fffe
// U+040000,
NEW_WIDTH(0x0000, 1), // U+040000
// U+044000,
NEW_WIDTH(0x0000, 1), // U+044000
// U+048000,
NEW_WIDTH(0x0000, 1), // U+048000
// U+04c000,
NEW_WIDTH(0x0000, 1), // U+04c000
// U+050000,
NEW_WIDTH(0x0000, 1), // U+050000
// U+054000,
NEW_WIDTH(0x0000, 1), // U+054000
// U+058000,
NEW_WIDTH(0x0000, 1), // U+058000
// U+05c000,
NEW_WIDTH(0x0000, 1), // U+05c000
// U+060000,
NEW_WIDTH(0x0000, 1), // U+060000
// U+064000,
NEW_WIDTH(0x0000, 1), // U+064000
// U+068000,
NEW_WIDTH(0x0000, 1), // U+068000
// U+06c000,
NEW_WIDTH(0x0000, 1), // U+06c000
// U+070000,
NEW_WIDTH(0x0000, 1), // U+070000
// U+074000,
NEW_WIDTH(0x0000, 1), // U+074000
// U+078000,
NEW_WIDTH(0x0000, 1), // U+078000
// U+07c000,
NEW_WIDTH(0x0000, 1), // U+07c000
// U+080000,
NEW_WIDTH(0x0000, 1), // U+080000
// U+084000,
NEW_WIDTH(0x0000, 1), // U+084000
// U+088000,
NEW_WIDTH(0x0000, 1), // U+088000
// U+08c000,
NEW_WIDTH(0x0000, 1), // U+08c000
// U+090000,
NEW_WIDTH(0x0000, 1), // U+090000
// U+094000,
NEW_WIDTH(0x0000, 1), // U+094000
// U+098000,
NEW_WIDTH(0x0000, 1), // U+098000
// U+09c000,
NEW_WIDTH(0x0000, 1), // U+09c000
// U+0a0000,
NEW_WIDTH(0x0000, 1), // U+0a0000
// U+0a4000,
NEW_WIDTH(0x0000, 1), // U+0a4000
// U+0a8000,
NEW_WIDTH(0x0000, 1), // U+0a8000
// U+0ac000,
NEW_WIDTH(0x0000, 1), // U+0ac000
// U+0b0000,
NEW_WIDTH(0x0000, 1), // U+0b0000
// U+0b4000,
NEW_WIDTH(0x0000, 1), // U+0b4000
// U+0b8000,
NEW_WIDTH(0x0000, 1), // U+0b8000
// U+0bc000,
NEW_WIDTH(0x0000, 1), // U+0bc000
// U+0c0000,
NEW_WIDTH(0x0000, 1), // U+0c0000
// U+0c4000,
NEW_WIDTH(0x0000, 1), // U+0c4000
// U+0c8000,
NEW_WIDTH(0x0000, 1), // U+0c8000
// U+0cc000,
NEW_WIDTH(0x0000, 1), // U+0cc000
// U+0d0000,
NEW_WIDTH(0x0000, 1), // U+0d0000
// U+0d4000,
NEW_WIDTH(0x0000, 1), // U+0d4000
// U+0d8000,
NEW_WIDTH(0x0000, 1), // U+0d8000
// U+0dc000,
NEW_WIDTH(0x0000, 1), // U+0dc000
// U+0e0000,
NEW_WIDTH(0x0000, 1), // U+0e0000
NEW_WIDTH(0x0001, 0), // U+0e0001
NEW_WIDTH(0x0002, 1), // U+0e0002
NEW_WIDTH(0x0020, 0), // U+0e0020
NEW_WIDTH(0x0080, 1), // U+0e0080
NEW_WIDTH(0x0100, 0), // U+0e0100
NEW_WIDTH(0x01f0, 1), // U+0e01f0
// U+0e4000,
NEW_WIDTH(0x0000, 1), // U+0e4000
// U+0e8000,
NEW_WIDTH(0x0000, 1), // U+0e8000
// U+0ec000,
NEW_WIDTH(0x0000, 1), // U+0ec000
// U+0f0000,
NEW_WIDTH(0x0000, 1), // U+0f0000
// U+0f4000,
NEW_WIDTH(0x0000, 1), // U+0f4000
// U+0f8000,
NEW_WIDTH(0x0000, 1), // U+0f8000
// U+0fc000,
NEW_WIDTH(0x0000, 1), // U+0fc000
// U+100000,
NEW_WIDTH(0x0000, 1), // U+100000
// U+104000,
NEW_WIDTH(0x0000, 1), // U+104000
// U+108000,
NEW_WIDTH(0x0000, 1), // U+108000
// U+10c000,
NEW_WIDTH(0x0000, 1), // U+10c000
}; termpaint-0.3.1/debugwin.py 0000775 0000000 0000000 00000002466 14773035472 0015723 0 ustar 00root root 0000000 0000000 #! /usr/bin/env python3
# SPDX-License-Identifier: BSL-1.0
import sys
# Don't display anything before receiving the first line.
# If everything goes well this process will stay silent.
initial_input = sys.stdin.readline()
if not initial_input:
sys.exit(0)
import tkinter as tk
from tkinter.constants import END, N, E, W
from tkinter import ttk
root = tk.Tk()
root.title("Termpaint Error Log")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
def BtnFunc():
text.config(state="normal")
text.delete('1.0', END)
text.config(state="disabled")
def ReadStdIn(srcobj, mask, *arg):
input = srcobj.readline()
if not input:
root.after(10000, lambda: sys.exit(0))
input = "program terminated, closing window in 10 secondes"
root.tk.deletefilehandler(sys.stdin)
text.config(state="normal")
text.insert(END, input)
text.config(state="disabled")
text.see(END)
text = tk.Text(root, width=60, height=10, state='disabled')
btn = tk.Button(root, text="Clear", command=BtnFunc)
text.grid(column=0, row=0, sticky=(N, E, W))
btn.grid(column=0, row=1, sticky=(E, W))
text.config(state="normal")
text.insert(END, initial_input)
text.config(state="disabled")
text.see(END)
filehandler = root.tk.createfilehandler(sys.stdin, tk.READABLE, ReadStdIn)
root.mainloop()
termpaint-0.3.1/demo/ 0000775 0000000 0000000 00000000000 14773035472 0014456 5 ustar 00root root 0000000 0000000 termpaint-0.3.1/demo/attrs.c 0000664 0000000 0000000 00000054176 14773035472 0015774 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
#include "termpaintx_ttyrescue.h"
termpaint_terminal *terminal;
termpaint_surface *surface;
termpaint_integration *integration;
bool quit;
typedef struct event_ {
int type;
int modifier;
const char *string;
struct event_* next;
} event;
event* event_current;
void event_callback(void *userdata, termpaint_event *tp_event) {
(void)userdata;
// remember tp_event is only valid while this callback runs, so copy everything we need.
event *my_event = NULL;
if (tp_event->type == TERMPAINT_EV_CHAR) {
my_event = malloc(sizeof(event));
my_event->type = tp_event->type;
my_event->modifier = tp_event->c.modifier;
my_event->string = strndup(tp_event->c.string, tp_event->c.length);
my_event->next = NULL;
} else if (tp_event->type == TERMPAINT_EV_KEY) {
my_event = malloc(sizeof(event));
my_event->type = tp_event->type;
my_event->modifier = tp_event->key.modifier;
my_event->string = strdup(tp_event->key.atom);
my_event->next = NULL;
}
if (my_event) {
event* prev = event_current;
while (prev->next) {
prev = prev->next;
}
prev->next = my_event;
}
}
bool init(void) {
event_current = malloc(sizeof(event));
event_current->next = NULL;
event_current->string = NULL;
integration = termpaintx_full_integration_setup_terminal_fullscreen("+kbdsigint +kbdsigtstp",
event_callback, NULL,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
return 1;
}
void cleanup(void) {
termpaint_terminal_free_with_restore(terminal);
while (event_current) {
free((void*)event_current->string);
event* next = event_current->next;
free(event_current);
event_current = next;
}
}
event* key_wait(void) {
termpaint_terminal_flush(terminal, false);
while (!event_current->next) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
cleanup();
exit(1);
}
}
free((void*)event_current->string);
event* next = event_current->next;
free(event_current);
event_current = next;
return next;
}
void write_sample(termpaint_attr* attr_ui, termpaint_attr* attr_sample, int line, char const* name, int style) {
termpaint_surface_write_with_attr(surface, 0, line, name, attr_ui);
termpaint_attr_reset_style(attr_sample);
termpaint_attr_set_style(attr_sample, style);
termpaint_surface_write_with_attr(surface, 11, line, "Sample", attr_sample);
}
void repaint_samples(termpaint_attr* attr_ui, termpaint_attr* attr_sample)
{
write_sample(attr_ui, attr_sample, 3, "No Style:", 0);
write_sample(attr_ui, attr_sample, 4, "Bold:", TERMPAINT_STYLE_BOLD);
write_sample(attr_ui, attr_sample, 5, "Italic:", TERMPAINT_STYLE_ITALIC);
write_sample(attr_ui, attr_sample, 6, "Blinking:", TERMPAINT_STYLE_BLINK);
write_sample(attr_ui, attr_sample, 7, "Underline:", TERMPAINT_STYLE_UNDERLINE);
write_sample(attr_ui, attr_sample, 8, "Strikeout:", TERMPAINT_STYLE_STRIKE);
write_sample(attr_ui, attr_sample, 9, "Inverse:", TERMPAINT_STYLE_INVERSE);
write_sample(attr_ui, attr_sample, 11, "Overline:", TERMPAINT_STYLE_OVERLINE);
write_sample(attr_ui, attr_sample, 12, "Dbl under:", TERMPAINT_STYLE_UNDERLINE_DBL);
write_sample(attr_ui, attr_sample, 13, "curly:", TERMPAINT_STYLE_UNDERLINE_CURLY);
// There is not yet explicit support for URLs, so use the low level patch interface
termpaint_attr* attr_url = termpaint_attr_clone(attr_sample);
termpaint_attr_set_patch(attr_url, true, "\033]8;;http://example.com\a", "\033]8;;\a");
write_sample(attr_ui, attr_url, 14, "url:", 0);
termpaint_attr_free(attr_url);
}
void repaint_all(termpaint_attr* attr_ui, termpaint_attr* attr_sample)
{
termpaint_surface_clear_with_attr(surface, attr_ui);
termpaint_surface_write_with_attr(surface, 1, 0, "Attribute Demo", attr_ui);
repaint_samples(attr_ui, attr_sample);
termpaint_surface_write_with_attr(surface, 25, 2, "Select Color", attr_ui);
termpaint_surface_write_with_attr(surface, 2, 16, "q: Quit", attr_ui);
}
void update_current_key_display(termpaint_attr* attr_ui, event *evt) {
if (evt->type == TERMPAINT_EV_CHAR || evt->type == TERMPAINT_EV_KEY) {
char buff[100];
snprintf(buff, 100, "%-20.20s mod: %d", evt->string, evt->modifier);
termpaint_surface_write_with_attr(surface, 0, 23, "Last key: ", attr_ui);
termpaint_surface_write_with_attr(surface, 11, 23, buff, attr_ui);
}
}
void named_color_menu(termpaint_attr* attr_ui, termpaint_attr* attr_to_change, int which_color) {
int color = 0;
while (!quit) {
{
termpaint_attr* preview = termpaint_attr_new(0, TERMPAINT_INDEXED_COLOR + color);
termpaint_surface_write_with_attr(surface, 50, 7, " ", preview);
termpaint_attr_free(preview);
}
termpaint_surface_write_with_attr(surface, 25, 7, " Black", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 8, " Red", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 9, " Green", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 10, " Yellow", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 11, " Blue", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 12, " Magenta", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 13, " Cyan", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 14, " Light Grey", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 15, " Dark Grey", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 16, " Bright Red", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 17, " Bright Green", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 18, " Bright Yellow", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 19, " Bright Blue", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 20, " Bright Magenta", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 21, " Bright Cyan", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 22, " White", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 7 + color, "*", attr_ui);
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR && strcmp(evt->string, "q") == 0) {
quit = true;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowUp") == 0) {
color = color - 1;
if (color < 0) {
color = 15;
}
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowDown") == 0) {
color = (color + 1) % 16;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Enter") == 0) {
int tp_color = TERMPAINT_NAMED_COLOR + color;
if (which_color == 0) {
termpaint_attr_set_fg(attr_to_change, tp_color);
} else if (which_color == 1) {
termpaint_attr_set_bg(attr_to_change, tp_color);
} else {
termpaint_attr_set_deco(attr_to_change, tp_color);
}
return;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Escape") == 0) {
return;
}
}
}
void indexed_color_menu(termpaint_attr* attr_ui, termpaint_attr* attr_to_change, int which_color) {
int color = 0;
termpaint_surface_write_with_attr(surface, 25, 7, " 0", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 8, " 16", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 9, " 32", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 10, " 48", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 11, " 64", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 12, " 80", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 13, " 96", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 14, "112", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 15, "128", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 16, "144", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 17, "160", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 18, "176", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 19, "192", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 20, "208", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 21, "224", attr_ui);
termpaint_surface_write_with_attr(surface, 25, 22, "240", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 6, " 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15", attr_ui);
while (!quit) {
{
termpaint_attr* preview = termpaint_attr_new(0, TERMPAINT_INDEXED_COLOR + color);
termpaint_surface_write_with_attr(surface, 28, 6, " ", preview);
termpaint_attr_free(preview);
}
termpaint_surface_clear_rect_with_attr(surface, 29, 7, 50, 16, attr_ui);
char buff[11];
sprintf(buff, "%3d", color);
termpaint_surface_write_with_attr(surface, 29 + (color % 16) * 3, 7 + (color / 16), buff, attr_ui);
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR) {
if (strcmp(evt->string, "q") == 0) {
quit = true;
}
} else if (evt->type == TERMPAINT_EV_KEY) {
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowLeft") == 0) {
color -= 1;
if (color < 0) {
color = 255;
}
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowRight") == 0) {
color = (color + 1) % 256;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowUp") == 0) {
color -= 16;
if (color < 0) {
color += 256;
}
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowDown") == 0) {
color = (color + 16) % 256;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Enter") == 0) {
int tp_color = TERMPAINT_INDEXED_COLOR + color;
if (which_color == 0) {
termpaint_attr_set_fg(attr_to_change, tp_color);
} else if (which_color == 1) {
termpaint_attr_set_bg(attr_to_change, tp_color);
} else {
termpaint_attr_set_deco(attr_to_change, tp_color);
}
return;
}
if (strcmp(evt->string, "Escape") == 0) {
return;
}
}
}
}
void rgb_color_menu(termpaint_attr* attr_ui, termpaint_attr* attr_to_change, int which_color) {
int red = 0;
int green = 0;
int blue = 0;
int *selected = &red;
termpaint_surface_write_with_attr(surface, 29, 10, "left/right: select component", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 11, "up/down: adjust value", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 12, "page up/page down: adjust value (16 increments)", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 13, "esc: abort", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 14, "enter: activate color", attr_ui);
while (!quit) {
char buff[40];
sprintf(buff, "R: %3d G: %3d B: %3d", red, green, blue);
termpaint_surface_write_with_attr(surface, 29, 7, buff, attr_ui);
termpaint_surface_write_with_attr(surface, 29, 8, " ", attr_ui);
{
termpaint_attr* preview = termpaint_attr_new(0, TERMPAINT_RGB_COLOR(red, green, blue));
termpaint_surface_write_with_attr(surface, 52, 7, " ", preview);
termpaint_attr_free(preview);
}
if (selected == &red) {
termpaint_surface_write_with_attr(surface, 32, 8, "^^^", attr_ui);
} else if (selected == &green) {
termpaint_surface_write_with_attr(surface, 39, 8, "^^^", attr_ui);
} else if (selected == &blue) {
termpaint_surface_write_with_attr(surface, 46, 8, "^^^", attr_ui);
}
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR) {
if (strcmp(evt->string, "q") == 0) {
quit = true;
}
} else if (evt->type == TERMPAINT_EV_KEY) {
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowLeft") == 0) {
if (selected == &green) {
selected = &red;
} else if (selected == &blue) {
selected = &green;
}
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowRight") == 0) {
if (selected == &red) {
selected = &green;
} else if (selected == &green) {
selected = &blue;
}
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowUp") == 0) {
*selected = (256 + *selected - 1) % 256;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowDown") == 0) {
*selected = (*selected + 1) % 256;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "PageUp") == 0) {
*selected = (256 + *selected - 16) % 256;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "PageDown") == 0) {
*selected = (*selected + 16) % 256;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Enter") == 0) {
int tp_color = TERMPAINT_RGB_COLOR(red, green, blue);
if (which_color == 0) {
termpaint_attr_set_fg(attr_to_change, tp_color);
} else if (which_color == 1) {
termpaint_attr_set_bg(attr_to_change, tp_color);
} else {
termpaint_attr_set_deco(attr_to_change, tp_color);
}
return;
}
if (strcmp(evt->string, "Escape") == 0) {
return;
}
}
}
}
void menu(termpaint_attr* attr_ui, termpaint_attr* attr_sample) {
bool sample = true;
bool reset = true;
while (!quit) {
if (reset) {
repaint_all(attr_ui, attr_sample);
termpaint_surface_write_with_attr(surface, 29, 14, "left/right: change select", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 15, "up/esc: undo choice", attr_ui);
termpaint_surface_write_with_attr(surface, 29, 16, "enter: follow menu path", attr_ui);
reset = false;
}
if (sample) {
termpaint_surface_write_with_attr(surface, 25, 3, "* Sample", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 3, " UI", attr_ui);
} else {
termpaint_surface_write_with_attr(surface, 25, 3, " Sample", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 3, "* UI", attr_ui);
}
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR && strcmp(evt->string, "q") == 0) {
quit = true;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowLeft") == 0 && !sample) {
sample = true;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowRight") == 0 && sample) {
sample = false;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Enter") == 0) {
int which_color = 0;
termpaint_surface_write_with_attr(surface, 25, 4, "* Foreground", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 4, " Background", attr_ui);
termpaint_surface_write_with_attr(surface, 54, 4, " Deco", attr_ui);
while (!quit && !reset) {
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR && strcmp(evt->string, "q") == 0) {
quit = true;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowLeft") == 0 && which_color == 1) {
termpaint_surface_write_with_attr(surface, 25, 4, "* Foreground", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 4, " Background", attr_ui);
which_color = 0;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowLeft") == 0 && which_color == 2) {
termpaint_surface_write_with_attr(surface, 40, 4, "* Background", attr_ui);
termpaint_surface_write_with_attr(surface, 54, 4, " Deco", attr_ui);
which_color = 1;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowRight") == 0 && which_color == 0) {
termpaint_surface_write_with_attr(surface, 25, 4, " Foreground", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 4, "* Background", attr_ui);
which_color = 1;
} else if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "ArrowRight") == 0 && which_color == 1) {
termpaint_surface_write_with_attr(surface, 40, 4, " Background", attr_ui);
termpaint_surface_write_with_attr(surface, 54, 4, "* Deco", attr_ui);
which_color = 2;
}
if (evt->type == TERMPAINT_EV_KEY && (strcmp(evt->string, "ArrowUp") == 0 || strcmp(evt->string, "Escape") == 0)) {
termpaint_surface_clear_rect_with_attr(surface, 25, 4, 35, 1, attr_ui);
break;
}
if (evt->type == TERMPAINT_EV_KEY && strcmp(evt->string, "Enter") == 0) {
int type = 0;
termpaint_surface_write_with_attr(surface, 25, 5, "* Named", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 5, " Indexed", attr_ui);
termpaint_surface_write_with_attr(surface, 53, 5, " RGB", attr_ui);
while (!quit && !reset) {
event *evt = key_wait();
update_current_key_display(attr_ui, evt);
if (evt->type == TERMPAINT_EV_CHAR) {
if (strcmp(evt->string, "q") == 0) {
quit = true;
}
} else {
if (strcmp(evt->string, "ArrowLeft") == 0 && type == 1) {
type = 0;
termpaint_surface_write_with_attr(surface, 25, 5, "* Named", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 5, " Indexed", attr_ui);
} else if (strcmp(evt->string, "ArrowLeft") == 0 && type == 2) {
type = 1;
termpaint_surface_write_with_attr(surface, 40, 5, "* Indexed", attr_ui);
termpaint_surface_write_with_attr(surface, 53, 5, " RGB", attr_ui);
} else if (strcmp(evt->string, "ArrowRight") == 0 && type == 0) {
type = 1;
termpaint_surface_write_with_attr(surface, 25, 5, " Named", attr_ui);
termpaint_surface_write_with_attr(surface, 40, 5, "* Indexed", attr_ui);
} else if (strcmp(evt->string, "ArrowRight") == 0 && type == 1) {
type = 2;
termpaint_surface_write_with_attr(surface, 40, 5, " Indexed", attr_ui);
termpaint_surface_write_with_attr(surface, 53, 5, "* RGB", attr_ui);
} else if (strcmp(evt->string, "ArrowUp") == 0 || strcmp(evt->string, "Escape") == 0) {
termpaint_surface_clear_rect_with_attr(surface, 25, 5, 35, 1, attr_ui);
break;
} else if (strcmp(evt->string, "Enter") == 0) {
termpaint_surface_clear_rect_with_attr(surface, 29, 14, 25, 3, attr_ui);
termpaint_attr* to_change = sample ? attr_sample : attr_ui;
if (type == 0) {
named_color_menu(attr_ui, to_change, which_color);
} else if (type == 1) {
indexed_color_menu(attr_ui, to_change, which_color);
} else {
rgb_color_menu(attr_ui, to_change, which_color);
}
reset = true;
}
}
}
}
}
}
}
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
if (!init()) {
return 1;
}
termpaint_attr* attr_ui = termpaint_attr_new(TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_attr* attr_sample = termpaint_attr_new(TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
repaint_all(attr_ui, attr_sample);
menu(attr_ui, attr_sample);
termpaint_attr_free(attr_sample);
attr_sample = NULL;
termpaint_attr_free(attr_ui);
attr_ui = NULL;
cleanup();
return 0;
}
termpaint-0.3.1/demo/chars.c 0000664 0000000 0000000 00000010367 14773035472 0015731 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
#include "termpaintx_ttyrescue.h"
termpaint_terminal *terminal;
termpaint_surface *surface;
termpaint_integration *integration;
bool quit;
typedef struct event_ {
int type;
int modifier;
const char *string;
struct event_* next;
} event;
event* event_current;
void event_callback(void *userdata, termpaint_event *tp_event) {
(void)userdata;
// remember tp_event is only valid while this callback runs, so copy everything we need.
event *my_event = NULL;
if (tp_event->type == TERMPAINT_EV_CHAR) {
my_event = malloc(sizeof(event));
my_event->type = tp_event->type;
my_event->modifier = tp_event->c.modifier;
my_event->string = strndup(tp_event->c.string, tp_event->c.length);
my_event->next = NULL;
} else if (tp_event->type == TERMPAINT_EV_KEY) {
my_event = malloc(sizeof(event));
my_event->type = tp_event->type;
my_event->modifier = tp_event->key.modifier;
my_event->string = strdup(tp_event->key.atom);
my_event->next = NULL;
}
if (my_event) {
event* prev = event_current;
while (prev->next) {
prev = prev->next;
}
prev->next = my_event;
}
}
bool init(void) {
event_current = malloc(sizeof(event));
event_current->next = NULL;
event_current->string = NULL;
integration = termpaintx_full_integration_setup_terminal_fullscreen("+kbdsigint +kbdsigtstp",
event_callback, NULL,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
return 1;
}
void cleanup(void) {
termpaint_terminal_free_with_restore(terminal);
while (event_current) {
free((void*)event_current->string);
event* next = event_current->next;
free(event_current);
event_current = next;
}
}
event* key_wait(void) {
termpaint_terminal_flush(terminal, false);
while (!event_current->next) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
cleanup();
exit(1);
}
}
free((void*)event_current->string);
event* next = event_current->next;
free(event_current);
event_current = next;
return next;
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
if (!init()) {
return 1;
}
termpaint_surface_clear(surface, TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_surface_write_with_colors(surface, 10, 3, "Samples:", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// isolated U+0308 COMBINING DIAERESIS
termpaint_surface_write_with_colors(surface, 10, 4, "\xcc\x88X", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// 'a' + U+0308 COMBINING DIAERESIS
termpaint_surface_write_with_colors(surface, 10, 5, "a\xcc\x88X", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// 'a' + U+0308 COMBINING DIAERESIS + U+0324 COMBINING DIAERESIS BELOW
termpaint_surface_write_with_colors(surface, 10, 6, "a\xcc\x88\xcc\xa4X", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// 'a' + U+E0100 VARIATION SELECTOR-17 + U+E0101 VARIATION SELECTOR-18 (nonsense)
termpaint_surface_write_with_colors(surface, 10, 7, "a\xf3\xa0\x84\x80\xf3\xa0\x84\x81X", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// 'a' + U+E0100 VARIATION SELECTOR-17 + U+FE00 VARIATION SELECTOR-1 (nonsense)
termpaint_surface_write_with_colors(surface, 10, 8, "a\xf3\xa0\x84\x80\xef\xb8\x80X", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
// 'a' + U+E0100 VARIATION SELECTOR-17 + U+FEFF ZERO WIDTH NO-BREAK SPACE (nonsense)
termpaint_surface_write_with_colors(surface, 10, 9, "a\xf3\xa0\x84\x80\xef\xbb\xbfX", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_surface_write_with_colors(surface, 10, 10, "あ3あ67あX", TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
key_wait();
cleanup();
return 0;
}
termpaint-0.3.1/demo/detect.c 0000664 0000000 0000000 00000012540 14773035472 0016074 0 ustar 00root root 0000000 0000000 // SPDX-License-Identifier: BSL-1.0
#include
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
void null_callback(void *ctx, termpaint_event *event) {
(void)ctx; (void)event;
}
typedef struct {
int id;
const char *name;
const char *short_name;
_Bool state;
} Cap;
Cap caps[] = {
#define C(name, s) { TERMPAINT_CAPABILITY_ ## name, #name, s, 0 }
C(CSI_POSTFIX_MOD, "pf-mod"),
C(TITLE_RESTORE, "title"),
C(MAY_TRY_CURSOR_SHAPE_BAR, "cur-bar"),
C(CURSOR_SHAPE_OSC50, "cur50"),
C(EXTENDED_CHARSET, "extchset"),
C(TRUECOLOR_MAYBE_SUPPORTED, "24maybe"),
C(TRUECOLOR_SUPPORTED, "24sup"),
C(88_COLOR, "88col"),
C(CLEARED_COLORING, "clrcol"),
C(7BIT_ST, "7bit-st"),
C(MAY_TRY_TAGGED_PASTE, "taggedpaste"),
C(CLEARED_COLORING_DEFCOLOR, "clrcoldef"),
#undef C
{ 0, NULL, 0, 0 }
};
char *debug = NULL;
bool debug_used = false;
void debug_log(termpaint_integration *integration, const char *data, int length) {
(void)integration;
if (debug_used && !debug) return; // memory allocaton failure
if (debug) {
const int oldlen = strlen(debug);
char* debug_old = debug;
debug = realloc(debug, oldlen + length + 1);
if (debug) {
memcpy(debug + oldlen, data, length);
debug[oldlen + length] = 0;
} else {
free(debug_old);
}
} else {
debug = strndup(data, length);
}
debug_used = true;
}
char *strdup_escaped(const char *tmp) {
// escaping could quadruple size
char *ret = malloc(strlen(tmp) * 4 + 1);
if (!ret) {
perror("malloc");
abort();
}
char *dst = ret;
for (; *tmp; tmp++) {
if (*tmp >= ' ' && *tmp <= 126 && *tmp != '\\') {
*dst = *tmp;
++dst;
} else {
dst += sprintf(dst, "\\x%02hhx", (unsigned char)*tmp);
}
}
*dst = 0;
return ret;
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
termpaint_integration *integration = termpaintx_full_integration("+kbdsigint +kbdsigtstp");
if (!integration) {
puts("Could not init!");
return 1;
}
termpaint_integration_set_logging_func(integration, debug_log);
termpaint_terminal *terminal = termpaint_terminal_new(integration);
termpaint_terminal_set_log_mask(terminal, TERMPAINT_LOG_AUTO_DETECT_TRACE | TERMPAINT_LOG_TRACE_RAW_INPUT);
termpaint_terminal_set_event_cb(terminal, null_callback, NULL);
termpaintx_full_integration_set_terminal(integration, terminal);
termpaint_terminal_auto_detect(terminal);
termpaintx_full_integration_wait_for_ready_with_message(integration, 10000,
"Terminal auto detection is taking unusually long, press space to abort.");
char buff[1000];
char *self_reported_name_and_version = NULL;
termpaint_terminal_auto_detect_result_text(terminal, buff, sizeof (buff));
if (termpaint_terminal_self_reported_name_and_version(terminal)) {
self_reported_name_and_version = strdup_escaped(termpaint_terminal_self_reported_name_and_version(terminal));
}
for (Cap *c = caps; c->name; c++) {
c->state = termpaint_terminal_capable(terminal, c->id);
}
termpaint_terminal_free_with_restore(terminal);
_Bool quiet = false;
_Bool short_output = false;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "--quiet") == 0) {
quiet = true;
}
if (strcmp(argv[i], "--short") == 0) {
short_output = true;
}
}
if (!quiet && !short_output) {
puts(buff);
if (self_reported_name_and_version) {
printf("self reported: %s\n", self_reported_name_and_version);
}
for (Cap *c = caps; c->name; c++) {
printf("%s: %s\n", c->name, c->state ? "1" : "0");
}
}
if (short_output) {
printf("V1 %s", buff);
if (self_reported_name_and_version) {
printf(" >%s<", self_reported_name_and_version);
}
for (Cap *c = caps; c->name; c++) {
if (c->state) {
printf(" %s", c->short_name);
}
}
puts("\n");
}
for (int i=1; i < argc; i++) {
if (strcmp(argv[i], "--write-file") == 0) {
if (i + 1 < argc) {
FILE *f = fopen(argv[i + 1], "w");
if (!f) {
perror("fopen");
} else {
fputs(buff, f);
fprintf(f, "\n");
if (self_reported_name_and_version) {
fprintf(f, "self reported: %s\n", self_reported_name_and_version);
}
for (Cap *c = caps; c->name; c++) {
fprintf(f, "%s: %s\n", c->name, c->state ? "1" : "0");
}
fclose(f);
}
}
}
if (strcmp(argv[i], "--debug") == 0) {
if (debug) {
printf("%s", debug);
} else if (debug_used) {
printf("debug log could not be allocated!\n");
}
}
if (strcmp(argv[i], "--key-wait") == 0) {
puts("Press any key to continue");
getchar();
}
}
free(self_reported_name_and_version);
return 0;
}
termpaint-0.3.1/demo/life.c 0000664 0000000 0000000 00000017577 14773035472 0015562 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
termpaint_integration *integration;
termpaint_terminal *terminal;
termpaint_surface *surface;
bool update;
static int min(int a, int b) {
return (a < b) ? a : b;
}
enum cell_t { DEAD, ALIVE };
typedef struct board_t_ {
int width;
int height;
char *cells;
} board_t;
board_t board;
bool pause;
int current_background;
int generation;
int refresh = 250;
int steps = 1;
int speed = 4; // > 0 then steps per second, otherwise -speed + 2 seconds per step
int cursor_x = 0;
int cursor_y = 1;
char *cell_at(board_t *board, int x, int y) {
return &board->cells[((board->height + y) % board->height) * board->width + ((board->width + x) % board->width)];
}
void update_timing(void) {
steps = 1;
if (speed > 0) {
float r = 1. / speed;
while (r < .1) {
r *= 2;
steps *= 2;
}
refresh = 1000 * r;
} else {
refresh = 1000 * (-speed + 2);
}
}
void event_callback(void *userdata, termpaint_event *event) {
bool *quit = userdata;
if (event->type == TERMPAINT_EV_CHAR) {
if (event->c.length == 1 && event->c.string[0] == 'q') {
*quit = true;
}
if (event->c.length == 1 && event->c.string[0] == '+') {
speed += 1;
update_timing();
update = true;
}
if (event->c.length == 1 && event->c.string[0] == '-') {
speed -= 1;
update_timing();
update = true;
}
if (event->c.length == 1 && event->c.string[0] == '0') {
*cell_at(&board, cursor_x, cursor_y) = DEAD;
update = true;
}
if (event->c.length == 1 && event->c.string[0] == '1') {
*cell_at(&board, cursor_x, cursor_y) = ALIVE;
update = true;
}
}
if (event->type == TERMPAINT_EV_KEY) {
if (event->key.atom == termpaint_input_space()) {
pause = !pause;
update = true;
} else if (event->key.atom == termpaint_input_arrow_up()) {
cursor_y = (board.height + cursor_y - 1) % board.height;
update = true;
} else if (event->key.atom == termpaint_input_arrow_down()) {
cursor_y = (cursor_y + 1) % board.height;
update = true;
} else if (event->key.atom == termpaint_input_arrow_left()) {
cursor_x = (board.width + cursor_x - 1) % board.width;
update = true;
} else if (event->key.atom == termpaint_input_arrow_right()) {
cursor_x = (cursor_x + 1) % board.width;
update = true;
}
}
if (event->type == TERMPAINT_EV_MOUSE) {
if ((event->mouse.action == TERMPAINT_MOUSE_PRESS && event->mouse.button == 0)
|| event->mouse.action == TERMPAINT_MOUSE_MOVE) {
cursor_x = event->mouse.x;
cursor_y = event->mouse.y;
char *cell = cell_at(&board, event->mouse.x, event->mouse.y);
*cell = !*cell;
update = true;
}
}
}
int rule(board_t *b, int x, int y) {
int count = *cell_at(b, x - 1, y - 1) + *cell_at(b, x, y - 1) + *cell_at(b, x + 1, y - 1)
+ *cell_at(b, x - 1, y) + *cell_at(b, x + 1, y)
+ *cell_at(b, x - 1, y + 1) + *cell_at(b, x, y + 1) + *cell_at(b, x + 1, y + 1);
int self = *cell_at(b, x, y);
if (count == 3) {
return ALIVE;
}
if (self && count == 2) {
return ALIVE;
}
return DEAD;
}
void pulse(void) {
if (pause) {
return;
}
static int i = 0;
update = true;
int g;
if (i < 60) {
g = i;
} else {
g = 60 - (i - 60);
}
current_background = TERMPAINT_RGB_COLOR(0, 30 + g, 0);
for (int i = 0; i < steps; i++) {
board_t next;
next.width = termpaint_surface_width(surface);
next.height = termpaint_surface_height(surface);
next.cells = calloc(next.width * next.height, 1);
int count = 0;
for (int x = 0; x < min(board.width, next.width); x++) {
for (int y = 0; y < min(board.height, next.width); y++) {
int new_state = rule(&board, x, y);
*cell_at(&next, x, y) = new_state;
count += new_state;
}
}
if (count == 0) {
if (next.height > 5 && next.width > 5) {
*cell_at(&next, next.width / 2, next.height / 2 - 1) = ALIVE;
*cell_at(&next, next.width / 2 + 1, next.height / 2) = ALIVE;
*cell_at(&next, next.width / 2, next.height / 2 + 1) = ALIVE;
*cell_at(&next, next.width / 2 - 1, next.height / 2 + 1) = ALIVE;
*cell_at(&next, next.width / 2 + 1, next.height / 2 + 1) = ALIVE;
}
}
board.width = next.width;
board.height = next.height;
free(board.cells);
board.cells = next.cells;
generation += 1;
}
i = (i + 10) % 120;
}
void redraw(void) {
int cell_color = TERMPAINT_RGB_COLOR(255, 255, 255);
termpaint_surface_clear(surface, TERMPAINT_DEFAULT_COLOR, current_background);
for (int x = 0; x < board.width; x++) {
for (int y = 0; y < board.height; y++) {
int cell_background = current_background;
if (pause && cursor_x == x && cursor_y == y) {
cell_background = TERMPAINT_RGB_COLOR(0, 0, 0xdd);
termpaint_surface_write_with_colors(surface,
x, y,
" ",
cell_color, cell_background);
}
if (*cell_at(&board, x,y)) {
termpaint_surface_write_with_colors(surface,
x, y,
"♦",
cell_color, cell_background);
}
}
}
if (pause) {
termpaint_surface_write_with_colors(surface,
0, 0,
"q to quit, space to pause, cursor keys and 0/1 or mouse to edit",
cell_color, current_background);
} else {
termpaint_surface_write_with_colors(surface,
0, 0,
"q to quit, space to pause, -/+ change speed, mouse to edit",
cell_color, current_background);
}
char buf[1000];
if (pause) {
sprintf(buf, "generation: %i, speed %i (paused)", generation, speed);
} else {
sprintf(buf, "generation: %i, speed %i", generation, speed);
}
termpaint_surface_write_with_colors(surface,
0, board.height - 1,
buf,
cell_color, current_background);
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
bool quit = false;
integration = termpaintx_full_integration_setup_terminal_fullscreen(
"+kbdsig +kbdsigint",
event_callback, &quit,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
termpaint_terminal_set_mouse_mode(terminal, TERMPAINT_MOUSE_MODE_DRAG);
board.width = termpaint_surface_width(surface);
board.height = termpaint_surface_height(surface);
board.cells = calloc(board.width * board.height, 1);
pulse();
int timeout = refresh;
update = true;
while (!quit) {
if (update) {
redraw();
termpaint_terminal_flush(terminal, false);
update = false;
}
if (!termpaintx_full_integration_do_iteration_with_timeout(integration, &timeout)) {
// some kind of error
break;
}
if (timeout == 0) {
pulse();
timeout = refresh;
}
}
termpaint_terminal_free_with_restore(terminal);
return 0;
}
termpaint-0.3.1/demo/shuffle.c 0000664 0000000 0000000 00000026073 14773035472 0016266 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
typedef struct event_ {
int type;
int modifier;
char *string;
int x;
int y;
struct event_* next;
} event;
event* event_current; // unprocessed event
event* event_saved; // event to free on next call
void event_callback(void *userdata, termpaint_event *tp_event) {
(void)userdata;
// remember tp_event is only valid while this callback runs, so copy everything we need.
event *copied_event = NULL;
if (tp_event->type == TERMPAINT_EV_CHAR) {
copied_event = malloc(sizeof(event));
copied_event->type = tp_event->type;
copied_event->modifier = tp_event->c.modifier;
copied_event->string = strndup(tp_event->c.string, tp_event->c.length);
copied_event->next = NULL;
} else if (tp_event->type == TERMPAINT_EV_KEY) {
copied_event = malloc(sizeof(event));
copied_event->type = tp_event->type;
copied_event->modifier = tp_event->key.modifier;
copied_event->string = strndup(tp_event->key.atom, tp_event->key.length);
copied_event->next = NULL;
} else if (tp_event->type == TERMPAINT_EV_MOUSE) {
copied_event = malloc(sizeof(event));
copied_event->type = tp_event->type;
copied_event->modifier = tp_event->mouse.modifier;
copied_event->string = NULL;
copied_event->x = tp_event->mouse.x;
copied_event->y = tp_event->mouse.y;
copied_event->next = NULL;
}
if (copied_event) {
if (!event_current) {
event_current = copied_event;
} else {
event* prev = event_current;
while (prev->next) {
prev = prev->next;
}
prev->next = copied_event;
}
}
}
event* key_wait(termpaint_integration *integration) {
while (!event_current) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
return NULL; // or some other error handling
}
}
if (event_saved) {
free(event_saved->string);
free(event_saved);
}
event *ret = event_current;
event_current = ret->next;
event_saved = ret;
return ret;
}
const int screen_bg = TERMPAINT_COLOR_BRIGHT_YELLOW;
const int ui_fg = TERMPAINT_COLOR_BLACK;
const int win_message = TERMPAINT_COLOR_GREEN;
const int tile_border = TERMPAINT_COLOR_BLACK;
const int tile_background = TERMPAINT_COLOR_LIGHT_GREY;
int field[5][5];
int x, y;
int current_start_x;
int current_start_y;
void solved_message(termpaint_surface *surface) {
const int screen_width = termpaint_surface_width(surface);
const int screen_height = termpaint_surface_height(surface);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 12, screen_height / 2 - 2,
"┌───────────────────────┐",
ui_fg, win_message);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 12, screen_height / 2 - 1,
"│ Solved! │",
ui_fg, win_message);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 12, screen_height / 2,
"│ │",
ui_fg, win_message);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 12, screen_height / 2 + 1,
"│ Press any key to exit │",
ui_fg, win_message);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 12, screen_height / 2 + 2,
"└───────────────────────┘",
ui_fg, win_message);
}
void draw_screen(termpaint_surface *surface) {
char buf[100];
termpaint_surface_clear(surface,
TERMPAINT_COLOR_BLACK, screen_bg);
const int screen_width = termpaint_surface_width(surface);
const int screen_height = termpaint_surface_height(surface);
current_start_x = screen_width / 2 - 10;
current_start_y = screen_height / 2 - 7;
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
const int visual_x = current_start_x + x * 4;
const int visual_y = current_start_y + y * 3;
if (field[x][y] != -1) {
termpaint_surface_write_with_colors(surface,
visual_x, visual_y,
"┌──┐",
tile_border, tile_background);
termpaint_surface_write_with_colors(surface,
visual_x, visual_y + 1,
"│ │",
tile_border, tile_background);
sprintf(buf, "%.2i", field[x][y]);
int fg = (field[x][y] != y * 5 + x + 1) ? TERMPAINT_COLOR_RED
: TERMPAINT_COLOR_GREEN;
termpaint_surface_write_with_colors(surface,
visual_x + 1, visual_y + 1,
buf,
fg, tile_background);
termpaint_surface_write_with_colors(surface,
visual_x, visual_y + 2,
"└──┘",
tile_border, tile_background);
} else {
termpaint_surface_write_with_colors(surface,
visual_x + 1, visual_y,
"↓", ui_fg, screen_bg);
termpaint_surface_write_with_colors(surface,
visual_x, visual_y + 1,
"→ ←", ui_fg, screen_bg);
termpaint_surface_write_with_colors(surface,
visual_x + 2, visual_y + 2,
"↑", ui_fg, screen_bg);
}
}
}
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 15, 0,
"Use arrow keys to move tiles.", ui_fg, screen_bg);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 15, 1,
"Or click on the tile to move.", ui_fg, screen_bg);
termpaint_surface_write_with_colors(surface,
screen_width / 2 - 8, screen_height - 1,
"Press Q to quit.", ui_fg, screen_bg);
}
enum direction {
UP, RIGHT, DOWN, LEFT
};
bool do_move(int direction) {
bool did_step = false;
if (direction == UP && y > 0) {
field[x][y] = field[x][y - 1];
y -= 1;
did_step = true;
}
if (direction == RIGHT && x < 4) {
field[x][y] = field[x + 1][y];
x += 1;
did_step = true;
}
if (direction == DOWN && y < 4) {
field[x][y] = field[x][y + 1];
y += 1;
did_step = true;
}
if (direction == LEFT && x > 0) {
field[x][y] = field[x - 1][y];
x -= 1;
did_step = true;
}
if (did_step) {
field[x][y] = -1;
}
return did_step;
}
void randomize(void) {
for (int i = 0; i < 1000; i++) {
bool did_step = false;
while (!did_step) {
int direction = rand() % 4;
did_step = do_move(direction);
}
}
}
bool solved(void) {
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
if (x == 4 && y == 4) {
return true;
}
if (field[x][y] != y * 5 + x + 1) {
return false;
}
}
}
return false;
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
termpaint_integration *integration;
termpaint_terminal *terminal;
termpaint_surface *surface;
integration = termpaintx_full_integration_setup_terminal_fullscreen(
"+kbdsig +kbdsigint",
event_callback, NULL,
&terminal);
termpaint_terminal_set_mouse_mode(terminal, TERMPAINT_MOUSE_MODE_CLICKS);
surface = termpaint_terminal_get_surface(terminal);
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
field[x][y] = y * 5 + x + 1;
}
}
field[4][4] = -1;
x = 4;
y = 4;
randomize();
while (!solved()) {
draw_screen(surface);
termpaint_terminal_flush(terminal, false);
event* ev = key_wait(integration);
if (ev->type == TERMPAINT_EV_KEY) {
if (strcmp(ev->string, "ArrowUp") == 0) {
do_move(DOWN);
}
if (strcmp(ev->string, "ArrowRight") == 0) {
do_move(LEFT);
}
if (strcmp(ev->string, "ArrowDown") == 0) {
do_move(UP);
}
if (strcmp(ev->string, "ArrowLeft") == 0) {
do_move(RIGHT);
}
}
if (ev->type == TERMPAINT_EV_CHAR) {
if (strcmp(ev->string, "Q") == 0 || strcmp(ev->string, "q") == 0) {
break;
}
}
if (ev->type == TERMPAINT_EV_MOUSE) {
int mouse_x = (ev->x - current_start_x) / 4;
int mouse_y = (ev->y - current_start_y) / 3;
if (mouse_x >= 0 && mouse_x <= 4 && mouse_y >= 0 && mouse_y <= 4) {
if (mouse_x == x) {
if (mouse_y == y - 1) {
do_move(UP);
}
if (mouse_y == y + 1) {
do_move(DOWN);
}
}
if (mouse_y == y) {
if (mouse_x == x - 1) {
do_move(LEFT);
}
if (mouse_x == x + 1) {
do_move(RIGHT);
}
}
}
}
}
if (solved()) {
draw_screen(surface);
solved_message(surface);
termpaint_terminal_flush(terminal, false);
key_wait(integration);
}
termpaint_terminal_free_with_restore(terminal);
return 0;
}
termpaint-0.3.1/demo/textwrap.c 0000664 0000000 0000000 00000010226 14773035472 0016501 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
#include
#include "termpaint.h"
#include "termpaintx.h"
void event_callback(void *userdata, termpaint_event *event) {
bool *quit = userdata;
if (event->type == TERMPAINT_EV_CHAR) {
*quit = true;
}
if (event->type == TERMPAINT_EV_KEY) {
*quit = true;
}
}
int main(int argc, char **argv) {
if (argc != 2) {
printf("Usage: %s filename\n", argv[0]);
return 1;
}
FILE *fp = fopen(argv[1], "r");
if (!fp) {
perror("Error opening file");
return 1;
}
char *buffer = calloc(40000, 1);
if (!buffer) {
puts("Out of memory\n");
fclose(fp);
return 1;
}
(void)!fread(buffer, 1, 39999, fp); // already nul filled, error checking on next line
if (ferror(fp)) {
perror("Error reading file");
fclose(fp);
free(buffer);
return 1;
}
fclose(fp);
termpaint_integration *integration;
termpaint_terminal *terminal;
termpaint_surface *surface;
bool quit = false;
integration = termpaintx_full_integration_setup_terminal_fullscreen(
"+kbdsig +kbdsigint",
event_callback, &quit,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
termpaint_surface_clear(surface,
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
const int width = termpaint_surface_width(surface);
const int height = termpaint_surface_height(surface);
termpaint_text_measurement *m = termpaint_text_measurement_new(surface);
termpaint_attr *attr = termpaint_attr_new(TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
int y = 0;
const char* cur = buffer;
do {
const char* linebreak = strchr(cur, '\n');
int count;
if (!linebreak) {
count = strlen(cur);
} else {
count = linebreak - cur;
}
termpaint_text_measurement_reset(m);
termpaint_text_measurement_set_limit_width(m, width);
termpaint_text_measurement_feed_utf8(m, cur, count, true);
const int bytes = termpaint_text_measurement_last_ref(m);
if (bytes != count) {
// needs break
// try to find a word break
int print_bytes = bytes;
int skip_bytes = bytes;
for (const char *p = cur + bytes; p > cur; p--) {
if (*p == ' ') {
skip_bytes = print_bytes = p - cur;
// the space is always a start of a cluster.
// when skipping the space itself after the wrap
// care needs to be taken to only skip the space if it is the
// sole character of its cluster
termpaint_text_measurement_reset(m);
termpaint_text_measurement_set_limit_clusters(m, 1);
termpaint_text_measurement_feed_utf8(m, cur + skip_bytes, count - skip_bytes, true);
if (termpaint_text_measurement_last_ref(m) == 1) {
skip_bytes += 1;
}
break;
}
}
termpaint_surface_write_with_len_attr_clipped(surface,
0, y, cur, print_bytes,
attr,
0, width);
cur += skip_bytes;
} else {
// fits completely
termpaint_surface_write_with_len_attr_clipped(surface,
0, y, cur, count,
attr,
0, width);
cur += count + 1;
}
y += 1;
if (!linebreak) break;
} while (y < height);
termpaint_text_measurement_free(m);
termpaint_attr_free(attr);
termpaint_terminal_flush(terminal, false);
while (!quit) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
break;
}
}
termpaint_terminal_free_with_restore(terminal);
return 0;
}
termpaint-0.3.1/doc/ 0000775 0000000 0000000 00000000000 14773035472 0014277 5 ustar 00root root 0000000 0000000 termpaint-0.3.1/doc/_static/ 0000775 0000000 0000000 00000000000 14773035472 0015725 5 ustar 00root root 0000000 0000000 termpaint-0.3.1/doc/_static/custom.css 0000664 0000000 0000000 00000000442 14773035472 0017751 0 ustar 00root root 0000000 0000000 dl.macro dt { text-indent: -120px; margin-left: 120px; }
dl.function dt { text-indent: -120px; margin-left: 120px; }
dl.type dt { text-indent: -120px; margin-left: 120px; }
.hidden-references {
visibility:hidden;
height: 0px;
}
div .hidden-references + p {
margin-top: 0px;
}
termpaint-0.3.1/doc/_templates/ 0000775 0000000 0000000 00000000000 14773035472 0016434 5 ustar 00root root 0000000 0000000 termpaint-0.3.1/doc/_templates/genindex.html 0000664 0000000 0000000 00000003251 14773035472 0021124 0 ustar 00root root 0000000 0000000 {#
basic/genindex.html
~~~~~~~~~~~~~~~~~~~
Template for an "all-in-one" index.
:copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
{%- extends "layout.html" %}
{% set title = _('Index') %}
{% macro indexentries(firstname, links) %}
{%- if links -%}
{%- if links[0][0] %}{% endif -%}
{{ firstname|e }}
{%- if links[0][0] %}{% endif -%}
{%- for ismain, link in links[1:] -%}
, {% if ismain %}{% endif -%}
[{{ loop.index }}]
{%- if ismain %}{% endif -%}
{%- endfor %}
{%- else %}
{{ firstname|e }}
{%- endif %}
{% endmacro %}
{% block body %}
{{ _('Index') }}
{%- for key, entries in genindexentries %}
{%- for column in entries|slice_index(2) if column %}
{%- for entryname, (links, subitems, _) in column %}
{{ indexentries(entryname, links) }}
{%- if subitems %}
{%- for subentryname, subentrylinks in subitems %}
- {{ indexentries(subentryname, subentrylinks) }}
{%- endfor %}
{%- endif -%}
{%- endfor %}
{%- endfor %}
{% endfor %}
{% endblock %}
{% block sidebarrel %}
{% if split_index %}
{{ _('Index') }}
{% for key, dummy in genindexentries -%}
{{ key }}
{% if not loop.last %}| {% endif %}
{%- endfor %}
{{ _('Full index on one page') }}
{% endif %}
{{ super() }}
{% endblock %}
termpaint-0.3.1/doc/_templates/genindex.html.license 0000664 0000000 0000000 00000002330 14773035472 0022542 0 ustar 00root root 0000000 0000000 Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
termpaint-0.3.1/doc/_templates/navigation.html 0000664 0000000 0000000 00000000671 14773035472 0021465 0 ustar 00root root 0000000 0000000 {{ _('Navigation') }}
{{ toctree(includehidden=theme_sidebar_includehidden, collapse=theme_sidebar_collapse) }}
{% if theme_extra_nav_links %}
{% for text, uri in theme_extra_nav_links.items() %}
- {{ text }}
{% endfor %}
{% endif %}
termpaint-0.3.1/doc/attributes.rst 0000664 0000000 0000000 00000027132 14773035472 0017224 0 ustar 00root root 0000000 0000000 .. _sec_attributes:
Attributes
==========
.. c:type:: termpaint_attr
The attributes object contains paint settings used when painting on a :doc:`surface`. It consists of the
foreground color, the background color and the decoration color. In addition it has a set of enabled styles.
.. _colors:
Colors
------
Terminal colors are a bit complicated for historical reasons. Even if colors seem the same they are all distinct and
terminals can (and do) act differently depending on how the color was exactly selected.
.. _default-colors:
Default colors
..............
The most basic color is :c:macro:`TERMPAINT_DEFAULT_COLOR`. It's the terminals default color. This color acts differently
when used as foreground, background or decoration color. For foreground and background it's the respective default color.
For decoration color the default color means that the terminal will use the foreground color of that particular cell.
.. _named-colors:
Named colors
............
Next there is the set of named colors. The first 8 named colors are also often called ANSI colors. These colors are
have constants like ``TERMPAINT_COLOR_RED`` and can also be referred to as :c:macro:`TERMPAINT_NAMED_COLOR` + color
number. The first 8 colors are supported by almost all color
terminals. The following 8 colors are still very widely supported. The named colors have names like "red", but terminal
implementations often allow reconfiguring these colors from easy accessible settings dialogs. Expect named colors to
have different concrete color values for many users.
.. container:: hidden-references
.. c:macro:: TERMPAINT_COLOR_BLACK
.. c:macro:: TERMPAINT_COLOR_RED
.. c:macro:: TERMPAINT_COLOR_GREEN
.. c:macro:: TERMPAINT_COLOR_YELLOW
.. c:macro:: TERMPAINT_COLOR_BLUE
.. c:macro:: TERMPAINT_COLOR_MAGENTA
.. c:macro:: TERMPAINT_COLOR_CYAN
.. c:macro:: TERMPAINT_COLOR_LIGHT_GREY
.. c:macro:: TERMPAINT_COLOR_DARK_GREY
.. c:macro:: TERMPAINT_COLOR_BRIGHT_RED
.. c:macro:: TERMPAINT_COLOR_BRIGHT_GREEN
.. c:macro:: TERMPAINT_COLOR_BRIGHT_YELLOW
.. c:macro:: TERMPAINT_COLOR_BRIGHT_BLUE
.. c:macro:: TERMPAINT_COLOR_BRIGHT_MAGENTA
.. c:macro:: TERMPAINT_COLOR_BRIGHT_CYAN
.. c:macro:: TERMPAINT_COLOR_WHITE
.. table:: Named Colors
:align: left
====== ============================== ====
Number Constant Name
====== ============================== ====
0 TERMPAINT_COLOR_BLACK black
1 TERMPAINT_COLOR_RED red
2 TERMPAINT_COLOR_GREEN green
3 TERMPAINT_COLOR_YELLOW yellow
4 TERMPAINT_COLOR_BLUE blue
5 TERMPAINT_COLOR_MAGENTA magenta
6 TERMPAINT_COLOR_CYAN cyan
7 TERMPAINT_COLOR_LIGHT_GREY "white" (on terminals supporting 16 colors this is light gray)
8 TERMPAINT_COLOR_DARK_GREY dark gray
9 TERMPAINT_COLOR_BRIGHT_RED bright red
10 TERMPAINT_COLOR_BRIGHT_GREEN bright green
11 TERMPAINT_COLOR_BRIGHT_YELLOW bright yellow
12 TERMPAINT_COLOR_BRIGHT_BLUE bright blue
13 TERMPAINT_COLOR_BRIGHT_MAGENTA bright magenta
14 TERMPAINT_COLOR_BRIGHT_CYAN bright cyan
15 TERMPAINT_COLOR_WHITE bright white
====== ============================== ====
.. _indexed-colors:
Indexed colors
..............
The next color space is :c:macro:`TERMPAINT_INDEXED_COLOR`. This is a indexed color space. For most terminals it has
256 colors. Some terminals only implement 88 colors though. Per convention the first 16 colors (0-15) are the same as
the named colors. Some terminals handle these differently in combination with the :c:macro:`TERMPAINT_STYLE_BOLD`
style. For terminals supporting 256 colors in the default palette the rest of the indices are divided in a 6x6x6 color
cube and a 23 step gray ramp (indices 232-255). The defaults are the color cube uses intensity levels of
[0, 95, 135, 175, 215, 255] and calculates the components as red is (index-16) / 36, green is (index-16) / 6) % 6 and
blue (index-16) % 6. The gray ramp uses the intensity levels of
[8, 18, 28, 38, 48, 58, 68, 78, 88, 98, 108, 118, 128, 138, 148, 158, 168, 178, 188, 198, 208, 218, 228, 238]. Of course
the index colors are redefinable so users might have a changed palette active.
For some terminal implementations using index colors leads to garbled display because not all terminals support parsing
the needed control sequences.
.. image:: color256.png
.. _rgb-colors:
RGB colors
..........
The last color space is :c:macro:`TERMPAINT_RGB_COLOR`. This is a direct color space which does not allow redefining
colors. A color is specified by red, green and blue intensities in the range 0 to 255. For example
``TERMPAINT_RGB_COLOR(255, 128, 64)``
For some terminal implementations using direct rgb colors leads to garbled display because not all terminals support
parsing the needed control sequences. Termpaint automatically translates RGB colors to indexed colors using the default
palette when terminal capability detection yields that the terminal can not handle them. This detection is not always
exact and can be switched to a more conservative mode by disabling the capability ``TERMPAINT_CAPABILITY_TRUECOLOR_MAYBE_SUPPORTED``.
In the opposite direction promising the capability ``TERMPAINT_CAPABILITY_TRUECOLOR_SUPPORTED`` disables translation to
index colors.
.. c:macro:: TERMPAINT_RGB_COLOR_OFFSET(red, green, blue)
A macro that returns a rgb color composed of the given values for red, green and blue. The value range
is 0 to 255 for each color component
Styles
------
Clusters may have one or more styles. The style changes how characters are displayed. The
:c:macro:`TERMPAINT_STYLE_INVERSE` style also applies to blank cells.
Styles can be enabled and disabled by using the :c:func:`termpaint_attr_set_style()` and
:c:func:`termpaint_attr_unset_style()` functions. These functions take one or more of the style macros combined with
bitwise or (``|``).
Attribute support varies with terminal implementation.
.. table:: Available styles
:align: left
=================== =========
Style Macro
=================== =========
bold :c:macro:`TERMPAINT_STYLE_BOLD`
inverse :c:macro:`TERMPAINT_STYLE_INVERSE`
italic :c:macro:`TERMPAINT_STYLE_ITALIC`
blink :c:macro:`TERMPAINT_STYLE_BLINK`
underline :c:macro:`TERMPAINT_STYLE_UNDERLINE`
double underline :c:macro:`TERMPAINT_STYLE_UNDERLINE_DBL`
curly underline :c:macro:`TERMPAINT_STYLE_UNDERLINE_CURLY`
strikethrough :c:macro:`TERMPAINT_STYLE_STRIKE`
overline :c:macro:`TERMPAINT_STYLE_OVERLINE`
=================== =========
Functions
---------
See :ref:`safety` for general rules for calling functions in termpaint.
.. c:macro:: TERMPAINT_DEFAULT_COLOR
A Macro used to denote the terminals default color
.. c:macro:: TERMPAINT_NAMED_COLOR
A Macro used to denote the first of the named colors. For example use ``TERMPAINT_NAMED_COLOR + 1`` to denote red.
.. c:macro:: TERMPAINT_INDEXED_COLOR
A Macro used to denote the first indexed color. For example use ``TERMPAINT_NAMED_COLOR + 243`` to denote a mid gray.
.. c:macro:: TERMPAINT_RGB_COLOR(r, g, b)
A Macro used to denote the rgb direct colors. Parameters are in the range 0 to 255.
.. c:function:: termpaint_attr* termpaint_attr_new(unsigned fg, unsigned bg)
Creates a new attributes object with the foreground color ``fg`` and background color ``bg``. No styles will
be selected.
The application has to free this with :c:func:`termpaint_attr_free`.
.. c:function:: termpaint_attr* termpaint_attr_clone(termpaint_attr* attr)
Creates a new attributes object with the same settings as the attributes object passed in ``attr``.
The application has to free this with :c:func:`termpaint_attr_free`.
.. c:function:: void termpaint_attr_free(termpaint_attr* attr)
Frees a attributes object allocated with :c:func:`termpaint_attr_new()` or :c:func:`termpaint_attr_clone()`.
.. c:function:: void termpaint_attr_set_fg(termpaint_attr* attr, unsigned fg)
Set the foreground to be used when painting to ``fg``.
.. c:function:: void termpaint_attr_set_bg(termpaint_attr* attr, unsigned bg)
Set the background to be used when painting to ``bg``.
.. c:function:: void termpaint_attr_set_deco(termpaint_attr* attr, unsigned deco_color)
Set the decoration color to be used when painting to ``deco_color``.
.. c:macro:: TERMPAINT_STYLE_BOLD
Style the text in bold. `(widely supported) `__
Some terminal implementations change named colors in the range 0-7 to their bright variants when rendering bold text.
.. c:macro:: TERMPAINT_STYLE_ITALIC
Style the text in italic. `(widely supported) `__
.. c:macro:: TERMPAINT_STYLE_BLINK
Text should blink. `(support varies by terminal implementation) `__
.. c:macro:: TERMPAINT_STYLE_OVERLINE
Style the text with a overline. `(limited support in terminal implementations) `__
.. c:macro:: TERMPAINT_STYLE_INVERSE
Display the text with inverted foreground and background color. `(widely supported) `__
.. c:macro:: TERMPAINT_STYLE_STRIKE
Style the text in strikethrough. `(support varies by terminal implementation) `__
.. c:macro:: TERMPAINT_STYLE_UNDERLINE
Style the text with a single underline. `(widely supported) `__
If supported by the terminal emulator the underline uses the decoration color.
.. c:macro:: TERMPAINT_STYLE_UNDERLINE_DBL
Style the text with a double underline. `(limited support in terminal implementations) `__
If supported by the terminal emulator the underline uses the decoration color.
.. c:macro:: TERMPAINT_STYLE_UNDERLINE_CURLY
Style the text with a curly underline. `(limited support in terminal implementations) `__
If supported by the terminal emulator the underline uses the decoration color.
.. c:function:: void termpaint_attr_set_style(termpaint_attr* attr, int bits)
Adds the styles given in ``bits`` to the attributes.
.. c:function:: void termpaint_attr_unset_style(termpaint_attr* attr, int bits)
Removes the styles given in ``bits`` to the attributes.
.. c:function:: void termpaint_attr_reset_style(termpaint_attr* attr)
Removes all previously set styles.
.. c:function:: void termpaint_attr_set_patch(termpaint_attr* attr, _Bool optimize, const char *setup, const char * cleanup)
This function allows to use additional attributes for rendering that are not otherwise explicitly supported.
.. warning:: This is a low level feature with potential to garble the whole terminal rendering. Use with care.
Allows setting escape sequences to be output before (``setup``) and after (``cleanup``) rendering each cluster with
this style. If ``optimize`` is set, do not use ``setup`` and ``cleanup`` between clusters that have the exact same
patch.
The caller is responsible to ensure that the patches don't break rendering. Setup is output after the "select graphics
rendition" escape sequence right before the text of the cluster is output. If ``optimize`` is not set cleanup is output
directly following the text of the cluster.
If ``optimize`` is true, the setup sequence must not contain "select graphics rendition" sequences because the
rendering resets SGR state between clusters if styles change in a display run.
termpaint-0.3.1/doc/callback-event-handling.c 0000664 0000000 0000000 00000010163 14773035472 0021101 0 ustar 00root root 0000000 0000000 // Feel free to copy from this example to your own code
// SPDX-License-Identifier: 0BSD OR BSL-1.0 OR MIT-0
#include
#include
#include
// snippet-header-start
#include "termpaint.h"
#include "termpaintx.h"
// snippet-header-end
// snippet-globals-start
termpaint_terminal *terminal;
termpaint_surface *surface;
void (*current_callback)(void *user_data, termpaint_event* event);
void *current_data;
// snippet-globals-end
// snippet-callback-start
void event_callback(void *userdata, termpaint_event *event) {
(void)userdata;
if (current_callback) {
current_callback(current_data, event);
}
}
// snippet-callback-end
// snippet-quit-data-start
typedef struct quit_dialog_ {
void (*saved_callback)(void *user_data, termpaint_event* event);
void *saved_data;
bool *result;
} quit_dialog;
// snippet-quit-data-end
// snippet-quit-callback-start
void quit_dialog_callback(void *userdata, termpaint_event *event) {
quit_dialog* dlg = userdata;
if (!event) {
return;
}
if (event->type == TERMPAINT_EV_CHAR) {
if (event->c.length == 1
&& (event->c.string[0] == 'y' || event->c.string[0] == 'Y')) {
current_data = dlg->saved_data;
current_callback = dlg->saved_callback;
*dlg->result = true;
free(dlg);
current_callback(current_data, NULL);
return;
}
if (event->c.length == 1
&& (event->c.string[0] == 'n' || event->c.string[0] == 'N')) {
current_data = dlg->saved_data;
current_callback = dlg->saved_callback;
*dlg->result = false;
free(dlg);
current_callback(current_data, NULL);
return;
}
}
if (event->type == TERMPAINT_EV_CHAR || event->type == TERMPAINT_EV_KEY) {
termpaint_surface_write_with_colors(surface, 20, 5,
"Please reply with either 'y' for yes or 'n' for no.",
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_terminal_flush(terminal, false);
}
}
// snippet-quit-callback-end
// snippet-quit-ctor-start
void quit_dialog_start(bool *result) {
quit_dialog* dlg = calloc(1, sizeof(quit_dialog));
dlg->saved_data = current_data;
dlg->saved_callback = current_callback;
dlg->result = result;
current_data = dlg;
current_callback = quit_dialog_callback;
int fg = TERMPAINT_DEFAULT_COLOR;
int bg = TERMPAINT_DEFAULT_COLOR;
termpaint_surface_write_with_colors(surface, 20, 4, "Really quit? (y/N)",
fg, bg);
termpaint_terminal_flush(terminal, false);
}
// snippet-quit-ctor-end
void main_screen_callback(void *userdata, termpaint_event *event) {
if (!event) {
termpaint_surface_write_with_colors(surface,
0, 0,
"There is really nothing else to do than quit!",
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_terminal_flush(terminal, false);
quit_dialog_start(userdata);
}
}
int main(int argc, char **argv) {
(void)argc; (void)argv;
termpaint_integration *integration;
integration = termpaintx_full_integration_setup_terminal_fullscreen(
"+kbdsig +kbdsigint",
event_callback, NULL,
&terminal);
surface = termpaint_terminal_get_surface(terminal);
termpaint_surface_clear(surface,
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_surface_write_with_colors(surface,
0, 0,
"Hello World",
TERMPAINT_DEFAULT_COLOR, TERMPAINT_DEFAULT_COLOR);
termpaint_terminal_flush(terminal, false);
bool quit;
current_callback = main_screen_callback;
current_data = &quit;
quit_dialog_start(&quit);
// snippet-main-start
while (!quit) {
if (!termpaintx_full_integration_do_iteration(integration)) {
// some kind of error
break;
}
}
termpaint_terminal_free_with_restore(terminal);
// snippet-main-end
return 0;
}
termpaint-0.3.1/doc/check.py 0000775 0000000 0000000 00000012705 14773035472 0015736 0 ustar 00root root 0000000 0000000 #! /usr/bin/python3
import json
import sys
import os
d = json.load(open('_build/json/genindex.fjson', 'r'))
c_functions = []
c_macros = []
c_types = []
c_enums = []
for letter in d['genindexentries']:
for entry in letter[1]:
display_name = entry[0]
if display_name.endswith(' (C function)'):
c_functions.append(display_name[:-13])
elif display_name.endswith(' (C macro)'):
c_macros.append(display_name[:-10])
elif display_name.endswith(' (C type)'):
c_types.append(display_name[:-9])
elif display_name.endswith(' (C enum)'):
c_enums.append(display_name[:-9])
elif display_name.endswith(' (C enumerator)'):
pass # ignore
else:
print("can not guess type of index entry: ", display_name)
# keys
c_functions.extend(['termpaint_input_enter', 'termpaint_input_space', 'termpaint_input_tab', 'termpaint_input_backspace', 'termpaint_input_context_menu', 'termpaint_input_delete', 'termpaint_input_end', 'termpaint_input_home', 'termpaint_input_insert', 'termpaint_input_page_down', 'termpaint_input_page_up', 'termpaint_input_arrow_down', 'termpaint_input_arrow_left', 'termpaint_input_arrow_right', 'termpaint_input_arrow_up', 'termpaint_input_numpad_divide', 'termpaint_input_numpad_multiply', 'termpaint_input_numpad_subtract', 'termpaint_input_numpad_add', 'termpaint_input_numpad_enter', 'termpaint_input_numpad_decimal', 'termpaint_input_numpad0', 'termpaint_input_numpad1', 'termpaint_input_numpad2', 'termpaint_input_numpad3', 'termpaint_input_numpad4', 'termpaint_input_numpad5', 'termpaint_input_numpad6', 'termpaint_input_numpad7', 'termpaint_input_numpad8', 'termpaint_input_numpad9', 'termpaint_input_escape', 'termpaint_input_f1', 'termpaint_input_f2', 'termpaint_input_f3', 'termpaint_input_f4', 'termpaint_input_f5', 'termpaint_input_f6', 'termpaint_input_f7', 'termpaint_input_f8', 'termpaint_input_f9', 'termpaint_input_f10', 'termpaint_input_f11', 'termpaint_input_f12'])
c_functions.extend([]) # intentionally undocumented
c_types.extend(['termpaint_integration_private']) # intentionally undocumented
c_types.extend(['termpaint_logging_func']) # helper to workaround problems in inline type specification
sys.path.insert(0, "/opt/qtcreator-build/llvm-10/clang/bindings/python/")
os.environ['CLANG_LIBRARY_PATH'] = '/opt/qtcreator-build/llvm-10-build/lib'
from clang.cindex import CursorKind
from clang.cindex import Index, TranslationUnit
from clang.cindex import SourceLocation, SourceRange
from clang.cindex import TokenKind, TokenGroup
import clang.cindex
clang.cindex.Config.set_library_path('/opt/qtcreator-build/llvm-10-build/lib')
function_names_from_source = []
typedef_names_from_source = []
enum_names_from_source = []
macro_names_from_source = []
def get_from_header(header_name):
expected_basename = header_name.split('/')[-1]
index = Index.create()
tu = index.parse(header_name, options=TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD)
# | TranslationUnit.PARSE_SKIP_FUNCTION_BODIES
for cursor in tu.cursor.get_children():
#print(cursor.kind)
basename = str(cursor.location.file).split('/')[-1]
if basename != expected_basename: continue
#print(cursor.kind, cursor.displayname)
if cursor.kind == CursorKind.FUNCTION_DECL:
function_names_from_source.append(cursor.spelling)
sig = cursor.result_type.spelling + ' ' + cursor.spelling + '('
args = []
for arg in cursor.get_children():
if arg.kind != CursorKind.PARM_DECL: continue
args.append(arg.type.spelling + ' ' + arg.spelling)
#if cursor.type.is_function_variadic():
# args.append('...')
sig += ', '.join(args) + ')'
#print(sig)
if cursor.kind == CursorKind.TYPEDEF_DECL:
typedef_names_from_source.append(cursor.spelling)
if cursor.kind == CursorKind.ENUM_DECL:
enum_names_from_source.append(cursor.spelling)
if cursor.kind == CursorKind.MACRO_DEFINITION and not cursor.spelling.endswith('_INCLUDED'):
macro_names_from_source.append(cursor.spelling)
get_from_header('../termpaint.h')
get_from_header('../termpaint_event.h')
get_from_header('../termpaint_image.h')
get_from_header('../termpaint_input.h')
get_from_header('../termpaintx.h')
get_from_header('../termpaintx_ttyrescue.h')
def filter(fn):
return ( (fn.endswith('_mustcheck') and fn[:-10] in function_names_from_source)
or (fn.endswith('_or_nullptr') and fn[:-11] in function_names_from_source))
macro_names_from_source = [name for name in macro_names_from_source if name not in ('_tERMPAINT_PUBLIC', 'TERMPAINTP_CAST')]
function_names_from_source = [fn for fn in function_names_from_source if not filter(fn)]
#print("undocumented functions: ", set(function_names_from_source) - set(c_functions))
#print("undocumented macros: ", set(macro_names_from_source) - set(c_macros))
#print("undocumented types: ", set(typedef_names_from_source) - set(c_types))
#print("enums: ", enum_names_from_source)
#print("number of items: ", len(function_names_from_source) + len(macro_names_from_source) + len(typedef_names_from_source) + len(enum_names_from_source))
for i in (list(set(function_names_from_source) - set(c_functions))
+ list(set(macro_names_from_source) - set(c_macros))
+ list(set(typedef_names_from_source) - set(c_types))
+ list(set(enum_names_from_source) - set(c_enums))):
print(i)
termpaint-0.3.1/doc/color256.png 0000664 0000000 0000000 00000004453 14773035472 0016366 0 ustar 00root root 0000000 0000000 PNG
IHDR ? :P PLTE \\ _ _ _ __ _ _ _ _ ׇ _ __ _ _ _ ___ ____________ _____ׇ_ _ _ ______ _ׇ _ _ ______ _ׇ _ ׇ ׯ _ ___ׇ_ׯ__ _ׇׯׇ _ _ ______ _ׇ _ ׯ _ _ ׯ_ _____ׯ__ _______ ______ _ׯׇ ׇ_ׇׇׇׇ _ _ׯׯ ׯ_ׯׯׯׯ _ _ׇׯׯ _ׇׯ _ׇׯ _ׯ __&&&000:::DDDNNNXXXbbblllvvvя bKGD H pHYs tIME", IDATxccW{nۭm۶m۶ݭm۶m۶m[dߛپO?;7''rD$I$I
a`X`D#A_(3~$i"W_H
Kmlּ&^$c
Z[s~~t~~O~J}~>c2% gRzr.cOJ$4q6ډ3Cr5&4vwt[͆O%.vKjSگk^ׅCP{
hKs!{
gk;T\kM/4i]%"lxW$j0*0&ēǂaƃ!<L0 L
g?~g?ٯ`r`j'Ot0= 3Bl Bmʟ!6eNBߐ:W:4M99Me^cݽ衅We\,"⣇J9PoS@5;KHu(2WO?~=jumv.)e^eON:*/Ij'7~I_}_mʻF+\!69)1B_6ѣ/^y+k>SϠeۗU${H
/bHZ49^M;p |0ap8>p$G1g?~g?~_1qp<