Skip to content

Instantly share code, notes, and snippets.

@betamatt
Created December 21, 2014 19:18

Revisions

  1. betamatt created this gist Dec 21, 2014.
    13 changes: 13 additions & 0 deletions split_lines.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    (defn- split-lines
    "Takes a sequence of content chunks and returns a lazy sequence of individual lines.
    (\"abc\" \"de\\nabc\") becomes (\"abcde\" \"abc\")"
    [stream]
    (let [
    chunk (first stream)
    remainder (rest stream)
    [line leftover] (string/split chunk #"\n+" 2)]
    (if leftover
    (lazy-seq (cons line (split-lines (cons leftover remainder))))
    (recur (cons
    (string/join "" (cons line (first remainder)))
    (rest remainder))))))