summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2013-04-08 12:57:52 +0800
committerPeng Wu <alexepico@gmail.com>2013-04-08 12:59:39 +0800
commit367d15b8ef051caadad6ea2aa3827c34c28c2d56 (patch)
tree87ac895a7e6de475b9261fd038bb4b526266a0d7 /src
parent2b6bbbf8d0f60ed83aec91db3cc0c6796c079d29 (diff)
downloadlibpinyin-367d15b8ef051caadad6ea2aa3827c34c28c2d56.tar.gz
libpinyin-367d15b8ef051caadad6ea2aa3827c34c28c2d56.tar.xz
libpinyin-367d15b8ef051caadad6ea2aa3827c34c28c2d56.zip
update pinyin.cpp
Diffstat (limited to 'src')
-rw-r--r--src/pinyin.cpp64
-rw-r--r--src/pinyin.h2
-rw-r--r--src/pinyin_internal.h1
3 files changed, 41 insertions, 26 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 918d4b9..81605b0 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -51,6 +51,8 @@ struct _pinyin_context_t{
char * m_system_dir;
char * m_user_dir;
bool m_modified;
+
+ SystemTableInfo m_system_table_info;
};
struct _pinyin_instance_t{
@@ -87,26 +89,25 @@ struct _import_iterator_t{
};
-static bool check_format(const char * userdir){
- gchar * filename = g_build_filename
- (userdir, "version", NULL);
-
- MemoryChunk chunk;
- bool exists = chunk.load(filename);
+static bool check_format(pinyin_context_t * context){
+ const char * userdir = context->m_user_dir;
- if (exists) {
- exists = (0 == memcmp
- (LIBPINYIN_FORMAT_VERSION, chunk.begin(),
- strlen(LIBPINYIN_FORMAT_VERSION) + 1));
- }
+ UserTableInfo user_table_info;
+ gchar * filename = g_build_filename
+ (userdir, "user.conf", NULL);
+ user_table_info.load(filename);
g_free(filename);
+ bool exists = user_table_info.is_conform
+ (&context->m_system_table_info);
+
if (exists)
return exists;
/* clean up files, if version mis-matches. */
for (size_t i = 1; i < PHRASE_INDEX_LIBRARY_COUNT; ++i) {
- const pinyin_table_info_t * table_info = pinyin_phrase_files + i;
+ const pinyin_table_info_t * table_info =
+ context->m_system_table_info.get_table_info() + i;
if (NOT_USED == table_info->m_file_type)
continue;
@@ -140,14 +141,17 @@ static bool check_format(const char * userdir){
return exists;
}
-static bool mark_version(const char * userdir){
+static bool mark_version(pinyin_context_t * context){
+ const char * userdir = context->m_user_dir;
+
+ UserTableInfo user_table_info;
+ user_table_info.make_conform(&context->m_system_table_info);
+
gchar * filename = g_build_filename
- (userdir, "version", NULL);
- MemoryChunk chunk;
- chunk.set_content(0, LIBPINYIN_FORMAT_VERSION,
- strlen(LIBPINYIN_FORMAT_VERSION) + 1);
- bool retval = chunk.save(filename);
+ (userdir, "user.conf", NULL);
+ bool retval = user_table_info.save(filename);
g_free(filename);
+
return retval;
}
@@ -160,7 +164,16 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
context->m_user_dir = g_strdup(userdir);
context->m_modified = false;
- check_format(context->m_user_dir);
+ gchar * filename = g_build_filename
+ (context->m_system_dir, "table.conf", NULL);
+ if (!context->m_system_table_info.load(filename)) {
+ fprintf(stderr, "open %s failed!\n", filename);
+ return NULL;
+ }
+ g_free(filename);
+
+
+ check_format(context);
context->m_full_pinyin_parser = new FullPinyinParser2;
context->m_double_pinyin_parser = new DoublePinyinParser2;
@@ -171,7 +184,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
/* load system chewing table. */
MemoryChunk * chunk = new MemoryChunk;
- gchar * filename = g_build_filename
+ filename = g_build_filename
(context->m_system_dir, "pinyin_index.bin", NULL);
if (!chunk->load(filename)) {
fprintf(stderr, "open %s failed!\n", filename);
@@ -257,7 +270,8 @@ bool pinyin_load_phrase_library(pinyin_context_t * context,
if (ERROR_OK == retval)
return false;
- const pinyin_table_info_t * table_info = pinyin_phrase_files + index;
+ const pinyin_table_info_t * table_info =
+ context->m_system_table_info.get_table_info() + index;
if (SYSTEM_FILE == table_info->m_file_type ||
DICTIONARY == table_info->m_file_type) {
@@ -477,7 +491,8 @@ bool pinyin_save(pinyin_context_t * context){
if (ERROR_NO_SUB_PHRASE_INDEX == retval)
continue;
- const pinyin_table_info_t * table_info = pinyin_phrase_files + i;
+ const pinyin_table_info_t * table_info =
+ context->m_system_table_info.get_table_info() + i;
if (NOT_USED == table_info->m_file_type)
continue;
@@ -579,7 +594,7 @@ bool pinyin_save(pinyin_context_t * context){
g_free(tmpfilename);
g_free(filename);
- mark_version(context->m_user_dir);
+ mark_version(context);
context->m_modified = false;
return true;
@@ -632,7 +647,8 @@ bool pinyin_mask_out(pinyin_context_t * context,
if (ERROR_NO_SUB_PHRASE_INDEX == retval)
continue;
- const pinyin_table_info_t * table_info = pinyin_phrase_files + index;
+ const pinyin_table_info_t * table_info =
+ context->m_system_table_info.get_table_info() + index;
if (NOT_USED == table_info->m_file_type)
continue;
diff --git a/src/pinyin.h b/src/pinyin.h
index b7e92a2..8c39c3d 100644
--- a/src/pinyin.h
+++ b/src/pinyin.h
@@ -714,8 +714,6 @@ typedef ChewingKey PinyinKey;
typedef ChewingKeyRest PinyinKeyPos;
-#define LIBPINYIN_FORMAT_VERSION "0.8.92"
-
G_END_DECLS
#endif
diff --git a/src/pinyin_internal.h b/src/pinyin_internal.h
index da443c2..f14e2e3 100644
--- a/src/pinyin_internal.h
+++ b/src/pinyin_internal.h
@@ -41,6 +41,7 @@
#include "pinyin_lookup2.h"
#include "phrase_lookup.h"
#include "tag_utility.h"
+#include "table_info.h"
/* training module */