فهرست منبع

fix: remove spaces around CJK characters when auto-complete pages

close #5929
Tienson Qin 2 سال پیش
والد
کامیت
ef8b0db3dd
2فایلهای تغییر یافته به همراه10 افزوده شده و 8 حذف شده
  1. 5 7
      src/main/frontend/commands.cljs
  2. 5 1
      src/main/frontend/util.cljc

+ 5 - 7
src/main/frontend/commands.cljs

@@ -335,11 +335,15 @@
                            (+ current-pos i)))
                        current-pos)
           orig-prefix (subs edit-content 0 current-pos)
+          postfix (subs edit-content current-pos)
+          postfix (if postfix-fn (postfix-fn postfix) postfix)
           space? (let [space? (when (and last-pattern orig-prefix)
                                 (let [s (when-let [last-index (string/last-index-of orig-prefix last-pattern)]
                                           (gp-util/safe-subs orig-prefix 0 last-index))]
                                   (not
                                    (or
+                                    (util/cjk-string? (str (last orig-prefix)))
+                                    (util/cjk-string? (str (first postfix)))
                                     (and s
                                          (string/ends-with? s "(")
                                          (or (string/starts-with? last-pattern block-ref/left-parens)
@@ -365,8 +369,6 @@
 
                    :else
                    (util/replace-last last-pattern orig-prefix value space?))
-          postfix (subs edit-content current-pos)
-          postfix (if postfix-fn (postfix-fn postfix) postfix)
           new-value (cond
                       (string/blank? postfix)
                       prefix
@@ -380,11 +382,7 @@
                      (or backward-pos 0))]
       (when-not (string/blank? new-value)
         (state/set-block-content-and-last-pos! id new-value new-pos)
-        (cursor/move-cursor-to input
-                               (if (and (or backward-pos forward-pos)
-                                        (not= end-pattern page-ref/right-brackets))
-                                 new-pos
-                                 (inc new-pos)))))))
+        (cursor/move-cursor-to input new-pos)))))
 
 (defn simple-insert!
   [id value

+ 5 - 1
src/main/frontend/util.cljc

@@ -537,6 +537,10 @@
            (when-not not-space? " ")
            (triml-without-newlines right)))))
 
+(defn cjk-string?
+  [s]
+  (re-find #"[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]" s))
+
 ;; Add documentation
 (defn replace-first [pattern s new-value]
   (if-let [first-index (string/index-of s pattern)]
@@ -1437,7 +1441,7 @@
 (defn memoize-last
   "Different from core.memoize, it only cache the last result.
    Returns a memoized version of a referentially transparent function. The
-  memoized version of the function cache the the last result, and replay when calls 
+  memoized version of the function cache the the last result, and replay when calls
    with the same arguments, or update cache when with different arguments."
   [f]
   (let [last-mem (atom nil)