mirror of https://github.com/logseq/logseq
fix(diff-merge): multi-line blocks format
parent
fb4e23bb95
commit
fd493bde0d
|
@ -91,25 +91,37 @@
|
|||
(reverse headings))))))))
|
||||
|
||||
|
||||
(defn- prepend-lines
|
||||
"prepend prefix to every lines of content"
|
||||
[prefix content]
|
||||
(->> content
|
||||
(string/split-lines)
|
||||
(map (fn [line] (str prefix line)))
|
||||
(string/join "\n")))
|
||||
(defn- prepend-block-lines
|
||||
"prepend prefix to every lines of content except first"
|
||||
[fisrt-prefix prefix content]
|
||||
(let [lines (string/split-lines content)]
|
||||
(if (<= (count lines) 1)
|
||||
(str fisrt-prefix content)
|
||||
(str (str fisrt-prefix (first lines))
|
||||
"\n"
|
||||
(->> (rest lines)
|
||||
(map (fn [line] (str prefix line)))
|
||||
(string/join "\n")))
|
||||
)))
|
||||
|
||||
(defn- rebuild-content
|
||||
"translate [[[op block]]] to merged content"
|
||||
[_base-diffblocks diffs format]
|
||||
;; [[[0 {:body "attrib:: xxx", :level 1, :uuid nil}] ...] ...]
|
||||
(let [level-prefix-fn (fn [level]
|
||||
(when (and (= format :markdown) (not= level 1))
|
||||
(apply str (repeat (dec level) "\t"))))
|
||||
(when (= format :markdown)
|
||||
(str (apply str (repeat (dec level) "\t"))
|
||||
" ")))
|
||||
heading-prefix-fn (fn [level]
|
||||
(when (= format :markdown)
|
||||
(str (apply str (repeat (dec level) "\t"))
|
||||
"- ")))
|
||||
ops-fn (fn [ops]
|
||||
(map (fn [[op {:keys [body level]}]]
|
||||
(when (or (= op 0) (= op 1)) ;; equal or insert
|
||||
(str (level-prefix-fn level) "-" (prepend-lines " " body))))
|
||||
(prepend-block-lines (heading-prefix-fn level)
|
||||
(level-prefix-fn level)
|
||||
body)))
|
||||
ops))]
|
||||
(->> diffs
|
||||
(mapcat ops-fn)
|
||||
|
|
Loading…
Reference in New Issue