Perlを中心とした技術系の話などをつらつら

2004年10月15日

Sledge::Template::TT::Shift_JIS - テンプレートファイルをShift-JISでかけるようにする

Sledgeは出力するコンテンツがShift-JISの場合でもテンプレートはEUC-JPで書く仕様になっています。
僕の会社では基本的にHTMLの文字コードはShift-JISということになっているのでコーダーからあがってくるHTMLは当然Shift-JISです。なのでこれをテンプレート化するにはパラメータの埋め込みの他、文字コードをEUC-JPに変換をしなければなりません。一括変換すればすむ話ですが、それがちょっとめんどくさい(笑)

ということで、テンプレートをShift-JISで書くためのSledge::Template::TTのサブクラス、Sledge::Template::TT::Shift_JISを作ってみました。使い方は簡単でPagesクラスで、

use Sledge::Template::TT;
と書いているところを
use Sledge::Template::TT::Shift_JIS;
に変更するだけです。

Sledge::Template::TT::Shift_JISのコードはこんな感じです。

package Sledge::Template::TT::Shift_JIS;

use strict;
use vars qw($VERSION);
$VERSION = '0.01';

use base qw(Sledge::Template::TT);

use Template;
use Sledge::Exceptions;
use FileHandle;
use Jcode;

sub output {
    my $self = shift;
    my %config = %{$self->{_options}};
    my $input  = delete $config{filename};
    my $template = Template->new(\%config);
    unless (ref($input) || -e $input) {
        Sledge::Exception::TemplateNotFound->throw(
            "No template file detected: $input",
        );
    }
    my $text = do { local $/; my $fh = FileHandle->new($input); <$fh> };
    $text = Jcode->new($text, 'sjis')->euc;
    $template->process(\$text, $self->{_params}, \my $output)
        or Sledge::Exception::TemplateParseError->throw($template->error);
    return $output;
}

1;
最初は下のようなコードを書いたんですが、テンプレートのオプションのfilenameがスカラーリファレンスだとSledge::Tempate::TTのリビジョンが1.3より以前のものでは動かないことに気づいて、Sledge::Tempate::TTのコードをそのまま借りてきて、文字コード変換を差し込んだ結果、上のようなコードに落ち着きました。
package Sledge::Template::TT::Shift_JIS;

use strict;
use vars qw($VERSION);
$VERSION = '0.01';

use base qw(Sledge::Template::TT);

use FileHandle;
use Jcode;

sub output {
    my $self = shift;
    my %config = %{$self->{_options}};
    if ( -e $config{filename} ) {
        my $text = do { local $/; my $fh = FileHandle->new($config{filename}); <$fh> };
        $text = Jcode->new($text, 'sjis')->euc;
        $self->set_option(filename => \$text);
    }
    $self->SUPER::output;
}

1;

Technorati TAGTechnorati TAG ,

Posted by horiuchi at 2004年10月15日 21:21

Continuing the discussion...

このエントリーのトラックバックURL:
http://hori-uchi.com/mt/trackback/204

このリストは、次のエントリーを参照しています: Sledge::Template::TT::Shift_JIS - テンプレートファイルをShift-JISでかけるようにする:

Sledge::Template::TT::Shift_JIS - テンプレート...

続きを読む: Sledge::Template::TT::Shift_JIS 0.01

from hori-uchi.com at 2004年10月17日 02:22

Comments

Post a comment




Remember personal info?