[#15] Add println

This commit is contained in:
Michiel Borkent 2021-08-24 09:40:12 +02:00
parent 4cb8e16daf
commit 595d4d3ead
5 changed files with 79 additions and 8 deletions

35
src/scittle/impl/io.cljs Normal file
View file

@ -0,0 +1,35 @@
(ns scittle.impl.io
(:refer-clojure :exclude [prn print println with-out-str])
(:require
[cljs.core :as c]
[goog.string]
[sci.core :as sci]
[scittle.impl.common :refer [cljns]]))
(def print-fn (sci/copy-var *print-fn* cljns))
(def print-newline (sci/copy-var *print-newline* cljns))
(defn println [& objs]
(binding [*print-fn* @print-fn
*print-newline* @print-newline]
(apply c/println objs)))
(defn prn [& objs]
(binding [*print-fn* @print-fn
*print-newline* @print-newline]
(apply c/prn objs)))
(defn print [& objs]
(binding [*print-fn* @print-fn]
(apply c/print objs)))
(defn ^:macro with-out-str
"Evaluates exprs in a context in which *print-fn* is bound to .append
on a fresh StringBuffer. Returns the string created by any nested
printing calls."
[_ _ & body]
`(let [sb# (goog.string/StringBuffer.)]
(binding [cljs.core/*print-newline* true
cljs.core/*print-fn* (fn [x#] (.append sb# x#))]
~@body)
(cljs.core/str sb#)))