去る11月20日、Haskellナイトというイベント ( http://hop.timedia.co.jp/ )で、"HaskellerのHaskellによるHaskellerのためのプレゼン"というなんだかよくわからないタイトルで発表してきました。

遅くなりましたが、作った物の公開と発表の補足をしておきます。

概要 Haskellでプレゼンツールを作りました。 Haskellで記述され、

スクリプトもHaskellで書く ようなプレゼンツールです。 プレゼンをモナディックに書くので、MonadPointと名付けました。略称は「モナポ」です。

使い方 まず、MonadPointをcabalでインストールしてください(Windowsに入れる場合、依存ライブラリのFTGLを入れるのが大変だと思いますので、前回のエントリを参照していただければ幸いです)。それから、てきとうな.hsファイルを作って、import MonadPoint してプレゼンをモナドでゴリゴリと書いて、runPresentation に渡せばいい感じになると思います。レポジトリにあるサンプルが参考になると思います。 http://github.com/tanakh/MonadPoint/blob/master/test/Main.hs



若干説明 今のところサポートしているのは、 矩形の中にそれっぽく文字列を書く

矩形を書く

画像ファイルの表示

矩形をレイアウトする のような機能です。

基本的に、scaleでスケーリングして、縦横に並べてスライドを作ります。自動で高さとか幅を調節することはできないので、手でやらないといけません。 scale d $ do ... - 縦横に縮小。中央に配置。 scalehu d $ do ... -- 縦方向に縮小。上に配置。 scalehd d $ do ... -- 縦方向に縮小。下に配置。 scalevl d $ do ... -- 横方向に縮小。左に配置。 scalevr d $ do ... -- 横方向に縮小。右に配置。 txtc str -- 文字列。中央揃え。 txtl str -- 文字列。左揃え。 txtr str -- 文字列。右揃え。 pict filename -- 画像を表示。 txtarea strs -- 文字列リストを等幅フォントで表示。 他にも色々あるので、ソースをご参照下さい。 スライドによくつかわれるリスト記法は書きやすくする関数を提供しています。 list $ do ... -- 引数に与えられたリスト要素をうまいことレイアウトして表示する list $ do li "hoge" ul $ do li "moge" ちなみに、liなどは型が違うので、listの外側には置けません。うーん、型ですね。

何がいいのか？ 基本的に誰得ではありますが…。 抽象化能力 テンプレートを作りやすいとか。プレゼン=Haskellソースなので、なんとでもできます。 プラグインをHaskellで書ける ニコニコ動画風Twitterプラグインみたいなのも簡単に書けます。

今後の予定 実装がやっつけで、完成度が低すぎるので、まだまだ色々改良したいところです。 ソースをきれいにする

GLUT使うのやめる(フルスクリーンから復帰する手段がないとか…)

フォントをきれいにする(フルシーンAAとかでどうにかなるのだろうか)

もっといろいろカスタマイズできるようにする(ページ遷移時のアニメーションとか)

アニメーション実装

賢いレイアウト

GHC API対応 (毎回コンパイルするのはさすがにめんどい)