mirror of
https://github.com/logseq/logseq.git
synced 2026-04-25 14:44:53 +00:00
61 lines
1.5 KiB
Clojure
61 lines
1.5 KiB
Clojure
(ns frontend.diff
|
|
(:require [clojure.string :as string]
|
|
["diff" :as jsdiff]
|
|
[goog.object :as gobj]
|
|
[cljs-bean.core :as bean]))
|
|
|
|
(defn diff
|
|
[s1 s2]
|
|
(-> ((gobj/get jsdiff "diffLines") s1 s2)
|
|
bean/->clj))
|
|
|
|
(defn diff-words
|
|
[s1 s2]
|
|
(-> ((gobj/get jsdiff "diffWords") s1 s2)
|
|
bean/->clj))
|
|
|
|
(defn removed?
|
|
[s1 s2]
|
|
(when (and s1 s2)
|
|
(let [diff-result (diff-words s1 s2)]
|
|
(->> diff-result
|
|
(some :removed)
|
|
(boolean)))))
|
|
|
|
;; (find-position "** hello _w_" "hello w")
|
|
(defn find-position
|
|
[markup text]
|
|
(cond
|
|
(<= (count markup) (count text))
|
|
(dec (count markup))
|
|
|
|
:else
|
|
(try
|
|
(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
|
|
(if (= (nth v1 v1-idx)
|
|
(nth v2 v2-idx))
|
|
(recur (rest v1-chars)
|
|
(rest v2-chars)
|
|
(inc v1-idx)
|
|
(inc v2-idx))
|
|
(recur (rest v1-chars)
|
|
v2-chars
|
|
(inc v1-idx)
|
|
v2-idx)))))
|
|
(catch js/Error e
|
|
(prn "diff error: " e)
|
|
(dec (count markup))))))
|