adding support for clojure.zip (#435)
This commit is contained in:
parent
79cba0fbef
commit
eef0b046cd
4 changed files with 97 additions and 0 deletions
|
|
@ -187,6 +187,36 @@ $ bb "(use 'doric.core) (println (table [:a :b :c] [{:a 1 :b 2 :c 3} {:a 4 :b 5
|
|||
|---+---+---|
|
||||
```
|
||||
|
||||
### [clojure.data.zip](https://github.com/clojure/data.zip)
|
||||
|
||||
Utilities for clojure.zip, among other things a more fluent way to work
|
||||
with xml.
|
||||
|
||||
Small sample:
|
||||
``` clojure
|
||||
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {org.clojure/data.zip {:mvn/version "1.0.0"}}}')
|
||||
|
||||
$ cat data_zip_xml.clj
|
||||
(require '[clojure.data.xml :as xml])
|
||||
(require '[clojure.zip :as zip])
|
||||
(require '[clojure.data.zip.xml :refer [text attr attr= xml-> xml1-> text=]])
|
||||
|
||||
(def data (str "<root>"
|
||||
" <character type=\"person\" name=\"alice\" />"
|
||||
" <character type=\"animal\" name=\"march hare\" />"
|
||||
"</root>"))
|
||||
|
||||
(let [xml (-> data java.io.StringReader. xml/parse zip/xml-zip)]
|
||||
(prn :alice-is-a (xml1-> xml :character [(attr= :name "alice")] (attr :type)))
|
||||
(prn :animal-is-called (xml1-> xml :character [(attr= :type "animal")] (attr :name))))
|
||||
|
||||
$ bb data_zip_xml.clj
|
||||
:alice-is-a "person"
|
||||
:animal-is-called "march hare"
|
||||
```
|
||||
(see for exaple [this article](https://blog.korny.info/2014/03/08/xml-for-fun-and-profit.html#datazip-for-zipper-awesomeness)
|
||||
for more on clojure.data.zip).
|
||||
|
||||
## Projects
|
||||
|
||||
### [deps.clj](https://github.com/borkdude/deps.clj)
|
||||
|
|
|
|||
28
script/lib_tests/clojure_data_zip_test
Executable file
28
script/lib_tests/clojure_data_zip_test
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {org.clojure/data.zip {:mvn/version "1.0.0"}}}' -Spath)"
|
||||
|
||||
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
|
||||
BB_CMD="./bb"
|
||||
else
|
||||
BB_CMD="lein bb"
|
||||
fi
|
||||
|
||||
$BB_CMD --verbose "
|
||||
(require '[clojure.data.xml :as xml])
|
||||
(require '[clojure.zip :as zip])
|
||||
(require '[clojure.data.zip.xml :refer [text attr attr= xml-> xml1-> text=]])
|
||||
|
||||
(def data (str \"<root>\"
|
||||
\" <character type=\\\"person\\\" name=\\\"alice\\\" />\"
|
||||
\" <character type=\\\"animal\\\" name=\\\"march hare\\\" />\"
|
||||
\"</root>\"))
|
||||
|
||||
;(prn :data data)
|
||||
(let [xml (zip/xml-zip (xml/parse (java.io.StringReader. data)))]
|
||||
;(prn :xml xml)
|
||||
(prn :alice-is-a (xml1-> xml :character [(attr= :name \"alice\")] (attr :type)))
|
||||
(prn :animal-is-called (xml1-> xml :character [(attr= :type \"animal\")] (attr :name))))
|
||||
"
|
||||
37
src/babashka/impl/clojure/zip.clj
Normal file
37
src/babashka/impl/clojure/zip.clj
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
(ns babashka.impl.clojure.zip
|
||||
{:no-doc true}
|
||||
(:require [clojure.zip :as zip]
|
||||
[sci.impl.namespaces :refer [copy-var]]
|
||||
[sci.impl.vars :as vars]))
|
||||
|
||||
(def zip-ns (vars/->SciNamespace 'clojure.zip nil))
|
||||
|
||||
(def zip-namespace
|
||||
{'zipper (copy-var zip/zipper zip-ns)
|
||||
'seq-zip (copy-var zip/seq-zip zip-ns)
|
||||
'vector-zip (copy-var zip/vector-zip zip-ns)
|
||||
'xml-zip (copy-var zip/xml-zip zip-ns)
|
||||
'node (copy-var zip/node zip-ns)
|
||||
'branch? (copy-var zip/branch? zip-ns)
|
||||
'children (copy-var zip/children zip-ns)
|
||||
'make-node (copy-var zip/make-node zip-ns)
|
||||
'path (copy-var zip/path zip-ns)
|
||||
'lefts (copy-var zip/lefts zip-ns)
|
||||
'rights (copy-var zip/rights zip-ns)
|
||||
'down (copy-var zip/down zip-ns)
|
||||
'up (copy-var zip/up zip-ns)
|
||||
'root (copy-var zip/root zip-ns)
|
||||
'right (copy-var zip/right zip-ns)
|
||||
'rightmost (copy-var zip/rightmost zip-ns)
|
||||
'left (copy-var zip/left zip-ns)
|
||||
'leftmost (copy-var zip/leftmost zip-ns)
|
||||
'insert-left (copy-var zip/insert-left zip-ns)
|
||||
'insert-right (copy-var zip/insert-right zip-ns)
|
||||
'replace (copy-var zip/replace zip-ns)
|
||||
'edit (copy-var zip/edit zip-ns)
|
||||
'insert-child (copy-var zip/insert-child zip-ns)
|
||||
'append-child (copy-var zip/append-child zip-ns)
|
||||
'next (copy-var zip/next zip-ns)
|
||||
'prev (copy-var zip/prev zip-ns)
|
||||
'end? (copy-var zip/end? zip-ns)
|
||||
'remove (copy-var zip/remove zip-ns)})
|
||||
|
|
@ -11,6 +11,7 @@
|
|||
[babashka.impl.clojure.main :as clojure-main :refer [demunge]]
|
||||
[babashka.impl.clojure.pprint :refer [pprint-namespace]]
|
||||
[babashka.impl.clojure.stacktrace :refer [stacktrace-namespace]]
|
||||
[babashka.impl.clojure.zip :refer [zip-namespace]]
|
||||
[babashka.impl.common :as common]
|
||||
[babashka.impl.curl :refer [curl-namespace]]
|
||||
[babashka.impl.features :as features]
|
||||
|
|
@ -350,6 +351,7 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that
|
|||
'clojure.java.io io-namespace
|
||||
'cheshire.core cheshire-core-namespace
|
||||
'clojure.stacktrace stacktrace-namespace
|
||||
'clojure.zip zip-namespace
|
||||
'clojure.main {'demunge demunge
|
||||
'repl-requires clojure-main/repl-requires}
|
||||
'clojure.test t/clojure-test-namespace
|
||||
|
|
|
|||
Loading…
Reference in a new issue