105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Determine display width of Unicode character.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Written by Bruno Haible <bruno@clisp.org>, 2002.
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software: you can redistribute it and/or modify it
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   under the terms of the GNU General Public License as published
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   by the Free Software Foundation; either version 3 of the License, or
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (at your option) any later version.
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   General Public License for more details.
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <config.h>
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Specification.  */
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "uniwidth.h"
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "cjk.h"
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Non-spacing attribute table.
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Consists of:
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * - Non-spacing characters; generated from PropList.txt or
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * - Format control characters; generated from
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * - Zero width characters; generated from
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const unsigned char nonspacing_table_data[27*64] = {
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0000-0x01ff */
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0200-0x03ff */
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0400-0x05ff */
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0600-0x07ff */
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0800-0x09ff */
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0a00-0x0bff */
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0c00-0x0dff */
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x0e00-0x0fff */
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1000-0x11ff */
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1200-0x13ff */
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1600-0x17ff */
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1800-0x19ff */
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1a00-0x1bff */
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1c00-0x1dff */
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x00, 0x00, /* 0x1cc0-0x1cff */
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x2000-0x21ff */
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x2c00-0x2dff */
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x3000-0x31ff */
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0xa600-0xa7ff */
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0xa800-0xa9ff */
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0xaa00-0xabff */
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0xfa00-0xfbff */
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0xfe00-0xffff */
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x10000-0x101ff */
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x10a00-0x10bff */
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x11000-0x111ff */
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11040-0x1107f */
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1d000-0x1d1ff */
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* 0x1d200-0x1d3ff */
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang};
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const signed char nonspacing_table_ind[240] = {
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  24, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  25, 26, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang};
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Determine number of column positions required for UC.  */
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wangint
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wanguc_width (ucs4_t uc, const char *encoding)
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Test for non-spacing or control character.  */
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if ((uc >> 9) < 240)
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      int ind = nonspacing_table_ind[uc >> 9];
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (ind >= 0)
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (uc > 0 && uc < 0xa0)
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              return -1;
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            else
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              return 0;
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else if ((uc >> 9) == (0xe0000 >> 9))
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (uc >= 0xe0100)
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (uc <= 0xe01ef)
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            return 0;
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      else
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            return 0;
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Test for double-width character.
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   */
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (uc >= 0x1100
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      && ((uc < 0x1160) /* Hangul Jamo */
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     )   )
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return 2;
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* In ancient CJK encodings, Cyrillic and most other characters are
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     double-width as well.  */
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      && is_cjk_encoding (encoding))
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return 2;
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  return 1;
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
369