mirror of https://github.com/logseq/logseq
commit
d34a405d39
|
@ -2,6 +2,7 @@
|
||||||
(:require [clojure.string :as string]
|
(:require [clojure.string :as string]
|
||||||
["diff" :as jsdiff]
|
["diff" :as jsdiff]
|
||||||
[goog.object :as gobj]
|
[goog.object :as gobj]
|
||||||
|
[lambdaisland.glogi :as log]
|
||||||
[cljs-bean.core :as bean]))
|
[cljs-bean.core :as bean]))
|
||||||
|
|
||||||
(defn diff
|
(defn diff
|
||||||
|
@ -12,36 +13,25 @@
|
||||||
;; (find-position "** hello _w_" "hello w")
|
;; (find-position "** hello _w_" "hello w")
|
||||||
(defn find-position
|
(defn find-position
|
||||||
[markup text]
|
[markup text]
|
||||||
(cond
|
(try
|
||||||
(<= (count markup) (count text))
|
(loop [t1 (-> markup string/lower-case seq)
|
||||||
(dec (count markup))
|
t2 (-> text string/lower-case seq)
|
||||||
|
i1 0
|
||||||
|
i2 0]
|
||||||
|
(let [[h1 & r1] t1
|
||||||
|
[h2 & r2] t2]
|
||||||
|
(cond
|
||||||
|
(or (empty? t1) (empty? t2))
|
||||||
|
i1
|
||||||
|
|
||||||
:else
|
(= h1 h2)
|
||||||
(try
|
(recur r1 r2 (inc i1) (inc i2))
|
||||||
(let [markup (string/lower-case markup)
|
|
||||||
text (-> (string/replace text #"\s+" "")
|
|
||||||
(string/lower-case))
|
|
||||||
v1 (vec markup)
|
|
||||||
v2 (vec text)]
|
|
||||||
(loop [v1-chars v1
|
|
||||||
v2-chars v2
|
|
||||||
v1-idx 0
|
|
||||||
v2-idx 0]
|
|
||||||
(cond
|
|
||||||
(empty? v2-chars)
|
|
||||||
(dec v1-idx)
|
|
||||||
|
|
||||||
:else
|
(#{\[ \space \]} h2)
|
||||||
(if (= (nth v1 v1-idx)
|
(recur t1 r2 i1 (inc i2))
|
||||||
(nth v2 v2-idx))
|
|
||||||
(recur (rest v1-chars)
|
:else
|
||||||
(rest v2-chars)
|
(recur r1 t2 (inc i1) i2))))
|
||||||
(inc v1-idx)
|
|
||||||
(inc v2-idx))
|
|
||||||
(recur (rest v1-chars)
|
|
||||||
v2-chars
|
|
||||||
(inc v1-idx)
|
|
||||||
v2-idx)))))
|
|
||||||
(catch js/Error e
|
(catch js/Error e
|
||||||
(prn "diff error: " e)
|
(log/error :diff/find-position {:error e})
|
||||||
(dec (count markup))))))
|
(count markup))))
|
||||||
|
|
|
@ -145,7 +145,7 @@
|
||||||
(when-let [node (gdom/getElement (str id))]
|
(when-let [node (gdom/getElement (str id))]
|
||||||
(when-let [cursor-range (state/get-cursor-range)]
|
(when-let [cursor-range (state/get-cursor-range)]
|
||||||
(when-let [range (string/trim cursor-range)]
|
(when-let [range (string/trim cursor-range)]
|
||||||
(let [pos (inc (diff/find-position markup range))]
|
(let [pos (diff/find-position markup range)]
|
||||||
(util/set-caret-pos! node pos)))))))
|
(util/set-caret-pos! node pos)))))))
|
||||||
|
|
||||||
(defn block-content-join-newlines
|
(defn block-content-join-newlines
|
||||||
|
|
Loading…
Reference in New Issue