branch: externals/pyim commit 0758baaa2888eb30d4e77001f1ad196c48d32870 Author: Feng Shu <tuma...@163.com> Commit: Feng Shu <tuma...@163.com>
Use string-join. * pyim-candidates.el (pyim-candidates-create:quanpin) (pyim-candidates-create-quanpin): * pyim.el (pyim-select-word:pinyin): * pyim-pymap.el (pyim-pymap-sort-pymap, pyim-pymap-build-pymap): * pyim-punctuation.el (pyim-punctuation-translate): * pyim-process.el (pyim-process-create-code-criteria): * pyim-pinyin.el (pyim-pinyin-shuangpin-invalid-pinyin-regexp): * pyim-page.el (pyim-page-preview-create:quanpin) (pyim-page-preview-create:shuangpin, pyim-page-menu-create): * pyim-liberime.el (pyim-liberime-create-word) (pyim-liberime-get-code): * pyim-dregcache.el (pyim-dregcache-sort-icode2word): * pyim-cstring.el (pyim-cstring-split-to-string-1) (pyim-cstring-to-pinyin): * pyim-cregexp.el (pyim-cregexp-build-1) (pyim-cregexp-build:xingma): * pyim-common.el (pyim-subconcat): --- pyim-candidates.el | 28 ++++++++++------------------ pyim-common.el | 2 +- pyim-cregexp.el | 34 ++++++++++++++++------------------ pyim-cstring.el | 4 ++-- pyim-dregcache.el | 2 +- pyim-liberime.el | 22 +++++++++------------- pyim-page.el | 30 ++++++++++++------------------ pyim-pinyin.el | 28 ++++++++++++++-------------- pyim-process.el | 6 +++--- pyim-punctuation.el | 2 +- pyim-pymap.el | 20 +++++++++----------- pyim.el | 10 ++++------ 12 files changed, 82 insertions(+), 106 deletions(-) diff --git a/pyim-candidates.el b/pyim-candidates.el index 88f7948..c2ee97a 100644 --- a/pyim-candidates.el +++ b/pyim-candidates.el @@ -94,9 +94,7 @@ IMOBJS 获得候选词条。" (if async ;; 构建一个搜索中文的正则表达式, 然后使用这个正则表达式在当前 buffer 中搜 ;; 索词条。 - (let ((str (mapconcat #'identity - (pyim-codes-create (car imobjs) scheme-name) - ""))) + (let ((str (string-join (pyim-codes-create (car imobjs) scheme-name)))) (if (< (length str) 1) pyim-candidates ;; NOTE: 让第一个词保持不变是不是合理,有待进一步的观察。 @@ -155,16 +153,14 @@ IMOBJS 获得候选词条。" (> (length (car imobjs)) 1)) (dolist (imobj imobjs) (let* ((w (pyim-dcache-get - (mapconcat #'identity - (pyim-codes-create imobj scheme-name 1) - "-") + (string-join (pyim-codes-create imobj scheme-name 1) "-") '(ishortcode2word))) - (regexp1 (mapconcat #'identity - (pyim-codes-create imobj scheme-name) - "-")) - (regexp2 (mapconcat #'identity - (pyim-codes-create imobj scheme-name) - "[^-]*-")) + (regexp1 (string-join + (pyim-codes-create imobj scheme-name) + "-")) + (regexp2 (string-join + (pyim-codes-create imobj scheme-name) + "[^-]*-")) (w1 (cl-remove-if-not (lambda (cstr) (let ((py (pyim-cstring-to-pinyin cstr nil "-"))) @@ -181,17 +177,13 @@ IMOBJS 获得候选词条。" (dolist (imobj imobjs) (let* (;; 个人词条 (w1 (pyim-dcache-get - (mapconcat #'identity - (pyim-codes-create imobj scheme-name) - "-") + (string-join (pyim-codes-create imobj scheme-name) "-") (if pyim-enable-shortcode '(icode2word ishortcode2word) '(icode2word)))) ;; 词库词条 (w2 (pyim-dcache-get - (mapconcat #'identity - (pyim-codes-create imobj scheme-name) - "-") + (string-join (pyim-codes-create imobj scheme-name) "-") (if pyim-enable-shortcode '(code2word shortcode2word) '(code2word)))) diff --git a/pyim-common.el b/pyim-common.el index 7b421d3..25b386e 100644 --- a/pyim-common.el +++ b/pyim-common.el @@ -126,7 +126,7 @@ When CARE-FIRST-ONE is no-nil, ((a b c) (d e)) => (a d)." output) (dotimes (i (- n 1)) (let ((list (cl-subseq list 0 (- n i)))) - (push (mapconcat #'identity list (or sep "")) output))) + (push (string-join list (or sep "")) output))) (nreverse output))) (defun pyim-char-before-to-string (num) diff --git a/pyim-cregexp.el b/pyim-cregexp.el index 2a999a1..51a3ef2 100644 --- a/pyim-cregexp.el +++ b/pyim-cregexp.el @@ -137,9 +137,7 @@ regexp, 所以搜索单字的时候一般可以搜到生僻字,但搜索句子 imobjs)) (regexp (when regexp-list - (mapconcat #'identity - (delq nil regexp-list) - "\\|"))) + (string-join (delq nil regexp-list) "\\|"))) (regexp (if chinese-only regexp @@ -187,21 +185,21 @@ regexp, 所以搜索单字的时候一般可以搜到生僻字,但搜索句子 first-equal _all-equal code-prefix) "从 IMOBJ 创建一个搜索中文的 regexp." (cl-flet ((build-regexp - (list) - (let* ((n (apply #'max (mapcar #'length list))) - results) - (dotimes (i n) - (push (format "[%s]%s" - (mapconcat - (lambda (x) - (if (> i (- (length x) 1)) - "" - (char-to-string - (elt x i)))) - list "") - (if (> i 0) "?" "")) - results)) - (mapconcat #'identity (reverse results) "")))) + (list) + (let* ((n (apply #'max (mapcar #'length list))) + results) + (dotimes (i n) + (push (format "[%s]%s" + (mapconcat + (lambda (x) + (if (> i (- (length x) 1)) + "" + (char-to-string + (elt x i)))) + list "") + (if (> i 0) "?" "")) + results)) + (string-join (reverse results))))) (let ((regexp (mapconcat (lambda (x) (let ((code (concat (or code-prefix "") diff --git a/pyim-cstring.el b/pyim-cstring.el index 149379d..f6d170d 100644 --- a/pyim-cstring.el +++ b/pyim-cstring.el @@ -176,7 +176,7 @@ CHINESE-STRING 分词,得到一个词条 alist,这个 alist 的元素都是 (push (or separator " ") result)) (push (substring chinese-string i (1+ i)) result)) (setq result (nreverse result)) - (mapconcat #'identity result ""))) + (string-join result))) (defun pyim-cstring-split-buffer () "将一个 buffer 中的中文文章,进行分词操作。" @@ -259,7 +259,7 @@ BUG: 当 STRING 中包含其它标点符号,并且设置 SEPERATER 时,结 pinyins-list)))) (if return-list list - (mapconcat #'identity list " ")))))) + (string-join list " ")))))) ;;;###autoload (defalias 'pyim-hanzi2pinyin-simple 'pyim-cstring-to-pinyin-simple) diff --git a/pyim-dregcache.el b/pyim-dregcache.el index ba8d07e..667a1ea 100644 --- a/pyim-dregcache.el +++ b/pyim-dregcache.el @@ -89,7 +89,7 @@ ;; ((string-match "^\\([a-z]+ \\|[a-z]+-[a-z]+ \\|[a-z]+-[a-z]+-[a-z]+ \\)\\(.*\\)" l) (let* ((pinyin (match-string 1 l)) (words (pyim-dregcache-sort-words (split-string (match-string 2 l) " ")))) - (insert (format "%s\n" (concat pinyin (mapconcat #'identity words " ")))))) + (insert (format "%s\n" (concat pinyin (string-join words " ")))))) ;; 其他词 ((string= l "") ;; skip empty line diff --git a/pyim-liberime.el b/pyim-liberime.el index 3afb2ac..5d0d140 100644 --- a/pyim-liberime.el +++ b/pyim-liberime.el @@ -205,7 +205,7 @@ (not (cl-find-if-not #'stringp codes)) (not (cl-find-if-not #'stringp words))) (liberime-clear-composition) - (dolist (key (string-to-list (mapconcat #'identity codes ""))) + (dolist (key (string-to-list (string-join codes))) (liberime-process-key key)) (let (word) (while (setq word (pop words)) @@ -236,13 +236,12 @@ Please see: https://github.com/rime/librime/issues/349" (cond ;; 处理基于语音的输入法,比如:拼音,这类输入法 preedit 一般用空格 ;; 分隔,与汉字一一对应。 - ((string-match-p - (mapconcat #'identity - '("pinyin" "luna" "terra" "bopomofo" "stenotype" - "jyut6ping3" "wugniu" "soutzoe" "zyenpheng" - "sampheng" "clover") - "\\|") - (alist-get 'schema_id (liberime-get-status))) + ((string-match-p (string-join + '("pinyin" "luna" "terra" "bopomofo" "stenotype" + "jyut6ping3" "wugniu" "soutzoe" "zyenpheng" + "sampheng" "clover") + "\\|") + (alist-get 'schema_id (liberime-get-status))) (unless (liberime-get-preedit) (liberime-search input 1)) (let* ((n (length word)) @@ -257,11 +256,8 @@ Please see: https://github.com/rime/librime/issues/349" (setq i 0) (setq i (- i 1)))) str)) - ((string-match-p - (mapconcat #'identity - '("wubi86" "wubi98") - "\\|") - (alist-get 'schema_id (liberime-get-status))) + ((string-match-p (string-join '("wubi86" "wubi98") "\\|") + (alist-get 'schema_id (liberime-get-status))) (let ((lst (split-string (liberime-get-preedit) "[ ']+")) (str "") words) diff --git a/pyim-page.el b/pyim-page.el index 399b724..aca628e 100644 --- a/pyim-page.el +++ b/pyim-page.el @@ -295,12 +295,10 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以 (defun pyim-page-preview-create:quanpin (&optional separator) (let* ((separator (or separator " ")) - (translated (mapconcat #'identity - (mapcar - (lambda (w) - (concat (nth 0 w) (nth 1 w))) - (car pyim-imobjs)) - separator))) + (translated (string-join (mapcar (lambda (w) + (concat (nth 0 w) (nth 1 w))) + (car pyim-imobjs)) + separator))) (concat ;; | 显示光标位置的字符 (pyim-entered-with-entered-buffer @@ -340,20 +338,18 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以 (car x))) keymaps)) result)))) - (mapconcat #'identity - (reverse result) - (or separator " ")))) + (string-join (reverse result) (or separator " ")))) (defun pyim-page-preview-create:xingma (&optional separator) (let* ((scheme-name (pyim-scheme-name))) (cl-flet* ((segment (x) - (mapconcat #'identity - (car (pyim-imobjs-create x scheme-name)) - (or separator " "))) + (string-join + (car (pyim-imobjs-create x scheme-name)) + (or separator " "))) (fmt (x) - (mapconcat #'segment - (split-string x "'") - "'"))) + (mapconcat #'segment + (split-string x "'") + "'"))) ;; | 显示光标位置的字符 (pyim-process-with-entered-buffer (if (equal (point) (point-max)) @@ -380,9 +376,7 @@ page 的概念,比如,上面的 “nihao” 的 *待选词列表* 就可以 'face 'pyim-page-selection)) (format "%d.%s " i str)) result))) - (mapconcat #'identity - (nreverse result) - (or separator "")))) + (string-join (nreverse result) (or separator "")))) (defun pyim-page-style:two-lines (page-info) "将 PAGE-INFO 格式化为选词框中显示的字符串. diff --git a/pyim-pinyin.el b/pyim-pinyin.el index 6a3baae..b32b331 100644 --- a/pyim-pinyin.el +++ b/pyim-pinyin.el @@ -58,20 +58,20 @@ (defconst pyim-pinyin-shuangpin-invalid-pinyin-regexp (format "^\\(%s\\)$" - (mapconcat #'identity - '("[qtghkzcsdn]o" - "[ypfbmw]uo" - "[qj]ong" - "[rtysdghklzcn]iong" - "[qtypdjlxbnm]uai" - "[ghk]ing?" - "[qjlxn]uang" - "[dgh]iang" - "[qjlx]ua" - "[hkg]ia" - "[rtsdghkzc]v" - "[jl]ui") - "\\|")) + (string-join + '("[qtghkzcsdn]o" + "[ypfbmw]uo" + "[qj]ong" + "[rtysdghklzcn]iong" + "[qtypdjlxbnm]uai" + "[ghk]ing?" + "[qjlxn]uang" + "[dgh]iang" + "[qjlx]ua" + "[hkg]ia" + "[rtsdghkzc]v" + "[jl]ui") + "\\|")) "双拼可能自动产生的无效拼音. 例如输入 kk 得到有效拼音 kuai . 但同时产生了无效拼音 king . 用户手动输入的无效拼音无需考虑. 因为用户有即时界面反馈,不可能连续输入无效拼音.") diff --git a/pyim-process.el b/pyim-process.el index db90b33..1d3a601 100644 --- a/pyim-process.el +++ b/pyim-process.el @@ -518,9 +518,9 @@ alist 列表。" (defun pyim-process-create-code-criteria () "创建 `pyim-cstring-to-code-criteria'." (setq pyim-cstring-to-code-criteria - (let ((str (mapconcat #'identity - (pyim-codes-create (car (pyim-process-get-imobjs)) (pyim-scheme-name)) - ""))) + (let ((str (string-join + (pyim-codes-create (car (pyim-process-get-imobjs)) + (pyim-scheme-name))))) (if (> (length pyim-cstring-to-code-criteria) (length str)) pyim-cstring-to-code-criteria diff --git a/pyim-punctuation.el b/pyim-punctuation.el index 7ab4313..1c724a6 100644 --- a/pyim-punctuation.el +++ b/pyim-punctuation.el @@ -186,7 +186,7 @@ If you don't like this function, set the variable to nil") (if (= position 0) (push punct result) (push (car puncts) result)))))))) - (insert (mapconcat #'identity (reverse result) "")) + (insert (string-join (reverse result))) (backward-char rnum))) (defun pyim-punctuation-return-proper-punct (punc-list &optional before) diff --git a/pyim-pymap.el b/pyim-pymap.el index 313ead1..b0a3493 100644 --- a/pyim-pymap.el +++ b/pyim-pymap.el @@ -843,10 +843,9 @@ If FORCE is non-nil, FORCE build." (let (pymap) (dolist (py pyim-pymap) (push (list (car py) - (mapconcat #'identity - (sort (split-string (cadr py) "") - #'pyim-pymap-cchar<) - "")) + (string-join + (sort (split-string (cadr py) "") + #'pyim-pymap-cchar<))) pymap)) (reverse pymap))) @@ -886,13 +885,12 @@ If FORCE is non-nil, FORCE build." 'sep t)) (list 4000 7000 n))) (string - (mapconcat #'identity - (mapcar (lambda (str) - (if (get-text-property 0 'sep str) - "|" - str)) - (sort (append seps value) #'pyim-pymap-cchar<)) - ""))) + (string-join + (mapcar (lambda (str) + (if (get-text-property 0 'sep str) + "|" + str)) + (sort (append seps value) #'pyim-pymap-cchar<))))) (insert (format "(%S %S)\n" key string)))) hash-table) (sort-lines nil (point-min) (point-max)) diff --git a/pyim.el b/pyim.el index c972a6a..27b655c 100644 --- a/pyim.el +++ b/pyim.el @@ -526,12 +526,10 @@ FILE 的格式与 `pyim-dcache-export' 生成的文件格式相同, ;; pyim-imobjs 包含 *pyim-entered-buffer* 里面光标前面的字符 ;; 串,通过与 selected-word 做比较,获取光标前未转换的字符串。 ;; to-be-translated. - (to-be-translated (mapconcat #'identity - (mapcar - (lambda (w) - (concat (nth 2 w) (nth 3 w))) - (nthcdr length-selected-word imobj)) - ""))) + (to-be-translated + (string-join (mapcar (lambda (w) + (concat (nth 2 w) (nth 3 w))) + (nthcdr length-selected-word imobj))))) ;; 大体来说,entered 字符串可以分解为三个部分: ;; 1. 光标前字符串