WIP coffeescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
diff --git a/coffeescript.lisp b/coffeescript.lisp
new file mode 100644
index 0000000..f50b8c8
--- /dev/null
+++ b/coffeescript.lisp
@@ -0,0 +1,45 @@
+;;
+;; LowH Triangle Assets - Asset pipeline
+;;
+;; Copyright 2012,2014 Thomas de Grivel <billitch@gmail.com>
+;;
+;; Permission to use, copy, modify, and distribute this software for any
+;; purpose with or without fee is hereby granted, provided that the above
+;; copyright notice and this permission notice appear in all copies.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;;
+
+(in-package :lowh.triangle.assets)
+
+;; Coffeescript -> JS
+
+(defclass coffeescript-asset (js-asset) ())
+
+(defmethod asset-class-extensions ((class (eql 'coffeescript-asset)))
+ '(.coffee))
+
+;; Compile
+
+(defun coffeescript (in out)
+ (let ((err (make-string-output-stream)))
+ (unwind-protect
+ (sb-ext:run-program "coffee -cs" '()
+ :input in
+ :output out
+ :error err
+ :search t)
+ (close err))))
+
+(defmethod process-asset ((asset coffeescript-asset)
+ (output stream))
+ (with-input-from-file/utf-8 (in (asset-source-path asset))
+ (coffeescript in output))
+ (force-output output)
+ (values))