| 1234567891011121314151617181920212223242526272829 |
- (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?'))))))
|