MovableTypeで箇条書きを楽に入力するプラグイン
詳しい記法などはPythonで箇条書きをHTMLに変換をご覧ください。コンテナタグで実装してみたところエントリーの本文の中で使うことができなさそうでしたので、グローバルフィルタを使って実装しました。
package MT::Plugin::MyPlugins;
use strict;
use MT::Template::Context;
MT::Template::Context->add_global_filter(MyTag=>\&myTag);
sub closeTags{
my($ref_indent_stack, $indent) = @_;
my(@indent_stack) = @$ref_indent_stack;
my($result) = "";
while ($indent < $indent_stack[-1]){
$result .= "</li></ul>";
pop(@indent_stack);
}
return $result, \@indent_stack;
}
sub itemize{
my($contents) = @_;
my @indent_stack = (-1);
my $result = "";
foreach my $line (split(/\n/, $contents)){
$line =~ /^(\s*)(-?)(.*)/;
if($3 eq ""){
next;
}
if($2 eq ""){
$result .= $3;
next;
}
my $indent = length($1);
if($indent > $indent_stack[-1]){
$result .= "<ul><li>" . $3;
push(@indent_stack, $indent);
}else{
my($closing, $ref_indent_stack) = &closeTags(\@indent_stack, $indent);
@indent_stack = @$ref_indent_stack;
$result .= $closing;
$result .= "</li><li>" . $3;
}
}
my($closing) = &closeTags(\@indent_stack, -1);
$result .= $closing;
return $result;
}
sub myTag {
my($text, $arg, $ctx) = @_;
$text=~s#<itemize>((?:[^<]|<(?!itemize>))*)</itemize>#&itemize($1)#ieg;
$text;
}
1;