add pinyin/chewing check options
authorPeng Wu <alexepico@gmail.com>
Mon, 14 Nov 2011 08:33:51 +0000 (16:33 +0800)
committerPeng Wu <alexepico@gmail.com>
Mon, 14 Nov 2011 08:33:51 +0000 (16:33 +0800)
src/storage/pinyin_custom2.h
src/storage/pinyin_parser2.cpp

index 721d43a..52f093b 100644 (file)
@@ -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
 };
 
 /**
index 0d68235..6885812 100644 (file)
  *  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;
+}