#:g1: paren-filesの紹介

Posted 2014-06-23 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の175日目です。

paren-filesとはなにか

 paren-filesは、Red Daly氏作のparenscriptをコンパイルしたりASDFと組み合わせて利用するのに便利なユーティリティです。

パッケージ情報

パッケージ名paren-files
Quicklisp
Quickdocshttp://quickdocs.org/paren-files
CL Test Grid: ビルド状況paren-files | CL Test Grid

インストール方法

(ql:quickload :paren-files)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 下記のようなone-plus-one.parenというParenScriptのファイルがあったとすれば、

(defun pr (s)
  ((ps:@ document write) s))

(defun one-plus-one () (pr "<b>1+1</b>の答えは") (pr (+ 1 1)) (pr "です!") nil)

(paren-files:compile-script-file-to-js-file "one-plus-one.paren")
;=>  "function pr(s) {
;        return document.write(s);
;    };
;    function onePlusOne() {
;        pr('<b>1+1</b>\\u306E\\u7B54\\u3048\\u306F');
;        pr(1 + 1);
;        pr('\\u3067\\u3059\\uFF01');
;        return null;
;    };
;    "

(paren-files:compile-script-file "one-plus-one.paren") ;>> function pr(s) { ;>> return document.write(s); ;>> }; ;>> function onePlusOne() { ;>> pr('<b>1+1</b>\u306E\u7B54\u3048\u306F'); ;>> pr(1 + 1); ;>> pr('\u3067\u3059\uFF01'); ;>> return null; ;>> }; ;>> ;=> "function pr(s) { ; return document.write(s); ; }; ; function onePlusOne() { ; pr('<b>1+1</b>\\u306E\\u7B54\\u3048\\u306F'); ; pr(1 + 1); ; pr('\\u3067\\u3059\\uFF01'); ; return null; ; }; ; "

のように使えます。
他、paren-files:compile-script-file-to-string 等があります。

ADSFとの連携

 parenscriptをjsにコンパイルするためのcompile-opが定義してあるので、システムをロード時などにparenscriptをコンパイルさせることも可能です。

(cl:in-package :asdf)

(defsystem :paren-files-demo :serial t :defsystem-depends-on (:paren-files) :depends-on (:fiveam) :components ((:file "package") (:file "paren-files-demo") (:parenscript-file "one-plus-one") (:file "test")))

(defmethod perform ((op compile-op) (paren-file parenscript-file)) (symbol-call :paren-files :compile-script-file-to-js-file (component-pathname paren-file)))

 こんな感じに

:defsystem-depends-on (:paren-files)

を追加すれば、:componentに:parenscript-fileが利用できるようになり、compile-op実行時にparen-files-demo.parenと同じディレクトリへparen-files-demo.jsが生成されます。

まとめ

 今回は、paren-filesを紹介してみました。
JavaScriptは手書きしないでParenScriptで通す、という人には便利かもしれないですね。

comments powered by Disqus