branch: externals/pyim commit 30cb33b8920e15de545322d202c1623bb227b59b Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
Fix previous commit. --- pyim-pymap-utils.el | 100 ---------------------------------------------------- 1 file changed, 100 deletions(-) diff --git a/pyim-pymap-utils.el b/pyim-pymap-utils.el index be5ab95cbb..a715d744b3 100644 --- a/pyim-pymap-utils.el +++ b/pyim-pymap-utils.el @@ -298,106 +298,6 @@ 趯罍鼱鳠鳡鳣爟爚灈韂糵礵鹴皭龢鳤亹籥𫚭玃醾齇觿" "")) "常用汉字") -;; ** "汉字 -> 拼音" 以及 "拼音 -> 汉字" 的转换函数 -(defun pyim-pymap-cache-create (&optional force) - "创建 pymap 相关的 cache." - (pyim-pymap-cchar2py-cache-create force) - (pyim-pymap-py2cchar-cache-create force)) - -(defun pyim-pymap-py2cchar-cache-create (&optional force) - "构建 pinyin 到 chinese char 的缓存. - -用于加快搜索速度,这个函数将缓存保存到 `pyim-pymap-py2cchar-cache' 变量中, -如果 FORCE 设置为 t, 强制更新索引。" - (when (or force - (not pyim-pymap-py2cchar-cache1) - (not pyim-pymap-py2cchar-cache2) - ;; FIXME: 我偶尔会遇到一个奇怪的问题,创建的缓存没有包含所有的汉字拼 - ;; 音,原因未知,所以这里测试一下,看排在最后面的一个汉字拼音是否包 - ;; 含在缓存中,如果不包含,就重新创建缓存。 - (and pyim-pymap-py2cchar-cache1 - (not (gethash "zuo" pyim-pymap-py2cchar-cache1)))) - (setq pyim-pymap-py2cchar-cache1 - (make-hash-table :size 50000 :test #'equal)) - (setq pyim-pymap-py2cchar-cache2 - (make-hash-table :size 50000 :test #'equal)) - (setq pyim-pymap-py2cchar-cache3 - (make-hash-table :size 50000 :test #'equal)) - (dolist (x pyim-pymap) - (let* ((py (car x)) - (cchars (cdr x)) - (n (min (length py) 7))) - (puthash py cchars pyim-pymap-py2cchar-cache1) - (puthash py (cdr (split-string (car cchars) "")) - pyim-pymap-py2cchar-cache2) - (dotimes (i n) - (let* ((key (substring py 0 (+ i 1))) - (orig-value (gethash key pyim-pymap-py2cchar-cache3))) - (puthash key (delete-dups `(,@orig-value ,@cchars)) - pyim-pymap-py2cchar-cache3))))))) - -(defun pyim-pymap-py2cchar-get (pinyin &optional equal-match return-list include-seperator) - "获取拼音与 PINYIN 想匹配的所有汉字. - -比如: - -“man” -> (\"忙茫盲芒氓莽蟒邙漭硭\" \"满慢漫曼蛮馒瞒蔓颟谩墁幔螨鞔鳗缦熳镘\") - -如果 EQUAL-MATCH 是 non-nil, 获取和 PINYIN 完全匹配的汉字。 -如果 RETURN-LIST 是 non-nil, 返回一个由单个汉字字符串组成的列表。 - -(\"满\" \"慢\" \"漫\" ...) - -如果 INCLUDE-SEPERATOR 是 non-nil, 返回的列表包含一个 ‘|’ 号,pyim 用这个分隔符 -来区分 3500 个常用汉字和生僻字。" - (pyim-pymap-py2cchar-cache-create) - (when (and pinyin (stringp pinyin)) - (let ((output - (if equal-match - (if return-list - (gethash pinyin pyim-pymap-py2cchar-cache2) - (gethash pinyin pyim-pymap-py2cchar-cache1)) - (gethash pinyin pyim-pymap-py2cchar-cache3)))) - (setq output (remove "" output)) - (if include-seperator - output - (remove "|" output))))) - -(defun pyim-pymap-cchar2py-get (char-or-str) - "获取字符或者字符串 CHAR-OR-STR 对应的拼音 code. - -pyim 在特定的时候需要读取一个汉字的拼音,这个工作由此完成,函数 -从 `pyim-pymap-cchar2py-cache' 查询得到一个汉字字符的拼音, 例如: - -(pyim-pymap-cchar2py-get ?我) - -结果为: - -(\"wo\")" - (pyim-pymap-cchar2py-cache-create) - (let ((key (if (characterp char-or-str) - (char-to-string char-or-str) - char-or-str))) - (when (= (length key) 1) - (gethash key pyim-pymap-cchar2py-cache)))) - -(defun pyim-pymap-cchar2py-cache-create (&optional force) - "Build pinyin cchar->pinyin hashtable from `pyim-pymap'. - -If FORCE is non-nil, FORCE build." - (when (or force (not pyim-pymap-cchar2py-cache)) - (setq pyim-pymap-cchar2py-cache - (make-hash-table :size 50000 :test #'equal)) - (dolist (x pyim-pymap) - (let ((py (car x)) - (cchar-list (string-to-list (car (cdr x))))) - (dolist (cchar cchar-list) - (let* ((key (char-to-string cchar)) - (cache (gethash key pyim-pymap-cchar2py-cache))) - (if cache - (puthash key (append (list py) cache) pyim-pymap-cchar2py-cache) - (puthash key (list py) pyim-pymap-cchar2py-cache)))))))) - (defun pyim-pymap-cchar< (a b) "如果汉字 A 的使用频率大于汉字 B 的使用频率时,返回 non-nil" (< (or (cl-position a pyim-pymap-commonly-used-cchar :test #'equal) 1000000)