xref: /dflybsd-src/contrib/grep/lib/uniwidth/width.c (revision 91b9ed38d3db6a8a8ac5b66da1d43e6e331e259a)
195b7b453SJohn Marino /* Determine display width of Unicode character.
2*09d4459fSDaniel Fojt    Copyright (C) 2001-2002, 2006-2020 Free Software Foundation, Inc.
395b7b453SJohn Marino    Written by Bruno Haible <bruno@clisp.org>, 2002.
495b7b453SJohn Marino 
595b7b453SJohn Marino    This program is free software: you can redistribute it and/or modify it
695b7b453SJohn Marino    under the terms of the GNU General Public License as published
795b7b453SJohn Marino    by the Free Software Foundation; either version 3 of the License, or
895b7b453SJohn Marino    (at your option) any later version.
995b7b453SJohn Marino 
1095b7b453SJohn Marino    This program is distributed in the hope that it will be useful,
1195b7b453SJohn Marino    but WITHOUT ANY WARRANTY; without even the implied warranty of
1295b7b453SJohn Marino    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13200fbe8dSJohn Marino    General Public License for more details.
1495b7b453SJohn Marino 
1595b7b453SJohn Marino    You should have received a copy of the GNU General Public License
16*09d4459fSDaniel Fojt    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
1795b7b453SJohn Marino 
1895b7b453SJohn Marino #include <config.h>
1995b7b453SJohn Marino 
2095b7b453SJohn Marino /* Specification.  */
2195b7b453SJohn Marino #include "uniwidth.h"
2295b7b453SJohn Marino 
2395b7b453SJohn Marino #include "cjk.h"
2495b7b453SJohn Marino 
2595b7b453SJohn Marino /*
2695b7b453SJohn Marino  * Non-spacing attribute table.
2795b7b453SJohn Marino  * Consists of:
2895b7b453SJohn Marino  * - Non-spacing characters; generated from PropList.txt or
2995b7b453SJohn Marino  *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
3095b7b453SJohn Marino  * - Format control characters; generated from
3195b7b453SJohn Marino  *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
3295b7b453SJohn Marino  * - Zero width characters; generated from
3395b7b453SJohn Marino  *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
3495b7b453SJohn Marino  */
35*09d4459fSDaniel Fojt static const unsigned char nonspacing_table_data[38*64] = {
3695b7b453SJohn Marino   /* 0x0000-0x01ff */
3795b7b453SJohn Marino   0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
3895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
3995b7b453SJohn Marino   0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
4095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
4195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
4295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
4395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
4495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
4595b7b453SJohn Marino   /* 0x0200-0x03ff */
4695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
4795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
4895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
4995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
5095b7b453SJohn Marino   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
5195b7b453SJohn Marino   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
5295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
5395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
5495b7b453SJohn Marino   /* 0x0400-0x05ff */
5595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
5695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
5795b7b453SJohn Marino   0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
5895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
5995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
6095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
6195b7b453SJohn Marino   0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
6295b7b453SJohn Marino   0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
6395b7b453SJohn Marino   /* 0x0600-0x07ff */
64dc7c36e4SJohn Marino   0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
65200fbe8dSJohn Marino   0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
6695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
67200fbe8dSJohn Marino   0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
6895b7b453SJohn Marino   0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
6995b7b453SJohn Marino   0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
7095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
7195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
7295b7b453SJohn Marino   /* 0x0800-0x09ff */
73200fbe8dSJohn Marino   0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
74200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
7595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
76*09d4459fSDaniel Fojt   0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */
77200fbe8dSJohn Marino   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
78200fbe8dSJohn Marino   0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
7995b7b453SJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
8095b7b453SJohn Marino   0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
8195b7b453SJohn Marino   /* 0x0a00-0x0bff */
8295b7b453SJohn Marino   0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
8395b7b453SJohn Marino   0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
8495b7b453SJohn Marino   0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
8595b7b453SJohn Marino   0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
8695b7b453SJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
8795b7b453SJohn Marino   0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
8895b7b453SJohn Marino   0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
8995b7b453SJohn Marino   0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
9095b7b453SJohn Marino   /* 0x0c00-0x0dff */
91dc7c36e4SJohn Marino   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
9295b7b453SJohn Marino   0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
93dc7c36e4SJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
9495b7b453SJohn Marino   0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
95dc7c36e4SJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
9695b7b453SJohn Marino   0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
9795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
9895b7b453SJohn Marino   0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
9995b7b453SJohn Marino   /* 0x0e00-0x0fff */
10095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
10195b7b453SJohn Marino   0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
10295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
10395b7b453SJohn Marino   0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
10495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
10595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
106200fbe8dSJohn Marino   0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
10795b7b453SJohn Marino   0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
10895b7b453SJohn Marino   /* 0x1000-0x11ff */
10995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
11095b7b453SJohn Marino   0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
111200fbe8dSJohn Marino   0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
11295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
11395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
11495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
11595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
11695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
11795b7b453SJohn Marino   /* 0x1200-0x13ff */
11895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
11995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
12095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
12195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
12295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
123200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
12495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
12595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
12695b7b453SJohn Marino   /* 0x1600-0x17ff */
12795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
12895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
12995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
13095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
13195b7b453SJohn Marino   0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
13295b7b453SJohn Marino   0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
13395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
13495b7b453SJohn Marino   0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
13595b7b453SJohn Marino   /* 0x1800-0x19ff */
136dc7c36e4SJohn Marino   0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
13795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
138*09d4459fSDaniel Fojt   0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
13995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
14095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
14195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
14295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
14395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
14495b7b453SJohn Marino   /* 0x1a00-0x1bff */
145dc7c36e4SJohn Marino   0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
146200fbe8dSJohn Marino   0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
147dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, /* 0x1a80-0x1abf */
14895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
14995b7b453SJohn Marino   0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
15095b7b453SJohn Marino   0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
151dc7c36e4SJohn Marino   0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */
152200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
15395b7b453SJohn Marino   /* 0x1c00-0x1dff */
15495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
15595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
15695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
157dc7c36e4SJohn Marino   0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */
15895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
15995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
16095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
161*09d4459fSDaniel Fojt   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, /* 0x1dc0-0x1dff */
16295b7b453SJohn Marino   /* 0x2000-0x21ff */
16395b7b453SJohn Marino   0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
164dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */
16595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
16695b7b453SJohn Marino   0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
16795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
16895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
16995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
17095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
17195b7b453SJohn Marino   /* 0x2c00-0x2dff */
17295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
17395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
17495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
175200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
17695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
177200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
17895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
17995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
18095b7b453SJohn Marino   /* 0x3000-0x31ff */
181dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */
18295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
18395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
18495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
18595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
18695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
18795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
18895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
18995b7b453SJohn Marino   /* 0xa600-0xa7ff */
19095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
191dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */
192dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
193200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
19495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
19595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
19695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
19795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
19895b7b453SJohn Marino   /* 0xa800-0xa9ff */
19995b7b453SJohn Marino   0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
20095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
20195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
202*09d4459fSDaniel Fojt   0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
20395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
20495b7b453SJohn Marino   0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
205200fbe8dSJohn Marino   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
206dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
20795b7b453SJohn Marino   /* 0xaa00-0xabff */
20895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
209dc7c36e4SJohn Marino   0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */
210200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
211dc7c36e4SJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */
21295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
21395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
21495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
215200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
21695b7b453SJohn Marino   /* 0xfa00-0xfbff */
21795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
21895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
21995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
22095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
22195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
22295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
22395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
22495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
22595b7b453SJohn Marino   /* 0xfe00-0xffff */
226dc7c36e4SJohn Marino   0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */
22795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
22895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
22995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
23095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
23195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
23295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
23395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
23495b7b453SJohn Marino   /* 0x10000-0x101ff */
23595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
23695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
23795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
23895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
23995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
24095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
24195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
24295b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
243dc7c36e4SJohn Marino   /* 0x10200-0x103ff */
244dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */
245dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */
246dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */
247dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */
248dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */
249dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */
250dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */
251dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */
25295b7b453SJohn Marino   /* 0x10a00-0x10bff */
25395b7b453SJohn Marino   0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
25495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
25595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
256dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
25795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
25895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
25995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
26095b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
261200fbe8dSJohn Marino   /* 0x11000-0x111ff */
262200fbe8dSJohn Marino   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
263dc7c36e4SJohn Marino   0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x11040-0x1107f */
264200fbe8dSJohn Marino   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
265200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
266dc7c36e4SJohn Marino   0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */
267dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */
268dc7c36e4SJohn Marino   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */
269dc7c36e4SJohn Marino   0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
270dc7c36e4SJohn Marino   /* 0x11200-0x113ff */
271*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */
272dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */
273dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */
274dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */
275dc7c36e4SJohn Marino   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x11300-0x1133f */
276dc7c36e4SJohn Marino   0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */
277dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */
278dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */
279dc7c36e4SJohn Marino   /* 0x11400-0x115ff */
280*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */
281*09d4459fSDaniel Fojt   0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */
282dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */
283dc7c36e4SJohn Marino   0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */
284dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */
285dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */
286dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */
287dc7c36e4SJohn Marino   0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */
288dc7c36e4SJohn Marino   /* 0x11600-0x117ff */
289dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */
290dc7c36e4SJohn Marino   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */
291dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */
292dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */
293dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */
294dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */
295dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */
296dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */
297*09d4459fSDaniel Fojt   /* 0x11c00-0x11dff */
298*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */
299*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */
300*09d4459fSDaniel Fojt   0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */
301*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */
302*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d00-0x11d3f */
303*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */
304*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */
305*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */
306dc7c36e4SJohn Marino   /* 0x16a00-0x16bff */
307dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */
308dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */
309dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */
310dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */
311dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */
312dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */
313dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */
314dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */
315dc7c36e4SJohn Marino   /* 0x16e00-0x16fff */
316dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */
317dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */
318dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */
319dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */
320dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */
321dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */
322dc7c36e4SJohn Marino   0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */
323dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */
324dc7c36e4SJohn Marino   /* 0x1bc00-0x1bdff */
325dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */
326dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */
327dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */
328dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */
329dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */
330dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */
331dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */
332dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */
33395b7b453SJohn Marino   /* 0x1d000-0x1d1ff */
33495b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
33595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
33695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
33795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
33895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
339200fbe8dSJohn Marino   0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
34095b7b453SJohn Marino   0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
34195b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
34295b7b453SJohn Marino   /* 0x1d200-0x1d3ff */
34395b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
34495b7b453SJohn Marino   0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
34595b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
34695b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
34795b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
34895b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
34995b7b453SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
350dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */
351dc7c36e4SJohn Marino   /* 0x1da00-0x1dbff */
352dc7c36e4SJohn Marino   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */
353dc7c36e4SJohn Marino   0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */
354dc7c36e4SJohn Marino   0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */
355dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */
356dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */
357dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */
358dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */
359dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */
360*09d4459fSDaniel Fojt   /* 0x1e000-0x1e1ff */
361*09d4459fSDaniel Fojt   0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */
362*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */
363*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */
364*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */
365*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e100-0x1e13f */
366*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */
367*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */
368*09d4459fSDaniel Fojt   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */
369dc7c36e4SJohn Marino   /* 0x1e800-0x1e9ff */
370dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */
371dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */
372dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */
373dc7c36e4SJohn Marino   0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */
374dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */
375*09d4459fSDaniel Fojt   0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */
376dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */
377dc7c36e4SJohn Marino   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1e9c0-0x1e9ff */
37895b7b453SJohn Marino };
379dc7c36e4SJohn Marino static const signed char nonspacing_table_ind[248] = {
38095b7b453SJohn Marino    0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
38195b7b453SJohn Marino    8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
38295b7b453SJohn Marino   14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
38395b7b453SJohn Marino   16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
38495b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
38595b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
38695b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
38795b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
38895b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
38995b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
39095b7b453SJohn Marino   -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
39195b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
39295b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
39395b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
39495b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
39595b7b453SJohn Marino   -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
396dc7c36e4SJohn Marino   22, 23, -1, -1, -1, 24, -1, -1, /* 0x10000-0x10fff */
397*09d4459fSDaniel Fojt   25, 26, 27, 28, -1, -1, 29, -1, /* 0x11000-0x11fff */
39895b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
39995b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
40095b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
40195b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
402*09d4459fSDaniel Fojt   -1, -1, -1, -1, -1, 30, -1, 31, /* 0x16000-0x16fff */
40395b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
40495b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
40595b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
40695b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
407*09d4459fSDaniel Fojt   -1, -1, -1, -1, -1, -1, 32, -1, /* 0x1b000-0x1bfff */
40895b7b453SJohn Marino   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
409*09d4459fSDaniel Fojt   33, 34, -1, -1, -1, 35, -1, -1, /* 0x1d000-0x1dfff */
410*09d4459fSDaniel Fojt   36, -1, -1, -1, 37, -1, -1, -1  /* 0x1e000-0x1efff */
41195b7b453SJohn Marino };
41295b7b453SJohn Marino 
41395b7b453SJohn Marino /* Determine number of column positions required for UC.  */
41495b7b453SJohn Marino int
uc_width(ucs4_t uc,const char * encoding)41595b7b453SJohn Marino uc_width (ucs4_t uc, const char *encoding)
41695b7b453SJohn Marino {
41795b7b453SJohn Marino   /* Test for non-spacing or control character.  */
418dc7c36e4SJohn Marino   if ((uc >> 9) < 248)
41995b7b453SJohn Marino     {
42095b7b453SJohn Marino       int ind = nonspacing_table_ind[uc >> 9];
42195b7b453SJohn Marino       if (ind >= 0)
42295b7b453SJohn Marino         if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
42395b7b453SJohn Marino           {
42495b7b453SJohn Marino             if (uc > 0 && uc < 0xa0)
42595b7b453SJohn Marino               return -1;
42695b7b453SJohn Marino             else
42795b7b453SJohn Marino               return 0;
42895b7b453SJohn Marino           }
42995b7b453SJohn Marino     }
43095b7b453SJohn Marino   else if ((uc >> 9) == (0xe0000 >> 9))
43195b7b453SJohn Marino     {
43295b7b453SJohn Marino       if (uc >= 0xe0100)
43395b7b453SJohn Marino         {
43495b7b453SJohn Marino           if (uc <= 0xe01ef)
43595b7b453SJohn Marino             return 0;
43695b7b453SJohn Marino         }
43795b7b453SJohn Marino       else
43895b7b453SJohn Marino         {
43995b7b453SJohn Marino           if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
44095b7b453SJohn Marino             return 0;
44195b7b453SJohn Marino         }
44295b7b453SJohn Marino     }
44395b7b453SJohn Marino   /* Test for double-width character.
44495b7b453SJohn Marino    * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
44595b7b453SJohn Marino    * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
44695b7b453SJohn Marino    */
44795b7b453SJohn Marino   if (uc >= 0x1100
44895b7b453SJohn Marino       && ((uc < 0x1160) /* Hangul Jamo */
44995b7b453SJohn Marino           || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
45095b7b453SJohn Marino           || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
45195b7b453SJohn Marino               && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
45295b7b453SJohn Marino           || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
45395b7b453SJohn Marino           || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
45495b7b453SJohn Marino           || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
45595b7b453SJohn Marino           || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
45695b7b453SJohn Marino           || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
45795b7b453SJohn Marino           || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
458200fbe8dSJohn Marino           || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
459200fbe8dSJohn Marino           || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
46095b7b453SJohn Marino      )   )
46195b7b453SJohn Marino     return 2;
46295b7b453SJohn Marino   /* In ancient CJK encodings, Cyrillic and most other characters are
46395b7b453SJohn Marino      double-width as well.  */
46495b7b453SJohn Marino   if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
46595b7b453SJohn Marino       && is_cjk_encoding (encoding))
46695b7b453SJohn Marino     return 2;
46795b7b453SJohn Marino   return 1;
46895b7b453SJohn Marino }
469