I have defined expand and execute functions for 'text' source blocks as follows:
(defun org-babel-expand-body:text (body params)
(org-trim body))
(defun org-babel-execute:text (body params)
(org-trim body))
I do this so that I can create basic templates for things like css, html, and configuration files. I want to use clojure to manipulate the text defined in these blocks as a string. For example, here I want to turn the output of the "sample" block into a clojure string in the "clojure-sample" block:
#+NAME: sample
#+begin_src text
some
text
#+end_src
#+RESULTS: sample
: some
:
:
: text
#+NAME: clojure-sample
#+begin_src clojure :noweb yes :results pp
"<<sample()>>"
#+end_src
But when I run org-babel-expand-src-block
on the "clojure-sample" block, it expands to:
"some
"
"
"text"
Why this is not being expanded into a single string and how I might fix it?
These are the expand and execute definitions for clojure source blocks.
(defun org-babel-expand-body:clojure (body params)
"Expand BODY according to PARAMS, return the expanded body."
(let* ((vars (org-babel--get-vars params))
(result-params (cdr (assq :result-params params)))
(print-level nil)
(print-length nil)
(body
(org-trim
(format "%s"
;; Variables binding.
(if (null vars) (org-trim body)
(format "(let [%s]\n%s)"
(mapconcat
(lambda (var)
(format "%S (quote %S)" (car var) (cdr var)))
vars
"\n ")
body))))))
(if (or (member "code" result-params)
(member "pp" result-params))
(format "(clojure.pprint/pprint (do %s))" body)
body)))
(defun org-babel-execute:clojure (body params)
(let ((expanded (org-babel-expand-body:clojure body params))
(response (cons 'dict nil)))
(let ((result-params (cdr (assoc :result-params params))))
(setq response (nrepl-sync-request:eval expanded
(cider-current-connection)
(cider-current-ns)))
(setq result (concat (nrepl-dict-get response
(if (or
(member "output" result-params)
(member "pp" result-params))
"out"
"value"))
(nrepl-dict-get response "ex")
(nrepl-dict-get response "root-ex")
(nrepl-dict-get response "err")))
(org-babel-result-cond (cdr (assoc :result-params params))
result
(condition-case nil (org-babel-script-excape result)
(error result))))))