トップ(最新)

nDiki

2004年10月16日 (土)

Template Toolkit のテンプレート上で対話的入力 このエントリーを含むはてなブックマーク

ちょっとしたプログラムパッケージや LaTeX ドキュメントを作成する時に、Makefile やその他ファイルのスケルトンをまとめて生成する算段を検討中。 例えば Perlh2xs のような感じ。

基本的には Template Toolkit ベースでいってみたい。 ttree あたりを使えばだいたいできそうだ。 ここで --define var=value で全て間違えずに指定するのは大変になってくるだろう。 ということでテンプレート変数定義をまとめたテンプレートファイルを作成し、各テンプレート処理をする際にプリプロセスするようにする。

でこのテンプレート変数定義のテンプレートファイルは対話的に作成できるようにしたい。 テンプレートファイルのテンプレートファイルを処理して。

で対話的入力の方法なのだが、探してもそのようなディレクティブもプラグインもみつからない。ありそうなもんだけどなぁ。

しょうがないので、PERL ディレクィブ内で Term::ReadLineを使って入力。 こんな感じ。

 [% TAGS [- -] -%]
 [- PERL -]
 use Term::ReadLine;
 my $term = new Term::ReadLine('template');
 $stash->set('readline' => sub {
   my $prompt = shift || 'input:';
   my $text = $term->readline($prompt);
   if (defined $text) {
     $term->addhistory($text);
   }
   return $text;
 });
 [- END --]
 [% project.name = '[- readline('project name:') -]' -%]
 [% project.author = '[- readline('author:') -]' -%]

tpage でこのテンプレートファイルを処理すると、対話的に値を入力しながらテンプレートファイルを生成できる。 実際は文字列のエスケープなどもうちょっと工夫が必要。

ちなみに Debian GNU/Linux sid の libtemplate-perl は 2.10-1 で、このバージョンの Template Toolkittpage だと EVAL_PERL が有効になっておらずうまく動かない。 手元にコピーして Template オブジェクトの初期化部分に EVAL_PERL => 1 を追加する必要あり (2.14 の tpage は --eval_perl オプションで有効にできる)。

スポンサード リンク


[ 10月16日全て ]

Related term

■よく検索されるキーワード

torrent(86) windows(43) x31(42) perl(39) 書き方(37) linux(29) mp980(27) 提案書(24) アジェンダ(24) 設定(24) usb(23) 手帳(21) thinkpad(21) 使い方(21) ドラマ(21) ganttproject(21) debian(19) gtd(19) 画像(18) cvs(16) 壁紙(14) 動画(13) ヨドバシカメラ(13) subversion(13) a6(13) dropbox(13) ssh(12) svn(12) 日本語(12) make(12) tc-1(12) java(12) 修理(12) インストール(11) ノート(10) mp3(10) 方眼(10) rcs(10) サンプル(10) ヨドバシ(10) ボールペン(9) c#(9) ダイソー(9) web(9) nsis(9) アジェンダとは(9) centos(9) メモリ(9) 評判(9) pdumpfs(8) ダウンロード(8) フィルム(8) リフィル(8) アレグラ(8) truecrypt(8) クラリチン(7) cgi(7) 無印(7) バッグインバッグ(7) 印刷(7) thinkingrock(7) hhkb(7) ai(7) デジカメ(7) 無線lan(7) google(7) コンポ(7) pixus(7) xampp(7) tortoisesvn(7) dvd(7) porter(7) af(6) ファイル(6) ガントチャート(6) xp(6) gmail(6) smtp(6) 生年月日(6) リポジトリ(6)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 4.411379s / load averages: 0.54, 0.53, 0.41
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)