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

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

[elpa] externals/pyim 4463f9b6c2 1/4: Refactor pyim-cregexp-create-from-


From: ELPA Syncer
Subject: [elpa] externals/pyim 4463f9b6c2 1/4: Refactor pyim-cregexp-create-from-imobj method for quanpin.
Date: Wed, 22 Jun 2022 02:57:55 -0400 (EDT)

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

    Refactor pyim-cregexp-create-from-imobj method for quanpin.
---
 pyim-cregexp.el     | 54 ++++++++++++++++++++++++++++++++---------------------
 tests/pyim-tests.el | 35 ++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+), 21 deletions(-)

diff --git a/pyim-cregexp.el b/pyim-cregexp.el
index d8ff011ec1..90266a8c07 100644
--- a/pyim-cregexp.el
+++ b/pyim-cregexp.el
@@ -178,34 +178,46 @@ regexp, 所以搜索单字的时候一般可以搜到生僻字,但搜索句子
          &optional match-beginning first-equal all-equal char-level-num)
   "从 IMOBJ 创建一个搜索中文的 regexp, 适用于全拼输入法。"
   (let* ((num (pyim-cregexp-char-level-num char-level-num))
-         (imobj (mapcar (lambda (x)
-                          (concat (nth 0 x) (nth 1 x)))
-                        imobj))
-         (cchar-list
-          (let ((n 0) results)
-            (dolist (py imobj)
-              (let* ((equal-match
-                      (or all-equal
-                          (and first-equal (= n 0))))
-                     (cchars
-                      (mapconcat (lambda (x)
-                                   (mapconcat #'identity
-                                              (let* ((list (split-string x 
"|"))
-                                                     (length (length list)))
-                                                (cl-subseq list 0 (min num 
length)))
-                                              ""))
-                                 (pyim-pymap-py2cchar-get py equal-match nil 
t) "")))
-                (push cchars results))
-              (setq n (+ 1 n)))
-            (nreverse results)))
+         (pinyin-list (pyim-cregexp-quanpin-get-pinyin-list imobj))
+         (cchars-list
+          (pyim-cregexp-quanpin-get-cchars-from-pinyin-list
+           pinyin-list all-equal first-equal num))
          (regexp
           (mapconcat (lambda (x)
                        (when (pyim-string-match-p "\\cc" x)
                          (format "[%s]" x)))
-                     cchar-list "")))
+                     cchars-list "")))
     (unless (equal regexp "")
       (concat (if match-beginning "^" "") regexp))))
 
+(defun pyim-cregexp-quanpin-get-pinyin-list (imobj)
+  "从 IMOBJ 生成类似 (\"ni\" \"hao\") 的拼音列表。"
+  (mapcar (lambda (x)
+            (concat (nth 0 x) (nth 1 x)))
+          imobj))
+
+(defun pyim-cregexp-quanpin-get-cchars-from-pinyin-list
+    (pinyin-list all-equal first-equal char-level-num)
+  "(\"ni\" \"hao\") => (\"你 ... 蔫 ... 鸟 ... 宁 ...\" \"好号毫\")"
+  (let ((num (pyim-cregexp-char-level-num char-level-num))
+        (n 0)
+        results)
+    (dolist (py pinyin-list)
+      (let* ((equal-match
+              (or all-equal
+                  (and first-equal (= n 0))))
+             (cchars (mapconcat
+                      (lambda (x)
+                        (mapconcat #'identity
+                                   (let* ((list (split-string x "|"))
+                                          (length (length list)))
+                                     (cl-subseq list 0 (min num length)))
+                                   ""))
+                      (pyim-pymap-py2cchar-get py equal-match nil t) "")))
+        (push cchars results))
+      (setq n (+ 1 n)))
+    (nreverse results)))
+
 (cl-defmethod pyim-cregexp-create-from-imobj
   (imobj (scheme pyim-scheme-xingma)
          &optional match-beginning first-equal _all-equal _char-level-num)
diff --git a/tests/pyim-tests.el b/tests/pyim-tests.el
index cba1482c96..163d5ec928 100644
--- a/tests/pyim-tests.el
+++ b/tests/pyim-tests.el
@@ -999,6 +999,41 @@
       (pyim-cregexp-convert-at-point)
       (should (equal (buffer-string) (concat "hiXXX: " string))))))
 
+(ert-deftest pyim-tests-pyim-cregexp-quanpin-get-pinyin-list ()
+  (should (equal (pyim-cregexp-quanpin-get-pinyin-list
+                  '(("n" "i" "n" "i")
+                    ("h" "ao" "h" "ao")))
+                 '("ni" "hao"))))
+
+(ert-deftest pyim-tests-pyim-cregexp-quanpin-get-cchars-from-pinyin-list ()
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") nil nil nil)
+                 
'("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑懝兒䮘㧱聻㮞檷䀑抐誽䍲㮏㲡䘌縌㠜儞䘦鈮䰯伱愵嬺氼䘽䵑䵒屔婗䝚䁥䕥孨㵫屰䭲孴㹸譺㥾籾㦐㪒馜隬蚭抳䦵㲻㞾痆㣇䧇狋䛏胒鯓狔秜跜嫟迡鯢淣苨擬觬埿鑈棿腝蛪㘈眤㩘晲掜禰妳堄儗輗蜺鉨齯鶂貎膩暱惄柅鷊臡郳衵年念粘辗碾廿捻撵拈蔫鲶埝鲇辇黏䟢㮟䧔痆攆簐㘝輦䄭䬯鼰䄹艌䩞蹨㞋躎鮎䚓撚㲽跈秊秥姩鯰㜤䴴輾蹍榐唸卄齞涊淰溓娘酿孃䖆釀嬢醸鸟尿溺袅脲氽茑嬲鸮㼭茮樢䐁㠡蔦褭㜵䙚㭤䦊䮍㞙㒟裊鳥㳮䃵嬝嫋枿摄聂捏涅镍孽坭蘖啮蹑嗫臬镊颞乜陧菍嵲糵㟧㖕䞕峊㜦䜆籋䇣㘨䡾㖏䳖痆㘝踂帇㸎䄒䜓踗䌜錜鈢蠥㴪㜸圼㘿鑈噛㙞鉩㡪顳㩶聶鑷孼钀㮆隉疌㚔㖖嚙躡鎳䂼䯀囁䯅揑巕惗擜篞櫱䯵棿䭃䌰諗褹掜槷囐鋷讘銸嶭蘗摰鉨摂敜齧湼枿闑囓糱臲苶喦您恁㤛䚾䛘囜拰䋻宁凝�
 �泞柠咛坭狞佞聍甯苧䆨薴濘鸋鬡嬣䔭鑏㝕䭢橣獰聹嚀侫㲰檸矃寍寕寗寜㿦寧擰㣷䗿㩶鬤儜牛纽扭钮拗妞蚴忸狃杻䮗抝牜莥䤔㽱䂇怓紐䀔鈕靵汼炄䒜㺲䏔䋴衂沑㖻" 
"好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞椃䬉㬔蠔㠙鰝瀥昦㘪儫㬶嘷㝀㵆獆籇獋恏噑獔聕㩝灝䝞號虠䝥顥晧㙱㕺悎傐皡暤皥㚪暭鶴䒵㞻䚽䪽侾勂滈曍 [...]
+                 ))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") nil t nil)
+                 
'("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑懝兒䮘㧱聻㮞檷䀑抐誽䍲㮏㲡䘌縌㠜儞䘦鈮䰯伱愵嬺氼䘽䵑䵒屔婗䝚䁥䕥孨㵫屰䭲孴㹸譺㥾籾㦐㪒馜隬蚭抳䦵㲻㞾痆㣇䧇狋䛏胒鯓狔秜跜嫟迡鯢淣苨擬觬埿鑈棿腝蛪㘈眤㩘晲掜禰妳堄儗輗蜺鉨齯鶂貎膩暱惄柅鷊臡郳衵"
 
"好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞椃䬉㬔蠔㠙鰝瀥昦㘪儫㬶嘷㝀㵆獆籇獋恏噑獔聕㩝灝䝞號虠䝥顥晧㙱㕺悎傐皡暤皥㚪暭鶴䒵㞻䚽䪽侾勂滈曍䧚哠狢䧫䯫峼鎬竓藃譹薃澔皜秏諕暠薧呺茠")))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil nil)
+                 
'("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑懝兒䮘㧱聻㮞檷䀑抐誽䍲㮏㲡䘌縌㠜儞䘦鈮䰯伱愵嬺氼䘽䵑䵒屔婗䝚䁥䕥孨㵫屰䭲孴㹸譺㥾籾㦐㪒馜隬蚭抳䦵㲻㞾痆㣇䧇狋䛏胒鯓狔秜跜嫟迡鯢淣苨擬觬埿鑈棿腝蛪㘈眤㩘晲掜禰妳堄儗輗蜺鉨齯鶂貎膩暱惄柅鷊臡郳衵"
 
