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
|
## Projects
|
||||||
|
|
||||||
### [deps.clj](https://github.com/borkdude/deps.clj)
|
### [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.main :as clojure-main :refer [demunge]]
|
||||||
[babashka.impl.clojure.pprint :refer [pprint-namespace]]
|
[babashka.impl.clojure.pprint :refer [pprint-namespace]]
|
||||||
[babashka.impl.clojure.stacktrace :refer [stacktrace-namespace]]
|
[babashka.impl.clojure.stacktrace :refer [stacktrace-namespace]]
|
||||||
|
[babashka.impl.clojure.zip :refer [zip-namespace]]
|
||||||
[babashka.impl.common :as common]
|
[babashka.impl.common :as common]
|
||||||
[babashka.impl.curl :refer [curl-namespace]]
|
[babashka.impl.curl :refer [curl-namespace]]
|
||||||
[babashka.impl.features :as features]
|
[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
|
'clojure.java.io io-namespace
|
||||||
'cheshire.core cheshire-core-namespace
|
'cheshire.core cheshire-core-namespace
|
||||||
'clojure.stacktrace stacktrace-namespace
|
'clojure.stacktrace stacktrace-namespace
|
||||||
|
'clojure.zip zip-namespace
|
||||||
'clojure.main {'demunge demunge
|
'clojure.main {'demunge demunge
|
||||||
'repl-requires clojure-main/repl-requires}
|
'repl-requires clojure-main/repl-requires}
|
||||||
'clojure.test t/clojure-test-namespace
|
'clojure.test t/clojure-test-namespace
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue