本当は自分の所で運用したいんですが、いろいろサーバを移動したりなんだりの最中なのでこちらを利用することにしました。
最近勉強中の C# のことなども含め、気軽にいろいろ書き散らかしていく予定です。
どうも、最近 xhtml1.0 でものを書くことが多いので、反射的に <br /> と書いてしまいます……。
それはそれとして、plugin の calendar2 がどうもこのテーマでは上手く表示できません。div で囲って text-align を指定しようが、margin-left: auto; margin-right: 2em とかやってみようが効果なし。なんだろう……。
■ margin の auto は width を指定しないと意味がありませんでした。でも、最終的には float:right で回り込ませて解決。
tDiary の plugin の指定方法を見ていて思い出しました。
個人的に趣味やらバイトやらで使うための Perl の CGI ライブラリを保守しているのですが、その中のテンプレートライブラリでの関数の指定法がかなりアドホックでした。&{func,arg1var,"constant",arg3var} ←こんな感じ。
で、昨日から一念発起して、普通に func(arg1var, arg2func(arg2_1var), "constant") という形で書けるように parser を書き直してみました。
最初は正規表現でほげほげ〜。と気楽に考えていたのですが、よくよく考えると関数のネストが出来る時点で正規表現のクラスを越えています(汗)。……LL(1)文法に収まっていて良かったぁ。LALRの解析プログラムを手で書く気は全く起こりませんです。lexer は @tokens = ($stmt =~ /([^\s(),"]+|""|[(),"]|\s+)/g) とかでお手軽にすませて、あとは適当に(^^;
でも、こんなことして意味があったのだろうか……。利便性と重さの天秤が、どちらに傾く事やら。
sub parse_expr {
my $tokens = shift;
my ($type, $expr, @args);
# LL(1) なのでなんとか頑張れます
my $token = $tokens->[0];
if ( !defined $token ) {
return;
}
elsif ( $token eq '"' ) {
shift @$tokens;
$type = 'const';
$expr = '';
while ( defined($token = shift @$tokens) ) {
if ( $token eq '""' ) {
$expr .= '"';
}
elsif ( $token eq '"' ) {
last;
} else {
$expr .= $token;
}
}
shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
}
else {
$expr = $token;
shift @$tokens;
shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
if ( $tokens->[0] eq '(' ) {
$type = 'func';
@args = ();
do {
shift @$tokens;
shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
push @args, parse_expr($tokens);
} while ( (defined $tokens->[0]) and ($tokens->[0] eq ',') );
if ( $tokens->[0] ne ')' ) {
warn "a template function does not terminated with ')' : $expr";
}
shift @$tokens;
shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
}
else {
$type = 'var';
}
}
my $self = {
Type=>$type,
Expr=>$expr,
Args=>\@args,
};
return $self;
}
自分でつっこんでみます。書き方は<a href="http://www.tdiary.net/howto.rhtml">ここ</a>ですね〜。
つっこみ内ではタグは書けないらしい……
改行はどうなるのでしょう。
http://www.alloha.info InsuRancE http://www.devonanal.com RIsk mAnAgemenT! http://www.amateur-thumbs.net InSURancE QuoTEs http://www.usbitches.com cAr inSuRaNce http://www.galsonbed.com HeaLTh iNsurAnce http://www.milf-hardcore.net LiFe INsurANce