"好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞椃䬉㬔蠔㠙鰝瀥昦㘪儫㬶嘷㝀㵆獆籇獋恏噑獔聕㩝灝䝞號虠䝥顥晧㙱㕺悎傐皡暤皥㚪暭鶴䒵㞻䚽䪽侾勂滈曍䧚哠狢䧫䯫峼鎬竓藃譹薃澔皜秏諕暠薧呺茠")))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil 1)
+                 '("你尼呢泥拟逆倪妮腻匿霓溺" "好号毫豪耗浩郝皓昊镐蒿壕")))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil 2)
+                 '("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝" "好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮")))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil 3)
+                 '("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑" "好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞")
+                 ))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil 4)
+                 
'("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑懝兒䮘㧱聻㮞檷䀑抐誽䍲㮏㲡䘌縌㠜儞䘦鈮䰯伱愵嬺氼䘽䵑䵒屔婗䝚䁥䕥孨㵫屰䭲孴㹸譺㥾籾㦐㪒馜隬蚭抳䦵㲻㞾痆㣇䧇狋䛏胒鯓狔秜跜嫟迡鯢淣苨擬觬埿鑈棿腝蛪㘈眤㩘晲掜禰妳堄儗輗蜺鉨齯鶂貎膩暱惄柅鷊臡郳衵"
 
"好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞椃䬉㬔蠔㠙鰝瀥昦㘪儫㬶嘷㝀㵆獆籇獋恏噑獔聕㩝灝䝞號虠䝥顥晧㙱㕺悎傐皡暤皥㚪暭鶴䒵㞻䚽䪽侾勂滈曍䧚哠狢䧫䯫峼鎬竓藃譹薃澔皜秏諕暠薧呺茠")))
+
+  (should (equal (pyim-cregexp-quanpin-get-cchars-from-pinyin-list '("ni" 
"hao") t nil 5)
+                 
'("你尼呢泥拟逆倪妮腻匿霓溺旎昵坭铌鲵伲怩睨祢疒猊慝鹝鹢薿麑懝兒䮘㧱聻㮞檷䀑抐誽䍲㮏㲡䘌縌㠜儞䘦鈮䰯伱愵嬺氼䘽䵑䵒屔婗䝚䁥䕥孨㵫屰䭲孴㹸譺㥾籾㦐㪒馜隬蚭抳䦵㲻㞾痆㣇䧇狋䛏胒鯓狔秜跜嫟迡鯢淣苨擬觬埿鑈棿腝蛪㘈眤㩘晲掜禰妳堄儗輗蜺鉨齯鶂貎膩暱惄柅鷊臡郳衵"
 
"好号毫豪耗浩郝皓昊镐蒿壕灏嚎濠蚝貉颢嗥薅嚆鸮诐淏鄗皞椃䬉㬔蠔㠙鰝瀥昦㘪儫㬶嘷㝀㵆獆籇獋恏噑獔聕㩝灝䝞號虠䝥顥晧㙱㕺悎傐皡暤皥㚪暭鶴䒵㞻䚽䪽侾勂滈曍䧚哠狢䧫䯫峼鎬竓藃譹薃澔皜秏諕暠薧呺茠")))
+
+  )
+
 ;; ** pyim-import 相关单元测试
 (ert-deftest pyim-tests-pyim-import-words-and-counts ()
   ;; 这个测试目前主要用于手工测试,在 github 上这个测试无法通过的。



reply via email to

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