Skip to content

Instantly share code, notes, and snippets.

@fukamachi
Created September 16, 2014 22:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fukamachi/3e4cf07c5b7331d40b64 to your computer and use it in GitHub Desktop.
Save fukamachi/3e4cf07c5b7331d40b64 to your computer and use it in GitHub Desktop.
;; http://kinokoru.jp/archives/840
(defmacro css (name elems)
`(with-open-file
(*standard-output* ,(string-downcase name) :direction :output :if-exists :supersede)
,@(loop for (elem attrs) in elems
collect
`(format t "~a {~%" ,elem)
append
(mapcar (lambda (attr)
(destructuring-bind (name val)
attr
`(format t "~2T~(~a~): ~a~%" ',name ,val)))
attrs)
collect
`(format t "}~2%"))
t))
;; (macroexpand-1
;; '(css
;; test.css
;; ((".hoge"
;; ((background "#F00")
;; (border-radius "5px")))
;; ("#fuga"
;; ((background "#009")
;; (color "#FFF"))))))
;; =>
;; (WITH-OPEN-FILE
;; (*STANDARD-OUTPUT* "test.css" :DIRECTION :OUTPUT :IF-EXISTS :SUPERSEDE)
;; (FORMAT T "~a {~%" ".hoge")
;; (FORMAT T "~2T~(~a~): ~a~%" 'BACKGROUND "#F00")
;; (FORMAT T "~2T~(~a~): ~a~%" 'BORDER-RADIUS "5px")
;; (FORMAT T "}~2%")
;; (FORMAT T "~a {~%" "#fuga")
;; (FORMAT T "~2T~(~a~): ~a~%" 'BACKGROUND "#009")
;; (FORMAT T "~2T~(~a~): ~a~%" 'COLOR "#FFF")
;; (FORMAT T "}~2%")
;; T)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment