branch: externals/pyim commit e63b221a6cb372c8014adfc036114f9415215355 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
* pyim-dcache.el (pyim-dcache-backend): New function. --- pyim-dcache.el | 24 +++++++++++++++++++----- tests/pyim-tests.el | 12 ++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/pyim-dcache.el b/pyim-dcache.el index b1789800cc..0d3a011f5b 100644 --- a/pyim-dcache.el +++ b/pyim-dcache.el @@ -30,6 +30,7 @@ (require 'cl-lib) (require 'pyim-common) (require 'pyim-pymap) +(require 'pyim-scheme) (require 'url-util) (defgroup pyim-dcache nil @@ -49,7 +50,8 @@ `pyim-dregcache' 速度和词库大小成正比. 当词库接近100M大小时, 在六年历史的笔记本上会有一秒的延迟. 这时建议换用 `pyim-dhashcache'. -注意:`pyim-dregcache' 只支持全拼和双拼输入法,不支持其它型码输入法." +注意:`pyim-dregcache' 只支持全拼和双拼输入法,不支持其它型码输入 +法。" :type 'symbol) (defvar pyim-dcache-auto-update t @@ -172,14 +174,27 @@ AUTO-BACKUP-THRESHOLD 倍, 那么原值将自动备份到 FILE 对应的备份 (setq ,variable (or (pyim-dcache-get-value ',variable) (make-hash-table :test #'equal))))) +;; ** Dcache 后端加载相关函数 +(defun pyim-dcache-load-backend () + "检查 `pyim-dcache-backend' 设置并 require 相应 package." + (let ((backend (pyim-dcache-backend))) + (unless (featurep backend) + (require backend)))) + +(defun pyim-dcache-backend () + "返回当前可用的 dcache backend." + (if (and (eq pyim-dcache-backend 'pyim-dregcache) + (pyim-scheme-quanpin-p (pyim-scheme-current))) + 'pyim-dregcache + 'pyim-dhashcache)) + ;; ** Dcache 初始化功能接口 (cl-defgeneric pyim-dcache-init-variables () "初始化 dcache 缓存相关变量." nil) (cl-defmethod pyim-dcache-init-variables :before () - (unless (featurep pyim-dcache-backend) - (require pyim-dcache-backend))) + (pyim-dcache-load-backend)) ;; ** Dcache 检索词条功能接口 (cl-defgeneric pyim-dcache-get (_code &optional _from) @@ -190,8 +205,7 @@ code 对应的中文词条了." nil) (cl-defmethod pyim-dcache-get :before (_code &optional _from) - (unless (featurep pyim-dcache-backend) - (require pyim-dcache-backend))) + (pyim-dcache-load-backend)) ;; ** Dcache 代码反查功能接口 (cl-defgeneric pyim-dcache-search-word-code (word) diff --git a/tests/pyim-tests.el b/tests/pyim-tests.el index 03b7b97b3e..3a6edc5400 100644 --- a/tests/pyim-tests.el +++ b/tests/pyim-tests.el @@ -948,6 +948,18 @@ (should (equal (gethash "测伌" pyim-dhashcache-iword2count) 0))))) ;; ** pyim-dcache 相关单元测试 +(ert-deftest pyim-tests-pyim-dcache-backend () + (let ((pyim-dcache-backend 'pyim-dregcache) + (pyim-default-scheme 'quanpin)) + (should (eq (pyim-dcache-backend) 'pyim-dregcache))) + + (let ((pyim-dcache-backend 'pyim-dregcache) + (pyim-default-scheme 'wubi)) + (should (eq (pyim-dcache-backend) 'pyim-dhashcache))) + + (let ((pyim-dcache-backend 'pyim-dhashcache1)) + (should (eq (pyim-dcache-backend) 'pyim-dhashcache)))) + (ert-deftest pyim-tests-pyim-dcache-save/read-variable-value () (let* ((file (pyim-tests-make-temp-file)) (backup-file (concat file "-backup-" (format-time-string "%Y%m%d%H%M%S")))