diff options
Diffstat (limited to 'src/plugins/pinyin/3rdparty/pinyin/patches/0004-Bundle-pinyin-dictionary-in-the-plugin.patch')
-rw-r--r-- | src/plugins/pinyin/3rdparty/pinyin/patches/0004-Bundle-pinyin-dictionary-in-the-plugin.patch | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/src/plugins/pinyin/3rdparty/pinyin/patches/0004-Bundle-pinyin-dictionary-in-the-plugin.patch b/src/plugins/pinyin/3rdparty/pinyin/patches/0004-Bundle-pinyin-dictionary-in-the-plugin.patch new file mode 100644 index 00000000..68857d45 --- /dev/null +++ b/src/plugins/pinyin/3rdparty/pinyin/patches/0004-Bundle-pinyin-dictionary-in-the-plugin.patch @@ -0,0 +1,354 @@ +From 8342c36a8a216481ddacc6aee514077586b08573 Mon Sep 17 00:00:00 2001 +From: Jarkko Koivikko <jarkko.koivikko@code-q.fi> +Date: Sat, 31 Mar 2018 09:51:32 +0300 +Subject: [PATCH] Bundle pinyin dictionary in the plugin + +This change modifies the pinyin library and adds support for loading +the dictionary from the qt resource system. + +[ChangeLog] The pinyin dictionary is now bundled in the plugin by default. + +Task-number: QTBUG-66198 +Change-Id: I17459c4bde89cc4ccd96ad5c97393a5ad502b902 +Reviewed-by: Andy Shaw <andy.shaw@qt.io> +Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> +--- + .../3rdparty/pinyin/include/dictlist.h | 2 +- + .../3rdparty/pinyin/include/dicttrie.h | 3 +- + .../3rdparty/pinyin/include/ngram.h | 3 +- + .../3rdparty/pinyin/include/spellingtrie.h | 3 +- + .../3rdparty/pinyin/share/dictlist.cpp | 20 +++++----- + .../3rdparty/pinyin/share/dicttrie.cpp | 43 ++++++++++------------ + .../3rdparty/pinyin/share/ngram.cpp | 10 ++--- + .../3rdparty/pinyin/share/spellingtrie.cpp | 13 +++---- + 8 files changed, 47 insertions(+), 50 deletions(-) + +diff --git a/src/virtualkeyboard/3rdparty/pinyin/include/dictlist.h b/src/virtualkeyboard/3rdparty/pinyin/include/dictlist.h +index 27fa6d8..1c1daef 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/include/dictlist.h ++++ b/src/virtualkeyboard/3rdparty/pinyin/include/dictlist.h +@@ -80,7 +80,7 @@ class DictList { + ~DictList(); + + bool save_list(FILE *fp); +- bool load_list(FILE *fp); ++ bool load_list(QFile *fp); + + #ifdef ___BUILD_MODEL___ + // Init the list from the LemmaEntry array. +diff --git a/src/virtualkeyboard/3rdparty/pinyin/include/dicttrie.h b/src/virtualkeyboard/3rdparty/pinyin/include/dicttrie.h +index 75b7ee0..86a8ee2 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/include/dicttrie.h ++++ b/src/virtualkeyboard/3rdparty/pinyin/include/dicttrie.h +@@ -22,6 +22,7 @@ + #include "./dictdef.h" + #include "./dictlist.h" + #include "./searchutility.h" ++#include <QFile> + + namespace ime_pinyin { + +@@ -105,7 +106,7 @@ class DictTrie : AtomDictBase { + + void free_resource(bool free_dict_list); + +- bool load_dict(FILE *fp); ++ bool load_dict(QFile *fp); + + // Given a LmaNodeLE0 node, extract the lemmas specified by it, and fill + // them into the lpi_items buffer. +diff --git a/src/virtualkeyboard/3rdparty/pinyin/include/ngram.h b/src/virtualkeyboard/3rdparty/pinyin/include/ngram.h +index 7adb46d..1d3a86e 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/include/ngram.h ++++ b/src/virtualkeyboard/3rdparty/pinyin/include/ngram.h +@@ -20,6 +20,7 @@ + #include <stdio.h> + #include <stdlib.h> + #include "./dictdef.h" ++#include <QFile> + + namespace ime_pinyin { + +@@ -71,7 +72,7 @@ class NGram { + static NGram& get_instance(); + + bool save_ngram(FILE *fp); +- bool load_ngram(FILE *fp); ++ bool load_ngram(QFile *fp); + + // Set the total frequency of all none system dictionaries. + void set_total_freq_none_sys(size_t freq_none_sys); +diff --git a/src/virtualkeyboard/3rdparty/pinyin/include/spellingtrie.h b/src/virtualkeyboard/3rdparty/pinyin/include/spellingtrie.h +index 03510ed..f943a24 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/include/spellingtrie.h ++++ b/src/virtualkeyboard/3rdparty/pinyin/include/spellingtrie.h +@@ -20,6 +20,7 @@ + #include <stdio.h> + #include <stdlib.h> + #include "./dictdef.h" ++#include <QFile> + + namespace ime_pinyin { + +@@ -233,7 +234,7 @@ class SpellingTrie { + bool save_spl_trie(FILE *fp); + + // Load from the file stream +- bool load_spl_trie(FILE *fp); ++ bool load_spl_trie(QFile *fp); + + // Get the number of spellings + size_t get_spelling_num(); +diff --git a/src/virtualkeyboard/3rdparty/pinyin/share/dictlist.cpp b/src/virtualkeyboard/3rdparty/pinyin/share/dictlist.cpp +index 64d8d08..a5238ae 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/share/dictlist.cpp ++++ b/src/virtualkeyboard/3rdparty/pinyin/share/dictlist.cpp +@@ -408,21 +408,21 @@ bool DictList::save_list(FILE *fp) { + return true; + } + +-bool DictList::load_list(FILE *fp) { ++bool DictList::load_list(QFile *fp) { + if (NULL == fp) + return false; + + initialized_ = false; + +- if (fread(&scis_num_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&scis_num_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(start_pos_, sizeof(uint32), kMaxLemmaSize + 1, fp) != +- kMaxLemmaSize + 1) ++ if (fp->read((char *)start_pos_, sizeof(uint32) * (kMaxLemmaSize + 1)) != ++ sizeof(uint32) * (kMaxLemmaSize + 1)) + return false; + +- if (fread(start_id_, sizeof(uint32), kMaxLemmaSize + 1, fp) != +- kMaxLemmaSize + 1) ++ if (fp->read((char *)start_id_, sizeof(uint32) * (kMaxLemmaSize + 1)) != ++ sizeof(uint32) * (kMaxLemmaSize + 1)) + return false; + + free_resource(); +@@ -430,14 +430,14 @@ bool DictList::load_list(FILE *fp) { + if (!alloc_resource(start_pos_[kMaxLemmaSize], scis_num_)) + return false; + +- if (fread(scis_hz_, sizeof(char16), scis_num_, fp) != scis_num_) ++ if (fp->read((char *)scis_hz_, sizeof(char16) * scis_num_) != sizeof(char16) * scis_num_) + return false; + +- if (fread(scis_splid_, sizeof(SpellingId), scis_num_, fp) != scis_num_) ++ if (fp->read((char *)scis_splid_, sizeof(SpellingId) * scis_num_) != sizeof(SpellingId) * scis_num_) + return false; + +- if (fread(buf_, sizeof(char16), start_pos_[kMaxLemmaSize], fp) != +- start_pos_[kMaxLemmaSize]) ++ if (fp->read((char *)buf_, sizeof(char16) * start_pos_[kMaxLemmaSize]) != ++ sizeof(char16) * start_pos_[kMaxLemmaSize]) + return false; + + initialized_ = true; +diff --git a/src/virtualkeyboard/3rdparty/pinyin/share/dicttrie.cpp b/src/virtualkeyboard/3rdparty/pinyin/share/dicttrie.cpp +index 0cdd098..e7d194f 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/share/dicttrie.cpp ++++ b/src/virtualkeyboard/3rdparty/pinyin/share/dicttrie.cpp +@@ -165,19 +165,19 @@ bool DictTrie::save_dict(const char *filename) { + } + #endif // ___BUILD_MODEL___ + +-bool DictTrie::load_dict(FILE *fp) { ++bool DictTrie::load_dict(QFile *fp) { + if (NULL == fp) + return false; +- if (fread(&lma_node_num_le0_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&lma_node_num_le0_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(&lma_node_num_ge1_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&lma_node_num_ge1_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(&lma_idx_buf_len_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&lma_idx_buf_len_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(&top_lmas_num_, sizeof(uint32), 1, fp) != 1 || ++ if (fp->read((char *)&top_lmas_num_, sizeof(uint32)) != sizeof(uint32) || + top_lmas_num_ >= lma_idx_buf_len_) + return false; + +@@ -206,16 +206,16 @@ bool DictTrie::load_dict(FILE *fp) { + return false; + } + +- if (fread(root_, sizeof(LmaNodeLE0), lma_node_num_le0_, fp) +- != lma_node_num_le0_) ++ if (fp->read((char *)root_, sizeof(LmaNodeLE0) * lma_node_num_le0_) ++ != sizeof(LmaNodeLE0) * lma_node_num_le0_) + return false; + +- if (fread(nodes_ge1_, sizeof(LmaNodeGE1), lma_node_num_ge1_, fp) +- != lma_node_num_ge1_) ++ if (fp->read((char *)nodes_ge1_, sizeof(LmaNodeGE1) * lma_node_num_ge1_) ++ != sizeof(LmaNodeGE1) * lma_node_num_ge1_) + return false; + +- if (fread(lma_idx_buf_, sizeof(unsigned char), lma_idx_buf_len_, fp) != +- lma_idx_buf_len_) ++ if (fp->read((char *)lma_idx_buf_, sizeof(unsigned char) * lma_idx_buf_len_) != ++ sizeof(unsigned char) * lma_idx_buf_len_) + return false; + + // The quick index for the first level sons +@@ -245,15 +245,15 @@ bool DictTrie::load_dict(const char *filename, LemmaIdType start_id, + if (NULL == filename || end_id <= start_id) + return false; + +- FILE *fp = fopen(filename, "rb"); +- if (NULL == fp) ++ QFile file(filename); ++ if (!file.open(QIODevice::ReadOnly)) + return false; ++ QFile *fp = &file; + + free_resource(true); + + dict_list_ = new DictList(); + if (NULL == dict_list_) { +- fclose(fp); + return false; + } + +@@ -264,11 +264,9 @@ bool DictTrie::load_dict(const char *filename, LemmaIdType start_id, + !load_dict(fp) || !ngram.load_ngram(fp) || + total_lma_num_ > end_id - start_id + 1) { + free_resource(true); +- fclose(fp); + return false; + } + +- fclose(fp); + return true; + } + +@@ -278,12 +276,12 @@ bool DictTrie::load_dict_fd(int sys_fd, long start_offset, + if (start_offset < 0 || length <= 0 || end_id <= start_id) + return false; + +- FILE *fp = fdopen(sys_fd, "rb"); +- if (NULL == fp) ++ QFile file; ++ if (!file.open(sys_fd, QIODevice::ReadOnly)) + return false; ++ QFile *fp = &file; + +- if (-1 == fseek(fp, start_offset, SEEK_SET)) { +- fclose(fp); ++ if (!fp->seek(start_offset)) { + return false; + } + +@@ -291,7 +289,6 @@ bool DictTrie::load_dict_fd(int sys_fd, long start_offset, + + dict_list_ = new DictList(); + if (NULL == dict_list_) { +- fclose(fp); + return false; + } + +@@ -300,14 +297,12 @@ bool DictTrie::load_dict_fd(int sys_fd, long start_offset, + + if (!spl_trie.load_spl_trie(fp) || !dict_list_->load_list(fp) || + !load_dict(fp) || !ngram.load_ngram(fp) || +- ftell(fp) < start_offset + length || ++ fp->pos() < start_offset + length || + total_lma_num_ > end_id - start_id + 1) { + free_resource(true); +- fclose(fp); + return false; + } + +- fclose(fp); + return true; + } + +diff --git a/src/virtualkeyboard/3rdparty/pinyin/share/ngram.cpp b/src/virtualkeyboard/3rdparty/pinyin/share/ngram.cpp +index 6aec850..39155bf 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/share/ngram.cpp ++++ b/src/virtualkeyboard/3rdparty/pinyin/share/ngram.cpp +@@ -177,13 +177,13 @@ bool NGram::save_ngram(FILE *fp) { + return true; + } + +-bool NGram::load_ngram(FILE *fp) { ++bool NGram::load_ngram(QFile *fp) { + if (NULL == fp) + return false; + + initialized_ = false; + +- if (fread(&idx_num_, sizeof(uint32), 1, fp) != 1 ) ++ if (fp->read((char *)&idx_num_, sizeof(uint32)) != sizeof(uint32) ) + return false; + + if (NULL != lma_freq_idx_) +@@ -200,11 +200,11 @@ bool NGram::load_ngram(FILE *fp) { + if (NULL == lma_freq_idx_ || NULL == freq_codes_) + return false; + +- if (fread(freq_codes_, sizeof(LmaScoreType), kCodeBookSize, fp) != +- kCodeBookSize) ++ if (fp->read((char *)freq_codes_, sizeof(LmaScoreType) * kCodeBookSize) != ++ sizeof(LmaScoreType) * kCodeBookSize) + return false; + +- if (fread(lma_freq_idx_, sizeof(CODEBOOK_TYPE), idx_num_, fp) != idx_num_) ++ if (fp->read((char *)lma_freq_idx_, sizeof(CODEBOOK_TYPE) * idx_num_) != sizeof(CODEBOOK_TYPE) * idx_num_) + return false; + + initialized_ = true; +diff --git a/src/virtualkeyboard/3rdparty/pinyin/share/spellingtrie.cpp b/src/virtualkeyboard/3rdparty/pinyin/share/spellingtrie.cpp +index e01c89a..355c56b 100644 +--- a/src/virtualkeyboard/3rdparty/pinyin/share/spellingtrie.cpp ++++ b/src/virtualkeyboard/3rdparty/pinyin/share/spellingtrie.cpp +@@ -663,20 +663,20 @@ bool SpellingTrie::save_spl_trie(FILE *fp) { + return true; + } + +-bool SpellingTrie::load_spl_trie(FILE *fp) { ++bool SpellingTrie::load_spl_trie(QFile *fp) { + if (NULL == fp) + return false; + +- if (fread(&spelling_size_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&spelling_size_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(&spelling_num_, sizeof(uint32), 1, fp) != 1) ++ if (fp->read((char *)&spelling_num_, sizeof(uint32)) != sizeof(uint32)) + return false; + +- if (fread(&score_amplifier_, sizeof(float), 1, fp) != 1) ++ if (fp->read((char *)&score_amplifier_, sizeof(float)) != sizeof(float)) + return false; + +- if (fread(&average_score_, sizeof(unsigned char), 1, fp) != 1) ++ if (fp->read((char *)&average_score_, sizeof(unsigned char)) != sizeof(unsigned char)) + return false; + + if (NULL != spelling_buf_) +@@ -686,8 +686,7 @@ bool SpellingTrie::load_spl_trie(FILE *fp) { + if (NULL == spelling_buf_) + return false; + +- if (fread(spelling_buf_, sizeof(char) * spelling_size_, +- spelling_num_, fp) != spelling_num_) ++ if (fp->read((char *)spelling_buf_, spelling_size_ * spelling_num_) != spelling_size_ * spelling_num_) + return false; + + return construct(spelling_buf_, spelling_size_, spelling_num_, +-- +2.14.1.windows.1 + |