|
@@ -40,19 +40,28 @@
|
|
|
(cursor/move-cursor-to input current-pos)
|
|
|
@end-pos)))
|
|
|
|
|
|
+(defn- newline?
|
|
|
+ [line]
|
|
|
+ (or (= line "\n") (= line "\r\n")))
|
|
|
+
|
|
|
(defn re-order-items
|
|
|
[lines start-idx]
|
|
|
(loop [lines lines
|
|
|
idx start-idx
|
|
|
- result nil]
|
|
|
+ result []
|
|
|
+ double-newlines? false]
|
|
|
(let [[line & others] lines]
|
|
|
(if (empty? lines)
|
|
|
- result
|
|
|
+ (->> result
|
|
|
+ (map (fn [line] (if (newline? line) "" line)))
|
|
|
+ (string/join "\n"))
|
|
|
(let [[_ num-str] (re-find #"^(\d+){1}\." line)
|
|
|
num (if num-str (util/safe-parse-int num-str) nil)
|
|
|
- [idx' result'] (if num
|
|
|
+ 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' (if result (str result "\n" line') line')])
|
|
|
- [idx (str result "\n" line)])]
|
|
|
- (recur others idx' result'))))))
|
|
|
+ [idx' (conj result line')])
|
|
|
+ [idx (conj result line)])]
|
|
|
+ (recur others idx' result' double-newlines?'))))))
|