Просмотр исходного кода

enhance: jump to the end of ]] if not show double brackets

Tienson Qin 4 лет назад
Родитель
Сommit
029af35e39
1 измененных файлов с 25 добавлено и 19 удалено
  1. 25 19
      src/main/frontend/diff.cljs

+ 25 - 19
src/main/frontend/diff.cljs

@@ -4,7 +4,8 @@
             ["diff-match-patch" :as diff-match-patch]
             ["diff-match-patch" :as diff-match-patch]
             [goog.object :as gobj]
             [goog.object :as gobj]
             [lambdaisland.glogi :as log]
             [lambdaisland.glogi :as log]
-            [cljs-bean.core :as bean]))
+            [cljs-bean.core :as bean]
+            [frontend.util :as util]))
 
 
 ;; TODO: replace with diff-match-patch
 ;; TODO: replace with diff-match-patch
 (defn diff
 (defn diff
@@ -33,24 +34,29 @@
 (defn find-position
 (defn find-position
   [markup text]
   [markup text]
   (try
   (try
-    (loop [t1 (-> markup string/lower-case seq)
-           t2 (-> text   string/lower-case seq)
-           i1 0
-           i2 0]
-      (let [[h1 & r1] t1
-            [h2 & r2] t2]
-        (cond
-          (or (empty? t1) (empty? t2))
-          i1
-
-          (= h1 h2)
-          (recur r1 r2 (inc i1) (inc i2))
-
-          (#{\[ \space \]} h2)
-          (recur t1 r2 i1 (inc i2))
-
-          :else
-          (recur r1 t2 (inc i1) i2))))
+    (let [pos (loop [t1 (-> markup string/lower-case seq)
+                     t2 (-> text   string/lower-case seq)
+                     i1 0
+                     i2 0]
+                (let [[h1 & r1] t1
+                      [h2 & r2] t2]
+                  (cond
+                    (or (empty? t1) (empty? t2))
+                    i1
+
+                    (= h1 h2)
+                    (recur r1 r2 (inc i1) (inc i2))
+
+                    (#{\[ \space \]} h2)
+                    (recur t1 r2 i1 (inc i2))
+
+                    :else
+                    (recur r1 t2 (inc i1) i2))))]
+      (if (and (= (util/nth-safe markup pos)
+                  (util/nth-safe markup (inc pos))
+                  "]"))
+        (+ pos 2)
+        pos))
     (catch js/Error e
     (catch js/Error e
       (log/error :diff/find-position {:error e})
       (log/error :diff/find-position {:error e})
       (count markup))))
       (count markup))))