summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt8
-rw-r--r--ChangeLog123
-rw-r--r--Makefile.am5
-rw-r--r--NEWS147
-rwxr-xr-xautogen.sh42
-rw-r--r--configure.ac8
-rw-r--r--data/CMakeLists.txt5
-rw-r--r--data/Makefile.am4
-rw-r--r--scripts2/chewing.py3
-rw-r--r--scripts2/fullpinyintable.py36
-rw-r--r--scripts2/generateheader.py3
-rw-r--r--scripts2/options.py72
-rw-r--r--scripts2/templates/zhuyin_table.h.in7
-rw-r--r--scripts2/zhuyin.py168
-rw-r--r--src/CMakeLists.txt14
-rw-r--r--src/Makefile.am67
-rw-r--r--src/include/Makefile.am6
-rw-r--r--src/lookup/CMakeLists.txt1
-rw-r--r--src/lookup/Makefile.am34
-rw-r--r--src/lookup/phonetic_lookup.h54
-rw-r--r--src/lookup/phonetic_lookup_heap.h18
-rw-r--r--src/lookup/phonetic_lookup_linear.h10
-rw-r--r--src/pinyin.cpp110
-rw-r--r--src/pinyin.h37
-rw-r--r--src/storage/Makefile.am16
-rw-r--r--src/storage/chewing_key.cpp9
-rw-r--r--src/storage/chewing_key.h1
-rw-r--r--src/storage/chewing_large_table.cpp2
-rw-r--r--src/storage/chewing_large_table2.cpp4
-rw-r--r--src/storage/phrase_index.cpp2
-rw-r--r--src/storage/phrase_large_table2.cpp2
-rw-r--r--src/storage/phrase_large_table3.cpp2
-rw-r--r--src/storage/pinyin_custom2.h35
-rw-r--r--src/storage/pinyin_custom3.h142
-rw-r--r--src/storage/pinyin_parser2.cpp31
-rw-r--r--src/storage/pinyin_parser2.h9
-rw-r--r--src/storage/pinyin_parser_table.h1320
-rw-r--r--src/storage/special_table.h40
-rw-r--r--src/storage/table_info.cpp4
-rw-r--r--src/storage/tag_utility.h2
-rw-r--r--src/storage/zhuyin_parser2.cpp40
-rw-r--r--src/storage/zhuyin_parser2.h8
-rw-r--r--src/storage/zhuyin_table.h12102
-rw-r--r--src/zhuyin.cpp10
-rw-r--r--src/zhuyin.h13
-rw-r--r--tests/CMakeLists.txt6
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/include/CMakeLists.txt4
-rw-r--r--tests/include/Makefile.am2
-rw-r--r--tests/lookup/CMakeLists.txt4
-rw-r--r--tests/lookup/Makefile.am9
-rw-r--r--tests/lookup/test_pinyin_lookup.cpp4
-rw-r--r--tests/storage/CMakeLists.txt14
-rw-r--r--tests/storage/Makefile.am9
-rw-r--r--tests/test_pinyin.cpp3
-rw-r--r--tests/test_zhuyin.cpp4
-rw-r--r--utils/segment/CMakeLists.txt6
-rw-r--r--utils/segment/Makefile.am17
-rw-r--r--utils/storage/CMakeLists.txt6
-rw-r--r--utils/storage/Makefile.am9
-rw-r--r--utils/storage/gen_pinyin_table.cpp28
-rw-r--r--utils/storage/gen_zhuyin_table.cpp4
-rw-r--r--utils/training/CMakeLists.txt28
-rw-r--r--utils/training/Makefile.am19
-rw-r--r--utils/training/eval_correction_rate.cpp6
65 files changed, 13637 insertions, 1323 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index be6dc11..c042b09 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,10 +23,10 @@ enable_testing()
######## Package information
set (PACKAGE_URL https://github.com/libpinyin/libpinyin)
set (PACKAGE_BUGREPORT https://github.com/libpinyin/libpinyin/issues)
-set (LIBPINYIN_VERSION_MAJOR 0)
-set (LIBPINYIN_VERSION_MINOR 7)
+set (LIBPINYIN_VERSION_MAJOR 2)
+set (LIBPINYIN_VERSION_MINOR 1)
set (LIBPINYIN_VERSION_REVISION 0)
-set (LIBPINYIN_BINARY_VERSION 2.0)
+set (LIBPINYIN_BINARY_VERSION 13.0)
if (CMAKE_BUILD_TYPE MATCHES Debug)
set (version_suffix .Debug)
@@ -43,7 +43,6 @@ set (VERSION ${LIBPINYIN_VERSION})
include(CheckIncludeFileCXX)
check_include_file_cxx(locale.h HAVE_LOCALE_H)
-check_include_file_cxx(libintl.h HAVE_LIBINTL_H)
check_include_file_cxx(stdlib.h HAVE_STDLIB_H)
check_include_file_cxx(string.h HAVE_STRING_H)
check_include_file_cxx(sys/time.h HAVE_SYS_TIME_H)
@@ -163,6 +162,7 @@ if (CMAKE_BUILD_TYPE MATCHES Debug)
endif (CMAKE_BUILD_TYPE MATCHES Debug)
include_directories(
+ ${CMAKE_BINARY_DIR}
${GLIB2_INCLUDE_DIR}
${PROJECT_SOURCE_DIR}/
${PROJECT_SOURCE_DIR}/src
diff --git a/ChangeLog b/ChangeLog
index b8a7b27..e69de29 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,123 +0,0 @@
-version 2.0.0
-* the first official release of 2.0.x;
-* fixes autoconf;
-
-version 1.9.92
-* fixes crash in double pinyin;
-
-version 1.9.91
-* multiple sentence candidates;
-
-version 1.7.0
-* fixes build on FreeBSD;
-* update cmake files;
-
-version 1.6.91
-* change license to GPLv3+;
-* import open-gram dictionary and remove pinyin tones;
-* add some checks when load data from file;
-
-version 1.6.0
-* bug fixes.
-
-version 1.5.91
-* change pinyin/phrase tables to use dbm.
-* enhance pinyin key representation and pinyin parsers.
-
-version 1.2.0
-* bug fixes.
-
-version 1.1.91
-* support Kyoto Cabinet as alternative to Berkeley DB.
-* improve multiple dictionaries support feature.
-
-version 1.1.0
-* support to export user phrases.
-
-version 1.0.0
-* the first official release of 1.0.x.
-
-version 0.9.94
-* bug fixes.
-
-version 0.9.93
-* fixes libpinyin issues from coverity scan report.
-
-version 0.9.92
-* bug fixes.
-
-version 0.9.91
-* code re-factor.
-
-version 0.9.0
-* the first official release of 0.9.x.
-* fixes import dictionary.
-
-version 0.8.93
-* add back pinyin_clear_constraint.
-
-version 0.8.92
-* fixes model data.
-
-version 0.8.91
-* multiple dictioniares and user dictionary support.
-
-version 0.8.1
-* bug fixes.
-
-version 0.8.0
-* the first official release of 0.8.x.
-
-version 0.7.92
-* re-factor PhraseLookup class.
-* all tests passed simple valgrind memory check.
-
-version 0.7.91
-* simplify PinyinLookup class.
-
-version 0.7.1
-* add API to lookup pinyin for characters.
-
-version 0.7.0
-* the first official release of 0.7.x.
-
-version 0.6.92
-* draft support for multiple professional phrase libraries.
-
-version 0.6.91
-* support ucs4 characters.
-* support guess sentence with prefix.
-* initially support fuzzy pinyin segment.
-
-version 0.6.0
-* the first official release of 0.6.x.
-
-version 0.5.92
-* fixes new parsers and chewing large table.
-* improves pinyin_save.
-
-version 0.5.91
-* some code re-factor and simplify.
-* fixes the self-learning work around.
-
-version 0.5.0
-* the first official release of 0.5.x.
-
-version 0.4.93
-* fixes some bugs in new parsers.
-
-version 0.4.92
-* enable parallel make.
-
-version 0.4.91
-* New parsers for full pinyin/double pinyin/chewing.
- * libpinyin now fully supports all pinyin auto corrections of
-ibus-pinyin.
- * libpinyin now better supports an/ang, en/eng, in/ing fuzzy
-pinyin match.
-
-version 0.3.0
-* the first official release of 0.3.x.
-
-version 0.2.99
-* import from pinyin.
diff --git a/Makefile.am b/Makefile.am
index 6266b2d..fbaefed 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,3 +31,8 @@ pkgconfig_DATA = libpinyin.pc
if ENABLE_LIBZHUYIN
pkgconfig_DATA += libzhuyin.pc
endif
+
+dist-hook:
+ if test -d .git ; then \
+ git log --name-status --date=iso > $(distdir)/ChangeLog ; \
+ fi
diff --git a/NEWS b/NEWS
index e69de29..0c803ca 100644
--- a/NEWS
+++ b/NEWS
@@ -0,0 +1,147 @@
+version 2.3.0
+* update pinyin data
+
+version 2.2.2
+* minor fixes
+
+version 2.2.1
+* fixes predicted candidates
+
+version 2.2.0
+* bug fixes
+
+version 2.1.91
+* fixes zhuyin parsers;
+
+version 2.1.0
+* support sort option in pinyin_guess_candidates function;
+
+version 2.0.92
+* reduce memory consumption after imported user dictionary;
+
+version 2.0.91
+* merge libzhuyin code;
+
+version 2.0.0
+* the first official release of 2.0.x;
+* fixes autoconf;
+
+version 1.9.92
+* fixes crash in double pinyin;
+
+version 1.9.91
+* multiple sentence candidates;
+
+version 1.7.0
+* fixes build on FreeBSD;
+* update cmake files;
+
+version 1.6.91
+* change license to GPLv3+;
+* import open-gram dictionary and remove pinyin tones;
+* add some checks when load data from file;
+
+version 1.6.0
+* bug fixes.
+
+version 1.5.91
+* change pinyin/phrase tables to use dbm.
+* enhance pinyin key representation and pinyin parsers.
+
+version 1.2.0
+* bug fixes.
+
+version 1.1.91
+* support Kyoto Cabinet as alternative to Berkeley DB.
+* improve multiple dictionaries support feature.
+
+version 1.1.0
+* support to export user phrases.
+
+version 1.0.0
+* the first official release of 1.0.x.
+
+version 0.9.94
+* bug fixes.
+
+version 0.9.93
+* fixes libpinyin issues from coverity scan report.
+
+version 0.9.92
+* bug fixes.
+
+version 0.9.91
+* code re-factor.
+
+version 0.9.0
+* the first official release of 0.9.x.
+* fixes import dictionary.
+
+version 0.8.93
+* add back pinyin_clear_constraint.
+
+version 0.8.92
+* fixes model data.
+
+version 0.8.91
+* multiple dictioniares and user dictionary support.
+
+version 0.8.1
+* bug fixes.
+
+version 0.8.0
+* the first official release of 0.8.x.
+
+version 0.7.92
+* re-factor PhraseLookup class.
+* all tests passed simple valgrind memory check.
+
+version 0.7.91
+* simplify PinyinLookup class.
+
+version 0.7.1
+* add API to lookup pinyin for characters.
+
+version 0.7.0
+* the first official release of 0.7.x.
+
+version 0.6.92
+* draft support for multiple professional phrase libraries.
+
+version 0.6.91
+* support ucs4 characters.
+* support guess sentence with prefix.
+* initially support fuzzy pinyin segment.
+
+version 0.6.0
+* the first official release of 0.6.x.
+
+version 0.5.92
+* fixes new parsers and chewing large table.
+* improves pinyin_save.
+
+version 0.5.91
+* some code re-factor and simplify.
+* fixes the self-learning work around.
+
+version 0.5.0
+* the first official release of 0.5.x.
+
+version 0.4.93
+* fixes some bugs in new parsers.
+
+version 0.4.92
+* enable parallel make.
+
+version 0.4.91
+* New parsers for full pinyin/double pinyin/chewing.
+ * libpinyin now fully supports all pinyin auto corrections of
+ibus-pinyin.
+ * libpinyin now better supports an/ang, en/eng, in/ing fuzzy
+pinyin match.
+
+version 0.3.0
+* the first official release of 0.3.x.
+
+version 0.2.99
+* import from pinyin.
diff --git a/autogen.sh b/autogen.sh
index 0eb6f85..7d7ce22 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,30 +1,50 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
+test -n "$srcdir" || srcdir=$(dirname "$0")
+test -n "$srcdir" || srcdir=.
+
+olddir=$(pwd)
+
+cd "$srcdir"
PKG_NAME="libpinyin"
-(test -f $srcdir/configure.ac \
- && test -f $srcdir/README ) || {
+(test -f configure.ac && test -f README ) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level $PKG_NAME directory"
exit 1
}
-which gnome-autogen.sh || {
- echo "You need to install gnome-common from the GNOME CVS"
- exit 1
-}
+if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then
+ echo "*** WARNING: I am going to run 'configure' with no arguments." >&2
+ echo "*** If you wish to pass any to it, please specify them on the" >&2
+ echo "*** '$0' command line." >&2
+ echo "" >&2
+fi
+
+autoreconf --verbose --force --install || exit 1
-(test -f $srcdir/ChangeLog) || {
- touch $srcdir/ChangeLog
+(test -f ChangeLog) || {
+ touch ChangeLog
}
+cd "$olddir"
+
CFLAGS=${CFLAGS-"-Wall -Werror"}
ACLOCAL_FLAGS="$ACLOCAL_FLAGS"
REQUIRED_AUTOMAKE_VERSION=1.8
-. gnome-autogen.sh "$@"
+cd "$olddir"
+if [ "$NOCONFIGURE" = "" ]; then
+ $srcdir/configure "$@" || exit 1
+
+ if [ "$1" = "--help" ]; then
+ exit 0
+ else
+ echo "Now type 'make' to compile $PKG_NAME" || exit 1
+ fi
+else
+ echo "Skipping configure process."
+fi
diff --git a/configure.ac b/configure.ac
index 5805301..cb39888 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,12 +5,12 @@
# if not 1, append datestamp to the version number.
m4_define([libpinyin_released], [1])
m4_define([libpinyin_major_version], [2])
-m4_define([libpinyin_minor_version], [0])
-m4_define([libpinyin_micro_version], [91])
+m4_define([libpinyin_minor_version], [3])
+m4_define([libpinyin_micro_version], [0])
m4_define(libpinyin_maybe_datestamp,
m4_esyscmd([if test x]libpinyin_released[ != x1; then date +.%Y%m%d | tr -d '\n\r'; fi]))
-m4_define([libpinyin_abi_current], [12])
+m4_define([libpinyin_abi_current], [13])
m4_define([libpinyin_abi_revision], [0])
m4_define([libpinyin_version],
@@ -80,7 +80,7 @@ AC_FUNC_STAT
AC_FUNC_MMAP
AC_CHECK_FUNCS([gettimeofday memmove memset setlocale])
-AC_CHECK_HEADERS([libintl.h string.h])
+AC_CHECK_HEADERS([string.h], , AC_MSG_ERROR([Cannot find string.h]))
# Check Berkeley DB or Kyoto Cabinet
DBM="BerkeleyDB"
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index d6d232b..ff3fd26 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -45,12 +45,13 @@ add_custom_command(
${CMAKE_SOURCE_DIR}/data/gb_char.table
${CMAKE_SOURCE_DIR}/data/gbk_char.table
${CMAKE_SOURCE_DIR}/data/interpolation2.text
+ ${CMAKE_SOURCE_DIR}/data/table.conf
COMMENT
"Downloading textual model data..."
COMMAND
- wget http://downloads.sourceforge.net/libpinyin/models/model14.text.tar.gz
+ wget http://downloads.sourceforge.net/libpinyin/models/model17.text.tar.gz
COMMAND
- tar xvf model14.text.tar.gz -C ${CMAKE_SOURCE_DIR}/data
+ tar xvf model17.text.tar.gz -C ${CMAKE_SOURCE_DIR}/data
)
add_custom_command(
diff --git a/data/Makefile.am b/data/Makefile.am
index 6f563fe..2e1d40d 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -48,8 +48,8 @@ libpinyin_dbdir = $(libdir)/libpinyin/data
CLEANFILES = $(binary_model_data)
interpolation2.text:
- wget http://downloads.sourceforge.net/libpinyin/models/model14.text.tar.gz
- tar xvf model14.text.tar.gz -C $(top_srcdir)/data
+ wget http://downloads.sourceforge.net/libpinyin/models/model17.text.tar.gz
+ tar xvf model17.text.tar.gz -C $(top_srcdir)/data
$(tablefiles) table.conf: interpolation2.text
diff --git a/scripts2/chewing.py b/scripts2/chewing.py
index c3eab03..b92319d 100644
--- a/scripts2/chewing.py
+++ b/scripts2/chewing.py
@@ -99,6 +99,9 @@ ASCII_CHEWING_TONE_LIST = [
("CHEWING_5" , "˙"),
]
+ASCII_CHEWING_TONE_MAP = dict([(k, v) for k, v in ASCII_CHEWING_TONE_LIST if v])
+
+CHEWING_ASCII_TONE_MAP = dict([(v, k) for k, v in ASCII_CHEWING_TONE_LIST if v])
CHEWING_INITIAL_LIST = [k for k, v in ASCII_CHEWING_INITIAL_LIST]
diff --git a/scripts2/fullpinyintable.py b/scripts2/fullpinyintable.py
index ef0a6a2..4af94a9 100644
--- a/scripts2/fullpinyintable.py
+++ b/scripts2/fullpinyintable.py
@@ -100,6 +100,7 @@ def gen_pinyin_list():
def gen_pinyins():
#generate all pinyins
+ distance = 0
for pinyin in pinyin_list:
flags = []
if pinyin in PINYIN_ZHUYIN_MAP.keys():
@@ -113,7 +114,7 @@ def gen_pinyins():
if zhuyin in chewing.CHEWING_ASCII_INITIAL_MAP and \
pinyin not in ZHUYIN_SPECIAL_INITIAL_SET_IN_PINYIN_FORM:
flags.append("ZHUYIN_INCOMPLETE")
- yield pinyin, pinyin, zhuyin, flags, get_chewing(pinyin)
+ yield pinyin, pinyin, zhuyin, flags, get_chewing(pinyin), distance
def get_shengmu_chewing(shengmu):
@@ -127,6 +128,7 @@ def get_shengmu_chewing(shengmu):
def gen_shengmu():
#generate all shengmu
+ distance = 0
for shengmu in shengmu_list:
if shengmu in pinyin_list:
continue
@@ -135,12 +137,12 @@ def gen_shengmu():
chewing_initial = chewing_key[0]
if chewing_initial in chewing.ASCII_CHEWING_INITIAL_MAP:
chewing_initial = chewing.ASCII_CHEWING_INITIAL_MAP[chewing_initial]
- yield shengmu, shengmu, chewing_initial, flags, chewing_key
+ yield shengmu, shengmu, chewing_initial, flags, chewing_key, distance
def gen_corrects():
#generate corrections
- for correct, wrong in auto_correct:
+ for correct, wrong, distance in auto_correct:
flags = ['IS_PINYIN', 'PINYIN_CORRECT_{0}_{1}'.format(wrong.upper(),
correct.upper())]
for pinyin in pinyin_list:
@@ -149,17 +151,17 @@ def gen_corrects():
zhuyin = PINYIN_ZHUYIN_MAP[pinyin]
wrong_pinyin = pinyin.replace(correct, wrong)
yield pinyin, wrong_pinyin, zhuyin,\
- flags, get_chewing(pinyin)
+ flags, get_chewing(pinyin), distance
def gen_u_to_v():
#generate U to V
- for correct, wrong, flags in auto_correct_ext:
+ for correct, wrong, flags, distance in auto_correct_ext:
#over-ride flags
flags = ['IS_PINYIN', 'PINYIN_CORRECT_V_U']
pinyin = correct
zhuyin = PINYIN_ZHUYIN_MAP[pinyin]
- yield correct, wrong, zhuyin, flags, get_chewing(pinyin)
+ yield correct, wrong, zhuyin, flags, get_chewing(pinyin), distance
#pinyin table
@@ -174,7 +176,8 @@ eten26_zhuyin_index = []
def filter_pinyin_list():
- for (correct, wrong, zhuyin, flags, chewing_key) in gen_pinyin_list():
+ for (correct, wrong, zhuyin, flags, chewing_key, distance) in \
+ gen_pinyin_list():
(luoma, secondary) = (None, None)
if zhuyin in ZHUYIN_LUOMA_PINYIN_MAP:
@@ -190,7 +193,7 @@ def filter_pinyin_list():
content_table.append((correct, zhuyin, luoma, secondary, chewing_key))
if "IS_PINYIN" in flags:
- pinyin_index.append((wrong, flags, correct))
+ pinyin_index.append((wrong, flags, correct, distance))
#skip pinyin correct options
if correct != wrong:
continue
@@ -292,9 +295,9 @@ def gen_content_table():
def gen_pinyin_index():
entries = []
- for (wrong, flags, correct) in pinyin_index:
+ for (wrong, flags, correct, distance) in pinyin_index:
index = [x[0] for x in content_table].index(correct)
- entry = '{{"{0}", {1}, {2}}}'.format(wrong, flags, index)
+ entry = '{{"{0}", {1}, {2}, {3}}}'.format(wrong, flags, index, distance)
entries.append(entry)
return ',\n'.join(entries)
@@ -387,17 +390,16 @@ def handle_special_rules(zhuyin, corrects):
def gen_table_index_for_chewing_key():
+ chewings = [x[4] for x in content_table]
+
entries = []
- for i in range(0, len(chewing.CHEWING_INITIAL_LIST)):
- initial = chewing.CHEWING_INITIAL_LIST[i]
- for m in range(0, len(chewing.CHEWING_MIDDLE_LIST)):
- middle = chewing.CHEWING_MIDDLE_LIST[m]
- for f in range(0, len(chewing.CHEWING_FINAL_LIST)):
- final = chewing.CHEWING_FINAL_LIST[f]
+ for initial in chewing.CHEWING_INITIAL_LIST:
+ for middle in chewing.CHEWING_MIDDLE_LIST:
+ for final in chewing.CHEWING_FINAL_LIST:
chewingkey = 'ChewingKey({0}, {1}, {2})'.format(initial, middle, final)
index = -1
try:
- index = [x[4] for x in content_table].index(chewingkey)
+ index = chewings.index(chewingkey)
except ValueError:
pass
diff --git a/scripts2/generateheader.py b/scripts2/generateheader.py
index f91b843..59e7633 100644
--- a/scripts2/generateheader.py
+++ b/scripts2/generateheader.py
@@ -27,6 +27,7 @@ from fullpinyintable import gen_content_table, gen_pinyin_index, gen_luoma_pinyi
from specialtable import gen_divided_table, gen_resplit_table
from doublepinyintable import gen_shengmu_table, gen_yunmu_table, gen_fallback_table2, gen_fallback_table3
from bopomofotable import gen_chewing_symbols, gen_chewing_initials, gen_chewing_middles, gen_chewing_finals, gen_chewing_tones
+from zhuyin import gen_zhuyin_table
header = '''/* This file is generated by python scripts. Don't edit this file directly.
@@ -66,6 +67,8 @@ def get_table_content(tablename):
return gen_resplit_table()
if tablename == 'TABLE_INDEX':
return gen_table_index_for_chewing_key()
+ if tablename == 'VALID_ZHUYIN_TABLE':
+ return gen_zhuyin_table()
#double pinyin table
(scheme, part) = tablename.split('_', 1)
diff --git a/scripts2/options.py b/scripts2/options.py
index fcfb9fd..e4bd01f 100644
--- a/scripts2/options.py
+++ b/scripts2/options.py
@@ -22,47 +22,47 @@
auto_correct = [
# "correct", "wrong"
- ("ng", "gn"),
- ("ng", "mg"),
- ("iu", "iou"),
- ("ui", "uei"),
- ("un", "uen"),
+ ("ng", "gn", 1),
+ ("ng", "mg", 1),
+ ("iu", "iou", 1),
+ ("ui", "uei", 1),
+ ("un", "uen", 1),
# ("ue", "ve"),
- ("ve", "ue"),
- ("ong", "on"),
+ ("ve", "ue", 1),
+ ("ong", "on", 1),
]
auto_correct_ext = [
# "correct", "wrong", flag
- ("ju", "jv", "PINYIN_CORRECT_V_U"),
- ("qu", "qv", "PINYIN_CORRECT_V_U"),
- ("xu", "xv", "PINYIN_CORRECT_V_U"),
- ("yu", "yv", "PINYIN_CORRECT_V_U"),
-
- ("jue", "jve", "PINYIN_CORRECT_V_U"),
- ("que", "qve", "PINYIN_CORRECT_V_U"),
- ("xue", "xve", "PINYIN_CORRECT_V_U"),
- ("yue", "yve", "PINYIN_CORRECT_V_U"),
-
- ("juan", "jvan", "PINYIN_CORRECT_V_U"),
- ("quan", "qvan", "PINYIN_CORRECT_V_U"),
- ("xuan", "xvan", "PINYIN_CORRECT_V_U"),
- ("yuan", "yvan", "PINYIN_CORRECT_V_U"),
-
- ("jun", "jvn", "PINYIN_CORRECT_V_U"),
- ("qun", "qvn", "PINYIN_CORRECT_V_U"),
- ("xun", "xvn", "PINYIN_CORRECT_V_U"),
- ("yun", "yvn", "PINYIN_CORRECT_V_U"),
-
-# ("juang", "jvang", "PINYIN_CORRECT_V_U"),
-# ("quang", "qvang", "PINYIN_CORRECT_V_U"),
-# ("xuang", "xvang", "PINYIN_CORRECT_V_U"),
-# ("yuang", "yvang", "PINYIN_CORRECT_V_U"),
-
-# ("jun", "jven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U"),
-# ("qun", "qven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U"),
-# ("xun", "xven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U"),
-# ("yun", "yven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U"),
+ ("ju", "jv", "PINYIN_CORRECT_V_U", 1),
+ ("qu", "qv", "PINYIN_CORRECT_V_U", 1),
+ ("xu", "xv", "PINYIN_CORRECT_V_U", 1),
+ ("yu", "yv", "PINYIN_CORRECT_V_U", 1),
+
+ ("jue", "jve", "PINYIN_CORRECT_V_U", 1),
+ ("que", "qve", "PINYIN_CORRECT_V_U", 1),
+ ("xue", "xve", "PINYIN_CORRECT_V_U", 1),
+ ("yue", "yve", "PINYIN_CORRECT_V_U", 1),
+
+ ("juan", "jvan", "PINYIN_CORRECT_V_U", 1),
+ ("quan", "qvan", "PINYIN_CORRECT_V_U", 1),
+ ("xuan", "xvan", "PINYIN_CORRECT_V_U", 1),
+ ("yuan", "yvan", "PINYIN_CORRECT_V_U", 1),
+
+ ("jun", "jvn", "PINYIN_CORRECT_V_U", 1),
+ ("qun", "qvn", "PINYIN_CORRECT_V_U", 1),
+ ("xun", "xvn", "PINYIN_CORRECT_V_U", 1),
+ ("yun", "yvn", "PINYIN_CORRECT_V_U", 1),
+
+# ("juang", "jvang", "PINYIN_CORRECT_V_U", 1),
+# ("quang", "qvang", "PINYIN_CORRECT_V_U", 1),
+# ("xuang", "xvang", "PINYIN_CORRECT_V_U", 1),
+# ("yuang", "yvang", "PINYIN_CORRECT_V_U", 1),
+
+# ("jun", "jven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U", 1),
+# ("qun", "qven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U", 1),
+# ("xun", "xven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U", 1),
+# ("yun", "yven", "PINYIN_CORRECT_UEN_UN | PINYIN_CORRECT_V_U", 1),
]
diff --git a/scripts2/templates/zhuyin_table.h.in b/scripts2/templates/zhuyin_table.h.in
index 9760d4f..4c1eec8 100644
--- a/scripts2/templates/zhuyin_table.h.in
+++ b/scripts2/templates/zhuyin_table.h.in
@@ -107,6 +107,13 @@ const zhuyin_tone_item_t chewing_dachen_cp26_tones[] = {
@DACHEN-CP26_TONES@
};
+const bool valid_zhuyin_table[CHEWING_NUMBER_OF_INITIALS *
+ CHEWING_NUMBER_OF_MIDDLES *
+ CHEWING_NUMBER_OF_FINALS *
+ CHEWING_NUMBER_OF_TONES] = {
+@VALID_ZHUYIN_TABLE@
+};
+
static const char * chewing_tone_table[CHEWING_NUMBER_OF_TONES] = {
"",
" ",
diff --git a/scripts2/zhuyin.py b/scripts2/zhuyin.py
new file mode 100644
index 0000000..fa5dbd9
--- /dev/null
+++ b/scripts2/zhuyin.py
@@ -0,0 +1,168 @@
+# -*- coding: utf-8 -*-
+# vim:set et sts=4 sw=4:
+#
+# libpinyin - Library to deal with pinyin.
+#
+# Copyright (C) 2017 Peng Wu <alexepico@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import os
+from chewing import *
+from pyzymap import ZHUYIN_PINYIN_MAP, PINYIN_ZHUYIN_MAP
+from fullpinyintable import get_chewing, content_table
+
+# recursive maps for ChewingKey
+zhuyin_maps = {}
+
+
+# insert into zhuyin_maps
+def add_valid_zhuyin(key):
+ global zhuyin_maps
+ (initial, middle, final, tone) = key
+
+ maps = None
+
+ # handle initial
+ if initial not in zhuyin_maps:
+ zhuyin_maps[initial] = {}
+ maps = zhuyin_maps[initial]
+
+ # handle middle
+ if middle not in maps:
+ maps[middle] = {}
+ maps = maps[middle]
+
+ # handle final
+ if final not in maps:
+ maps[final] = {}
+ maps = maps[final]
+
+ # handle tone
+ if tone not in maps:
+ maps[tone] = True
+
+
+# compute zero tone from other tones
+def compute_zero_tone():
+ global zhuyin_maps
+
+ for initial in zhuyin_maps.keys():
+ middle_maps = zhuyin_maps[initial]
+ for middle in middle_maps.keys():
+ final_maps = middle_maps[middle]
+ for final in final_maps.keys():
+ tone_maps = final_maps[final]
+ # assume all valid zero tones have sub tones
+ if len(tone_maps) > 0:
+ tone_maps["CHEWING_ZERO_TONE"] = True
+
+
+# check whether the zhuyin is valid
+def is_valid_zhuyin(key):
+ global zhuyin_maps
+ (initial, middle, final, tone) = key
+
+ maps = None
+
+ # handle initial
+ if initial not in zhuyin_maps:
+ return False
+ maps = zhuyin_maps[initial]
+
+ # handle middle
+ if middle not in maps:
+ return False
+ maps = maps[middle]
+
+ # handle final
+ if final not in maps:
+ return False
+ maps = maps[final]
+
+ # handle tone
+ if tone not in maps:
+ return False
+
+ return True
+
+
+# generate valid_zhuyin_table
+def gen_zhuyin_table():
+ global zhuyin_maps
+ chewings = [x[4] for x in content_table]
+
+ entries = []
+ for initial in CHEWING_INITIAL_LIST:
+ for middle in CHEWING_MIDDLE_LIST:
+ for final in CHEWING_FINAL_LIST:
+ zhuyin = ""
+ chewingkey = 'ChewingKey({0}, {1}, {2})'.format(initial, middle, final)
+ try:
+ index = chewings.index(chewingkey)
+ zhuyin = content_table[index][1]
+ except ValueError:
+ zhuyin = chewingkey
+
+ for tone in CHEWING_TONE_LIST:
+ line = ""
+ if tone == "CHEWING_ZERO_TONE":
+ line = "/* {0} */".format(zhuyin) + os.linesep
+
+ key = (initial, middle, final, tone)
+ if is_valid_zhuyin(key):
+ line += "TRUE"
+ else:
+ line += "FALSE"
+ entries.append(line)
+ return ",\n".join(entries)
+
+
+# get zhuyin key
+def get_zhuyin_key(zhuyin):
+ # when bopomofo without tone, it means the first tone
+ tone = "CHEWING_1"
+ last_char = zhuyin[-1]
+ if last_char in CHEWING_ASCII_TONE_MAP:
+ tone = CHEWING_ASCII_TONE_MAP[last_char]
+ zhuyin = zhuyin[:-1]
+ pinyin = ZHUYIN_PINYIN_MAP[zhuyin]
+ (initial, middle, final) = get_chewing(pinyin)
+ return initial, middle, final, tone
+
+
+def load_table(filename):
+ table_file = open(filename, "r")
+ for line in table_file.readlines():
+ line = line.rstrip(os.linesep)
+ (zhuyins, rest) = line.split(None, 1)
+ assert " " not in zhuyins
+
+ for zhuyin in zhuyins.split("'"):
+ #print(zhuyin)
+ key = get_zhuyin_key(zhuyin)
+ #print(key)
+ add_valid_zhuyin(key)
+
+ table_file.close()
+
+# load zhuyin table
+load_table("tsi.table")
+compute_zero_tone()
+#print(zhuyin_maps)
+
+### main function ###
+if __name__ == "__main__":
+ print(gen_zhuyin_table())
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 070218d..fe16a66 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,31 +9,31 @@ set(
)
add_library(
- libpinyin
+ pinyin
SHARED
${LIBPINYIN_SOURCES}
)
target_link_libraries(
- libpinyin
+ pinyin
storage
lookup
)
set_target_properties(
- libpinyin
+ pinyin
PROPERTIES
OUTPUT_NAME
- libpinyin
+ pinyin
VERSION
- 10.0.0
+ 13.0.0
SOVERSION
- 10
+ 13
)
install(
TARGETS
- libpinyin
+ pinyin
LIBRARY DESTINATION
${DIR_LIBRARY}
)
diff --git a/src/Makefile.am b/src/Makefile.am
index c821d04..f2b8f75 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,19 +14,18 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-AUTOMAKE_OPTIONS = gnu
-SUBDIRS = include storage lookup
+AUTOMAKE_OPTIONS = gnu subdir-objects
+SUBDIRS = include storage lookup
-EXTRA_DIST = libpinyin.ver \
- libzhuyin.ver
+EXTRA_DIST = libpinyin.ver libzhuyin.ver
-MAINTAINERCLEANFILES = Makefile.in
+MAINTAINERCLEANFILES = Makefile.in
-CLEANFILES = *.bak
+CLEANFILES = *.bak
-ACLOCAL = aclocal -I $(ac_aux_dir)
+ACLOCAL = aclocal -I $(ac_aux_dir)
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
@@ -40,33 +39,65 @@ if ENABLE_LIBZHUYIN
libpinyininclude_HEADERS += zhuyin.h
endif
+pinyin_SOURCES = \
+ storage/phrase_index.cpp \
+ storage/phrase_large_table2.cpp \
+ storage/phrase_large_table3.cpp \
+ storage/ngram.cpp \
+ storage/tag_utility.cpp \
+ storage/chewing_key.cpp \
+ storage/pinyin_parser2.cpp \
+ storage/zhuyin_parser2.cpp \
+ storage/phonetic_key_matrix.cpp \
+ storage/chewing_large_table.cpp \
+ storage/chewing_large_table2.cpp \
+ storage/table_info.cpp \
+ lookup/pinyin_lookup2.cpp \
+ lookup/phrase_lookup.cpp \
+ lookup/lookup.cpp \
+ lookup/phonetic_lookup.cpp \
+ $(NULL)
+
+if BERKELEYDB
+pinyin_SOURCES += storage/ngram_bdb.cpp \
+ storage/phrase_large_table3_bdb.cpp \
+ storage/chewing_large_table2_bdb.cpp
+endif
+
+if KYOTOCABINET
+pinyin_SOURCES += storage/ngram_kyotodb.cpp \
+ storage/phrase_large_table3_kyotodb.cpp \
+ storage/chewing_large_table2_kyotodb.cpp
+endif
+
+
noinst_HEADERS = pinyin_internal.h
-lib_LTLIBRARIES = libpinyin.la
+lib_LTLIBRARIES = libpinyin.la
-noinst_LTLIBRARIES = libpinyin_internal.la
+noinst_LIBRARIES = libpinyin_internal.a
-libpinyin_la_SOURCES = pinyin.cpp
+libpinyin_la_SOURCES = $(pinyin_SOURCES) pinyin.cpp
-libpinyin_la_LIBADD = storage/libstorage.la lookup/liblookup.la @GLIB2_LIBS@
+libpinyin_la_LIBADD = @GLIB2_LIBS@
-libpinyin_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libpinyin.ver \
+libpinyin_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libpinyin.ver \
-version-info @LT_VERSION_INFO@
if ENABLE_LIBZHUYIN
lib_LTLIBRARIES += libzhuyin.la
-libzhuyin_la_SOURCES = zhuyin.cpp
+libzhuyin_la_SOURCES = $(pinyin_SOURCES) zhuyin.cpp
-libzhuyin_la_LIBADD = storage/libstorage.la lookup/liblookup.la @GLIB2_LIBS@
+libzhuyin_la_LIBADD = @GLIB2_LIBS@
-libzhuyin_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libzhuyin.ver \
+libzhuyin_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libzhuyin.ver \
-version-info @LT_VERSION_INFO@
endif
-libpinyin_internal_la_SOURCES = pinyin_internal.cpp
+libpinyin_internal_a_SOURCES = pinyin_internal.cpp
-libpinyin_internal_la_LIBADD = storage/libstorage.la lookup/liblookup.la
+libpinyin_internal_a_LIBADD = storage/libstorage.a lookup/liblookup.a
## Note:
## As libpinyin internal interface will change, only provides static library
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index 8f9b417..f6c6de3 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -14,11 +14,11 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-MAINTAINERCLEANFILES = Makefile.in
+MAINTAINERCLEANFILES = Makefile.in
libpinyinincludedir = $(includedir)/libpinyin-@VERSION@
libpinyininclude_HEADERS= novel_types.h
-noinst_HEADERS = memory_chunk.h \
- stl_lite.h
+noinst_HEADERS = memory_chunk.h \
+ stl_lite.h
diff --git a/src/lookup/CMakeLists.txt b/src/lookup/CMakeLists.txt
index 937b2cb..767748c 100644
--- a/src/lookup/CMakeLists.txt
+++ b/src/lookup/CMakeLists.txt
@@ -5,6 +5,7 @@ set(
set(
LIBLOOKUP_SOURCES
pinyin_lookup2.cpp
+ phonetic_lookup.cpp
phrase_lookup.cpp
lookup.cpp
)
diff --git a/src/lookup/Makefile.am b/src/lookup/Makefile.am
index 55c1881..75a7ae5 100644
--- a/src/lookup/Makefile.am
+++ b/src/lookup/Makefile.am
@@ -14,27 +14,23 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-MAINTAINERCLEANFILES = Makefile.in
+MAINTAINERCLEANFILES = Makefile.in
-INCLUDES = -I$(top_srcdir)/src/include \
- -I$(top_srcdir)/src/storage \
- @GLIB2_CFLAGS@
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+ -I$(top_srcdir)/src/storage \
+ @GLIB2_CFLAGS@
-noinst_HEADERS = lookup.h \
- pinyin_lookup2.h \
- phrase_lookup.h \
- phonetic_lookup.h \
- phonetic_lookup_linear.h \
- phonetic_lookup_heap.h
+noinst_HEADERS = lookup.h \
+ pinyin_lookup2.h \
+ phrase_lookup.h \
+ phonetic_lookup.h \
+ phonetic_lookup_linear.h \
+ phonetic_lookup_heap.h
-noinst_LTLIBRARIES = liblookup.la
+noinst_LIBRARIES = liblookup.a
-liblookup_la_CXXFLAGS = "-fPIC"
-
-liblookup_la_LDFLAGS = -static
-
-liblookup_la_SOURCES = pinyin_lookup2.cpp \
- phrase_lookup.cpp \
- lookup.cpp \
- phonetic_lookup.cpp
+liblookup_a_SOURCES = pinyin_lookup2.cpp \
+ phrase_lookup.cpp \
+ lookup.cpp \
+ phonetic_lookup.cpp
diff --git a/src/lookup/phonetic_lookup.h b/src/lookup/phonetic_lookup.h
index 845bf90..78fac1b 100644
--- a/src/lookup/phonetic_lookup.h
+++ b/src/lookup/phonetic_lookup.h
@@ -61,11 +61,11 @@ struct trellis_value_t {
}
};
-template <gint32 nbest>
+template <gint32 nstore>
static bool inline trellis_value_less_than(const trellis_value_t * item_lhs,
const trellis_value_t * item_rhs) {
#if 1
- if (nbest > 1) {
+ if (nstore > 1) {
/* allow longer sentence */
if (item_lhs->m_sentence_length + 1 == item_rhs->m_sentence_length &&
item_lhs->m_poss + LONG_SENTENCE_PENALTY < item_rhs->m_poss)
@@ -138,7 +138,7 @@ struct trellis_constraint_t {
/* use maximum heap to get the topest results. */
-template<gint32 nbest>
+template<gint32 nstore>
bool get_top_results(size_t num,
/* out */ GPtrArray * topresults,
/* in */ GPtrArray * candidates) {
@@ -152,13 +152,13 @@ bool get_top_results(size_t num,
trellis_value_t ** end =
(trellis_value_t **) &g_ptr_array_index(candidates, candidates->len);
- std_lite::make_heap(begin, end, trellis_value_less_than<nbest>);
+ std_lite::make_heap(begin, end, trellis_value_less_than<nstore>);
while (end != begin) {
trellis_value_t * one = *begin;
g_ptr_array_add(topresults, one);
- std_lite::pop_heap(begin, end, trellis_value_less_than<nbest>);
+ std_lite::pop_heap(begin, end, trellis_value_less_than<nstore>);
--end;
if (topresults->len >= num)
@@ -176,7 +176,7 @@ static gint trellis_value_compare(const trellis_value_t ** lhs,
return -((*lhs)->m_poss - (*rhs)->m_poss);
}
-template <gint32 nbest>
+template <gint32 nstore, gint32 nbest>
class ForwardPhoneticTrellis {
private:
/* Array of LookupStepIndex */
@@ -233,7 +233,7 @@ public:
/* initialize m_steps_index */
g_ptr_array_index(m_steps_index, i) = g_hash_table_new(g_direct_hash, g_direct_equal);
/* initialize m_steps_content */
- g_ptr_array_index(m_steps_content, i) = g_array_new(FALSE, FALSE, sizeof(trellis_node<nbest>));
+ g_ptr_array_index(m_steps_content, i) = g_array_new(FALSE, FALSE, sizeof(trellis_node<nstore>));
}
return true;
@@ -249,7 +249,7 @@ public:
trellis_value_t initial_value(log(1.f));
initial_value.m_handles[1] = token;
- trellis_node<nbest> initial_node;
+ trellis_node<nstore> initial_node;
assert(initial_node.eval_item(&initial_value));
LookupStepContent initial_step_content = (LookupStepContent)
@@ -267,7 +267,7 @@ public:
return true;
}
- /* Array of trellis_value_t */
+ /* PtrArray of trellis_value_t pointer */
bool get_candidates(/* in */ gint32 index,
/* out */ GPtrArray * candidates) const {
LookupStepContent step = (LookupStepContent)
@@ -279,14 +279,14 @@ public:
return false;
for (size_t i = 0; i < step->len; ++i) {
- trellis_node<nbest> * node = &g_array_index
- (step, trellis_node<nbest>, i);
+ trellis_node<nstore> * node = &g_array_index
+ (step, trellis_node<nstore>, i);
// only initialized in the get_candidates method.
node->number();
const trellis_value_t * value = node->begin();
- for (gint32 j = 0; j < node->length(); ++j) {
+ for (; value < node->end(); ++value) {
g_ptr_array_add(candidates, (trellis_value_t *)value);
}
}
@@ -307,7 +307,7 @@ public:
(step_index, GUINT_TO_POINTER(token), &key, &value);
if (!lookup_result) {
- trellis_node<nbest> node;
+ trellis_node<nstore> node;
assert(node.eval_item(candidate));
g_array_append_val(step_content, node);
@@ -315,8 +315,8 @@ public:
return true;
} else {
size_t node_index = GPOINTER_TO_UINT(value);
- trellis_node<nbest> * node = &g_array_index
- (step_content, trellis_node<nbest>, node_index);
+ trellis_node<nstore> * node = &g_array_index
+ (step_content, trellis_node<nstore>, node_index);
return node->eval_item(candidate);
}
@@ -331,7 +331,7 @@ public:
GPtrArray * candidates = g_ptr_array_new();
get_candidates(tail_index, candidates);
- get_top_results<nbest>(nbest, tails, candidates);
+ get_top_results<nstore>(nbest, tails, candidates);
g_ptr_array_sort(tails, (GCompareFunc)trellis_value_compare);
@@ -353,8 +353,8 @@ public:
return false;
size_t node_index = GPOINTER_TO_UINT(value);
- trellis_node<nbest> * node = &g_array_index
- (step_content, trellis_node<nbest>, node_index);
+ trellis_node<nstore> * node = &g_array_index
+ (step_content, trellis_node<nstore>, node_index);
if (sub_index >= node->length())
return false;
@@ -365,8 +365,8 @@ public:
}
};
-template <gint32 nbest>
-bool extract_result(const ForwardPhoneticTrellis<nbest> * trellis,
+template <gint32 nstore, gint32 nbest>
+bool extract_result(const ForwardPhoneticTrellis<nstore, nbest> * trellis,
const trellis_value_t * tail,
/* out */ MatchResult & result) {
/* reset result */
@@ -396,7 +396,7 @@ bool extract_result(const ForwardPhoneticTrellis<nbest> * trellis,
}
#if 0
-template <gint32 nbest>
+template <gint32 nstore>
class BackwardPhoneticMatrix {
private:
/* Array of matrix_step */
@@ -404,7 +404,7 @@ private:
public:
/* set tail node */
- bool set_tail(const matrix_step<nbest> * tail);
+ bool set_tail(const matrix_step<nstore> * tail);
/* back trace */
/* always assume/assert matrix_step.eval_item(...) return true? */
bool back_trace(const ForwardPhoneticTrellis * trellis);
@@ -511,7 +511,7 @@ public:
}
};
-template <gint32 nbest>
+template <gint32 nstore, gint32 nbest>
class PhoneticLookup {
private:
const gfloat bigram_lambda;
@@ -523,7 +523,7 @@ private:
SingleGram m_merged_single_gram;
protected:
- ForwardPhoneticTrellis<nbest> m_trellis;
+ ForwardPhoneticTrellis<nstore, nbest> m_trellis;
protected:
/* saved varibles */
@@ -711,6 +711,8 @@ public:
: bigram_lambda(lambda),
unigram_lambda(1. - lambda)
{
+ assert(nstore <= nbest);
+
/* store the pointer. */
m_pinyin_table = pinyin_table;
m_phrase_index = phrase_index;
@@ -765,7 +767,7 @@ public:
continue;
m_trellis.get_candidates(i, candidates);
- get_top_results<nbest>(nbeam, topresults, candidates);
+ get_top_results<nstore>(nbeam, topresults, candidates);
if (0 == topresults->len)
continue;
@@ -828,7 +830,7 @@ public:
const trellis_value_t * tail = (const trellis_value_t *)
g_ptr_array_index(tails, i);
- assert(extract_result<nbest>(&m_trellis, tail, result));
+ assert(extract_result<nstore>(&m_trellis, tail, result));
results->add_result(result);
}
diff --git a/src/lookup/phonetic_lookup_heap.h b/src/lookup/phonetic_lookup_heap.h
index 73eac28..310f2b4 100644
--- a/src/lookup/phonetic_lookup_heap.h
+++ b/src/lookup/phonetic_lookup_heap.h
@@ -21,19 +21,19 @@
#ifndef PHONETIC_LOOKUP_HEAP_H
#define PHONETIC_LOOKUP_HEAP_H
-template <gint32 nbest>
+template <gint32 nstore>
static inline bool trellis_value_comp(const trellis_value_t &lhs,
const trellis_value_t &rhs) {
/* min heap here */
- return trellis_value_less_than<nbest>(&lhs, &rhs);
+ return trellis_value_less_than<nstore>(&lhs, &rhs);
}
-template <gint32 nbest>
+template <gint32 nstore>
struct trellis_node {
private:
gint32 m_nelem;
/* invariant: min heap */
- trellis_value_t m_elements[nbest];
+ trellis_value_t m_elements[nstore];
public:
trellis_node(){
@@ -58,11 +58,11 @@ public:
/* min heap here. */
/* still have space */
- if (m_nelem < nbest) {
+ if (m_nelem < nstore) {
m_elements[m_nelem] = *item;
m_nelem ++;
/* always push heap. */
- std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nbest>);
+ std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nstore>);
return true;
}
@@ -70,10 +70,10 @@ public:
trellis_value_t * min = m_elements;
/* compare new item */
- if (trellis_value_less_than<nbest>(min, item)) {
- std_lite::pop_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nbest>);
+ if (trellis_value_less_than<nstore>(min, item)) {
+ std_lite::pop_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nstore>);
m_elements[m_nelem - 1] = *item;
- std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nbest>);
+ std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_comp<nstore>);
return true;
}
diff --git a/src/lookup/phonetic_lookup_linear.h b/src/lookup/phonetic_lookup_linear.h
index 5a9f07b..82cbc56 100644
--- a/src/lookup/phonetic_lookup_linear.h
+++ b/src/lookup/phonetic_lookup_linear.h
@@ -21,11 +21,11 @@
#ifndef PHONETIC_LOOKUP_LINEAR_H
#define PHONETIC_LOOKUP_LINEAR_H
-template <gint32 nbest>
+template <gint32 nstore>
struct trellis_node {
private:
gint32 m_nelem;
- trellis_value_t m_elements[nbest];
+ trellis_value_t m_elements[nstore];
public:
trellis_node(){
@@ -48,7 +48,7 @@ public:
bool eval_item(const trellis_value_t * item) {
/* still have space */
- if (m_nelem < nbest) {
+ if (m_nelem < nstore) {
m_elements[m_nelem] = *item;
m_nelem ++;
return true;
@@ -57,12 +57,12 @@ public:
/* find minium item */
trellis_value_t * min = m_elements;
for (gint32 i = 1; i < m_nelem; ++i) {
- if (trellis_value_less_than<nbest>(m_elements + i, min))
+ if (trellis_value_less_than<nstore>(m_elements + i, min))
min = m_elements + i;
}
/* compare new item */
- if (trellis_value_less_than<nbest>(min, item)) {
+ if (trellis_value_less_than<nstore>(min, item)) {
*min = *item;
return true;
}
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 71acecc..5381fdf 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -29,6 +29,9 @@
using namespace pinyin;
+/* reduce bigram frequency affects on candidates sorting */
+#define BIGRAM_FREQUENCY_DISCOUNT 0.1f
+
/* a glue layer for input method integration. */
typedef GArray * CandidateVector; /* GArray of lookup_candidate_t */
@@ -49,7 +52,7 @@ struct _pinyin_context_t{
Bigram * m_user_bigram;
/* lookups. */
- PhoneticLookup<3> * m_pinyin_lookup;
+ PhoneticLookup<2, 3> * m_pinyin_lookup;
PhraseLookup * m_phrase_lookup;
/* addon tables. */
@@ -367,7 +370,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
gfloat lambda = context->m_system_table_info.get_lambda();
- context->m_pinyin_lookup = new PhoneticLookup<3>
+ context->m_pinyin_lookup = new PhoneticLookup<2, 3>
(lambda,
context->m_pinyin_table, context->m_phrase_index,
context->m_system_bigram, context->m_user_bigram);
@@ -1205,9 +1208,10 @@ bool pinyin_parse_full_pinyin(pinyin_instance_t * instance,
pinyin_context_t * & context = instance->m_context;
pinyin_option_t options = context->m_options;
+ gint16 distance = 0;
int pinyin_len = strlen(onepinyin);
bool retval = context->m_full_pinyin_parser->parse_one_key
- (options, *onekey, onepinyin, pinyin_len);
+ (options, *onekey, distance, onepinyin, pinyin_len);
return retval;
}
@@ -1246,9 +1250,10 @@ bool pinyin_parse_double_pinyin(pinyin_instance_t * instance,
pinyin_context_t * & context = instance->m_context;
pinyin_option_t options = context->m_options;
+ gint16 distance = 0;
int pinyin_len = strlen(onepinyin);
bool retval = context->m_double_pinyin_parser->parse_one_key
- (options, *onekey, onepinyin, pinyin_len);
+ (options, *onekey, distance, onepinyin, pinyin_len);
return retval;
}
@@ -1286,9 +1291,10 @@ bool pinyin_parse_chewing(pinyin_instance_t * instance,
/* disable the zhuyin correction options. */
options &= ~ZHUYIN_CORRECT_ALL;
+ gint16 distance = 0;
int chewing_len = strlen(onechewing);
bool retval = context->m_chewing_parser->parse_one_key
- (options, *onekey, onechewing, chewing_len );
+ (options, *onekey, distance, onechewing, chewing_len );
return retval;
}
@@ -1369,8 +1375,8 @@ static gint compare_item_with_token(gconstpointer lhs,
}
#endif
-static gint compare_item_with_length_and_frequency(gconstpointer lhs,
- gconstpointer rhs) {
+static gint compare_item_with_phrase_length_and_frequency(gconstpointer lhs,
+ gconstpointer rhs) {
lookup_candidate_t * item_lhs = (lookup_candidate_t *)lhs;
lookup_candidate_t * item_rhs = (lookup_candidate_t *)rhs;
@@ -1386,6 +1392,29 @@ static gint compare_item_with_length_and_frequency(gconstpointer lhs,
return -(freq_lhs - freq_rhs); /* in descendant order */
}
+static gint compare_item_with_phrase_length_and_pinyin_length_and_frequency
+(gconstpointer lhs, gconstpointer rhs) {
+ lookup_candidate_t * item_lhs = (lookup_candidate_t *)lhs;
+ lookup_candidate_t * item_rhs = (lookup_candidate_t *)rhs;
+
+ guint8 len_lhs = item_lhs->m_phrase_length;
+ guint8 len_rhs = item_rhs->m_phrase_length;
+
+ if (len_lhs != len_rhs)
+ return -(len_lhs - len_rhs); /* in descendant order */
+
+ len_lhs = item_lhs->m_end - item_lhs->m_begin;
+ len_rhs = item_rhs->m_end - item_rhs->m_begin;
+
+ if (len_lhs != len_rhs)
+ return -(len_lhs - len_rhs); /* in descendant order */
+
+ guint32 freq_lhs = item_lhs->m_freq;
+ guint32 freq_rhs = item_rhs->m_freq;
+
+ return -(freq_lhs - freq_rhs); /* in descendant order */
+}
+
static phrase_token_t _get_previous_token(pinyin_instance_t * instance,
size_t offset) {
pinyin_context_t * context = instance->m_context;
@@ -1521,7 +1550,7 @@ static void _compute_frequency_of_items(pinyin_context_t * context,
assert (0 < total_freq);
/* Note: possibility value <= 1.0. */
- guint32 freq = (lambda * bigram_poss +
+ guint32 freq = (lambda * bigram_poss * BIGRAM_FREQUENCY_DISCOUNT +
(1 - lambda) *
cached_item.get_unigram_frequency() /
(gfloat) total_freq) * 256 * 256 * 256;
@@ -1745,7 +1774,8 @@ static bool _check_offset(PhoneticKeyMatrix & matrix, size_t offset) {
}
bool pinyin_guess_candidates(pinyin_instance_t * instance,
- size_t offset) {
+ size_t offset,
+ sort_option_t sort_option) {
pinyin_context_t * & context = instance->m_context;
pinyin_option_t & options = context->m_options;
@@ -1835,10 +1865,6 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance,
}
context->m_phrase_index->destroy_ranges(ranges);
- if (system_gram)
- delete system_gram;
- if (user_gram)
- delete user_gram;
/* post process to sort the candidates */
@@ -1846,8 +1872,17 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance,
_compute_frequency_of_items(context, prev_token, &merged_gram, candidates);
- /* sort the candidates by length and frequency. */
- g_array_sort(candidates, compare_item_with_length_and_frequency);
+ /* sort the candidates. */
+ switch (sort_option) {
+ case SORT_BY_PHRASE_LENGTH_AND_FREQUENCY:
+ g_array_sort(candidates,
+ compare_item_with_phrase_length_and_frequency);
+ break;
+ case SORT_BY_PHRASE_LENGTH_AND_PINYIN_LENGTH_AND_FREQUENCY:
+ g_array_sort(candidates,
+ compare_item_with_phrase_length_and_pinyin_length_and_frequency);
+ break;
+ }
/* post process to remove duplicated candidates */
@@ -1857,31 +1892,48 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance,
_remove_duplicated_items_by_phrase_string(instance, instance->m_candidates);
+ if (system_gram)
+ delete system_gram;
+ if (user_gram)
+ delete user_gram;
+
return true;
}
bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
const char * prefix) {
- const guint32 filter = 256;
+ const guint32 length = 2;
+ const guint32 filter = 10;
pinyin_context_t * context = instance->m_context;
FacadePhraseIndex * phrase_index = context->m_phrase_index;
CandidateVector candidates = instance->m_candidates;
+ TokenVector prefixes = instance->m_prefixes;
+ phrase_token_t prev_token = null_token;
_free_candidates(candidates);
+ g_array_set_size(instance->m_prefixes, 0);
_compute_prefixes(instance, prefix);
- phrase_token_t prev_token = _get_previous_token(instance, 0);
- if (null_token == prev_token)
+ if (0 == prefixes->len)
return false;
/* merge single gram. */
SingleGram merged_gram;
- SingleGram * system_gram = NULL, * user_gram = NULL;
- context->m_system_bigram->load(prev_token, system_gram);
- context->m_user_bigram->load(prev_token, user_gram);
- merge_single_gram(&merged_gram, system_gram, user_gram);
+ SingleGram * user_gram = NULL;
+ for (gint i = prefixes->len - 1; i >= 0; --i) {
+ prev_token = g_array_index(prefixes, phrase_token_t, i);
+
+ context->m_user_bigram->load(prev_token, user_gram);
+ merge_single_gram(&merged_gram, NULL, user_gram);
+
+ if (merged_gram.get_length())
+ break;
+ }
+
+ if (0 == merged_gram.get_length())
+ return false;
/* retrieve all items. */
BigramPhraseWithCountArray tokens = g_array_new
@@ -1890,7 +1942,7 @@ bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
/* sort the longer word first. */
PhraseItem cached_item;
- for (size_t len = MAX_PHRASE_LENGTH; len > 0; --len) {
+ for (ssize_t len = length; len > 0; --len) {
/* append items. */
for (size_t k = 0; k < tokens->len; ++k){
BigramPhraseItemWithCount * phrase_item = &g_array_index
@@ -1915,19 +1967,14 @@ bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
}
- if (system_gram)
- delete system_gram;
- if (user_gram)
- delete user_gram;
-
/* post process to sort the candidates */
_compute_phrase_length(context, candidates);
_compute_frequency_of_items(context, prev_token, &merged_gram, candidates);
- /* sort the candidates by length and frequency. */
- g_array_sort(candidates, compare_item_with_length_and_frequency);
+ /* sort the candidates by phrase length and frequency. */
+ g_array_sort(candidates, compare_item_with_phrase_length_and_frequency);
/* post process to remove duplicated candidates */
@@ -1935,6 +1982,9 @@ bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
_remove_duplicated_items_by_phrase_string(instance, instance->m_candidates);
+ if (user_gram)
+ delete user_gram;
+
return true;
}
diff --git a/src/pinyin.h b/src/pinyin.h
index 7ebb82f..7cab515 100644
--- a/src/pinyin.h
+++ b/src/pinyin.h
@@ -47,6 +47,11 @@ typedef enum _lookup_candidate_type_t{
ADDON_CANDIDATE,
} lookup_candidate_type_t;
+typedef enum _sort_option_t{
+ SORT_BY_PHRASE_LENGTH_AND_FREQUENCY = 1,
+ SORT_BY_PHRASE_LENGTH_AND_PINYIN_LENGTH_AND_FREQUENCY,
+} sort_option_t;
+
/**
* pinyin_init:
* @systemdir: the system wide language model data directory.
@@ -470,27 +475,15 @@ bool pinyin_in_chewing_keyboard(pinyin_instance_t * instance,
* pinyin_guess_candidates:
* @instance: the pinyin instance.
* @offset: the lookup offset.
+ * @sort_option: the sort option.
* @returns: whether a list of tokens are gotten.
*
* Guess the candidates at the offset.
*
*/
bool pinyin_guess_candidates(pinyin_instance_t * instance,
- size_t offset);
-
-#if 0
-/**
- * pinyin_guess_full_pinyin_candidates:
- * @instance: the pinyin instance.
- * @offset: the offset in the pinyin keys.
- * @returns: whether a list of lookup_candidate_t candidates are gotten.
- *
- * Guess the full pinyin candidates at the offset.
- *
- */
-bool pinyin_guess_full_pinyin_candidates(pinyin_instance_t * instance,
- size_t offset);
-#endif
+ size_t offset,
+ sort_option_t sort_option);
/**
* pinyin_choose_candidate:
@@ -607,20 +600,6 @@ bool pinyin_get_luoma_pinyin_string(pinyin_instance_t * instance,
gchar ** utf8_str);
/**
- * pinyin_get_luoma_pinyin_string:
- * @instance: the pinyin instance.
- * @key: the pinyin key.
- * @utf8_str: the luoma pinyin string.
- * @returns: whether the get operation is successful.
- *
- * Get the luoma pinyin string of the key.
- *
- */
-bool pinyin_get_luoma_pinyin_string(pinyin_instance_t * instance,
- ChewingKey * key,
- gchar ** utf8_str);
-
-/**
* pinyin_get_secondary_zhuyin_string:
* @instance: the pinyin instance.
* @key: the pinyin key.
diff --git a/src/storage/Makefile.am b/src/storage/Makefile.am
index ba9d4f4..b64b9ea 100644
--- a/src/storage/Makefile.am
+++ b/src/storage/Makefile.am
@@ -14,7 +14,7 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-INCLUDES = -I$(top_srcdir)/src/include \
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
@GLIB2_CFLAGS@
@@ -26,7 +26,7 @@ if ENABLE_LIBZHUYIN
libpinyininclude_HEADERS += zhuyin_custom2.h
endif
-noinst_HEADERS = chewing_enum.h \
+noinst_HEADERS = chewing_enum.h \
chewing_key.h \
pinyin_parser2.h \
zhuyin_parser2.h \
@@ -64,13 +64,9 @@ noinst_HEADERS = chewing_enum.h \
kyotodb_utils.h
-noinst_LTLIBRARIES = libstorage.la
+noinst_LIBRARIES = libstorage.a
-libstorage_la_CXXFLAGS = "-fPIC"
-
-libstorage_la_LDFLAGS = -static
-
-libstorage_la_SOURCES = phrase_index.cpp \
+libstorage_a_SOURCES = phrase_index.cpp \
phrase_large_table2.cpp \
phrase_large_table3.cpp \
ngram.cpp \
@@ -84,13 +80,13 @@ libstorage_la_SOURCES = phrase_index.cpp \
table_info.cpp
if BERKELEYDB
-libstorage_la_SOURCES += ngram_bdb.cpp \
+libstorage_a_SOURCES += ngram_bdb.cpp \
phrase_large_table3_bdb.cpp \
chewing_large_table2_bdb.cpp
endif
if KYOTOCABINET
-libstorage_la_SOURCES += ngram_kyotodb.cpp \
+libstorage_a_SOURCES += ngram_kyotodb.cpp \
phrase_large_table3_kyotodb.cpp \
chewing_large_table2_kyotodb.cpp
endif
diff --git a/src/storage/chewing_key.cpp b/src/storage/chewing_key.cpp
index 953b369..102cce5 100644
--- a/src/storage/chewing_key.cpp
+++ b/src/storage/chewing_key.cpp
@@ -35,6 +35,15 @@ gint _ChewingKey::get_table_index() {
return index == -1 ? 0 : index;
}
+bool _ChewingKey::is_valid_zhuyin() {
+ assert(m_initial < CHEWING_NUMBER_OF_INITIALS);
+ assert(m_middle < CHEWING_NUMBER_OF_MIDDLES);
+ assert(m_final < CHEWING_NUMBER_OF_FINALS);
+ assert(m_tone < CHEWING_NUMBER_OF_TONES);
+
+ return valid_zhuyin_table[((m_initial * CHEWING_NUMBER_OF_MIDDLES + m_middle) * CHEWING_NUMBER_OF_FINALS + m_final) * CHEWING_NUMBER_OF_TONES + m_tone];
+}
+
gchar * _ChewingKey::get_pinyin_string() {
assert(m_tone < CHEWING_NUMBER_OF_TONES);
gint index = get_table_index();
diff --git a/src/storage/chewing_key.h b/src/storage/chewing_key.h
index 7faf144..7ec4dfb 100644
--- a/src/storage/chewing_key.h
+++ b/src/storage/chewing_key.h
@@ -65,6 +65,7 @@ struct _ChewingKey
public:
gint get_table_index();
+ bool is_valid_zhuyin();
/* Note: the return value should be freed by g_free. */
gchar * get_pinyin_string();
diff --git a/src/storage/chewing_large_table.cpp b/src/storage/chewing_large_table.cpp
index 8521588..5716c5c 100644
--- a/src/storage/chewing_large_table.cpp
+++ b/src/storage/chewing_large_table.cpp
@@ -669,7 +669,7 @@ bool ChewingLargeTable::load_text(FILE * infile, TABLE_PHONETIC_TYPE type) {
size_t freq;
while (!feof(infile)) {
- int num = fscanf(infile, "%256s %256s %u %ld",
+ int num = fscanf(infile, "%255s %255s %u %ld",
pinyin, phrase, &token, &freq);
if (4 != num)
diff --git a/src/storage/chewing_large_table2.cpp b/src/storage/chewing_large_table2.cpp
index aa34399..194173b 100644
--- a/src/storage/chewing_large_table2.cpp
+++ b/src/storage/chewing_large_table2.cpp
@@ -115,7 +115,7 @@ bool ChewingLargeTable2::load_text(FILE * infile, TABLE_PHONETIC_TYPE type) {
size_t freq;
while (!feof(infile)) {
- int num = fscanf(infile, "%256s %256s %u %ld",
+ int num = fscanf(infile, "%255s %255s %u %ld",
pinyin, phrase, &token, &freq);
if (4 != num)
@@ -149,7 +149,7 @@ bool ChewingLargeTable2::load_text(FILE * infile, TABLE_PHONETIC_TYPE type) {
};
if (len != keys->len) {
- fprintf(stderr, "ChewingLargeTable::load_text:%s\t%s\t%u\t%ld\n",
+ fprintf(stderr, "ChewingLargeTable2::load_text:%s\t%s\t%u\t%ld\n",
pinyin, phrase, token, freq);
continue;
}
diff --git a/src/storage/phrase_index.cpp b/src/storage/phrase_index.cpp
index c4a7286..06b613f 100644
--- a/src/storage/phrase_index.cpp
+++ b/src/storage/phrase_index.cpp
@@ -527,7 +527,7 @@ bool FacadePhraseIndex::load_text(guint8 phrase_index, FILE * infile,
phrase_token_t cur_token = 0;
while (!feof(infile)){
- int num = fscanf(infile, "%256s %256s %u %ld",
+ int num = fscanf(infile, "%255s %255s %u %ld",
pinyin, phrase, &token, &freq);
if (4 != num)
diff --git a/src/storage/phrase_large_table2.cpp b/src/storage/phrase_large_table2.cpp
index 0aa6b95..38dafb3 100644
--- a/src/storage/phrase_large_table2.cpp
+++ b/src/storage/phrase_large_table2.cpp
@@ -472,7 +472,7 @@ bool PhraseLargeTable2::load_text(FILE * infile){
size_t freq;
while (!feof(infile)) {
- int num = fscanf(infile, "%256s %256s %u %ld",
+ int num = fscanf(infile, "%255s %255s %u %ld",
pinyin, phrase, &token, &freq);
if (4 != num)
diff --git a/src/storage/phrase_large_table3.cpp b/src/storage/phrase_large_table3.cpp
index 37e338b..696c612 100644
--- a/src/storage/phrase_large_table3.cpp
+++ b/src/storage/phrase_large_table3.cpp
@@ -128,7 +128,7 @@ bool PhraseLargeTable3::load_text(FILE * infile){
size_t freq;
while (!feof(infile)) {
- int num = fscanf(infile, "%256s %256s %u %ld",
+ int num = fscanf(infile, "%255s %255s %u %ld",
pinyin, phrase, &token, &freq);
if (4 != num)
diff --git a/src/storage/pinyin_custom2.h b/src/storage/pinyin_custom2.h
index fe2e3bd..320e846 100644
--- a/src/storage/pinyin_custom2.h
+++ b/src/storage/pinyin_custom2.h
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
/**
* PinyinTableFlag:
*/
-enum PinyinTableFlag{
+typedef enum{
IS_PINYIN = 1U << 1,
IS_ZHUYIN = 1U << 2,
PINYIN_INCOMPLETE = 1U << 3,
@@ -38,7 +38,7 @@ enum PinyinTableFlag{
USE_DIVIDED_TABLE = 1U << 7,
USE_RESPLIT_TABLE = 1U << 8,
DYNAMIC_ADJUST = 1U << 9
-};
+} PinyinTableFlag;
/**
* PinyinAmbiguity2:
@@ -46,7 +46,7 @@ enum PinyinTableFlag{
* The enums of pinyin ambiguities.
*
*/
-enum PinyinAmbiguity2{
+typedef enum{
PINYIN_AMB_C_CH = 1U << 10,
PINYIN_AMB_S_SH = 1U << 11,
PINYIN_AMB_Z_ZH = 1U << 12,
@@ -58,7 +58,7 @@ enum PinyinAmbiguity2{
PINYIN_AMB_EN_ENG = 1U << 18,
PINYIN_AMB_IN_ING = 1U << 19,
PINYIN_AMB_ALL = 0x3FFU << 10
-};
+} PinyinAmbiguity2;
/**
* PinyinCorrection2:
@@ -67,7 +67,7 @@ enum PinyinAmbiguity2{
*
*/
-enum PinyinCorrection2{
+typedef enum{
PINYIN_CORRECT_GN_NG = 1U << 21,
PINYIN_CORRECT_MG_NG = 1U << 22,
PINYIN_CORRECT_IOU_IU = 1U << 23,
@@ -77,37 +77,35 @@ enum PinyinCorrection2{
PINYIN_CORRECT_V_U = 1U << 27,
PINYIN_CORRECT_ON_ONG = 1U << 28,
PINYIN_CORRECT_ALL = 0xFFU << 21
-};
+} PinyinCorrection2;
/**
- * PinyinCorrection2:
+ * ZhuyinCorrection2:
*
- * The enums of pinyin corrections.
+ * The enums of zhuyin corrections.
*
*/
-enum ZhuyinCorrection2{
+typedef enum{
ZHUYIN_CORRECT_HSU = 1U << 29,
ZHUYIN_CORRECT_ETEN26 = 1U << 30,
ZHUYIN_CORRECT_SHUFFLE = 1U << 31,
ZHUYIN_CORRECT_ALL = 0x7U << 29
-};
+} ZhuyinCorrection2;
/**
* @brief enums of Full Pinyin Schemes.
*/
-enum FullPinyinScheme
-{
+typedef enum{
FULL_PINYIN_HANYU = 1,
FULL_PINYIN_LUOMA = 2,
FULL_PINYIN_SECONDARY_ZHUYIN = 3,
FULL_PINYIN_DEFAULT = FULL_PINYIN_HANYU
-};
+} FullPinyinScheme;
/**
* @brief enums of Double Pinyin Schemes.
*/
-enum DoublePinyinScheme
-{
+typedef enum{
DOUBLE_PINYIN_ZRM = 1,
DOUBLE_PINYIN_MS = 2,
DOUBLE_PINYIN_ZIGUANG = 3,
@@ -116,13 +114,12 @@ enum DoublePinyinScheme
DOUBLE_PINYIN_XHE = 6,
DOUBLE_PINYIN_CUSTOMIZED = 30, /* for user's keyboard */
DOUBLE_PINYIN_DEFAULT = DOUBLE_PINYIN_MS
-};
+} DoublePinyinScheme;
/**
* @brief enums of Zhuyin Schemes.
*/
-enum ZhuyinScheme
-{
+typedef enum{
ZHUYIN_STANDARD = 1,
ZHUYIN_HSU = 2,
ZHUYIN_IBM = 3,
@@ -133,7 +130,7 @@ enum ZhuyinScheme
ZHUYIN_HSU_DVORAK = 8,
ZHUYIN_DACHEN_CP26 = 9,
ZHUYIN_DEFAULT = ZHUYIN_STANDARD
-};
+} ZhuyinScheme;
G_END_DECLS
diff --git a/src/storage/pinyin_custom3.h b/src/storage/pinyin_custom3.h
deleted file mode 100644
index 37e89bb..0000000
--- a/src/storage/pinyin_custom3.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * libpinyin
- * Library to deal with pinyin.
- *
- * Copyright (C) 2016 Peng Wu <alexepico@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include <glib.h>
-
-
-G_BEGIN_DECLS
-
-
-/**
- * PinyinStandardOption: type pinyin_option_t.
- *
- * The enums of pinyin standard option.
- *
- */
-enum PinyinStandardOption{
- IS_PINYIN = 1U << 1,
- IS_ZHUYIN = 1U << 2,
- PINYIN_INCOMPLETE = 1U << 3,
- ZHUYIN_INCOMPLETE = 1U << 4,
- USE_TONE = 1U << 5,
- FORCE_TONE = 1U << 6,
- USE_DIVIDED_TABLE = 1U << 7,
- USE_RESPLIT_TABLE = 1U << 8,
- DYNAMIC_ADJUST = 1U << 9,
- FULL_PINYIN_SUPPORT_QUOTATION = 1U << 10,
-};
-
-/**
- * PinyinFuzzyOption: type pinyin_option_t.
- *
- * The enums of pinyin fuzzy option.
- *
- */
-enum PinyinFuzzyOption{
- PINYIN_FUZZY_C_CH = 1U << 10,
- PINYIN_FUZZY_S_SH = 1U << 11,
- PINYIN_FUZZY_Z_ZH = 1U << 12,
- PINYIN_FUZZY_F_H = 1U << 13,
- PINYIN_FUZZY_G_K = 1U << 14,
- PINYIN_FUZZY_L_N = 1U << 15,
- PINYIN_FUZZY_L_R = 1U << 16,
- PINYIN_FUZZY_AN_ANG = 1U << 17,
- PINYIN_FUZZY_EN_ENG = 1U << 18,
- PINYIN_FUZZY_IN_ING = 1U << 19,
- PINYIN_FUZZY_ALL = 0x3FFU << 10
-};
-
-/**
- * PinyinCorrectOption: type pinyin_option_t.
- *
- * The enums of pinyin correct option.
- *
- */
-enum PinyinCorrectOption{
- PINYIN_CORRECT_GN_NG = 1U << 21,
- PINYIN_CORRECT_MG_NG = 1U << 22,
- PINYIN_CORRECT_IOU_IU = 1U << 23,
- PINYIN_CORRECT_UEI_UI = 1U << 24,
- PINYIN_CORRECT_UEN_UN = 1U << 25,
- PINYIN_CORRECT_UE_VE = 1U << 26,
- PINYIN_CORRECT_V_U = 1U << 27,
- PINYIN_CORRECT_ON_ONG = 1U << 28,
- PINYIN_CORRECT_ALL = 0xFFU << 21,
-};
-
-/**
- * ZhuyinCorrectOption: type pinyin_option_t.
- *
- * The enums of zhuyin correct option.
- *
- */
-enum ZhuyinCorrectOption{
- ZHUYIN_CORRECT_HSU = 1U << 29,
- ZHUYIN_CORRECT_ETEN26 = 1U << 30,
- ZHUYIN_CORRECT_SHUFFLE = 1U << 31,
- ZHUYIN_CORRECT_ALL = 0x7U << 29
-};
-
-/**
- * @brief enums of Full Pinyin Schemes.
- */
-enum FullPinyinScheme
-{
- FULL_PINYIN_HANYU = 1,
- FULL_PINYIN_LUOMA = 2,
- FULL_PINYIN_SECONDARY_BOPOMOFO = 3,
- FULL_PINYIN_DEFAULT = FULL_PINYIN_HANYU
-};
-
-/**
- * @brief enums of Double Pinyin Schemes.
- */
-enum DoublePinyinScheme
-{
- DOUBLE_PINYIN_ZRM = 1,
- DOUBLE_PINYIN_MS = 2,
- DOUBLE_PINYIN_ZIGUANG = 3,
- DOUBLE_PINYIN_ABC = 4,
- DOUBLE_PINYIN_PYJJ = 5,
- DOUBLE_PINYIN_XHE = 6,
- DOUBLE_PINYIN_CUSTOMIZED = 30, /* for user's keyboard */
- DOUBLE_PINYIN_DEFAULT = DOUBLE_PINYIN_MS
-};
-
-/**
- * @brief enums of Zhuyin Schemes.
- */
-enum ZhuyinScheme
-{
- ZHUYIN_STANDARD = 1,
- ZHUYIN_HSU = 2,
- ZHUYIN_IBM = 3,
- ZHUYIN_GINYIEH = 4,
- ZHUYIN_ETEN = 5,
- ZHUYIN_ETEN26 = 6,
- ZHUYIN_STANDARD_DVORAK = 7,
- ZHUYIN_HSU_DVORAK = 8,
- ZHUYIN_DACHEN_CP26 = 9,
- ZHUYIN_DEFAULT = ZHUYIN_STANDARD
-};
-
-
-G_END_DECLS
diff --git a/src/storage/pinyin_parser2.cpp b/src/storage/pinyin_parser2.cpp
index da32455..9e8d2f9 100644
--- a/src/storage/pinyin_parser2.cpp
+++ b/src/storage/pinyin_parser2.cpp
@@ -66,6 +66,7 @@ struct parse_value_t{
ChewingKeyRest m_key_rest;
gint16 m_num_keys;
gint16 m_parsed_len;
+ gint16 m_distance;
gint16 m_last_step;
/* constructor */
@@ -73,6 +74,7 @@ public:
parse_value_t(){
m_num_keys = 0;
m_parsed_len = 0;
+ m_distance = 0;
m_last_step = -1;
}
};
@@ -121,7 +123,8 @@ static inline bool search_pinyin_index2(pinyin_option_t options,
const pinyin_index_item_t * index,
size_t len,
const char * pinyin,
- ChewingKey & key){
+ ChewingKey & key,
+ gint16 & distance){
pinyin_index_item_t item;
memset(&item, 0, sizeof(item));
item.m_pinyin_input = pinyin;
@@ -141,6 +144,7 @@ static inline bool search_pinyin_index2(pinyin_option_t options,
return false;
key = content_table[index->m_table_index].m_chewing_key;
+ distance = index->m_distance;
assert(key.get_table_index() == index->m_table_index);
return true;
}
@@ -159,6 +163,7 @@ FullPinyinParser2::FullPinyinParser2 (){
bool FullPinyinParser2::parse_one_key (pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char * pinyin, int len) const {
/* "'" are not accepted in parse_one_key. */
gchar * input = g_strndup(pinyin, len);
@@ -189,7 +194,7 @@ bool FullPinyinParser2::parse_one_key (pinyin_option_t options,
/* Note: optimize here? */
input[parsed_len] = '\0';
if (!search_pinyin_index2(options, m_pinyin_index, m_pinyin_index_len,
- input, key)) {
+ input, key, distance)) {
g_free(input);
return false;
}
@@ -239,6 +244,7 @@ int FullPinyinParser2::parse (pinyin_option_t options, ChewingKeyVector & keys,
nextstep->m_key_rest = ChewingKeyRest();
nextstep->m_num_keys = curstep->m_num_keys;
nextstep->m_parsed_len = curstep->m_parsed_len + 1;
+ nextstep->m_distance = curstep->m_distance;
nextstep->m_last_step = i;
next_sep = 0;
continue;
@@ -265,13 +271,14 @@ int FullPinyinParser2::parse (pinyin_option_t options, ChewingKeyVector & keys,
nextstep = &g_array_index(m_parse_steps, parse_value_t, n);
/* gen next step */
+ gint16 distance = 0;
const char * onepinyin = input + m;
gint16 onepinyinlen = n - m;
value = parse_value_t();
ChewingKey key; ChewingKeyRest rest;
bool parsed = parse_one_key
- (options, key, onepinyin, onepinyinlen);
+ (options, key, distance, onepinyin, onepinyinlen);
rest.m_raw_begin = m; rest.m_raw_end = n;
if (!parsed)
continue;
@@ -281,6 +288,7 @@ int FullPinyinParser2::parse (pinyin_option_t options, ChewingKeyVector & keys,
value.m_key = key; value.m_key_rest = rest;
value.m_num_keys = curstep->m_num_keys + 1;
value.m_parsed_len = curstep->m_parsed_len + onepinyinlen;
+ value.m_distance = curstep->m_distance + distance;
value.m_last_step = m;
/* save next step */
@@ -297,7 +305,9 @@ int FullPinyinParser2::parse (pinyin_option_t options, ChewingKeyVector & keys,
/* handle with the same pinyin length and the number of keys */
if (value.m_parsed_len == nextstep->m_parsed_len &&
- value.m_num_keys == nextstep->m_num_keys) {
+ value.m_num_keys == nextstep->m_num_keys &&
+ value.m_distance < nextstep->m_distance) {
+ *nextstep = value;
#if 0
/* prefer the 'a' at the end of clause,
@@ -391,6 +401,7 @@ bool FullPinyinParser2::set_scheme(FullPinyinScheme scheme){
bool DoublePinyinParser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char *str, int len) const {
options &= ~(PINYIN_CORRECT_ALL|PINYIN_AMB_ALL);
@@ -537,9 +548,10 @@ int DoublePinyinParser2::parse(pinyin_option_t options, ChewingKeyVector & keys,
i = std_lite::min(maximum_len - parsed_len,
(int)max_double_pinyin_length);
+ gint16 distance = 0;
ChewingKey key; ChewingKeyRest key_rest;
for (; i > 0; --i) {
- bool success = parse_one_key(options, key, cur_str, i);
+ bool success = parse_one_key(options, key, distance, cur_str, i);
if (success)
break;
}
@@ -607,6 +619,7 @@ PinyinDirectParser2::PinyinDirectParser2 (){
bool PinyinDirectParser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char *str, int len) const {
/* "'" are not accepted in parse_one_key. */
gchar * input = g_strndup(str, len);
@@ -637,7 +650,7 @@ bool PinyinDirectParser2::parse_one_key(pinyin_option_t options,
/* Note: optimize here? */
input[parsed_len] = '\0';
if (!search_pinyin_index2(options, m_pinyin_index, m_pinyin_index_len,
- input, key)) {
+ input, key, distance)) {
g_free(input);
return false;
}
@@ -663,8 +676,6 @@ int PinyinDirectParser2::parse(pinyin_option_t options,
g_array_set_size(keys, 0);
g_array_set_size(key_rests, 0);
- ChewingKey key; ChewingKeyRest key_rest;
-
int parsed_len = 0;
int i = 0, cur = 0, next = 0;
while (cur < len) {
@@ -675,7 +686,9 @@ int PinyinDirectParser2::parse(pinyin_option_t options,
}
next = i;
- if (parse_one_key(options, key, str + cur, next - cur)) {
+ gint16 distance = 0;
+ ChewingKey key; ChewingKeyRest key_rest;
+ if (parse_one_key(options, key, distance, str + cur, next - cur)) {
key_rest.m_raw_begin = cur; key_rest.m_raw_end = next;
/* save the pinyin. */
diff --git a/src/storage/pinyin_parser2.h b/src/storage/pinyin_parser2.h
index 4a2f0f2..790c0cb 100644
--- a/src/storage/pinyin_parser2.h
+++ b/src/storage/pinyin_parser2.h
@@ -42,6 +42,7 @@ typedef struct {
const char * m_pinyin_input;
guint32 m_flags;
guint16 m_table_index;
+ guint16 m_distance;
} pinyin_index_item_t;
typedef struct {
@@ -114,7 +115,7 @@ public:
* Parse only one struct ChewingKey from a string.
*
*/
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const = 0;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const = 0;
/**
* PhoneticParser2::parse:
@@ -156,7 +157,7 @@ public:
g_array_free(m_parse_steps, TRUE);
}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
/* Note:
* the parse method will use dynamic programming to drive parse_one_key.
@@ -195,7 +196,7 @@ public:
virtual ~DoublePinyinParser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
@@ -215,7 +216,7 @@ public:
virtual ~PinyinDirectParser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
};
diff --git a/src/storage/pinyin_parser_table.h b/src/storage/pinyin_parser_table.h
index ad8bf7c..031a629 100644
--- a/src/storage/pinyin_parser_table.h
+++ b/src/storage/pinyin_parser_table.h
@@ -7,666 +7,666 @@
namespace pinyin{
const pinyin_index_item_t pinyin_index[] = {
-{"a", IS_ZHUYIN|IS_PINYIN, 1},
-{"agn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 4},
-{"ai", IS_ZHUYIN|IS_PINYIN, 2},
-{"amg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 4},
-{"an", IS_ZHUYIN|IS_PINYIN, 3},
-{"ang", IS_ZHUYIN|IS_PINYIN, 4},
-{"ao", IS_ZHUYIN|IS_PINYIN, 5},
-{"b", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 6},
-{"ba", IS_ZHUYIN|IS_PINYIN, 7},
-{"bagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 10},
-{"bai", IS_ZHUYIN|IS_PINYIN, 8},
-{"bamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 10},
-{"ban", IS_ZHUYIN|IS_PINYIN, 9},
-{"bang", IS_ZHUYIN|IS_PINYIN, 10},
-{"bao", IS_ZHUYIN|IS_PINYIN, 11},
-{"begn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 14},
-{"bei", IS_ZHUYIN|IS_PINYIN, 12},
-{"bemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 14},
-{"ben", IS_ZHUYIN|IS_PINYIN, 13},
-{"beng", IS_ZHUYIN|IS_PINYIN, 14},
-{"bi", IS_ZHUYIN|IS_PINYIN, 15},
-{"bian", IS_ZHUYIN|IS_PINYIN, 16},
-{"biao", IS_ZHUYIN|IS_PINYIN, 17},
-{"bie", IS_ZHUYIN|IS_PINYIN, 18},
-{"bign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 20},
-{"bimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 20},
-{"bin", IS_ZHUYIN|IS_PINYIN, 19},
-{"bing", IS_ZHUYIN|IS_PINYIN, 20},
-{"bo", IS_ZHUYIN|IS_PINYIN, 21},
-{"bu", IS_ZHUYIN|IS_PINYIN, 22},
-{"c", IS_PINYIN|PINYIN_INCOMPLETE, 23},
-{"ca", IS_ZHUYIN|IS_PINYIN, 24},
-{"cagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 27},
-{"cai", IS_ZHUYIN|IS_PINYIN, 25},
-{"camg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 27},
-{"can", IS_ZHUYIN|IS_PINYIN, 26},
-{"cang", IS_ZHUYIN|IS_PINYIN, 27},
-{"cao", IS_ZHUYIN|IS_PINYIN, 28},
-{"ce", IS_ZHUYIN|IS_PINYIN, 29},
-{"cegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 31},
-{"cemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 31},
-{"cen", IS_ZHUYIN|IS_PINYIN, 30},
-{"ceng", IS_ZHUYIN|IS_PINYIN, 31},
-{"ch", IS_PINYIN|PINYIN_INCOMPLETE, 32},
-{"cha", IS_ZHUYIN|IS_PINYIN, 33},
-{"chagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 36},
-{"chai", IS_ZHUYIN|IS_PINYIN, 34},
-{"chamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 36},
-{"chan", IS_ZHUYIN|IS_PINYIN, 35},
-{"chang", IS_ZHUYIN|IS_PINYIN, 36},
-{"chao", IS_ZHUYIN|IS_PINYIN, 37},
-{"che", IS_ZHUYIN|IS_PINYIN, 38},
-{"chegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 40},
-{"chemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 40},
-{"chen", IS_ZHUYIN|IS_PINYIN, 39},
-{"cheng", IS_ZHUYIN|IS_PINYIN, 40},
-{"chi", IS_ZHUYIN|IS_PINYIN, 41},
-{"chogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 42},
-{"chomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 42},
-{"chon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 42},
-{"chong", IS_ZHUYIN|IS_PINYIN, 42},
-{"chou", IS_ZHUYIN|IS_PINYIN, 43},
-{"chu", IS_ZHUYIN|IS_PINYIN, 44},
-{"chuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 48},
-{"chuai", IS_ZHUYIN|IS_PINYIN, 46},
-{"chuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 48},
-{"chuan", IS_ZHUYIN|IS_PINYIN, 47},
-{"chuang", IS_ZHUYIN|IS_PINYIN, 48},
-{"chuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 49},
-{"chuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 50},
-{"chui", IS_ZHUYIN|IS_PINYIN, 49},
-{"chun", IS_ZHUYIN|IS_PINYIN, 50},
-{"chuo", IS_ZHUYIN|IS_PINYIN, 51},
-{"ci", IS_ZHUYIN|IS_PINYIN, 52},
-{"cogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 53},
-{"comg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 53},
-{"con", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 53},
-{"cong", IS_ZHUYIN|IS_PINYIN, 53},
-{"cou", IS_ZHUYIN|IS_PINYIN, 54},
-{"cu", IS_ZHUYIN|IS_PINYIN, 55},
-{"cuan", IS_ZHUYIN|IS_PINYIN, 56},
-{"cuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 57},
-{"cuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 58},
-{"cui", IS_ZHUYIN|IS_PINYIN, 57},
-{"cun", IS_ZHUYIN|IS_PINYIN, 58},
-{"cuo", IS_ZHUYIN|IS_PINYIN, 59},
-{"d", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 60},
-{"da", IS_ZHUYIN|IS_PINYIN, 61},
-{"dagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 64},
-{"dai", IS_ZHUYIN|IS_PINYIN, 62},
-{"damg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 64},
-{"dan", IS_ZHUYIN|IS_PINYIN, 63},
-{"dang", IS_ZHUYIN|IS_PINYIN, 64},
-{"dao", IS_ZHUYIN|IS_PINYIN, 65},
-{"de", IS_ZHUYIN|IS_PINYIN, 66},
-{"degn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 69},
-{"dei", IS_ZHUYIN|IS_PINYIN, 67},
-{"demg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 69},
-{"deng", IS_ZHUYIN|IS_PINYIN, 69},
-{"di", IS_ZHUYIN|IS_PINYIN, 70},
-{"dia", IS_ZHUYIN|IS_PINYIN, 71},
-{"dian", IS_ZHUYIN|IS_PINYIN, 72},
-{"diao", IS_ZHUYIN|IS_PINYIN, 73},
-{"die", IS_ZHUYIN|IS_PINYIN, 74},
-{"dign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 76},
-{"dimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 76},
-{"ding", IS_ZHUYIN|IS_PINYIN, 76},
-{"diou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 77},
-{"diu", IS_ZHUYIN|IS_PINYIN, 77},
-{"dogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 78},
-{"domg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 78},
-{"don", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 78},
-{"dong", IS_ZHUYIN|IS_PINYIN, 78},
-{"dou", IS_ZHUYIN|IS_PINYIN, 79},
-{"du", IS_ZHUYIN|IS_PINYIN, 80},
-{"duan", IS_ZHUYIN|IS_PINYIN, 81},
-{"duei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 82},
-{"duen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 83},
-{"dui", IS_ZHUYIN|IS_PINYIN, 82},
-{"dun", IS_ZHUYIN|IS_PINYIN, 83},
-{"duo", IS_ZHUYIN|IS_PINYIN, 84},
-{"e", IS_ZHUYIN|IS_PINYIN, 85},
-{"egn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 88},
-{"ei", IS_ZHUYIN|IS_PINYIN, 86},
-{"emg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 88},
-{"en", IS_ZHUYIN|IS_PINYIN, 87},
-{"er", IS_ZHUYIN|IS_PINYIN, 89},
-{"f", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 90},
-{"fa", IS_ZHUYIN|IS_PINYIN, 91},
-{"fagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 93},
-{"famg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 93},
-{"fan", IS_ZHUYIN|IS_PINYIN, 92},
-{"fang", IS_ZHUYIN|IS_PINYIN, 93},
-{"fegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 97},
-{"fei", IS_ZHUYIN|IS_PINYIN, 95},
-{"femg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 97},
-{"fen", IS_ZHUYIN|IS_PINYIN, 96},
-{"feng", IS_ZHUYIN|IS_PINYIN, 97},
-{"fo", IS_ZHUYIN|IS_PINYIN, 98},
-{"fou", IS_ZHUYIN|IS_PINYIN, 99},
-{"fu", IS_ZHUYIN|IS_PINYIN, 100},
-{"g", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 101},
-{"ga", IS_ZHUYIN|IS_PINYIN, 102},
-{"gagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 105},
-{"gai", IS_ZHUYIN|IS_PINYIN, 103},
-{"gamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 105},
-{"gan", IS_ZHUYIN|IS_PINYIN, 104},
-{"gang", IS_ZHUYIN|IS_PINYIN, 105},
-{"gao", IS_ZHUYIN|IS_PINYIN, 106},
-{"ge", IS_ZHUYIN|IS_PINYIN, 107},
-{"gegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 110},
-{"gei", IS_ZHUYIN|IS_PINYIN, 108},
-{"gemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 110},
-{"gen", IS_ZHUYIN|IS_PINYIN, 109},
-{"geng", IS_ZHUYIN|IS_PINYIN, 110},
-{"gogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 111},
-{"gomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 111},
-{"gon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 111},
-{"gong", IS_ZHUYIN|IS_PINYIN, 111},
-{"gou", IS_ZHUYIN|IS_PINYIN, 112},
-{"gu", IS_ZHUYIN|IS_PINYIN, 113},
-{"gua", IS_ZHUYIN|IS_PINYIN, 114},
-{"guagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 117},
-{"guai", IS_ZHUYIN|IS_PINYIN, 115},
-{"guamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 117},
-{"guan", IS_ZHUYIN|IS_PINYIN, 116},
-{"guang", IS_ZHUYIN|IS_PINYIN, 117},
-{"guei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 118},
-{"guen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 119},
-{"gui", IS_ZHUYIN|IS_PINYIN, 118},
-{"gun", IS_ZHUYIN|IS_PINYIN, 119},
-{"guo", IS_ZHUYIN|IS_PINYIN, 120},
-{"h", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 121},
-{"ha", IS_ZHUYIN|IS_PINYIN, 122},
-{"hagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 125},
-{"hai", IS_ZHUYIN|IS_PINYIN, 123},
-{"hamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 125},
-{"han", IS_ZHUYIN|IS_PINYIN, 124},
-{"hang", IS_ZHUYIN|IS_PINYIN, 125},
-{"hao", IS_ZHUYIN|IS_PINYIN, 126},
-{"he", IS_ZHUYIN|IS_PINYIN, 127},
-{"hegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 130},
-{"hei", IS_ZHUYIN|IS_PINYIN, 128},
-{"hemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 130},
-{"hen", IS_ZHUYIN|IS_PINYIN, 129},
-{"heng", IS_ZHUYIN|IS_PINYIN, 130},
-{"hogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 131},
-{"homg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 131},
-{"hon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 131},
-{"hong", IS_ZHUYIN|IS_PINYIN, 131},
-{"hou", IS_ZHUYIN|IS_PINYIN, 132},
-{"hu", IS_ZHUYIN|IS_PINYIN, 133},
-{"hua", IS_ZHUYIN|IS_PINYIN, 134},
-{"huagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 137},
-{"huai", IS_ZHUYIN|IS_PINYIN, 135},
-{"huamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 137},
-{"huan", IS_ZHUYIN|IS_PINYIN, 136},
-{"huang", IS_ZHUYIN|IS_PINYIN, 137},
-{"huei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 138},
-{"huen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 139},
-{"hui", IS_ZHUYIN|IS_PINYIN, 138},
-{"hun", IS_ZHUYIN|IS_PINYIN, 139},
-{"huo", IS_ZHUYIN|IS_PINYIN, 140},
-{"j", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 141},
-{"ji", IS_ZHUYIN|IS_PINYIN, 142},
-{"jia", IS_ZHUYIN|IS_PINYIN, 143},
-{"jiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 145},
-{"jiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 145},
-{"jian", IS_ZHUYIN|IS_PINYIN, 144},
-{"jiang", IS_ZHUYIN|IS_PINYIN, 145},
-{"jiao", IS_ZHUYIN|IS_PINYIN, 146},
-{"jie", IS_ZHUYIN|IS_PINYIN, 147},
-{"jign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 149},
-{"jimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 149},
-{"jin", IS_ZHUYIN|IS_PINYIN, 148},
-{"jing", IS_ZHUYIN|IS_PINYIN, 149},
-{"jiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 150},
-{"jiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 150},
-{"jion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 150},
-{"jiong", IS_ZHUYIN|IS_PINYIN, 150},
-{"jiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 151},
-{"jiu", IS_ZHUYIN|IS_PINYIN, 151},
-{"ju", IS_ZHUYIN|IS_PINYIN, 152},
-{"juan", IS_ZHUYIN|IS_PINYIN, 153},
-{"jue", IS_ZHUYIN|IS_PINYIN, 154},
-{"juen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 155},
-{"jun", IS_ZHUYIN|IS_PINYIN, 155},
-{"jv", IS_PINYIN|PINYIN_CORRECT_V_U, 152},
-{"jvan", IS_PINYIN|PINYIN_CORRECT_V_U, 153},
-{"jve", IS_PINYIN|PINYIN_CORRECT_V_U, 154},
-{"jvn", IS_PINYIN|PINYIN_CORRECT_V_U, 155},
-{"k", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 156},
-{"ka", IS_ZHUYIN|IS_PINYIN, 157},
-{"kagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 160},
-{"kai", IS_ZHUYIN|IS_PINYIN, 158},
-{"kamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 160},
-{"kan", IS_ZHUYIN|IS_PINYIN, 159},
-{"kang", IS_ZHUYIN|IS_PINYIN, 160},
-{"kao", IS_ZHUYIN|IS_PINYIN, 161},
-{"ke", IS_ZHUYIN|IS_PINYIN, 162},
-{"kegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 165},
-{"kemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 165},
-{"ken", IS_ZHUYIN|IS_PINYIN, 164},
-{"keng", IS_ZHUYIN|IS_PINYIN, 165},
-{"kogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 166},
-{"komg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 166},
-{"kon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 166},
-{"kong", IS_ZHUYIN|IS_PINYIN, 166},
-{"kou", IS_ZHUYIN|IS_PINYIN, 167},
-{"ku", IS_ZHUYIN|IS_PINYIN, 168},
-{"kua", IS_ZHUYIN|IS_PINYIN, 169},
-{"kuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 172},
-{"kuai", IS_ZHUYIN|IS_PINYIN, 170},
-{"kuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 172},
-{"kuan", IS_ZHUYIN|IS_PINYIN, 171},
-{"kuang", IS_ZHUYIN|IS_PINYIN, 172},
-{"kuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 173},
-{"kuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 174},
-{"kui", IS_ZHUYIN|IS_PINYIN, 173},
-{"kun", IS_ZHUYIN|IS_PINYIN, 174},
-{"kuo", IS_ZHUYIN|IS_PINYIN, 175},
-{"l", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 176},
-{"la", IS_ZHUYIN|IS_PINYIN, 177},
-{"lagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 180},
-{"lai", IS_ZHUYIN|IS_PINYIN, 178},
-{"lamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 180},
-{"lan", IS_ZHUYIN|IS_PINYIN, 179},
-{"lang", IS_ZHUYIN|IS_PINYIN, 180},
-{"lao", IS_ZHUYIN|IS_PINYIN, 181},
-{"le", IS_ZHUYIN|IS_PINYIN, 182},
-{"legn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 185},
-{"lei", IS_ZHUYIN|IS_PINYIN, 183},
-{"lemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 185},
-{"leng", IS_ZHUYIN|IS_PINYIN, 185},
-{"li", IS_ZHUYIN|IS_PINYIN, 186},
-{"lia", IS_ZHUYIN|IS_PINYIN, 187},
-{"liagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 189},
-{"liamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 189},
-{"lian", IS_ZHUYIN|IS_PINYIN, 188},
-{"liang", IS_ZHUYIN|IS_PINYIN, 189},
-{"liao", IS_ZHUYIN|IS_PINYIN, 190},
-{"lie", IS_ZHUYIN|IS_PINYIN, 191},
-{"lign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 193},
-{"limg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 193},
-{"lin", IS_ZHUYIN|IS_PINYIN, 192},
-{"ling", IS_ZHUYIN|IS_PINYIN, 193},
-{"liou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 194},
-{"liu", IS_ZHUYIN|IS_PINYIN, 194},
-{"lo", IS_ZHUYIN|IS_PINYIN, 195},
-{"logn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 196},
-{"lomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 196},
-{"lon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 196},
-{"long", IS_ZHUYIN|IS_PINYIN, 196},
-{"lou", IS_ZHUYIN|IS_PINYIN, 197},
-{"lu", IS_ZHUYIN|IS_PINYIN, 198},
-{"luan", IS_ZHUYIN|IS_PINYIN, 199},
-{"lue", IS_PINYIN|PINYIN_CORRECT_UE_VE, 203},
-{"luen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 200},
-{"lun", IS_ZHUYIN|IS_PINYIN, 200},
-{"luo", IS_ZHUYIN|IS_PINYIN, 201},
-{"lv", IS_ZHUYIN|IS_PINYIN, 202},
-{"lve", IS_ZHUYIN|IS_PINYIN, 203},
-{"m", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 204},
-{"ma", IS_ZHUYIN|IS_PINYIN, 205},
-{"magn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 208},
-{"mai", IS_ZHUYIN|IS_PINYIN, 206},
-{"mamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 208},
-{"man", IS_ZHUYIN|IS_PINYIN, 207},
-{"mang", IS_ZHUYIN|IS_PINYIN, 208},
-{"mao", IS_ZHUYIN|IS_PINYIN, 209},
-{"me", IS_ZHUYIN|IS_PINYIN, 210},
-{"megn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 213},
-{"mei", IS_ZHUYIN|IS_PINYIN, 211},
-{"memg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 213},
-{"men", IS_ZHUYIN|IS_PINYIN, 212},
-{"meng", IS_ZHUYIN|IS_PINYIN, 213},
-{"mi", IS_ZHUYIN|IS_PINYIN, 214},
-{"mian", IS_ZHUYIN|IS_PINYIN, 215},
-{"miao", IS_ZHUYIN|IS_PINYIN, 216},
-{"mie", IS_ZHUYIN|IS_PINYIN, 217},
-{"mign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 219},
-{"mimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 219},
-{"min", IS_ZHUYIN|IS_PINYIN, 218},
-{"ming", IS_ZHUYIN|IS_PINYIN, 219},
-{"miou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 220},
-{"miu", IS_ZHUYIN|IS_PINYIN, 220},
-{"mo", IS_ZHUYIN|IS_PINYIN, 221},
-{"mou", IS_ZHUYIN|IS_PINYIN, 222},
-{"mu", IS_ZHUYIN|IS_PINYIN, 223},
-{"n", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 224},
-{"na", IS_ZHUYIN|IS_PINYIN, 225},
-{"nagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 228},
-{"nai", IS_ZHUYIN|IS_PINYIN, 226},
-{"namg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 228},
-{"nan", IS_ZHUYIN|IS_PINYIN, 227},
-{"nang", IS_ZHUYIN|IS_PINYIN, 228},
-{"nao", IS_ZHUYIN|IS_PINYIN, 229},
-{"ne", IS_ZHUYIN|IS_PINYIN, 230},
-{"negn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 233},
-{"nei", IS_ZHUYIN|IS_PINYIN, 231},
-{"nemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 233},
-{"nen", IS_ZHUYIN|IS_PINYIN, 232},
-{"neng", IS_ZHUYIN|IS_PINYIN, 233},
-{"ng", IS_ZHUYIN|IS_PINYIN, 234},
-{"ni", IS_ZHUYIN|IS_PINYIN, 235},
-{"niagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 238},
-{"niamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 238},
-{"nian", IS_ZHUYIN|IS_PINYIN, 237},
-{"niang", IS_ZHUYIN|IS_PINYIN, 238},
-{"niao", IS_ZHUYIN|IS_PINYIN, 239},
-{"nie", IS_ZHUYIN|IS_PINYIN, 240},
-{"nign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 242},
-{"nimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 242},
-{"nin", IS_ZHUYIN|IS_PINYIN, 241},
-{"ning", IS_ZHUYIN|IS_PINYIN, 242},
-{"niou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 243},
-{"niu", IS_ZHUYIN|IS_PINYIN, 243},
-{"nogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 244},
-{"nomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 244},
-{"non", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 244},
-{"nong", IS_ZHUYIN|IS_PINYIN, 244},
-{"nou", IS_ZHUYIN|IS_PINYIN, 245},
-{"nu", IS_ZHUYIN|IS_PINYIN, 246},
-{"nuan", IS_ZHUYIN|IS_PINYIN, 247},
-{"nue", IS_PINYIN|PINYIN_CORRECT_UE_VE, 251},
-{"nuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 248},
-{"nuo", IS_ZHUYIN|IS_PINYIN, 249},
-{"nv", IS_ZHUYIN|IS_PINYIN, 250},
-{"nve", IS_ZHUYIN|IS_PINYIN, 251},
-{"o", IS_ZHUYIN|IS_PINYIN, 252},
-{"ou", IS_ZHUYIN|IS_PINYIN, 253},
-{"p", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 254},
-{"pa", IS_ZHUYIN|IS_PINYIN, 255},
-{"pagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 258},
-{"pai", IS_ZHUYIN|IS_PINYIN, 256},
-{"pamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 258},
-{"pan", IS_ZHUYIN|IS_PINYIN, 257},
-{"pang", IS_ZHUYIN|IS_PINYIN, 258},
-{"pao", IS_ZHUYIN|IS_PINYIN, 259},
-{"pegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 262},
-{"pei", IS_ZHUYIN|IS_PINYIN, 260},
-{"pemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 262},
-{"pen", IS_ZHUYIN|IS_PINYIN, 261},
-{"peng", IS_ZHUYIN|IS_PINYIN, 262},
-{"pi", IS_ZHUYIN|IS_PINYIN, 263},
-{"pian", IS_ZHUYIN|IS_PINYIN, 264},
-{"piao", IS_ZHUYIN|IS_PINYIN, 265},
-{"pie", IS_ZHUYIN|IS_PINYIN, 266},
-{"pign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 268},
-{"pimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 268},
-{"pin", IS_ZHUYIN|IS_PINYIN, 267},
-{"ping", IS_ZHUYIN|IS_PINYIN, 268},
-{"po", IS_ZHUYIN|IS_PINYIN, 269},
-{"pou", IS_ZHUYIN|IS_PINYIN, 270},
-{"pu", IS_ZHUYIN|IS_PINYIN, 271},
-{"q", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 272},
-{"qi", IS_ZHUYIN|IS_PINYIN, 273},
-{"qia", IS_ZHUYIN|IS_PINYIN, 274},
-{"qiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 276},
-{"qiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 276},
-{"qian", IS_ZHUYIN|IS_PINYIN, 275},
-{"qiang", IS_ZHUYIN|IS_PINYIN, 276},
-{"qiao", IS_ZHUYIN|IS_PINYIN, 277},
-{"qie", IS_ZHUYIN|IS_PINYIN, 278},
-{"qign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 280},
-{"qimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 280},
-{"qin", IS_ZHUYIN|IS_PINYIN, 279},
-{"qing", IS_ZHUYIN|IS_PINYIN, 280},
-{"qiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 281},
-{"qiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 281},
-{"qion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 281},
-{"qiong", IS_ZHUYIN|IS_PINYIN, 281},
-{"qiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 282},
-{"qiu", IS_ZHUYIN|IS_PINYIN, 282},
-{"qu", IS_ZHUYIN|IS_PINYIN, 283},
-{"quan", IS_ZHUYIN|IS_PINYIN, 284},
-{"que", IS_ZHUYIN|IS_PINYIN, 285},
-{"quen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 286},
-{"qun", IS_ZHUYIN|IS_PINYIN, 286},
-{"qv", IS_PINYIN|PINYIN_CORRECT_V_U, 283},
-{"qvan", IS_PINYIN|PINYIN_CORRECT_V_U, 284},
-{"qve", IS_PINYIN|PINYIN_CORRECT_V_U, 285},
-{"qvn", IS_PINYIN|PINYIN_CORRECT_V_U, 286},
-{"r", IS_PINYIN|PINYIN_INCOMPLETE, 287},
-{"ragn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 289},
-{"ramg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 289},
-{"ran", IS_ZHUYIN|IS_PINYIN, 288},
-{"rang", IS_ZHUYIN|IS_PINYIN, 289},
-{"rao", IS_ZHUYIN|IS_PINYIN, 290},
-{"re", IS_ZHUYIN|IS_PINYIN, 291},
-{"regn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 293},
-{"remg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 293},
-{"ren", IS_ZHUYIN|IS_PINYIN, 292},
-{"reng", IS_ZHUYIN|IS_PINYIN, 293},
-{"ri", IS_ZHUYIN|IS_PINYIN, 294},
-{"rogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 295},
-{"romg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 295},
-{"ron", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 295},
-{"rong", IS_ZHUYIN|IS_PINYIN, 295},
-{"rou", IS_ZHUYIN|IS_PINYIN, 296},
-{"ru", IS_ZHUYIN|IS_PINYIN, 297},
-{"ruan", IS_ZHUYIN|IS_PINYIN, 299},
-{"ruei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 300},
-{"ruen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 301},
-{"rui", IS_ZHUYIN|IS_PINYIN, 300},
-{"run", IS_ZHUYIN|IS_PINYIN, 301},
-{"ruo", IS_ZHUYIN|IS_PINYIN, 302},
-{"s", IS_PINYIN|PINYIN_INCOMPLETE, 303},
-{"sa", IS_ZHUYIN|IS_PINYIN, 304},
-{"sagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 307},
-{"sai", IS_ZHUYIN|IS_PINYIN, 305},
-{"samg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 307},
-{"san", IS_ZHUYIN|IS_PINYIN, 306},
-{"sang", IS_ZHUYIN|IS_PINYIN, 307},
-{"sao", IS_ZHUYIN|IS_PINYIN, 308},
-{"se", IS_ZHUYIN|IS_PINYIN, 309},
-{"segn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 311},
-{"semg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 311},
-{"sen", IS_ZHUYIN|IS_PINYIN, 310},
-{"seng", IS_ZHUYIN|IS_PINYIN, 311},
-{"sh", IS_PINYIN|PINYIN_INCOMPLETE, 312},
-{"sha", IS_ZHUYIN|IS_PINYIN, 313},
-{"shagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 316},
-{"shai", IS_ZHUYIN|IS_PINYIN, 314},
-{"shamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 316},
-{"shan", IS_ZHUYIN|IS_PINYIN, 315},
-{"shang", IS_ZHUYIN|IS_PINYIN, 316},
-{"shao", IS_ZHUYIN|IS_PINYIN, 317},
-{"she", IS_ZHUYIN|IS_PINYIN, 318},
-{"shegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 321},
-{"shei", IS_ZHUYIN|IS_PINYIN, 319},
-{"shemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 321},
-{"shen", IS_ZHUYIN|IS_PINYIN, 320},
-{"sheng", IS_ZHUYIN|IS_PINYIN, 321},
-{"shi", IS_ZHUYIN|IS_PINYIN, 322},
-{"shou", IS_ZHUYIN|IS_PINYIN, 323},
-{"shu", IS_ZHUYIN|IS_PINYIN, 324},
-{"shua", IS_ZHUYIN|IS_PINYIN, 325},
-{"shuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 328},
-{"shuai", IS_ZHUYIN|IS_PINYIN, 326},
-{"shuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 328},
-{"shuan", IS_ZHUYIN|IS_PINYIN, 327},
-{"shuang", IS_ZHUYIN|IS_PINYIN, 328},
-{"shuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 329},
-{"shuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 330},
-{"shui", IS_ZHUYIN|IS_PINYIN, 329},
-{"shun", IS_ZHUYIN|IS_PINYIN, 330},
-{"shuo", IS_ZHUYIN|IS_PINYIN, 331},
-{"si", IS_ZHUYIN|IS_PINYIN, 332},
-{"sogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 333},
-{"somg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 333},
-{"son", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 333},
-{"song", IS_ZHUYIN|IS_PINYIN, 333},
-{"sou", IS_ZHUYIN|IS_PINYIN, 334},
-{"su", IS_ZHUYIN|IS_PINYIN, 335},
-{"suan", IS_ZHUYIN|IS_PINYIN, 336},
-{"suei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 337},
-{"suen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 338},
-{"sui", IS_ZHUYIN|IS_PINYIN, 337},
-{"sun", IS_ZHUYIN|IS_PINYIN, 338},
-{"suo", IS_ZHUYIN|IS_PINYIN, 339},
-{"t", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 340},
-{"ta", IS_ZHUYIN|IS_PINYIN, 341},
-{"tagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 344},
-{"tai", IS_ZHUYIN|IS_PINYIN, 342},
-{"tamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 344},
-{"tan", IS_ZHUYIN|IS_PINYIN, 343},
-{"tang", IS_ZHUYIN|IS_PINYIN, 344},
-{"tao", IS_ZHUYIN|IS_PINYIN, 345},
-{"te", IS_ZHUYIN|IS_PINYIN, 346},
-{"tegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 347},
-{"temg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 347},
-{"teng", IS_ZHUYIN|IS_PINYIN, 347},
-{"ti", IS_ZHUYIN|IS_PINYIN, 348},
-{"tian", IS_ZHUYIN|IS_PINYIN, 349},
-{"tiao", IS_ZHUYIN|IS_PINYIN, 350},
-{"tie", IS_ZHUYIN|IS_PINYIN, 351},
-{"tign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 352},
-{"timg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 352},
-{"ting", IS_ZHUYIN|IS_PINYIN, 352},
-{"togn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 353},
-{"tomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 353},
-{"ton", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 353},
-{"tong", IS_ZHUYIN|IS_PINYIN, 353},
-{"tou", IS_ZHUYIN|IS_PINYIN, 354},
-{"tu", IS_ZHUYIN|IS_PINYIN, 355},
-{"tuan", IS_ZHUYIN|IS_PINYIN, 356},
-{"tuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 357},
-{"tuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 358},
-{"tui", IS_ZHUYIN|IS_PINYIN, 357},
-{"tun", IS_ZHUYIN|IS_PINYIN, 358},
-{"tuo", IS_ZHUYIN|IS_PINYIN, 359},
-{"w", IS_PINYIN|PINYIN_INCOMPLETE, 360},
-{"wa", IS_ZHUYIN|IS_PINYIN, 361},
-{"wagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 364},
-{"wai", IS_ZHUYIN|IS_PINYIN, 362},
-{"wamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 364},
-{"wan", IS_ZHUYIN|IS_PINYIN, 363},
-{"wang", IS_ZHUYIN|IS_PINYIN, 364},
-{"wegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 367},
-{"wei", IS_ZHUYIN|IS_PINYIN, 365},
-{"wemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 367},
-{"wen", IS_ZHUYIN|IS_PINYIN, 366},
-{"weng", IS_ZHUYIN|IS_PINYIN, 367},
-{"wo", IS_ZHUYIN|IS_PINYIN, 368},
-{"wu", IS_ZHUYIN|IS_PINYIN, 369},
-{"x", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 370},
-{"xi", IS_ZHUYIN|IS_PINYIN, 371},
-{"xia", IS_ZHUYIN|IS_PINYIN, 372},
-{"xiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 374},
-{"xiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 374},
-{"xian", IS_ZHUYIN|IS_PINYIN, 373},
-{"xiang", IS_ZHUYIN|IS_PINYIN, 374},
-{"xiao", IS_ZHUYIN|IS_PINYIN, 375},
-{"xie", IS_ZHUYIN|IS_PINYIN, 376},
-{"xign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 378},
-{"ximg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 378},
-{"xin", IS_ZHUYIN|IS_PINYIN, 377},
-{"xing", IS_ZHUYIN|IS_PINYIN, 378},
-{"xiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 379},
-{"xiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 379},
-{"xion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 379},
-{"xiong", IS_ZHUYIN|IS_PINYIN, 379},
-{"xiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 380},
-{"xiu", IS_ZHUYIN|IS_PINYIN, 380},
-{"xu", IS_ZHUYIN|IS_PINYIN, 381},
-{"xuan", IS_ZHUYIN|IS_PINYIN, 382},
-{"xue", IS_ZHUYIN|IS_PINYIN, 383},
-{"xuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 384},
-{"xun", IS_ZHUYIN|IS_PINYIN, 384},
-{"xv", IS_PINYIN|PINYIN_CORRECT_V_U, 381},
-{"xvan", IS_PINYIN|PINYIN_CORRECT_V_U, 382},
-{"xve", IS_PINYIN|PINYIN_CORRECT_V_U, 383},
-{"xvn", IS_PINYIN|PINYIN_CORRECT_V_U, 384},
-{"y", IS_PINYIN|PINYIN_INCOMPLETE, 385},
-{"ya", IS_ZHUYIN|IS_PINYIN, 386},
-{"yagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 389},
-{"yamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 389},
-{"yan", IS_ZHUYIN|IS_PINYIN, 388},
-{"yang", IS_ZHUYIN|IS_PINYIN, 389},
-{"yao", IS_ZHUYIN|IS_PINYIN, 390},
-{"ye", IS_ZHUYIN|IS_PINYIN, 391},
-{"yi", IS_ZHUYIN|IS_PINYIN, 392},
-{"yign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 394},
-{"yimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 394},
-{"yin", IS_ZHUYIN|IS_PINYIN, 393},
-{"ying", IS_ZHUYIN|IS_PINYIN, 394},
-{"yo", IS_ZHUYIN|IS_PINYIN, 395},
-{"yogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 396},
-{"yomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 396},
-{"yon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 396},
-{"yong", IS_ZHUYIN|IS_PINYIN, 396},
-{"you", IS_ZHUYIN|IS_PINYIN, 397},
-{"yu", IS_ZHUYIN|IS_PINYIN, 398},
-{"yuan", IS_ZHUYIN|IS_PINYIN, 399},
-{"yue", IS_ZHUYIN|IS_PINYIN, 400},
-{"yuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 401},
-{"yun", IS_ZHUYIN|IS_PINYIN, 401},
-{"yv", IS_PINYIN|PINYIN_CORRECT_V_U, 398},
-{"yvan", IS_PINYIN|PINYIN_CORRECT_V_U, 399},
-{"yve", IS_PINYIN|PINYIN_CORRECT_V_U, 400},
-{"yvn", IS_PINYIN|PINYIN_CORRECT_V_U, 401},
-{"z", IS_PINYIN|PINYIN_INCOMPLETE, 402},
-{"za", IS_ZHUYIN|IS_PINYIN, 403},
-{"zagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 406},
-{"zai", IS_ZHUYIN|IS_PINYIN, 404},
-{"zamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 406},
-{"zan", IS_ZHUYIN|IS_PINYIN, 405},
-{"zang", IS_ZHUYIN|IS_PINYIN, 406},
-{"zao", IS_ZHUYIN|IS_PINYIN, 407},
-{"ze", IS_ZHUYIN|IS_PINYIN, 408},
-{"zegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 411},
-{"zei", IS_ZHUYIN|IS_PINYIN, 409},
-{"zemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 411},
-{"zen", IS_ZHUYIN|IS_PINYIN, 410},
-{"zeng", IS_ZHUYIN|IS_PINYIN, 411},
-{"zh", IS_PINYIN|PINYIN_INCOMPLETE, 412},
-{"zha", IS_ZHUYIN|IS_PINYIN, 413},
-{"zhagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 416},
-{"zhai", IS_ZHUYIN|IS_PINYIN, 414},
-{"zhamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 416},
-{"zhan", IS_ZHUYIN|IS_PINYIN, 415},
-{"zhang", IS_ZHUYIN|IS_PINYIN, 416},
-{"zhao", IS_ZHUYIN|IS_PINYIN, 417},
-{"zhe", IS_ZHUYIN|IS_PINYIN, 418},
-{"zhegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 421},
-{"zhemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 421},
-{"zhen", IS_ZHUYIN|IS_PINYIN, 420},
-{"zheng", IS_ZHUYIN|IS_PINYIN, 421},
-{"zhi", IS_ZHUYIN|IS_PINYIN, 422},
-{"zhogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 423},
-{"zhomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 423},
-{"zhon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 423},
-{"zhong", IS_ZHUYIN|IS_PINYIN, 423},
-{"zhou", IS_ZHUYIN|IS_PINYIN, 424},
-{"zhu", IS_ZHUYIN|IS_PINYIN, 425},
-{"zhua", IS_ZHUYIN|IS_PINYIN, 426},
-{"zhuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 429},
-{"zhuai", IS_ZHUYIN|IS_PINYIN, 427},
-{"zhuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 429},
-{"zhuan", IS_ZHUYIN|IS_PINYIN, 428},
-{"zhuang", IS_ZHUYIN|IS_PINYIN, 429},
-{"zhuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 430},
-{"zhuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 431},
-{"zhui", IS_ZHUYIN|IS_PINYIN, 430},
-{"zhun", IS_ZHUYIN|IS_PINYIN, 431},
-{"zhuo", IS_ZHUYIN|IS_PINYIN, 432},
-{"zi", IS_ZHUYIN|IS_PINYIN, 433},
-{"zogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 434},
-{"zomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 434},
-{"zon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 434},
-{"zong", IS_ZHUYIN|IS_PINYIN, 434},
-{"zou", IS_ZHUYIN|IS_PINYIN, 435},
-{"zu", IS_ZHUYIN|IS_PINYIN, 436},
-{"zuan", IS_ZHUYIN|IS_PINYIN, 437},
-{"zuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 438},
-{"zuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 439},
-{"zui", IS_ZHUYIN|IS_PINYIN, 438},
-{"zun", IS_ZHUYIN|IS_PINYIN, 439},
-{"zuo", IS_ZHUYIN|IS_PINYIN, 440}
+{"a", IS_ZHUYIN|IS_PINYIN, 1, 0},
+{"agn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 4, 1},
+{"ai", IS_ZHUYIN|IS_PINYIN, 2, 0},
+{"amg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 4, 1},
+{"an", IS_ZHUYIN|IS_PINYIN, 3, 0},
+{"ang", IS_ZHUYIN|IS_PINYIN, 4, 0},
+{"ao", IS_ZHUYIN|IS_PINYIN, 5, 0},
+{"b", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 6, 0},
+{"ba", IS_ZHUYIN|IS_PINYIN, 7, 0},
+{"bagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 10, 1},
+{"bai", IS_ZHUYIN|IS_PINYIN, 8, 0},
+{"bamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 10, 1},
+{"ban", IS_ZHUYIN|IS_PINYIN, 9, 0},
+{"bang", IS_ZHUYIN|IS_PINYIN, 10, 0},
+{"bao", IS_ZHUYIN|IS_PINYIN, 11, 0},
+{"begn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 14, 1},
+{"bei", IS_ZHUYIN|IS_PINYIN, 12, 0},
+{"bemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 14, 1},
+{"ben", IS_ZHUYIN|IS_PINYIN, 13, 0},
+{"beng", IS_ZHUYIN|IS_PINYIN, 14, 0},
+{"bi", IS_ZHUYIN|IS_PINYIN, 15, 0},
+{"bian", IS_ZHUYIN|IS_PINYIN, 16, 0},
+{"biao", IS_ZHUYIN|IS_PINYIN, 17, 0},
+{"bie", IS_ZHUYIN|IS_PINYIN, 18, 0},
+{"bign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 20, 1},
+{"bimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 20, 1},
+{"bin", IS_ZHUYIN|IS_PINYIN, 19, 0},
+{"bing", IS_ZHUYIN|IS_PINYIN, 20, 0},
+{"bo", IS_ZHUYIN|IS_PINYIN, 21, 0},
+{"bu", IS_ZHUYIN|IS_PINYIN, 22, 0},
+{"c", IS_PINYIN|PINYIN_INCOMPLETE, 23, 0},
+{"ca", IS_ZHUYIN|IS_PINYIN, 24, 0},
+{"cagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 27, 1},
+{"cai", IS_ZHUYIN|IS_PINYIN, 25, 0},
+{"camg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 27, 1},
+{"can", IS_ZHUYIN|IS_PINYIN, 26, 0},
+{"cang", IS_ZHUYIN|IS_PINYIN, 27, 0},
+{"cao", IS_ZHUYIN|IS_PINYIN, 28, 0},
+{"ce", IS_ZHUYIN|IS_PINYIN, 29, 0},
+{"cegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 31, 1},
+{"cemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 31, 1},
+{"cen", IS_ZHUYIN|IS_PINYIN, 30, 0},
+{"ceng", IS_ZHUYIN|IS_PINYIN, 31, 0},
+{"ch", IS_PINYIN|PINYIN_INCOMPLETE, 32, 0},
+{"cha", IS_ZHUYIN|IS_PINYIN, 33, 0},
+{"chagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 36, 1},
+{"chai", IS_ZHUYIN|IS_PINYIN, 34, 0},
+{"chamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 36, 1},
+{"chan", IS_ZHUYIN|IS_PINYIN, 35, 0},
+{"chang", IS_ZHUYIN|IS_PINYIN, 36, 0},
+{"chao", IS_ZHUYIN|IS_PINYIN, 37, 0},
+{"che", IS_ZHUYIN|IS_PINYIN, 38, 0},
+{"chegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 40, 1},
+{"chemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 40, 1},
+{"chen", IS_ZHUYIN|IS_PINYIN, 39, 0},
+{"cheng", IS_ZHUYIN|IS_PINYIN, 40, 0},
+{"chi", IS_ZHUYIN|IS_PINYIN, 41, 0},
+{"chogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 42, 1},
+{"chomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 42, 1},
+{"chon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 42, 1},
+{"chong", IS_ZHUYIN|IS_PINYIN, 42, 0},
+{"chou", IS_ZHUYIN|IS_PINYIN, 43, 0},
+{"chu", IS_ZHUYIN|IS_PINYIN, 44, 0},
+{"chuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 48, 1},
+{"chuai", IS_ZHUYIN|IS_PINYIN, 46, 0},
+{"chuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 48, 1},
+{"chuan", IS_ZHUYIN|IS_PINYIN, 47, 0},
+{"chuang", IS_ZHUYIN|IS_PINYIN, 48, 0},
+{"chuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 49, 1},
+{"chuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 50, 1},
+{"chui", IS_ZHUYIN|IS_PINYIN, 49, 0},
+{"chun", IS_ZHUYIN|IS_PINYIN, 50, 0},
+{"chuo", IS_ZHUYIN|IS_PINYIN, 51, 0},
+{"ci", IS_ZHUYIN|IS_PINYIN, 52, 0},
+{"cogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 53, 1},
+{"comg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 53, 1},
+{"con", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 53, 1},
+{"cong", IS_ZHUYIN|IS_PINYIN, 53, 0},
+{"cou", IS_ZHUYIN|IS_PINYIN, 54, 0},
+{"cu", IS_ZHUYIN|IS_PINYIN, 55, 0},
+{"cuan", IS_ZHUYIN|IS_PINYIN, 56, 0},
+{"cuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 57, 1},
+{"cuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 58, 1},
+{"cui", IS_ZHUYIN|IS_PINYIN, 57, 0},
+{"cun", IS_ZHUYIN|IS_PINYIN, 58, 0},
+{"cuo", IS_ZHUYIN|IS_PINYIN, 59, 0},
+{"d", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 60, 0},
+{"da", IS_ZHUYIN|IS_PINYIN, 61, 0},
+{"dagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 64, 1},
+{"dai", IS_ZHUYIN|IS_PINYIN, 62, 0},
+{"damg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 64, 1},
+{"dan", IS_ZHUYIN|IS_PINYIN, 63, 0},
+{"dang", IS_ZHUYIN|IS_PINYIN, 64, 0},
+{"dao", IS_ZHUYIN|IS_PINYIN, 65, 0},
+{"de", IS_ZHUYIN|IS_PINYIN, 66, 0},
+{"degn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 69, 1},
+{"dei", IS_ZHUYIN|IS_PINYIN, 67, 0},
+{"demg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 69, 1},
+{"deng", IS_ZHUYIN|IS_PINYIN, 69, 0},
+{"di", IS_ZHUYIN|IS_PINYIN, 70, 0},
+{"dia", IS_ZHUYIN|IS_PINYIN, 71, 0},
+{"dian", IS_ZHUYIN|IS_PINYIN, 72, 0},
+{"diao", IS_ZHUYIN|IS_PINYIN, 73, 0},
+{"die", IS_ZHUYIN|IS_PINYIN, 74, 0},
+{"dign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 76, 1},
+{"dimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 76, 1},
+{"ding", IS_ZHUYIN|IS_PINYIN, 76, 0},
+{"diou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 77, 1},
+{"diu", IS_ZHUYIN|IS_PINYIN, 77, 0},
+{"dogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 78, 1},
+{"domg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 78, 1},
+{"don", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 78, 1},
+{"dong", IS_ZHUYIN|IS_PINYIN, 78, 0},
+{"dou", IS_ZHUYIN|IS_PINYIN, 79, 0},
+{"du", IS_ZHUYIN|IS_PINYIN, 80, 0},
+{"duan", IS_ZHUYIN|IS_PINYIN, 81, 0},
+{"duei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 82, 1},
+{"duen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 83, 1},
+{"dui", IS_ZHUYIN|IS_PINYIN, 82, 0},
+{"dun", IS_ZHUYIN|IS_PINYIN, 83, 0},
+{"duo", IS_ZHUYIN|IS_PINYIN, 84, 0},
+{"e", IS_ZHUYIN|IS_PINYIN, 85, 0},
+{"egn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 88, 1},
+{"ei", IS_ZHUYIN|IS_PINYIN, 86, 0},
+{"emg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 88, 1},
+{"en", IS_ZHUYIN|IS_PINYIN, 87, 0},
+{"er", IS_ZHUYIN|IS_PINYIN, 89, 0},
+{"f", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 90, 0},
+{"fa", IS_ZHUYIN|IS_PINYIN, 91, 0},
+{"fagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 93, 1},
+{"famg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 93, 1},
+{"fan", IS_ZHUYIN|IS_PINYIN, 92, 0},
+{"fang", IS_ZHUYIN|IS_PINYIN, 93, 0},
+{"fegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 97, 1},
+{"fei", IS_ZHUYIN|IS_PINYIN, 95, 0},
+{"femg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 97, 1},
+{"fen", IS_ZHUYIN|IS_PINYIN, 96, 0},
+{"feng", IS_ZHUYIN|IS_PINYIN, 97, 0},
+{"fo", IS_ZHUYIN|IS_PINYIN, 98, 0},
+{"fou", IS_ZHUYIN|IS_PINYIN, 99, 0},
+{"fu", IS_ZHUYIN|IS_PINYIN, 100, 0},
+{"g", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 101, 0},
+{"ga", IS_ZHUYIN|IS_PINYIN, 102, 0},
+{"gagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 105, 1},
+{"gai", IS_ZHUYIN|IS_PINYIN, 103, 0},
+{"gamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 105, 1},
+{"gan", IS_ZHUYIN|IS_PINYIN, 104, 0},
+{"gang", IS_ZHUYIN|IS_PINYIN, 105, 0},
+{"gao", IS_ZHUYIN|IS_PINYIN, 106, 0},
+{"ge", IS_ZHUYIN|IS_PINYIN, 107, 0},
+{"gegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 110, 1},
+{"gei", IS_ZHUYIN|IS_PINYIN, 108, 0},
+{"gemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 110, 1},
+{"gen", IS_ZHUYIN|IS_PINYIN, 109, 0},
+{"geng", IS_ZHUYIN|IS_PINYIN, 110, 0},
+{"gogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 111, 1},
+{"gomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 111, 1},
+{"gon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 111, 1},
+{"gong", IS_ZHUYIN|IS_PINYIN, 111, 0},
+{"gou", IS_ZHUYIN|IS_PINYIN, 112, 0},
+{"gu", IS_ZHUYIN|IS_PINYIN, 113, 0},
+{"gua", IS_ZHUYIN|IS_PINYIN, 114, 0},
+{"guagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 117, 1},
+{"guai", IS_ZHUYIN|IS_PINYIN, 115, 0},
+{"guamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 117, 1},
+{"guan", IS_ZHUYIN|IS_PINYIN, 116, 0},
+{"guang", IS_ZHUYIN|IS_PINYIN, 117, 0},
+{"guei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 118, 1},
+{"guen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 119, 1},
+{"gui", IS_ZHUYIN|IS_PINYIN, 118, 0},
+{"gun", IS_ZHUYIN|IS_PINYIN, 119, 0},
+{"guo", IS_ZHUYIN|IS_PINYIN, 120, 0},
+{"h", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 121, 0},
+{"ha", IS_ZHUYIN|IS_PINYIN, 122, 0},
+{"hagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 125, 1},
+{"hai", IS_ZHUYIN|IS_PINYIN, 123, 0},
+{"hamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 125, 1},
+{"han", IS_ZHUYIN|IS_PINYIN, 124, 0},
+{"hang", IS_ZHUYIN|IS_PINYIN, 125, 0},
+{"hao", IS_ZHUYIN|IS_PINYIN, 126, 0},
+{"he", IS_ZHUYIN|IS_PINYIN, 127, 0},
+{"hegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 130, 1},
+{"hei", IS_ZHUYIN|IS_PINYIN, 128, 0},
+{"hemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 130, 1},
+{"hen", IS_ZHUYIN|IS_PINYIN, 129, 0},
+{"heng", IS_ZHUYIN|IS_PINYIN, 130, 0},
+{"hogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 131, 1},
+{"homg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 131, 1},
+{"hon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 131, 1},
+{"hong", IS_ZHUYIN|IS_PINYIN, 131, 0},
+{"hou", IS_ZHUYIN|IS_PINYIN, 132, 0},
+{"hu", IS_ZHUYIN|IS_PINYIN, 133, 0},
+{"hua", IS_ZHUYIN|IS_PINYIN, 134, 0},
+{"huagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 137, 1},
+{"huai", IS_ZHUYIN|IS_PINYIN, 135, 0},
+{"huamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 137, 1},
+{"huan", IS_ZHUYIN|IS_PINYIN, 136, 0},
+{"huang", IS_ZHUYIN|IS_PINYIN, 137, 0},
+{"huei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 138, 1},
+{"huen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 139, 1},
+{"hui", IS_ZHUYIN|IS_PINYIN, 138, 0},
+{"hun", IS_ZHUYIN|IS_PINYIN, 139, 0},
+{"huo", IS_ZHUYIN|IS_PINYIN, 140, 0},
+{"j", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 141, 0},
+{"ji", IS_ZHUYIN|IS_PINYIN, 142, 0},
+{"jia", IS_ZHUYIN|IS_PINYIN, 143, 0},
+{"jiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 145, 1},
+{"jiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 145, 1},
+{"jian", IS_ZHUYIN|IS_PINYIN, 144, 0},
+{"jiang", IS_ZHUYIN|IS_PINYIN, 145, 0},
+{"jiao", IS_ZHUYIN|IS_PINYIN, 146, 0},
+{"jie", IS_ZHUYIN|IS_PINYIN, 147, 0},
+{"jign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 149, 1},
+{"jimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 149, 1},
+{"jin", IS_ZHUYIN|IS_PINYIN, 148, 0},
+{"jing", IS_ZHUYIN|IS_PINYIN, 149, 0},
+{"jiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 150, 1},
+{"jiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 150, 1},
+{"jion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 150, 1},
+{"jiong", IS_ZHUYIN|IS_PINYIN, 150, 0},
+{"jiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 151, 1},
+{"jiu", IS_ZHUYIN|IS_PINYIN, 151, 0},
+{"ju", IS_ZHUYIN|IS_PINYIN, 152, 0},
+{"juan", IS_ZHUYIN|IS_PINYIN, 153, 0},
+{"jue", IS_ZHUYIN|IS_PINYIN, 154, 0},
+{"juen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 155, 1},
+{"jun", IS_ZHUYIN|IS_PINYIN, 155, 0},
+{"jv", IS_PINYIN|PINYIN_CORRECT_V_U, 152, 1},
+{"jvan", IS_PINYIN|PINYIN_CORRECT_V_U, 153, 1},
+{"jve", IS_PINYIN|PINYIN_CORRECT_V_U, 154, 1},
+{"jvn", IS_PINYIN|PINYIN_CORRECT_V_U, 155, 1},
+{"k", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 156, 0},
+{"ka", IS_ZHUYIN|IS_PINYIN, 157, 0},
+{"kagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 160, 1},
+{"kai", IS_ZHUYIN|IS_PINYIN, 158, 0},
+{"kamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 160, 1},
+{"kan", IS_ZHUYIN|IS_PINYIN, 159, 0},
+{"kang", IS_ZHUYIN|IS_PINYIN, 160, 0},
+{"kao", IS_ZHUYIN|IS_PINYIN, 161, 0},
+{"ke", IS_ZHUYIN|IS_PINYIN, 162, 0},
+{"kegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 165, 1},
+{"kemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 165, 1},
+{"ken", IS_ZHUYIN|IS_PINYIN, 164, 0},
+{"keng", IS_ZHUYIN|IS_PINYIN, 165, 0},
+{"kogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 166, 1},
+{"komg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 166, 1},
+{"kon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 166, 1},
+{"kong", IS_ZHUYIN|IS_PINYIN, 166, 0},
+{"kou", IS_ZHUYIN|IS_PINYIN, 167, 0},
+{"ku", IS_ZHUYIN|IS_PINYIN, 168, 0},
+{"kua", IS_ZHUYIN|IS_PINYIN, 169, 0},
+{"kuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 172, 1},
+{"kuai", IS_ZHUYIN|IS_PINYIN, 170, 0},
+{"kuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 172, 1},
+{"kuan", IS_ZHUYIN|IS_PINYIN, 171, 0},
+{"kuang", IS_ZHUYIN|IS_PINYIN, 172, 0},
+{"kuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 173, 1},
+{"kuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 174, 1},
+{"kui", IS_ZHUYIN|IS_PINYIN, 173, 0},
+{"kun", IS_ZHUYIN|IS_PINYIN, 174, 0},
+{"kuo", IS_ZHUYIN|IS_PINYIN, 175, 0},
+{"l", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 176, 0},
+{"la", IS_ZHUYIN|IS_PINYIN, 177, 0},
+{"lagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 180, 1},
+{"lai", IS_ZHUYIN|IS_PINYIN, 178, 0},
+{"lamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 180, 1},
+{"lan", IS_ZHUYIN|IS_PINYIN, 179, 0},
+{"lang", IS_ZHUYIN|IS_PINYIN, 180, 0},
+{"lao", IS_ZHUYIN|IS_PINYIN, 181, 0},
+{"le", IS_ZHUYIN|IS_PINYIN, 182, 0},
+{"legn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 185, 1},
+{"lei", IS_ZHUYIN|IS_PINYIN, 183, 0},
+{"lemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 185, 1},
+{"leng", IS_ZHUYIN|IS_PINYIN, 185, 0},
+{"li", IS_ZHUYIN|IS_PINYIN, 186, 0},
+{"lia", IS_ZHUYIN|IS_PINYIN, 187, 0},
+{"liagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 189, 1},
+{"liamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 189, 1},
+{"lian", IS_ZHUYIN|IS_PINYIN, 188, 0},
+{"liang", IS_ZHUYIN|IS_PINYIN, 189, 0},
+{"liao", IS_ZHUYIN|IS_PINYIN, 190, 0},
+{"lie", IS_ZHUYIN|IS_PINYIN, 191, 0},
+{"lign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 193, 1},
+{"limg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 193, 1},
+{"lin", IS_ZHUYIN|IS_PINYIN, 192, 0},
+{"ling", IS_ZHUYIN|IS_PINYIN, 193, 0},
+{"liou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 194, 1},
+{"liu", IS_ZHUYIN|IS_PINYIN, 194, 0},
+{"lo", IS_ZHUYIN|IS_PINYIN, 195, 0},
+{"logn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 196, 1},
+{"lomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 196, 1},
+{"lon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 196, 1},
+{"long", IS_ZHUYIN|IS_PINYIN, 196, 0},
+{"lou", IS_ZHUYIN|IS_PINYIN, 197, 0},
+{"lu", IS_ZHUYIN|IS_PINYIN, 198, 0},
+{"luan", IS_ZHUYIN|IS_PINYIN, 199, 0},
+{"lue", IS_PINYIN|PINYIN_CORRECT_UE_VE, 203, 1},
+{"luen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 200, 1},
+{"lun", IS_ZHUYIN|IS_PINYIN, 200, 0},
+{"luo", IS_ZHUYIN|IS_PINYIN, 201, 0},
+{"lv", IS_ZHUYIN|IS_PINYIN, 202, 0},
+{"lve", IS_ZHUYIN|IS_PINYIN, 203, 0},
+{"m", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 204, 0},
+{"ma", IS_ZHUYIN|IS_PINYIN, 205, 0},
+{"magn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 208, 1},
+{"mai", IS_ZHUYIN|IS_PINYIN, 206, 0},
+{"mamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 208, 1},
+{"man", IS_ZHUYIN|IS_PINYIN, 207, 0},
+{"mang", IS_ZHUYIN|IS_PINYIN, 208, 0},
+{"mao", IS_ZHUYIN|IS_PINYIN, 209, 0},
+{"me", IS_ZHUYIN|IS_PINYIN, 210, 0},
+{"megn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 213, 1},
+{"mei", IS_ZHUYIN|IS_PINYIN, 211, 0},
+{"memg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 213, 1},
+{"men", IS_ZHUYIN|IS_PINYIN, 212, 0},
+{"meng", IS_ZHUYIN|IS_PINYIN, 213, 0},
+{"mi", IS_ZHUYIN|IS_PINYIN, 214, 0},
+{"mian", IS_ZHUYIN|IS_PINYIN, 215, 0},
+{"miao", IS_ZHUYIN|IS_PINYIN, 216, 0},
+{"mie", IS_ZHUYIN|IS_PINYIN, 217, 0},
+{"mign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 219, 1},
+{"mimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 219, 1},
+{"min", IS_ZHUYIN|IS_PINYIN, 218, 0},
+{"ming", IS_ZHUYIN|IS_PINYIN, 219, 0},
+{"miou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 220, 1},
+{"miu", IS_ZHUYIN|IS_PINYIN, 220, 0},
+{"mo", IS_ZHUYIN|IS_PINYIN, 221, 0},
+{"mou", IS_ZHUYIN|IS_PINYIN, 222, 0},
+{"mu", IS_ZHUYIN|IS_PINYIN, 223, 0},
+{"n", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 224, 0},
+{"na", IS_ZHUYIN|IS_PINYIN, 225, 0},
+{"nagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 228, 1},
+{"nai", IS_ZHUYIN|IS_PINYIN, 226, 0},
+{"namg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 228, 1},
+{"nan", IS_ZHUYIN|IS_PINYIN, 227, 0},
+{"nang", IS_ZHUYIN|IS_PINYIN, 228, 0},
+{"nao", IS_ZHUYIN|IS_PINYIN, 229, 0},
+{"ne", IS_ZHUYIN|IS_PINYIN, 230, 0},
+{"negn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 233, 1},
+{"nei", IS_ZHUYIN|IS_PINYIN, 231, 0},
+{"nemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 233, 1},
+{"nen", IS_ZHUYIN|IS_PINYIN, 232, 0},
+{"neng", IS_ZHUYIN|IS_PINYIN, 233, 0},
+{"ng", IS_ZHUYIN|IS_PINYIN, 234, 0},
+{"ni", IS_ZHUYIN|IS_PINYIN, 235, 0},
+{"niagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 238, 1},
+{"niamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 238, 1},
+{"nian", IS_ZHUYIN|IS_PINYIN, 237, 0},
+{"niang", IS_ZHUYIN|IS_PINYIN, 238, 0},
+{"niao", IS_ZHUYIN|IS_PINYIN, 239, 0},
+{"nie", IS_ZHUYIN|IS_PINYIN, 240, 0},
+{"nign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 242, 1},
+{"nimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 242, 1},
+{"nin", IS_ZHUYIN|IS_PINYIN, 241, 0},
+{"ning", IS_ZHUYIN|IS_PINYIN, 242, 0},
+{"niou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 243, 1},
+{"niu", IS_ZHUYIN|IS_PINYIN, 243, 0},
+{"nogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 244, 1},
+{"nomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 244, 1},
+{"non", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 244, 1},
+{"nong", IS_ZHUYIN|IS_PINYIN, 244, 0},
+{"nou", IS_ZHUYIN|IS_PINYIN, 245, 0},
+{"nu", IS_ZHUYIN|IS_PINYIN, 246, 0},
+{"nuan", IS_ZHUYIN|IS_PINYIN, 247, 0},
+{"nue", IS_PINYIN|PINYIN_CORRECT_UE_VE, 251, 1},
+{"nuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 248, 1},
+{"nuo", IS_ZHUYIN|IS_PINYIN, 249, 0},
+{"nv", IS_ZHUYIN|IS_PINYIN, 250, 0},
+{"nve", IS_ZHUYIN|IS_PINYIN, 251, 0},
+{"o", IS_ZHUYIN|IS_PINYIN, 252, 0},
+{"ou", IS_ZHUYIN|IS_PINYIN, 253, 0},
+{"p", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 254, 0},
+{"pa", IS_ZHUYIN|IS_PINYIN, 255, 0},
+{"pagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 258, 1},
+{"pai", IS_ZHUYIN|IS_PINYIN, 256, 0},
+{"pamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 258, 1},
+{"pan", IS_ZHUYIN|IS_PINYIN, 257, 0},
+{"pang", IS_ZHUYIN|IS_PINYIN, 258, 0},
+{"pao", IS_ZHUYIN|IS_PINYIN, 259, 0},
+{"pegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 262, 1},
+{"pei", IS_ZHUYIN|IS_PINYIN, 260, 0},
+{"pemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 262, 1},
+{"pen", IS_ZHUYIN|IS_PINYIN, 261, 0},
+{"peng", IS_ZHUYIN|IS_PINYIN, 262, 0},
+{"pi", IS_ZHUYIN|IS_PINYIN, 263, 0},
+{"pian", IS_ZHUYIN|IS_PINYIN, 264, 0},
+{"piao", IS_ZHUYIN|IS_PINYIN, 265, 0},
+{"pie", IS_ZHUYIN|IS_PINYIN, 266, 0},
+{"pign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 268, 1},
+{"pimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 268, 1},
+{"pin", IS_ZHUYIN|IS_PINYIN, 267, 0},
+{"ping", IS_ZHUYIN|IS_PINYIN, 268, 0},
+{"po", IS_ZHUYIN|IS_PINYIN, 269, 0},
+{"pou", IS_ZHUYIN|IS_PINYIN, 270, 0},
+{"pu", IS_ZHUYIN|IS_PINYIN, 271, 0},
+{"q", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 272, 0},
+{"qi", IS_ZHUYIN|IS_PINYIN, 273, 0},
+{"qia", IS_ZHUYIN|IS_PINYIN, 274, 0},
+{"qiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 276, 1},
+{"qiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 276, 1},
+{"qian", IS_ZHUYIN|IS_PINYIN, 275, 0},
+{"qiang", IS_ZHUYIN|IS_PINYIN, 276, 0},
+{"qiao", IS_ZHUYIN|IS_PINYIN, 277, 0},
+{"qie", IS_ZHUYIN|IS_PINYIN, 278, 0},
+{"qign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 280, 1},
+{"qimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 280, 1},
+{"qin", IS_ZHUYIN|IS_PINYIN, 279, 0},
+{"qing", IS_ZHUYIN|IS_PINYIN, 280, 0},
+{"qiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 281, 1},
+{"qiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 281, 1},
+{"qion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 281, 1},
+{"qiong", IS_ZHUYIN|IS_PINYIN, 281, 0},
+{"qiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 282, 1},
+{"qiu", IS_ZHUYIN|IS_PINYIN, 282, 0},
+{"qu", IS_ZHUYIN|IS_PINYIN, 283, 0},
+{"quan", IS_ZHUYIN|IS_PINYIN, 284, 0},
+{"que", IS_ZHUYIN|IS_PINYIN, 285, 0},
+{"quen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 286, 1},
+{"qun", IS_ZHUYIN|IS_PINYIN, 286, 0},
+{"qv", IS_PINYIN|PINYIN_CORRECT_V_U, 283, 1},
+{"qvan", IS_PINYIN|PINYIN_CORRECT_V_U, 284, 1},
+{"qve", IS_PINYIN|PINYIN_CORRECT_V_U, 285, 1},
+{"qvn", IS_PINYIN|PINYIN_CORRECT_V_U, 286, 1},
+{"r", IS_PINYIN|PINYIN_INCOMPLETE, 287, 0},
+{"ragn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 289, 1},
+{"ramg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 289, 1},
+{"ran", IS_ZHUYIN|IS_PINYIN, 288, 0},
+{"rang", IS_ZHUYIN|IS_PINYIN, 289, 0},
+{"rao", IS_ZHUYIN|IS_PINYIN, 290, 0},
+{"re", IS_ZHUYIN|IS_PINYIN, 291, 0},
+{"regn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 293, 1},
+{"remg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 293, 1},
+{"ren", IS_ZHUYIN|IS_PINYIN, 292, 0},
+{"reng", IS_ZHUYIN|IS_PINYIN, 293, 0},
+{"ri", IS_ZHUYIN|IS_PINYIN, 294, 0},
+{"rogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 295, 1},
+{"romg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 295, 1},
+{"ron", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 295, 1},
+{"rong", IS_ZHUYIN|IS_PINYIN, 295, 0},
+{"rou", IS_ZHUYIN|IS_PINYIN, 296, 0},
+{"ru", IS_ZHUYIN|IS_PINYIN, 297, 0},
+{"ruan", IS_ZHUYIN|IS_PINYIN, 299, 0},
+{"ruei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 300, 1},
+{"ruen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 301, 1},
+{"rui", IS_ZHUYIN|IS_PINYIN, 300, 0},
+{"run", IS_ZHUYIN|IS_PINYIN, 301, 0},
+{"ruo", IS_ZHUYIN|IS_PINYIN, 302, 0},
+{"s", IS_PINYIN|PINYIN_INCOMPLETE, 303, 0},
+{"sa", IS_ZHUYIN|IS_PINYIN, 304, 0},
+{"sagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 307, 1},
+{"sai", IS_ZHUYIN|IS_PINYIN, 305, 0},
+{"samg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 307, 1},
+{"san", IS_ZHUYIN|IS_PINYIN, 306, 0},
+{"sang", IS_ZHUYIN|IS_PINYIN, 307, 0},
+{"sao", IS_ZHUYIN|IS_PINYIN, 308, 0},
+{"se", IS_ZHUYIN|IS_PINYIN, 309, 0},
+{"segn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 311, 1},
+{"semg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 311, 1},
+{"sen", IS_ZHUYIN|IS_PINYIN, 310, 0},
+{"seng", IS_ZHUYIN|IS_PINYIN, 311, 0},
+{"sh", IS_PINYIN|PINYIN_INCOMPLETE, 312, 0},
+{"sha", IS_ZHUYIN|IS_PINYIN, 313, 0},
+{"shagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 316, 1},
+{"shai", IS_ZHUYIN|IS_PINYIN, 314, 0},
+{"shamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 316, 1},
+{"shan", IS_ZHUYIN|IS_PINYIN, 315, 0},
+{"shang", IS_ZHUYIN|IS_PINYIN, 316, 0},
+{"shao", IS_ZHUYIN|IS_PINYIN, 317, 0},
+{"she", IS_ZHUYIN|IS_PINYIN, 318, 0},
+{"shegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 321, 1},
+{"shei", IS_ZHUYIN|IS_PINYIN, 319, 0},
+{"shemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 321, 1},
+{"shen", IS_ZHUYIN|IS_PINYIN, 320, 0},
+{"sheng", IS_ZHUYIN|IS_PINYIN, 321, 0},
+{"shi", IS_ZHUYIN|IS_PINYIN, 322, 0},
+{"shou", IS_ZHUYIN|IS_PINYIN, 323, 0},
+{"shu", IS_ZHUYIN|IS_PINYIN, 324, 0},
+{"shua", IS_ZHUYIN|IS_PINYIN, 325, 0},
+{"shuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 328, 1},
+{"shuai", IS_ZHUYIN|IS_PINYIN, 326, 0},
+{"shuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 328, 1},
+{"shuan", IS_ZHUYIN|IS_PINYIN, 327, 0},
+{"shuang", IS_ZHUYIN|IS_PINYIN, 328, 0},
+{"shuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 329, 1},
+{"shuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 330, 1},
+{"shui", IS_ZHUYIN|IS_PINYIN, 329, 0},
+{"shun", IS_ZHUYIN|IS_PINYIN, 330, 0},
+{"shuo", IS_ZHUYIN|IS_PINYIN, 331, 0},
+{"si", IS_ZHUYIN|IS_PINYIN, 332, 0},
+{"sogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 333, 1},
+{"somg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 333, 1},
+{"son", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 333, 1},
+{"song", IS_ZHUYIN|IS_PINYIN, 333, 0},
+{"sou", IS_ZHUYIN|IS_PINYIN, 334, 0},
+{"su", IS_ZHUYIN|IS_PINYIN, 335, 0},
+{"suan", IS_ZHUYIN|IS_PINYIN, 336, 0},
+{"suei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 337, 1},
+{"suen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 338, 1},
+{"sui", IS_ZHUYIN|IS_PINYIN, 337, 0},
+{"sun", IS_ZHUYIN|IS_PINYIN, 338, 0},
+{"suo", IS_ZHUYIN|IS_PINYIN, 339, 0},
+{"t", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 340, 0},
+{"ta", IS_ZHUYIN|IS_PINYIN, 341, 0},
+{"tagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 344, 1},
+{"tai", IS_ZHUYIN|IS_PINYIN, 342, 0},
+{"tamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 344, 1},
+{"tan", IS_ZHUYIN|IS_PINYIN, 343, 0},
+{"tang", IS_ZHUYIN|IS_PINYIN, 344, 0},
+{"tao", IS_ZHUYIN|IS_PINYIN, 345, 0},
+{"te", IS_ZHUYIN|IS_PINYIN, 346, 0},
+{"tegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 347, 1},
+{"temg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 347, 1},
+{"teng", IS_ZHUYIN|IS_PINYIN, 347, 0},
+{"ti", IS_ZHUYIN|IS_PINYIN, 348, 0},
+{"tian", IS_ZHUYIN|IS_PINYIN, 349, 0},
+{"tiao", IS_ZHUYIN|IS_PINYIN, 350, 0},
+{"tie", IS_ZHUYIN|IS_PINYIN, 351, 0},
+{"tign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 352, 1},
+{"timg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 352, 1},
+{"ting", IS_ZHUYIN|IS_PINYIN, 352, 0},
+{"togn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 353, 1},
+{"tomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 353, 1},
+{"ton", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 353, 1},
+{"tong", IS_ZHUYIN|IS_PINYIN, 353, 0},
+{"tou", IS_ZHUYIN|IS_PINYIN, 354, 0},
+{"tu", IS_ZHUYIN|IS_PINYIN, 355, 0},
+{"tuan", IS_ZHUYIN|IS_PINYIN, 356, 0},
+{"tuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 357, 1},
+{"tuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 358, 1},
+{"tui", IS_ZHUYIN|IS_PINYIN, 357, 0},
+{"tun", IS_ZHUYIN|IS_PINYIN, 358, 0},
+{"tuo", IS_ZHUYIN|IS_PINYIN, 359, 0},
+{"w", IS_PINYIN|PINYIN_INCOMPLETE, 360, 0},
+{"wa", IS_ZHUYIN|IS_PINYIN, 361, 0},
+{"wagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 364, 1},
+{"wai", IS_ZHUYIN|IS_PINYIN, 362, 0},
+{"wamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 364, 1},
+{"wan", IS_ZHUYIN|IS_PINYIN, 363, 0},
+{"wang", IS_ZHUYIN|IS_PINYIN, 364, 0},
+{"wegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 367, 1},
+{"wei", IS_ZHUYIN|IS_PINYIN, 365, 0},
+{"wemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 367, 1},
+{"wen", IS_ZHUYIN|IS_PINYIN, 366, 0},
+{"weng", IS_ZHUYIN|IS_PINYIN, 367, 0},
+{"wo", IS_ZHUYIN|IS_PINYIN, 368, 0},
+{"wu", IS_ZHUYIN|IS_PINYIN, 369, 0},
+{"x", IS_ZHUYIN|IS_PINYIN|PINYIN_INCOMPLETE|ZHUYIN_INCOMPLETE, 370, 0},
+{"xi", IS_ZHUYIN|IS_PINYIN, 371, 0},
+{"xia", IS_ZHUYIN|IS_PINYIN, 372, 0},
+{"xiagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 374, 1},
+{"xiamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 374, 1},
+{"xian", IS_ZHUYIN|IS_PINYIN, 373, 0},
+{"xiang", IS_ZHUYIN|IS_PINYIN, 374, 0},
+{"xiao", IS_ZHUYIN|IS_PINYIN, 375, 0},
+{"xie", IS_ZHUYIN|IS_PINYIN, 376, 0},
+{"xign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 378, 1},
+{"ximg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 378, 1},
+{"xin", IS_ZHUYIN|IS_PINYIN, 377, 0},
+{"xing", IS_ZHUYIN|IS_PINYIN, 378, 0},
+{"xiogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 379, 1},
+{"xiomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 379, 1},
+{"xion", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 379, 1},
+{"xiong", IS_ZHUYIN|IS_PINYIN, 379, 0},
+{"xiou", IS_PINYIN|PINYIN_CORRECT_IOU_IU, 380, 1},
+{"xiu", IS_ZHUYIN|IS_PINYIN, 380, 0},
+{"xu", IS_ZHUYIN|IS_PINYIN, 381, 0},
+{"xuan", IS_ZHUYIN|IS_PINYIN, 382, 0},
+{"xue", IS_ZHUYIN|IS_PINYIN, 383, 0},
+{"xuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 384, 1},
+{"xun", IS_ZHUYIN|IS_PINYIN, 384, 0},
+{"xv", IS_PINYIN|PINYIN_CORRECT_V_U, 381, 1},
+{"xvan", IS_PINYIN|PINYIN_CORRECT_V_U, 382, 1},
+{"xve", IS_PINYIN|PINYIN_CORRECT_V_U, 383, 1},
+{"xvn", IS_PINYIN|PINYIN_CORRECT_V_U, 384, 1},
+{"y", IS_PINYIN|PINYIN_INCOMPLETE, 385, 0},
+{"ya", IS_ZHUYIN|IS_PINYIN, 386, 0},
+{"yagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 389, 1},
+{"yamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 389, 1},
+{"yan", IS_ZHUYIN|IS_PINYIN, 388, 0},
+{"yang", IS_ZHUYIN|IS_PINYIN, 389, 0},
+{"yao", IS_ZHUYIN|IS_PINYIN, 390, 0},
+{"ye", IS_ZHUYIN|IS_PINYIN, 391, 0},
+{"yi", IS_ZHUYIN|IS_PINYIN, 392, 0},
+{"yign", IS_PINYIN|PINYIN_CORRECT_GN_NG, 394, 1},
+{"yimg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 394, 1},
+{"yin", IS_ZHUYIN|IS_PINYIN, 393, 0},
+{"ying", IS_ZHUYIN|IS_PINYIN, 394, 0},
+{"yo", IS_ZHUYIN|IS_PINYIN, 395, 0},
+{"yogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 396, 1},
+{"yomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 396, 1},
+{"yon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 396, 1},
+{"yong", IS_ZHUYIN|IS_PINYIN, 396, 0},
+{"you", IS_ZHUYIN|IS_PINYIN, 397, 0},
+{"yu", IS_ZHUYIN|IS_PINYIN, 398, 0},
+{"yuan", IS_ZHUYIN|IS_PINYIN, 399, 0},
+{"yue", IS_ZHUYIN|IS_PINYIN, 400, 0},
+{"yuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 401, 1},
+{"yun", IS_ZHUYIN|IS_PINYIN, 401, 0},
+{"yv", IS_PINYIN|PINYIN_CORRECT_V_U, 398, 1},
+{"yvan", IS_PINYIN|PINYIN_CORRECT_V_U, 399, 1},
+{"yve", IS_PINYIN|PINYIN_CORRECT_V_U, 400, 1},
+{"yvn", IS_PINYIN|PINYIN_CORRECT_V_U, 401, 1},
+{"z", IS_PINYIN|PINYIN_INCOMPLETE, 402, 0},
+{"za", IS_ZHUYIN|IS_PINYIN, 403, 0},
+{"zagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 406, 1},
+{"zai", IS_ZHUYIN|IS_PINYIN, 404, 0},
+{"zamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 406, 1},
+{"zan", IS_ZHUYIN|IS_PINYIN, 405, 0},
+{"zang", IS_ZHUYIN|IS_PINYIN, 406, 0},
+{"zao", IS_ZHUYIN|IS_PINYIN, 407, 0},
+{"ze", IS_ZHUYIN|IS_PINYIN, 408, 0},
+{"zegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 411, 1},
+{"zei", IS_ZHUYIN|IS_PINYIN, 409, 0},
+{"zemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 411, 1},
+{"zen", IS_ZHUYIN|IS_PINYIN, 410, 0},
+{"zeng", IS_ZHUYIN|IS_PINYIN, 411, 0},
+{"zh", IS_PINYIN|PINYIN_INCOMPLETE, 412, 0},
+{"zha", IS_ZHUYIN|IS_PINYIN, 413, 0},
+{"zhagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 416, 1},
+{"zhai", IS_ZHUYIN|IS_PINYIN, 414, 0},
+{"zhamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 416, 1},
+{"zhan", IS_ZHUYIN|IS_PINYIN, 415, 0},
+{"zhang", IS_ZHUYIN|IS_PINYIN, 416, 0},
+{"zhao", IS_ZHUYIN|IS_PINYIN, 417, 0},
+{"zhe", IS_ZHUYIN|IS_PINYIN, 418, 0},
+{"zhegn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 421, 1},
+{"zhemg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 421, 1},
+{"zhen", IS_ZHUYIN|IS_PINYIN, 420, 0},
+{"zheng", IS_ZHUYIN|IS_PINYIN, 421, 0},
+{"zhi", IS_ZHUYIN|IS_PINYIN, 422, 0},
+{"zhogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 423, 1},
+{"zhomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 423, 1},
+{"zhon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 423, 1},
+{"zhong", IS_ZHUYIN|IS_PINYIN, 423, 0},
+{"zhou", IS_ZHUYIN|IS_PINYIN, 424, 0},
+{"zhu", IS_ZHUYIN|IS_PINYIN, 425, 0},
+{"zhua", IS_ZHUYIN|IS_PINYIN, 426, 0},
+{"zhuagn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 429, 1},
+{"zhuai", IS_ZHUYIN|IS_PINYIN, 427, 0},
+{"zhuamg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 429, 1},
+{"zhuan", IS_ZHUYIN|IS_PINYIN, 428, 0},
+{"zhuang", IS_ZHUYIN|IS_PINYIN, 429, 0},
+{"zhuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 430, 1},
+{"zhuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 431, 1},
+{"zhui", IS_ZHUYIN|IS_PINYIN, 430, 0},
+{"zhun", IS_ZHUYIN|IS_PINYIN, 431, 0},
+{"zhuo", IS_ZHUYIN|IS_PINYIN, 432, 0},
+{"zi", IS_ZHUYIN|IS_PINYIN, 433, 0},
+{"zogn", IS_PINYIN|PINYIN_CORRECT_GN_NG, 434, 1},
+{"zomg", IS_PINYIN|PINYIN_CORRECT_MG_NG, 434, 1},
+{"zon", IS_PINYIN|PINYIN_CORRECT_ON_ONG, 434, 1},
+{"zong", IS_ZHUYIN|IS_PINYIN, 434, 0},
+{"zou", IS_ZHUYIN|IS_PINYIN, 435, 0},
+{"zu", IS_ZHUYIN|IS_PINYIN, 436, 0},
+{"zuan", IS_ZHUYIN|IS_PINYIN, 437, 0},
+{"zuei", IS_PINYIN|PINYIN_CORRECT_UEI_UI, 438, 1},
+{"zuen", IS_PINYIN|PINYIN_CORRECT_UEN_UN, 439, 1},
+{"zui", IS_ZHUYIN|IS_PINYIN, 438, 0},
+{"zun", IS_ZHUYIN|IS_PINYIN, 439, 0},
+{"zuo", IS_ZHUYIN|IS_PINYIN, 440, 0}
};
const pinyin_index_item_t luoma_pinyin_index[] = {
diff --git a/src/storage/special_table.h b/src/storage/special_table.h
index e2cb2ab..7916a65 100644
--- a/src/storage/special_table.h
+++ b/src/storage/special_table.h
@@ -7,26 +7,26 @@
namespace pinyin{
const divided_table_item_t divided_table[] = {
-{"bian", ChewingKey(CHEWING_B, CHEWING_I, CHEWING_AN), 182478, {"bi", "an"}, {ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"bie", ChewingKey(CHEWING_B, CHEWING_I, CHEWING_E), 63919, {"bi", "e"}, {ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
-{"dian", ChewingKey(CHEWING_D, CHEWING_I, CHEWING_AN), 179799, {"di", "an"}, {ChewingKey(CHEWING_D, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"jian", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_AN), 435752, {"ji", "an"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 200},
-{"jiang", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ANG), 139834, {"ji", "ang"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_ANG)}, 100},
-{"jie", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_E), 294175, {"ji", "e"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
-{"jue", ChewingKey(CHEWING_J, CHEWING_V, CHEWING_E), 119987, {"ju", "e"}, {ChewingKey(CHEWING_J, CHEWING_V, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
-{"kuai", ChewingKey(CHEWING_K, CHEWING_U, CHEWING_AI), 63367, {"ku", "ai"}, {ChewingKey(CHEWING_K, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AI)}, 100},
-{"lian", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_AN), 130021, {"li", "an"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"liang", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ANG), 185438, {"li", "ang"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_ANG)}, 100},
-{"liao", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_AO), 39355, {"li", "ao"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AO)}, 100},
-{"luan", ChewingKey(CHEWING_L, CHEWING_U, CHEWING_AN), 17609, {"lu", "an"}, {ChewingKey(CHEWING_L, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"qian", ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_AN), 195129, {"qi", "an"}, {ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"qie", ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_E), 70219, {"qi", "e"}, {ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
-{"shuan", ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_AN), 1114, {"shu", "an"}, {ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"tian", ChewingKey(CHEWING_T, CHEWING_I, CHEWING_AN), 185905, {"ti", "an"}, {ChewingKey(CHEWING_T, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"tuan", ChewingKey(CHEWING_T, CHEWING_U, CHEWING_AN), 17287, {"tu", "an"}, {ChewingKey(CHEWING_T, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"xian", ChewingKey(CHEWING_X, CHEWING_I, CHEWING_AN), 280991, {"xi", "an"}, {ChewingKey(CHEWING_X, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 300},
-{"yuan", ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_AN), 280423, {"yu", "an"}, {ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
-{"zuan", ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_AN), 4016, {"zu", "an"}, {ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100}
+{"bian", ChewingKey(CHEWING_B, CHEWING_I, CHEWING_AN), 186355, {"bi", "an"}, {ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"bie", ChewingKey(CHEWING_B, CHEWING_I, CHEWING_E), 64222, {"bi", "e"}, {ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
+{"dian", ChewingKey(CHEWING_D, CHEWING_I, CHEWING_AN), 188221, {"di", "an"}, {ChewingKey(CHEWING_D, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"jian", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_AN), 437479, {"ji", "an"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 200},
+{"jiang", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ANG), 143291, {"ji", "ang"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_ANG)}, 100},
+{"jie", ChewingKey(CHEWING_J, CHEWING_I, CHEWING_E), 296581, {"ji", "e"}, {ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
+{"jue", ChewingKey(CHEWING_J, CHEWING_V, CHEWING_E), 121283, {"ju", "e"}, {ChewingKey(CHEWING_J, CHEWING_V, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
+{"kuai", ChewingKey(CHEWING_K, CHEWING_U, CHEWING_AI), 63850, {"ku", "ai"}, {ChewingKey(CHEWING_K, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AI)}, 100},
+{"lian", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_AN), 130229, {"li", "an"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"liang", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ANG), 185582, {"li", "ang"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_ANG)}, 100},
+{"liao", ChewingKey(CHEWING_L, CHEWING_I, CHEWING_AO), 39576, {"li", "ao"}, {ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AO)}, 100},
+{"luan", ChewingKey(CHEWING_L, CHEWING_U, CHEWING_AN), 17886, {"lu", "an"}, {ChewingKey(CHEWING_L, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"qian", ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_AN), 197450, {"qi", "an"}, {ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"qie", ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_E), 70968, {"qi", "e"}, {ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_E)}, 100},
+{"shuan", ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_AN), 1147, {"shu", "an"}, {ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"tian", ChewingKey(CHEWING_T, CHEWING_I, CHEWING_AN), 187548, {"ti", "an"}, {ChewingKey(CHEWING_T, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"tuan", ChewingKey(CHEWING_T, CHEWING_U, CHEWING_AN), 17753, {"tu", "an"}, {ChewingKey(CHEWING_T, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"xian", ChewingKey(CHEWING_X, CHEWING_I, CHEWING_AN), 293766, {"xi", "an"}, {ChewingKey(CHEWING_X, CHEWING_I, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 300},
+{"yuan", ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_AN), 281173, {"yu", "an"}, {ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100},
+{"zuan", ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_AN), 4795, {"zu", "an"}, {ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_ZERO_FINAL), ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_AN)}, 100}
};
const resplit_table_item_t resplit_table[] = {
diff --git a/src/storage/table_info.cpp b/src/storage/table_info.cpp
index bd9b03f..9fe3865 100644
--- a/src/storage/table_info.cpp
+++ b/src/storage/table_info.cpp
@@ -196,7 +196,7 @@ bool SystemTableInfo2::load(const char * filename) {
TABLE_PHONETIC_TYPE type = PINYIN_TABLE;
char str[256];
- num = fscanf(input, "source table format:%256s", str);
+ num = fscanf(input, "source table format:%255s", str);
type = to_table_phonetic_type(str);
#if 0
@@ -216,7 +216,7 @@ bool SystemTableInfo2::load(const char * filename) {
char tableinfo[256], dictstr[256];
char tablefile[256], sysfile[256], userfile[256], filetype[256];
while (!feof(input)) {
- num = fscanf(input, "%256s %256s %256s %256s %256s %256s\n",
+ num = fscanf(input, "%255s %255s %255s %255s %255s %255s\n",
tableinfo, dictstr, tablefile,
sysfile, userfile, filetype);
diff --git a/src/storage/tag_utility.h b/src/storage/tag_utility.h
index 2e726cd..dd37030 100644
--- a/src/storage/tag_utility.h
+++ b/src/storage/tag_utility.h
@@ -143,7 +143,7 @@ bool taglib_validate_token_with_string(FacadePhraseIndex * phrase_index,
/* Note: the following function is only available when the optional tag exists.
bool taglib_report_status(int line_type); */
-/* Note: taglib_write is omited, as printf is more suitable for this. */
+/* Note: taglib_write is omitted, as printf is more suitable for this. */
};
diff --git a/src/storage/zhuyin_parser2.cpp b/src/storage/zhuyin_parser2.cpp
index 9ae7fbd..e711b76 100644
--- a/src/storage/zhuyin_parser2.cpp
+++ b/src/storage/zhuyin_parser2.cpp
@@ -160,6 +160,7 @@ static int search_chewing_symbols2(const zhuyin_symbol_item_t * symbol_table,
bool ZhuyinSimpleParser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char * str, int len) const {
options &= ~PINYIN_AMB_ALL;
unsigned char tone = CHEWING_ZERO_TONE;
@@ -240,9 +241,10 @@ int ZhuyinSimpleParser2::parse(pinyin_option_t options,
i = std_lite::min(maximum_len - parsed_len,
(int)max_chewing_length);
+ gint16 distance = 0;
ChewingKey key; ChewingKeyRest key_rest;
for (; i > 0; --i) {
- bool success = parse_one_key(options, key, cur_str, i);
+ bool success = parse_one_key(options, key, distance, cur_str, i);
if (success)
break;
}
@@ -250,6 +252,9 @@ int ZhuyinSimpleParser2::parse(pinyin_option_t options,
if (0 == i) /* no more possible chewings. */
break;
+ if (!key.is_valid_zhuyin())
+ break;
+
key_rest.m_raw_begin = parsed_len; key_rest.m_raw_end = parsed_len + i;
parsed_len += i;
@@ -328,6 +333,7 @@ bool ZhuyinSimpleParser2::in_chewing_scheme(pinyin_option_t options,
bool ZhuyinDiscreteParser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char * str, int len) const {
if (0 == len)
return false;
@@ -427,9 +433,10 @@ int ZhuyinDiscreteParser2::parse(pinyin_option_t options,
i = std_lite::min(maximum_len - parsed_len,
(int)max_chewing_length);
+ gint16 distance = 0;
ChewingKey key; ChewingKeyRest key_rest;
for (; i > 0; --i) {
- bool success = parse_one_key(options, key, cur_str, i);
+ bool success = parse_one_key(options, key, distance, cur_str, i);
if (success)
break;
}
@@ -437,6 +444,9 @@ int ZhuyinDiscreteParser2::parse(pinyin_option_t options,
if (0 == i) /* no more possible chewings. */
break;
+ if (!key.is_valid_zhuyin())
+ break;
+
key_rest.m_raw_begin = parsed_len; key_rest.m_raw_end = parsed_len + i;
parsed_len += i;
@@ -561,6 +571,7 @@ static int count_same_chars(const char * str, int len) {
bool ZhuyinDaChenCP26Parser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char *str, int len) const {
if (0 == len)
return false;
@@ -725,15 +736,16 @@ int ZhuyinDaChenCP26Parser2::parse(pinyin_option_t options,
/* maximum forward match for chewing. */
int parsed_len = 0;
const char * cur_str = NULL;
- ChewingKey key; ChewingKeyRest key_rest;
while (parsed_len < maximum_len) {
cur_str = str + parsed_len;
i = std_lite::min(maximum_len - parsed_len,
(int)max_chewing_dachen26_length);
+ gint16 distance = 0;
+ ChewingKey key; ChewingKeyRest key_rest;
for (; i > 0; --i) {
- bool success = parse_one_key(options, key, cur_str, i);
+ bool success = parse_one_key(options, key, distance, cur_str, i);
if (success)
break;
}
@@ -741,6 +753,9 @@ int ZhuyinDaChenCP26Parser2::parse(pinyin_option_t options,
if (0 == i) /* no more possible chewings. */
break;
+ if (!key.is_valid_zhuyin())
+ break;
+
key_rest.m_raw_begin = parsed_len; key_rest.m_raw_end = parsed_len + i;
parsed_len += i;
@@ -762,6 +777,9 @@ int ZhuyinDaChenCP26Parser2::parse(pinyin_option_t options,
break;
}
+ if (!key.is_valid_zhuyin())
+ return parsed_len;
+
if (i > 0) { /* found one */
key_rest.m_raw_begin = parsed_len; key_rest.m_raw_end = parsed_len + i;
parsed_len += i;
@@ -839,6 +857,7 @@ ZhuyinDirectParser2::ZhuyinDirectParser2 (){
bool ZhuyinDirectParser2::parse_one_key(pinyin_option_t options,
ChewingKey & key,
+ gint16 & distance,
const char *str, int len) const {
options &= ~PINYIN_AMB_ALL;
/* by default, chewing will use the first tone. */
@@ -898,8 +917,6 @@ int ZhuyinDirectParser2::parse(pinyin_option_t options,
g_array_set_size(keys, 0);
g_array_set_size(key_rests, 0);
- ChewingKey key; ChewingKeyRest key_rest;
-
int parsed_len = 0;
int i = 0, cur = 0, next = 0;
while (cur < len) {
@@ -910,7 +927,16 @@ int ZhuyinDirectParser2::parse(pinyin_option_t options,
}
next = i;
- if (parse_one_key(options, key, str + cur, next - cur)) {
+ gint16 distance = 0;
+ ChewingKey key; ChewingKeyRest key_rest;
+ if (parse_one_key(options, key, distance, str + cur, next - cur)) {
+#if 0
+ /* as direct parser handles data source,
+ assume the data is correct when loading. */
+ if (!key.is_valid_zhuyin())
+ return parsed_len;
+#endif
+
key_rest.m_raw_begin = cur; key_rest.m_raw_end = next;
/* save the pinyin. */
diff --git a/src/storage/zhuyin_parser2.h b/src/storage/zhuyin_parser2.h
index 45af804..8a9c550 100644
--- a/src/storage/zhuyin_parser2.h
+++ b/src/storage/zhuyin_parser2.h
@@ -98,7 +98,7 @@ public:
virtual ~ZhuyinSimpleParser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
@@ -142,7 +142,7 @@ public:
virtual ~ZhuyinDiscreteParser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
@@ -167,7 +167,7 @@ public:
virtual ~ZhuyinDaChenCP26Parser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
@@ -187,7 +187,7 @@ public:
virtual ~ZhuyinDirectParser2() {}
- virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, const char *str, int len) const;
+ virtual bool parse_one_key(pinyin_option_t options, ChewingKey & key, gint16 & distance, const char *str, int len) const;
virtual int parse(pinyin_option_t options, ChewingKeyVector & keys, ChewingKeyRestVector & key_rests, const char *str, int len) const;
};
diff --git a/src/storage/zhuyin_table.h b/src/storage/zhuyin_table.h
index cde77bf..d096901 100644
--- a/src/storage/zhuyin_table.h
+++ b/src/storage/zhuyin_table.h
@@ -488,6 +488,12108 @@ const zhuyin_tone_item_t chewing_dachen_cp26_tones[] = {
{'\0', 0}
};
+const bool valid_zhuyin_table[CHEWING_NUMBER_OF_INITIALS *
+ CHEWING_NUMBER_OF_MIDDLES *
+ CHEWING_NUMBER_OF_FINALS *
+ CHEWING_NUMBER_OF_TONES] = {
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄜ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄟ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄥ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄦ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄫ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZERO_INITIAL, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄅㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄅㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄧㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄧㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄧㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄧㄠ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄅㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄅㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_B, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄜ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄣ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄨㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄡ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄨ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄨㄢ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄘㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄘㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_C, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄜ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄨㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄔㄨㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄔㄨㄞ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄨㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄔㄨㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄔㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄔㄨㄛ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_CH, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄉㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄉㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄜ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+/* ChewingKey(CHEWING_D, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄟ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄉㄣ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄉㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄧㄣ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄧㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄉㄧㄚ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄧㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄧㄠ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_D, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄧㄡ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄨㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄉㄨㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄉㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_D, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_D, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄈㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄜ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄈㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄈㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄛ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄈㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_F, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄏㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄜ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄏㄣ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄥ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄨㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄨㄚ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄏㄨㄞ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄏㄨㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄨㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄏㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄏㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_H, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_H, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄍㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄠ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄜ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄟ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄍㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄍㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄨㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄨㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄨㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄨㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄍㄨㄣ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄍㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_G, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_G, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄠ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄜ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄟ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄣ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄨ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄨㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄨㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄎㄨㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄎㄨㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄎㄨㄛ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_K, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄧㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄧㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_J, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄩㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄐㄧㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_J, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄩ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄩㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄩㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄐㄩㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_J, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄇㄞ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄤ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄇㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄜ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+/* ChewingKey(CHEWING_M, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄟ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄇㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄇㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_M, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄡ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄧㄣ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄇㄧㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄧㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄇㄧㄝ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄧㄡ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄇㄨ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_M, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄚ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄋㄞ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄤ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄋㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄜ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_N, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄟ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄣ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄋㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄨㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄋㄡ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄧㄣ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄋㄧㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄧ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄧㄚ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄧㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄧㄤ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄋㄧㄠ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄋㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄧㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄨ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄨㄢ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄨㄣ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄨㄛ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄩ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄋㄩㄝ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_N, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄌㄞ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄌㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄜ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_L, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄣ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄛ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+/* ㄌㄨㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄌㄧㄣ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄌㄧㄚ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄧㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄧㄤ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄌㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄧㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_L, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄨㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄩ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄌㄩㄝ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_L, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄖㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄠ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄜ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄣ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄨㄥ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄡ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄨ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄨㄚ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄨㄢ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄨㄟ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄖㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄖㄨㄛ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_R, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄚ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+/* ㄆㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄆㄧㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄧㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄆㄧㄝ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄆㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_P, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄧㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄧㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄑㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄩㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄑㄧㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄩ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄩㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄩㄝ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄑㄩㄣ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Q, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄙㄞ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄙㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄙㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄙㄠ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄙㄜ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄣ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄥ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄨㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄙㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄨ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄙㄨㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄙㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_S, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_S, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄕㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄜ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄟ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄕㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄕㄨㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄨㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄕㄨㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄨㄟ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄕㄨㄣ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄕㄨㄛ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_SH, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄊㄞ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄊㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄊㄜ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄥ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄨㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_T, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄧㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄧㄝ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄨㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄊㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄊㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_T, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* PINYIN_W */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄨㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄨㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄨㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄨㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄨㄟ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄨㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄨㄛ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_W, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄧㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄒㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄒㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄒㄧㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄧㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄒㄧㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄒㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄒㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_X, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄩㄥ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄒㄧㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄩ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄩㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄩㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄒㄩㄣ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_X, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* PINYIN_Y */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_ZERO_MIDDLE, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄧㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄧㄞ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄧㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧㄤ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄧㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧㄝ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄧㄛ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+/* ㄩㄥ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄧㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄩ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄩㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄩㄝ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄩㄣ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(PINYIN_Y, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄗㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄗㄢ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄜ */
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄟ */
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄣ */
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄥ */
+TRUE,
+TRUE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄡ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄨㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄗㄨㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄗㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_Z, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓ */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄚ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ㄓㄞ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄠ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄜ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄟ */
+TRUE,
+FALSE,
+FALSE,
+FALSE,
+TRUE,
+FALSE,
+/* ㄓㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄨㄥ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄡ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_ZERO_MIDDLE, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_I, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄨ */
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄨㄚ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+FALSE,
+/* ㄓㄨㄞ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄨㄢ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄨㄤ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄨㄟ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ㄓㄨㄣ */
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ㄓㄨㄛ */
+TRUE,
+TRUE,
+TRUE,
+FALSE,
+TRUE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_U, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_ZERO_FINAL) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_A) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_AI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_AN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_ANG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_AO) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_E) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, INVALID_EA) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_EI) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_EN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_ENG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_ER) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_NG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_O) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, PINYIN_ONG) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, CHEWING_OU) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, PINYIN_IN) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+/* ChewingKey(CHEWING_ZH, CHEWING_V, PINYIN_ING) */
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE,
+FALSE
+};
+
static const char * chewing_tone_table[CHEWING_NUMBER_OF_TONES] = {
"",
" ",
diff --git a/src/zhuyin.cpp b/src/zhuyin.cpp
index f4e28d8..1b9cda5 100644
--- a/src/zhuyin.cpp
+++ b/src/zhuyin.cpp
@@ -47,7 +47,7 @@ struct _zhuyin_context_t{
Bigram * m_user_bigram;
/* lookups. */
- PhoneticLookup<1> * m_pinyin_lookup;
+ PhoneticLookup<1, 1> * m_pinyin_lookup;
PhraseLookup * m_phrase_lookup;
char * m_system_dir;
@@ -345,7 +345,7 @@ zhuyin_context_t * zhuyin_init(const char * systemdir, const char * userdir){
gfloat lambda = context->m_system_table_info.get_lambda();
- context->m_pinyin_lookup = new PhoneticLookup<1>
+ context->m_pinyin_lookup = new PhoneticLookup<1, 1>
( lambda,
context->m_pinyin_table, context->m_phrase_index,
context->m_system_bigram, context->m_user_bigram);
@@ -1007,9 +1007,10 @@ bool zhuyin_parse_full_pinyin(zhuyin_instance_t * instance,
/* disable the pinyin correction options. */
options &= ~PINYIN_CORRECT_ALL;
+ gint16 distance = 0;
int pinyin_len = strlen(onepinyin);
bool retval = context->m_full_pinyin_parser->parse_one_key
- (options, *onekey, onepinyin, pinyin_len);
+ (options, *onekey, distance, onepinyin, pinyin_len);
return retval;
}
@@ -1047,9 +1048,10 @@ bool zhuyin_parse_chewing(zhuyin_instance_t * instance,
zhuyin_context_t * & context = instance->m_context;
zhuyin_option_t options = context->m_options;
+ gint16 distance = 0;
int chewing_len = strlen(onechewing);
bool retval = context->m_chewing_parser->parse_one_key
- (options, *onekey, onechewing, chewing_len );
+ (options, *onekey, distance, onechewing, chewing_len);
return retval;
}
diff --git a/src/zhuyin.h b/src/zhuyin.h
index 50a3287..e627001 100644
--- a/src/zhuyin.h
+++ b/src/zhuyin.h
@@ -308,19 +308,6 @@ bool zhuyin_parse_chewing(zhuyin_instance_t * instance,
size_t zhuyin_parse_more_chewings(zhuyin_instance_t * instance,
const char * chewings);
-#if 0
-/**
- * zhuyin_valid_zhuyin_keys:
- * @instance: the zhuyin instance.
- * @returns: whether all zhuyin keys are valid.
- *
- * Valid parsed zhuyin keys, if all valid, return true;
- * if not, modify raw user input and return false.
- *
- */
-bool zhuyin_valid_zhuyin_keys(zhuyin_instance_t * instance);
-#endif
-
/**
* zhuyin_get_parsed_input_length:
* @instance: the zhuyin instance.
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5783407..4dfaed1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -9,7 +9,7 @@ add_executable(
target_link_libraries(
test_pinyin
- libpinyin
+ pinyin
)
add_executable(
@@ -19,7 +19,7 @@ add_executable(
target_link_libraries(
test_phrase
- libpinyin
+ pinyin
)
add_executable(
@@ -29,5 +29,5 @@ add_executable(
target_link_libraries(
test_chewing
- libpinyin
+ pinyin
)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 34da2d0..de08cef 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -23,7 +23,7 @@ CLEANFILES = *.bak
ACLOCAL = aclocal -I $(ac_aux_dir)
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
diff --git a/tests/include/CMakeLists.txt b/tests/include/CMakeLists.txt
index f51c87e..3ad956c 100644
--- a/tests/include/CMakeLists.txt
+++ b/tests/include/CMakeLists.txt
@@ -5,5 +5,5 @@ add_executable(
target_link_libraries(
test_memory_chunk
- libpinyin
-) \ No newline at end of file
+ pinyin
+)
diff --git a/tests/include/Makefile.am b/tests/include/Makefile.am
index 4a22aea..a140ff0 100644
--- a/tests/include/Makefile.am
+++ b/tests/include/Makefile.am
@@ -14,7 +14,7 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
diff --git a/tests/lookup/CMakeLists.txt b/tests/lookup/CMakeLists.txt
index 3304c47..38d45de 100644
--- a/tests/lookup/CMakeLists.txt
+++ b/tests/lookup/CMakeLists.txt
@@ -7,7 +7,7 @@ add_executable(
target_link_libraries(
test_pinyin_lookup
- libpinyin
+ pinyin
)
add_executable(
@@ -17,5 +17,5 @@ add_executable(
target_link_libraries(
test_phrase_lookup
- libpinyin
+ pinyin
)
diff --git a/tests/lookup/Makefile.am b/tests/lookup/Makefile.am
index 10c5301..027298b 100644
--- a/tests/lookup/Makefile.am
+++ b/tests/lookup/Makefile.am
@@ -14,14 +14,19 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
-I$(top_srcdir)/tests \
@GLIB2_CFLAGS@
-LDADD = ../../src/libpinyin_internal.la @GLIB2_LIBS@
+LDADD = \
+ ../../src/libpinyin_internal.a \
+ ../../src/storage/libstorage.a \
+ ../../src/lookup/liblookup.a \
+ @GLIB2_LIBS@ \
+ $(NULL)
noinst_PROGRAMS = test_pinyin_lookup \
test_phrase_lookup
diff --git a/tests/lookup/test_pinyin_lookup.cpp b/tests/lookup/test_pinyin_lookup.cpp
index 6178b85..c1552b4 100644
--- a/tests/lookup/test_pinyin_lookup.cpp
+++ b/tests/lookup/test_pinyin_lookup.cpp
@@ -59,8 +59,8 @@ int main( int argc, char * argv[]){
gfloat lambda = system_table_info.get_lambda();
- PhoneticLookup<3> pinyin_lookup(lambda, &largetable, &phrase_index,
- &system_bigram, &user_bigram);
+ PhoneticLookup<2, 3> pinyin_lookup(lambda, &largetable, &phrase_index,
+ &system_bigram, &user_bigram);
/* prepare the prefixes for get_nbest_match. */
TokenVector prefixes = g_array_new
diff --git a/tests/storage/CMakeLists.txt b/tests/storage/CMakeLists.txt
index 96b12fc..378e134 100644
--- a/tests/storage/CMakeLists.txt
+++ b/tests/storage/CMakeLists.txt
@@ -7,7 +7,7 @@ add_executable(
target_link_libraries(
test_parser2
- libpinyin
+ pinyin
)
add_executable(
@@ -17,7 +17,7 @@ add_executable(
target_link_libraries(
test_chewing_table
- libpinyin
+ pinyin
)
add_executable(
@@ -27,7 +27,7 @@ add_executable(
target_link_libraries(
test_phrase_index
- libpinyin
+ pinyin
)
add_executable(
@@ -37,7 +37,7 @@ add_executable(
target_link_libraries(
test_phrase_index_logger
- libpinyin
+ pinyin
)
add_executable(
@@ -47,7 +47,7 @@ add_executable(
target_link_libraries(
test_phrase_table
- libpinyin
+ pinyin
)
add_executable(
@@ -57,7 +57,7 @@ add_executable(
target_link_libraries(
test_ngram
- libpinyin
+ pinyin
)
add_executable(
@@ -67,5 +67,5 @@ add_executable(
target_link_libraries(
test_flexible_ngram
- libpinyin
+ pinyin
)
diff --git a/tests/storage/Makefile.am b/tests/storage/Makefile.am
index 6f75534..6b05918 100644
--- a/tests/storage/Makefile.am
+++ b/tests/storage/Makefile.am
@@ -14,14 +14,19 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
-I$(top_srcdir)/tests \
@GLIB2_CFLAGS@
-LDADD = ../../src/libpinyin_internal.la @GLIB2_LIBS@
+LDADD = \
+ ../../src/libpinyin_internal.a \
+ ../../src/storage/libstorage.a \
+ ../../src/lookup/liblookup.a \
+ @GLIB2_LIBS@ \
+ $(NULL)
TESTS = test_phrase_index_logger \
test_ngram \
diff --git a/tests/test_pinyin.cpp b/tests/test_pinyin.cpp
index 1f8c5fc..8eadf89 100644
--- a/tests/test_pinyin.cpp
+++ b/tests/test_pinyin.cpp
@@ -69,7 +69,8 @@ int main(int argc, char * argv[]){
size_t len = pinyin_parse_more_full_pinyins(instance, linebuf);
pinyin_guess_sentence_with_prefix(instance, prefixbuf);
- pinyin_guess_candidates(instance, 0);
+ pinyin_guess_candidates(instance, 0,
+ SORT_BY_PHRASE_LENGTH_AND_FREQUENCY);
size_t i = 0;
for (i = 0; i <= len; ++i) {
diff --git a/tests/test_zhuyin.cpp b/tests/test_zhuyin.cpp
index 0fe840d..442bdb3 100644
--- a/tests/test_zhuyin.cpp
+++ b/tests/test_zhuyin.cpp
@@ -19,6 +19,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include "zhuyin.h"
#include <stdio.h>
#include <stdlib.h>
diff --git a/utils/segment/CMakeLists.txt b/utils/segment/CMakeLists.txt
index 82e4deb..c0f0a9a 100644
--- a/utils/segment/CMakeLists.txt
+++ b/utils/segment/CMakeLists.txt
@@ -5,7 +5,7 @@ add_executable(
target_link_libraries(
spseg
- libpinyin
+ pinyin
)
add_executable(
@@ -15,5 +15,5 @@ add_executable(
target_link_libraries(
ngseg
- libpinyin
-) \ No newline at end of file
+ pinyin
+)
diff --git a/utils/segment/Makefile.am b/utils/segment/Makefile.am
index 4354107..72e6743 100644
--- a/utils/segment/Makefile.am
+++ b/utils/segment/Makefile.am
@@ -16,14 +16,17 @@
MAINTAINERCLEANFILES = Makefile.in
-INCLUDES = -I$(top_srcdir)/src \
- -I$(top_srcdir)/src/include \
- -I$(top_srcdir)/src/storage \
- -I$(top_srcdir)/src/lookup \
- -I$(top_srcdir)/utils \
- @GLIB2_CFLAGS@
+AM_CPPFLAGS = -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/include \
+ -I$(top_srcdir)/src/storage \
+ -I$(top_srcdir)/src/lookup \
+ -I$(top_srcdir)/utils \
+ @GLIB2_CFLAGS@
-LDADD = ../../src/libpinyin_internal.la @GLIB2_LIBS@
+LDADD = ../../src/libpinyin_internal.a \
+ ../../src/storage/libstorage.a \
+ ../../src/lookup/liblookup.a \
+ @GLIB2_LIBS@
noinst_PROGRAMS = spseg ngseg mergeseq
diff --git a/utils/storage/CMakeLists.txt b/utils/storage/CMakeLists.txt
index 63cabcd..648f430 100644
--- a/utils/storage/CMakeLists.txt
+++ b/utils/storage/CMakeLists.txt
@@ -5,7 +5,7 @@ add_executable(
target_link_libraries(
gen_binary_files
- libpinyin
+ pinyin
)
add_executable(
@@ -15,7 +15,7 @@ add_executable(
target_link_libraries(
import_interpolation
- libpinyin
+ pinyin
)
add_executable(
@@ -25,5 +25,5 @@ add_executable(
target_link_libraries(
export_interpolation
- libpinyin
+ pinyin
)
diff --git a/utils/storage/Makefile.am b/utils/storage/Makefile.am
index f5326a1..256386b 100644
--- a/utils/storage/Makefile.am
+++ b/utils/storage/Makefile.am
@@ -14,14 +14,19 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-INCLUDES = -I$(top_srcdir)/src \
+AM_CPPFLAGS = -I$(top_srcdir)/src \
-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/storage \
-I$(top_srcdir)/src/lookup \
-I$(top_srcdir)/utils \
@GLIB2_CFLAGS@
-LDADD = ../../src/libpinyin_internal.la @GLIB2_LIBS@
+LDADD = \
+ ../../src/libpinyin_internal.a \
+ ../../src/storage/libstorage.a \
+ ../../src/lookup/liblookup.a \
+ @GLIB2_LIBS@ \
+ $(NULL)
bin_PROGRAMS = gen_binary_files \
import_interpolation
diff --git a/utils/storage/gen_pinyin_table.cpp b/utils/storage/gen_pinyin_table.cpp
index bf0c73b..fccc8c3 100644
--- a/utils/storage/gen_pinyin_table.cpp
+++ b/utils/storage/gen_pinyin_table.cpp
@@ -37,11 +37,11 @@ static gint phrase_index = 0;
static const gchar * outputfile = "temp.out";
static GOptionEntry entries[] =
-{
- {"phraseindex", 't', 0, G_OPTION_ARG_INT, &phrase_index, "phrase index", NULL},
- {"outputfile", 'o', 0, G_OPTION_ARG_FILENAME, &outputfile, "output filename", NULL},
- {NULL}
-};
+ {
+ {"phraseindex", 't', 0, G_OPTION_ARG_INT, &phrase_index, "phrase index", NULL},
+ {"outputfile", 'o', 0, G_OPTION_ARG_FILENAME, &outputfile, "output filename", NULL},
+ {NULL}
+ };
using namespace pinyin;
@@ -85,10 +85,10 @@ gint phrase_item_compare(gconstpointer a, gconstpointer b){
phrase_item * itema = (phrase_item *) a;
phrase_item * itemb = (phrase_item *) b;
if ( itema->length != itemb->length )
- return itema->length - itemb->length;
+ return itema->length - itemb->length;
else
- return memcmp(itema->uniphrase, itemb->uniphrase,
- sizeof(gunichar) * itema->length);
+ return memcmp(itema->uniphrase, itemb->uniphrase,
+ sizeof(gunichar) * itema->length);
}
@@ -116,14 +116,14 @@ int main(int argc, char * argv[]){
/* store in item array */
g_item_array[0] = NULL;
for (i = 1; i < MAX_PHRASE_LENGTH + 1; ++i){
- g_item_array[i] = g_array_new
+ g_item_array[i] = g_array_new
(FALSE, TRUE, sizeof(phrase_and_array_item));
}
g_tree_foreach(g_chewing_tree, store_one_item, NULL);
/* sort item array */
for ( int i = 1; i < MAX_PHRASE_LENGTH + 1; ++i){
- g_array_sort_with_data(g_item_array[i], phrase_array_compare , &i);
+ g_array_sort_with_data(g_item_array[i], phrase_array_compare , &i);
}
gen_phrase_file(outputfile, phrase_index);
@@ -142,16 +142,16 @@ void feed_file ( const char * filename){
}
while ( !feof(infile)){
- int num = fscanf(infile, "%1024s %1024s %u",
+ int num = fscanf(infile, "%1023s %1023s %u",
phrase, pinyin, &freq);
if (3 != num)
continue;
- if (feof(infile))
+ if (feof(infile))
break;
- feed_line(phrase, pinyin, freq);
+ feed_line(phrase, pinyin, freq);
}
fclose(infile);
@@ -162,7 +162,7 @@ void feed_line(const char * phrase, const char * pinyin, const guint32 freq) {
item->length = g_utf8_strlen(phrase, -1);
/* FIXME: modify ">" to ">=" according to pinyin_large_table.cpp
- * where is the code which I don't want to touch. :-)
+ * where is the code which I don't want to touch. :-)
*/
if (item->length >= MAX_PHRASE_LENGTH) {
diff --git a/utils/storage/gen_zhuyin_table.cpp b/utils/storage/gen_zhuyin_table.cpp
index 2cb6a0a..71a4e7b 100644
--- a/utils/storage/gen_zhuyin_table.cpp
+++ b/utils/storage/gen_zhuyin_table.cpp
@@ -19,6 +19,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <glib.h>
#include "pinyin_internal.h"
diff --git a/utils/training/CMakeLists.txt b/utils/training/CMakeLists.txt
index ee59bcd..27620fb 100644
--- a/utils/training/CMakeLists.txt
+++ b/utils/training/CMakeLists.txt
@@ -5,7 +5,7 @@ add_executable(
target_link_libraries(
gen_ngram
- libpinyin
+ pinyin
)
add_executable(
@@ -15,7 +15,7 @@ add_executable(
target_link_libraries(
gen_deleted_ngram
- libpinyin
+ pinyin
)
add_executable(
@@ -25,7 +25,7 @@ add_executable(
target_link_libraries(
gen_unigram
- libpinyin
+ pinyin
)
add_executable(
@@ -35,7 +35,7 @@ add_executable(
target_link_libraries(
gen_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -45,7 +45,7 @@ add_executable(
target_link_libraries(
estimate_interpolation
- libpinyin
+ pinyin
)
add_executable(
@@ -55,7 +55,7 @@ add_executable(
target_link_libraries(
estimate_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -65,7 +65,7 @@ add_executable(
target_link_libraries(
merge_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -75,7 +75,7 @@ add_executable(
target_link_libraries(
prune_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -85,7 +85,7 @@ add_executable(
target_link_libraries(
import_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -95,7 +95,7 @@ add_executable(
target_link_libraries(
export_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -105,7 +105,7 @@ add_executable(
target_link_libraries(
k_mixture_model_to_interpolation
- libpinyin
+ pinyin
)
add_executable(
@@ -115,7 +115,7 @@ add_executable(
target_link_libraries(
validate_k_mixture_model
- libpinyin
+ pinyin
)
add_executable(
@@ -125,5 +125,5 @@ add_executable(
target_link_libraries(
eval_correction_rate
- libpinyin
-) \ No newline at end of file
+ pinyin
+)
diff --git a/utils/training/Makefile.am b/utils/training/Makefile.am
index a70945a..d82cacf 100644
--- a/utils/training/Makefile.am
+++ b/utils/training/Makefile.am
@@ -16,14 +16,17 @@
MAINTAINERCLEANFILES = Makefile.in
-INCLUDES = -I$(top_srcdir)/src \
- -I$(top_srcdir)/src/include \
- -I$(top_srcdir)/src/storage \
- -I$(top_srcdir)/src/lookup \
- -I$(top_srcdir)/utils \
- @GLIB2_CFLAGS@
-
-LDADD = ../../src/libpinyin_internal.la @GLIB2_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir)/src \
+ -I$(top_srcdir)/src/include \
+ -I$(top_srcdir)/src/storage \
+ -I$(top_srcdir)/src/lookup \
+ -I$(top_srcdir)/utils \
+ @GLIB2_CFLAGS@
+
+LDADD = ../../src/libpinyin_internal.a \
+ ../../src/storage/libstorage.a \
+ ../../src/lookup/liblookup.a \
+ @GLIB2_LIBS@
noinst_HEADERS = k_mixture_model.h
diff --git a/utils/training/eval_correction_rate.cpp b/utils/training/eval_correction_rate.cpp
index 5983cca..aa33e6b 100644
--- a/utils/training/eval_correction_rate.cpp
+++ b/utils/training/eval_correction_rate.cpp
@@ -61,7 +61,7 @@ bool get_possible_pinyin(FacadePhraseIndex * phrase_index,
}
bool get_best_match(FacadePhraseIndex * phrase_index,
- PhoneticLookup<1> * pinyin_lookup,
+ PhoneticLookup<1, 1> * pinyin_lookup,
PhoneticKeyMatrix * matrix,
NBestMatchResults * results) {
/* prepare the prefixes for get_nbest_match. */
@@ -79,7 +79,7 @@ bool get_best_match(FacadePhraseIndex * phrase_index,
return retval;
}
-bool do_one_test(PhoneticLookup<1> * pinyin_lookup,
+bool do_one_test(PhoneticLookup<1, 1> * pinyin_lookup,
FacadePhraseIndex * phrase_index,
TokenVector tokens){
bool retval = false;
@@ -156,7 +156,7 @@ int main(int argc, char * argv[]){
gfloat lambda = system_table_info.get_lambda();
- PhoneticLookup<1> pinyin_lookup(lambda,
+ PhoneticLookup<1, 1> pinyin_lookup(lambda,
&largetable, &phrase_index,
&system_bigram, &user_bigram);