std.block.reader

create

added in 3.0

(create string)

create reader from string

(type (create “hello world”)) => clojure.tools.reader.reader_types.IndexingPushbackReader

ignore-char

added in 3.0

(ignore-char reader)

returns nil and moves reader one char forward

(->> ignore-char (read-repeatedly (create “abc”)) (take 3) (apply str)) => ""

peek-char

added in 3.0

(peek-char reader)

returns the current reader char with moving

(->> (read-times (create “abc”) peek-char 3) (apply str)) => “aaa”

read-char

added in 3.0

(read-char reader)

reads single char and move forward

(->> read-char (read-repeatedly (create “abc”)) (take 3) (apply str)) => “abc”

read-include

added in 3.0

(read-include reader read-fn)(read-include reader read-fn stop-fn)

reads up to a given predicate

(read-include (create " a") read-char (complement check/voidspace?)) => [\space \space \a]

read-repeatedly

added in 3.0

(read-repeatedly reader read-fn)(read-repeatedly reader read-fn stop-fn)

reads input repeatedly

(->> (read-repeatedly (create “abcdefg”) #(str (read-char %) (read-char %)) empty?) (take 5)) => “ab” “cd” “ef” “g”

read-times

added in 3.0

(read-times reader read-fn n)

reads input repeatedly

(->> (read-times (create “abcdefg”) #(str (read-char %) (read-char %)) 2)) => “ab” “cd”

read-to-boundary

added in 3.0

(read-to-boundary reader)(read-to-boundary reader allowed)

reads to an input boundary

(read-to-boundary (create “abc efg”)) => “abc”

read-until

added in 3.0

(read-until reader pred)

reads inputs until the predicate is reached

(read-until (create “abcde”) (fn ch (= (str ch) “d”))) => “abc”

read-while

added in 3.0

(read-while reader pred & [eof?])

reads input while the predicate is true

(read-while (create “abcde”) (fn ch (not= (str ch) “d”))) => “abc”

reader-position

added in 3.0

(reader-position reader)

returns the position of the reader

(-> (create “abc”) step-char step-char reader-position) => 1 3

slurp

added in 3.0

(slurp reader)

reads rest of input from reader

(reader/slurp (reader/step-char (create “abc efg”))) => “bc efg”

step-char

added in 3.0

(step-char reader)

moves reader one char forward

(-> (create “abc”) step-char read-char str) => “b”

throw-reader

added in 3.0

(throw-reader reader message & input)

throws a reader message

(throw-reader (create “abc”) “Message” {:data true}) => (throws)

unread-char

added in 3.0

(unread-char reader ch)

move reader one char back, along with char

(-> (create “abc”) (step-char) (unread-char \A) (reader/slurp)) => “Abc”