SSブログ

Wiki記法でのコードのカラー化機能装備願い [software]

id:jkondo さん、どうか VimColor 記法を Text::Hatena に入れてくんなまし、と id:naoya 氏の方角に向かって祈りをささげていたのですが、なかなか実装されないのでパッチ作ってみた。

Text::VimColor 記法がほしいよぉ SQLAlchemy Database Engines 日記。 (TokuLog)

Text::Tracにもコードのカラー化がなく寂しい思いをしたことがあって、以下のやっつけコードでその場をしのいでいました。Text::Highlightより、VimColorの方が多くの言語に対応していてよいかな。上記のTokuhiromさんの祈りがmizzyさんにも届きますように。

our %_conv = (
    perl => 'Perl',
    c    => 'CPP',
    cpp  => 'CPP',
    html => 'HTML',
);

sub parse {
    my ( $self, $l ) = @_;
    my $c = $self->{context};
    my $pattern = $self->pattern;
    $l =~ /$pattern/ or return $l;

    my $processor;
    if ( $l =~ /^{{{$/ ){
        if ( $c->hasnext and $c->nextline =~ /^#!([\w\-_\/]+)$/ ) {
            $processor = $1;
            $processor =~ s/\/([\w\-\_]+)$/$1/;
            $c->htmllines('<div class="code">');
            $c->shiftline;
        }
        else {
            $c->htmllines('<pre class="wiki">');
        }
    }

    my $code = '';
    while($c->hasnext){
        my $l = $c->shiftline;
        if ( $l =~ /^}}}$/) {
            if ( $processor ) {
                require Text::Highlight;
                my $th = Text::Highlight->new( wrapper => "<pre>%s</pre>\n" );
                $c->htmllines( $th->highlight($_conv{lc $processor}, $code) );
                $c->htmllines('</div>');
            }
            else {
                $c->htmllines('</pre>');
            }
            last;
        }
        else {
            if ( $processor ) {
                $code .= "$l\n";
            }
            else {
                $c->htmllines( $l );
            }
        }
    }

    return;
}

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:グルメ・料理

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

こども::空気公団肉::子羊::恵比寿 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。