diff options
Diffstat (limited to 'src/storage/zhuyin_parser2.cpp')
-rw-r--r-- | src/storage/zhuyin_parser2.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/storage/zhuyin_parser2.cpp b/src/storage/zhuyin_parser2.cpp index 9ae7fbd..99ae4d2 100644 --- a/src/storage/zhuyin_parser2.cpp +++ b/src/storage/zhuyin_parser2.cpp @@ -250,6 +250,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; @@ -437,6 +440,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; @@ -741,6 +747,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 +771,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; @@ -911,6 +923,13 @@ int ZhuyinDirectParser2::parse(pinyin_option_t options, next = i; if (parse_one_key(options, key, 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. */ |