emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pyim 2a48c09cf5 2/3: pyim-pymap-split-string: use pyim-


From: ELPA Syncer
Subject: [elpa] externals/pyim 2a48c09cf5 2/3: pyim-pymap-split-string: use pyim-split-list
Date: Wed, 18 Jan 2023 20:58:05 -0500 (EST)

branch: externals/pyim
commit 2a48c09cf5945202052feeff9192a046d091ca45
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    pyim-pymap-split-string: use pyim-split-list
---
 pyim-pymap.el | 52 ++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/pyim-pymap.el b/pyim-pymap.el
index 88473d290e..a60a1e3c60 100644
--- a/pyim-pymap.el
+++ b/pyim-pymap.el
@@ -1075,21 +1075,45 @@ If FORCE is non-nil, FORCE build."
 
 1. Hello你好 -> (\"Hello\" \"你\" \"好\"), when TO-CCHAR is non-nil.
 2. Hello你好 -> (\"Hello\" \"你好\"), when TO-CCHAR is nil."
-  (let* ((sep (make-string 5 ?\0))
-         (chars (split-string string ""))
+  (let* ((chars (split-string string ""))
+         (sep 'pymap-separator)
          (chars-with-seps
-          (cl-mapcan (lambda (a b)
-                       (let ((x (pyim-pymap-cchar2py-get a))
-                             (y (pyim-pymap-cchar2py-get b)))
-                         (cond ((and x y)
-                                (if to-cchar
-                                    (list a sep)
-                                  (list a)))
-                               ((and (not x) (not y))
-                                (list a))
-                               (t (list a sep)))))
-                     chars (cdr chars))))
-    (remove "" (split-string (string-join chars-with-seps) sep))))
+          (pyim-pymap--add-seps-to-chars chars sep to-cchar))
+         (chars-grouped
+          (pyim-split-list chars-with-seps sep))
+         (substrings-list
+          (mapcar #'string-join chars-grouped)))
+    (remove "" substrings-list)))
+
+(defun pyim-pymap--add-seps-to-chars (chars separator to-cchar)
+  "在 CCHRS 列表的中英文之间或者中文与中文之间插入 SEPARATOR 元素。
+
+如果 SEPARATOR 设置为 mysep, 那么:
+1. TO-CCHAR is nil:
+
+   (\"a\" \"你\" \"好\" \"b\" \"c\")
+=> (\"a\" mysep \"你\" \"好\" mysep \"b\" \"c\")
+
+2. TO-CCHAR is non-nil:
+
+   (\"a\" \"你\" \"好\" \"b\" \"c\")
+=> (\"a\" mysep \"你\" mysep \"好\" mysep \"b\" \"c\")"
+  (cl-mapcan (lambda (a b)
+               (let ((a-cchar-p (pyim-pymap-cchar2py-get a))
+                     (b-cchar-p (pyim-pymap-cchar2py-get b)))
+                 (cond
+                  ;; 如果 to-char 为 non-nil, 中文与中文之间插入一个
+                  ;; sep, 否则不需要插入 sep.
+                  ((and a-cchar-p b-cchar-p)
+                   (if to-cchar
+                       (list a separator)
+                     (list a)))
+                  ;; 非中文之间不需要插入一个 sep.
+                  ((and (not a-cchar-p) (not b-cchar-p))
+                   (list a))
+                  ;; 中文和非中文之间需要插入一个 sep.
+                  (t (list a separator)))))
+             chars (cdr chars)))
 
 (defun pyim-pymap-cchar2py-get (char-or-str)
   "获取字符或者字符串 CHAR-OR-STR 对应的拼音 code.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]