diff --git a/doerg/src/net/deertopia/doerg/tex/temml.clj b/doerg/src/net/deertopia/doerg/tex/temml.clj index 22082fb..fed2aff 100644 --- a/doerg/src/net/deertopia/doerg/tex/temml.clj +++ b/doerg/src/net/deertopia/doerg/tex/temml.clj @@ -17,13 +17,17 @@ (def ^:dynamic *worker*) -(def ^:private prelude-file - (fs/create-temp-file {:prefix "doerg-prelude-" - :suffix ".tex"})) +;; 외부의 브로그램이 JVM resource를 사용 위해서 파일 시스템에서 써야 +;; 합니다. +(defonce ^:private prelude-file + (-> (fs/create-temp-file {:prefix "doerg-prelude-" + :suffix ".tex"}) + fs/file)) (defn worker [] (let [doerg-temml-worker (-> cfg/*cfg* ::doerg/doerg-temml-worker)] - (when-not (fs/exists? prelude-file) + (when (or (not (fs/exists? prelude-file)) + (zero? (fs/size prelude-file))) (-> "net/deertopia/doerg/prelude.tex" io/resource io/input-stream @@ -55,7 +59,11 @@ (defn command-worker [x] (cbor/encode cbor/default-codec (:in *worker*) x) (.flush (:in *worker*)) - (cbor/decode cbor/default-codec (:out *worker*))) + (let [r (cbor/decode cbor/default-codec (:out *worker*))] + (if (string? r) + r + (throw (ex-info "bad data from temml worker" + {:data r}))))) (defn render-inline [s] (command-worker s))