Compare commits
1 commit
master
...
selmer-upd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
419a7ca35a |
3 changed files with 31 additions and 11 deletions
2
deps.edn
2
deps.edn
|
|
@ -37,7 +37,7 @@
|
||||||
org.clojure/core.match {:mvn/version "1.0.0"}
|
org.clojure/core.match {:mvn/version "1.0.0"}
|
||||||
hiccup/hiccup {:mvn/version "2.0.0-alpha2"}
|
hiccup/hiccup {:mvn/version "2.0.0-alpha2"}
|
||||||
rewrite-clj/rewrite-clj {:mvn/version "1.0.605-alpha"}
|
rewrite-clj/rewrite-clj {:mvn/version "1.0.605-alpha"}
|
||||||
selmer/selmer {:mvn/version "1.12.40"}
|
selmer/selmer {:mvn/version "1.12.41"}
|
||||||
com.taoensso/timbre {:mvn/version "5.1.2"}
|
com.taoensso/timbre {:mvn/version "5.1.2"}
|
||||||
org.clojure/tools.logging {:mvn/version "1.1.0"}}
|
org.clojure/tools.logging {:mvn/version "1.1.0"}}
|
||||||
:aliases {:babashka/dev
|
:aliases {:babashka/dev
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
(ns babashka.impl.selmer
|
(ns babashka.impl.selmer
|
||||||
{:no-doc true}
|
{:no-doc true}
|
||||||
(:require [babashka.impl.classpath :refer [resource]]
|
(:require [babashka.impl.classpath :refer [resource]]
|
||||||
|
[babashka.impl.common :refer [ctx]]
|
||||||
[sci.core :as sci]
|
[sci.core :as sci]
|
||||||
[selmer.filters :as filters]
|
[selmer.filters :as filters]
|
||||||
[selmer.parser]
|
[selmer.parser]
|
||||||
|
|
@ -10,20 +11,23 @@
|
||||||
|
|
||||||
(def spns (sci/create-ns 'selmer.parser nil))
|
(def spns (sci/create-ns 'selmer.parser nil))
|
||||||
|
|
||||||
|
(def include #{'env-map})
|
||||||
|
|
||||||
(defn make-ns [ns sci-ns]
|
(defn make-ns [ns sci-ns]
|
||||||
(reduce (fn [ns-map [var-name var]]
|
(reduce (fn [ns-map [var-name var]]
|
||||||
(let [m (meta var)
|
(let [m (meta var)
|
||||||
no-doc (:no-doc m)
|
no-doc (:no-doc m)
|
||||||
doc (:doc m)
|
doc (:doc m)
|
||||||
arglists (:arglists m)]
|
arglists (:arglists m)]
|
||||||
(if no-doc ns-map
|
(if (and no-doc (not (contains? include var-name)))
|
||||||
(assoc ns-map var-name
|
ns-map
|
||||||
(sci/new-var (symbol var-name) @var
|
(assoc ns-map var-name
|
||||||
(cond-> {:ns sci-ns
|
(sci/new-var (symbol var-name) @var
|
||||||
:name (:name m)}
|
(cond-> {:ns sci-ns
|
||||||
(:macro m) (assoc :macro true)
|
:name (:name m)}
|
||||||
doc (assoc :doc doc)
|
(:macro m) (assoc :macro true)
|
||||||
arglists (assoc :arglists arglists)))))))
|
doc (assoc :doc doc)
|
||||||
|
arglists (assoc :arglists arglists)))))))
|
||||||
{}
|
{}
|
||||||
(ns-publics ns)))
|
(ns-publics ns)))
|
||||||
|
|
||||||
|
|
@ -55,11 +59,27 @@
|
||||||
(binding [util/*escape-variables* @escape-variables]
|
(binding [util/*escape-variables* @escape-variables]
|
||||||
(selmer.parser/render-template template context-map)))
|
(selmer.parser/render-template template context-map)))
|
||||||
|
|
||||||
|
(defn sci-resolve [fqs]
|
||||||
|
(let [res (sci/eval-form @ctx (list 'clojure.core/resolve (list 'quote fqs)))]
|
||||||
|
(if (instance? clojure.lang.IDeref res) @res res)))
|
||||||
|
|
||||||
|
(defn resolve-var-from-kw [env kw]
|
||||||
|
(when-let [value (if (namespace kw)
|
||||||
|
(try (sci-resolve (symbol (str (namespace kw) "/" (name kw))))
|
||||||
|
(catch java.lang.RuntimeException _ nil))
|
||||||
|
(or
|
||||||
|
;; check local env first
|
||||||
|
(get env kw nil)
|
||||||
|
(try (sci-resolve (symbol (str (name kw))))
|
||||||
|
(catch java.lang.RuntimeException _ nil))))]
|
||||||
|
{kw value}))
|
||||||
|
|
||||||
(def selmer-parser-namespace
|
(def selmer-parser-namespace
|
||||||
(-> selmer-parser-ns
|
(-> selmer-parser-ns
|
||||||
(assoc 'render-file (sci/copy-var render-file spns)
|
(assoc 'render-file (sci/copy-var render-file spns)
|
||||||
'render (sci/copy-var render spns)
|
'render (sci/copy-var render spns)
|
||||||
'render-template (sci/copy-var render-template spns))))
|
'render-template (sci/copy-var render-template spns)
|
||||||
|
'resolve-var-from-kw (sci/copy-var resolve-var-from-kw spns))))
|
||||||
|
|
||||||
(def stns (sci/create-ns 'selmer.tags nil))
|
(def stns (sci/create-ns 'selmer.tags nil))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
:feature/rewrite-clj {:source-paths ["feature-rewrite-clj"]
|
:feature/rewrite-clj {:source-paths ["feature-rewrite-clj"]
|
||||||
:dependencies [[rewrite-clj/rewrite-clj "1.0.605-alpha"]]}
|
:dependencies [[rewrite-clj/rewrite-clj "1.0.605-alpha"]]}
|
||||||
:feature/selmer {:source-paths ["feature-selmer"]
|
:feature/selmer {:source-paths ["feature-selmer"]
|
||||||
:dependencies [[selmer/selmer "1.12.40"]]}
|
:dependencies [[selmer/selmer "1.12.41"]]}
|
||||||
:test [:feature/xml
|
:test [:feature/xml
|
||||||
:feature/lanterna
|
:feature/lanterna
|
||||||
:feature/yaml
|
:feature/yaml
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue