(def header-xml "<?xml version=\"1.0\"?>")
(def header-svg "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">")
(def footer "\"/>\n</svg>")

(defn append-to-file
  [file-name s]
  (spit file-name s :append true))



(defn print-line [x y len file]
  (append-to-file file (str "M " x " " y))
  (append-to-file file (str "h " len))
  (append-to-file file (str "v " len))
  (append-to-file file (str "h " (- 0 len)))
  (append-to-file file (str "v -" len))  
  )

(defn fractal-cross [x y len file]
  (if (< len 3)
    (print-line x y len file)
    (let [l3 (/ len 3.0) l23 (* l3 2)]
      (fractal-cross x y l3 file)
      (fractal-cross (+ x l23) y l3 file)
      (fractal-cross (+ x l3) (+ y l3) l3 file)
      (fractal-cross x (+ y l23) l3 file)
      (fractal-cross (+ x l23) (+ y l23) l3 file))))

(defn run [x,y,len file]
  (let [content "<path d=\""]
    (append-to-file file header-xml)
    (append-to-file file header-svg)
    (append-to-file file content)
    (fractal-cross x y len file)
    (append-to-file file footer)))


(run 0.0 0.0 729.0 "test.svg")