次のコードがあります。これは、一連のデバイスをSVGとして表すことを目的としています。
(ns foo.core
(:use [c2.core :only [unify]]
[c2.dom :only [replace! append!]]
[c2.svg :only [translate]]))
(def conf
{ :devices [{:alias "OSC Sender",
:name "OSC Sender",
:ins []},
{:alias "const2", :name "const",
:outs []}],
:layout [{:alias "const2",
:x 72.12447405329594,
:y 99.88499298737729},
{:alias "tick",
:x 82.5732819074334,
:y 133.91374474053296},
{:alias "OSC Sender",
:x 185.17741935483872,
:y 113.90322580645162}]})
(def render-config
[:svg {:viewBox "0 0 900 400"}
[:rect {:id "frame" :x "1" :y "1" :width "600" :height "300" :fill "none" :stroke "blue"}]
(unify (:layout conf)
(fn [{alias :alias x :x y :y}]
[:g {:transform (translate [x y])}
[:text alias]]))])
(append! "#main" render-config)
render-config
REPLで評価しようとすると、次のようになります。
[:svg {:viewBox "0 0 900 400"} [:rect {:width "600", :y "1", :x "1", :fill "none", :stroke "blue", :id "frame", :height "300"}] ([:g {:transform "translate(72,99)"} [:text "const2"]] [:g {:transform "translate(82,133)"} [:text "tick"]] [:g {:transform "translate(185,113)"} [:text "OSC Sender"]])]
これは私には適切なヒカップ表現のように見えます(確かunify
にその魔法を実行しました)。
しかし、render-config
(を使用して)Webページのコンテキストで評価するとsingult
、エラーが発生するだけです。非常に単純なSVG(基本的には囲んでいる「フレーム」長方形のみ)の生成はブラウザーで機能します。
ヒント/ヒントはありますか?
乾杯!
注:をrender-config
使用してレンダリングしHiccup
、結果をファイルに吐き出すと、Inkscapeで読み取り可能なSVG画像が得られます。