2007年02月28日(水) [過去の今日]
#4 HTMLコマンドがあればいいじゃないか
なんかいろいろコマンド作ってて虚しくなって来た。そもそもHTMLを直接張り付けられるコマンドがあればいいのだ。
というわけで、Command.pmとDiary.pmをRTコマンドの実装を参考にいじくってみた。
--- Diary.pm.orig 2007-03-01 05:46:43.000000000 +0900 +++ Diary.pm 2007-03-01 05:56:09.000000000 +0900 @@ -44,7 +44,7 @@ use vars qw(%Head %Foot); use vars qw($BaseTemplate $NameTemplate $HrefTemplate %BaseTemplate %NameTemplate %HrefTemplate); # HNS::Diary::Template -use vars qw($RTMode @RTBuf); +use vars qw($RTMode @RTBuf $HTMLMode @HTMLBuf); use vars qw($YoteiHead $YoteiVal $YoteiFoot); @ISA = qw(ObjectTemplate HNS::Diary::Template); @@ -97,6 +97,9 @@ $RTMode = 0; # [0:Normal 1:Push 2:Convert] @RTBuf = (); +$HTMLMode = 0; +@HTMLBuf = (); + $YoteiVal = "<li>%value</li>"; $YoteiHead = "Schedule\n<ul>"; @@ -546,6 +549,23 @@ $RTMode = 0; } + ### HTML + if( $hnf_ =~ /^<\!--HTML START-->/ ) { $HTMLMode = 1; @HTMLBuf=(); return; } + if( $hnf_ =~ /^<\!--HTML END-->/ ) { $HTMLMode = 2; } + if( $HTMLMode == 1 ) { + push(@HTMLBuf, $hnf_); + return; + } elsif( $HTMLMode == 2 ){ + $hnf_ = '<div class="html">'; + $hnf_ .= join("", @HTMLBuf); + $hnf_ .= '</div>'; + $hnf_ =~ s/>/>/g; + $hnf_ =~ s/</</g; + $hnf_ =~ s/&/&/g; + $HTMLMode = 0; + } + + if ($HNS::System::Caching) { print X $hnf_; } --- Command.pm.orig 2007-03-01 06:12:05.000000000 +0900 +++ Command.pm 2007-03-01 06:12:18.000000000 +0900 @@ -35,7 +35,7 @@ $Entities{'Image'}, $Entities{'Replace'}, $Entities{'Comment'}]; -$Entities{'Cite'} = ['CITE', 'PRE','INCLUDE','RT']; +$Entities{'Cite'} = ['CITE', 'PRE','INCLUDE','RT','HTML']; $Entities{'List'} = ['UL', 'OL', 'DL']; $Entities{'Block'} = [$Entities{'Cite'}, $Entities{'List'}, 'P', 'DIV']; @@ -472,6 +472,16 @@ $Template = qq(<div class="%1">\n); $EndTemplate = "</div>\n"; +# HTML command +package HNS::Hnf::Command::HTML; +use vars qw(@ISA $Template $EndTemplate $NumAttr $IsOneline $AllowCommands +$IsBeginSection $CountName $OmittableEnd); +@ISA = qw(HNS::Hnf::Command::Cite); +$AllowCommands = ['']; +$Template = "<!--HTML START-->\n"; +$EndTemplate = "<!--HTML END-->\n"; +$OmittableEnd = 1; + ################################################################ # Sub Entities package HNS::Hnf::Command::Sub;
うちは好みで<p>の補完も入れることにした。
+ $hnf_ = '</p><div class="html">'; + $hnf_ .= join("", @HTMLBuf); + $hnf_ .= '</div><p>';
これで以下のようになる。
ほげほげ
うまくいってるかな。
(@876)