summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2011-11-14 16:33:51 +0800
committerPeng Wu <alexepico@gmail.com>2011-11-14 16:33:51 +0800
commit9f8dc17faa2286c55cc39f39661b0e6f6cb78873 (patch)
tree2dadcfb867d8f12a72c09689994ec9a5cd89bf39
parentf42e1536efb4b396a53c50162a67cd35cd22f8f6 (diff)
downloadlibpinyin-9f8dc17faa2286c55cc39f39661b0e6f6cb78873.tar.gz
libpinyin-9f8dc17faa2286c55cc39f39661b0e6f6cb78873.tar.xz
libpinyin-9f8dc17faa2286c55cc39f39661b0e6f6cb78873.zip
add pinyin/chewing check options
-rw-r--r--src/storage/pinyin_custom2.h7
-rw-r--r--src/storage/pinyin_parser2.cpp39
2 files changed, 42 insertions, 4 deletions
diff --git a/src/storage/pinyin_custom2.h b/src/storage/pinyin_custom2.h
index 721d43a..52f093b 100644
--- a/src/storage/pinyin_custom2.h
+++ b/src/storage/pinyin_custom2.h
@@ -29,10 +29,9 @@ enum PinyinTableFlag{
IS_PINYIN = 1U << 2,
PINYIN_INCOMPLETE = 1U << 3,
CHEWING_INCOMPLETE = 1U << 4,
- USE_INCOMPLETE = 1U << 5,
- USE_TONE = 1U << 6,
- USE_DIVIDED_TABLE = 1U << 7,
- USE_RESPLIT_TABLE = 1U << 8
+ USE_TONE = 1U << 5,
+ USE_DIVIDED_TABLE = 1U << 6,
+ USE_RESPLIT_TABLE = 1U << 7
};
/**
diff --git a/src/storage/pinyin_parser2.cpp b/src/storage/pinyin_parser2.cpp
index 0d68235..6885812 100644
--- a/src/storage/pinyin_parser2.cpp
+++ b/src/storage/pinyin_parser2.cpp
@@ -19,7 +19,46 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include <assert.h>
#include "pinyin_custom2.h"
#include "chewing_key.h"
#include "pinyin_parser2.h"
#include "pinyin_parser_table.h"
+
+
+using namespace pinyin;
+
+bool check_pinyin_options(guint32 options, pinyin_index_item_t * item) {
+ guint32 flags = item->m_flags;
+ assert (flags & IS_PINYIN);
+
+ /* handle incomplete pinyin. */
+ if (flags & PINYIN_INCOMPLETE) {
+ if (!(options & PINYIN_INCOMPLETE))
+ return false;
+ }
+
+ /* handle correct pinyin, currently only one flag per item. */
+ flags &= PINYIN_CORRECT_ALL;
+ options &= PINYIN_CORRECT_ALL;
+
+ if (flags) {
+ if ((flags & options) != flags)
+ return false;
+ }
+
+ return true;
+}
+
+bool check_chewing_options(guint32 options, chewing_index_item_t * item) {
+ guint32 flags = item->m_flags;
+ assert (flags & IS_CHEWING);
+
+ /* handle incomplete chewing. */
+ if (flags & CHEWING_INCOMPLETE) {
+ if (!(options & CHEWING_INCOMPLETE))
+ return false;
+ }
+
+ return true;
+}