mirror of
https://github.com/logseq/logseq.git
synced 2026-05-04 19:06:21 +00:00
30 lines
1.1 KiB
Clojure
30 lines
1.1 KiB
Clojure
(ns frontend.util.list
|
|
"High level list operations for use in editor"
|
|
(:require [clojure.string :as string]))
|
|
|
|
(defn- newline?
|
|
[line]
|
|
(or (= line "\n") (= line "\r\n")))
|
|
|
|
(defn re-order-items
|
|
[lines start-idx]
|
|
(loop [lines lines
|
|
idx start-idx
|
|
result []
|
|
double-newlines? false]
|
|
(let [[line & others] lines]
|
|
(if (empty? lines)
|
|
(->> result
|
|
(map (fn [line] (if (newline? line) "" line)))
|
|
(string/join "\n"))
|
|
(let [[_ num-str] (re-find #"^(\d+){1}\." line)
|
|
num (if num-str (parse-long num-str) nil)
|
|
double-newlines?' (or double-newlines?
|
|
(and (newline? line) (seq others) (newline? (first others))))
|
|
[idx' result'] (if (and (not double-newlines?') num)
|
|
(let [idx' (inc idx)
|
|
line' (string/replace-first line (str num ".") (str idx' "."))]
|
|
[idx' (conj result line')])
|
|
[idx (conj result line)])]
|
|
(recur others idx' result' double-newlines?'))))))
|