html2xhtml plugin - blosxom
〔blosxom - plugins〕 16:17 No Comment ツイート
ワタクシの今現在作っているサイトはHTML4.01仕様書に基いていちおう作った(つもり)なのでスが、 最近のケータイ事情は激しいもので、DoCoMoでもauでもVodafoneでも大体XHTML Basicに 対応したブラウザを搭載しているのだということで、ケータイ向けにXHTML Basic向けに書き直し中。
簡単に書くと、XHTMLとはXMLに基いて作り直されたHTMLで、今までのHTMLは SGMLを母言語とした言語でしたが、 SGMLそのものが膨大で漠然としすぎていたため、その下位言語のHTMLもSGMLという仕様をとらえきれず、 その結果言語としてうまいところまとまっていません。それを乗り越えようと生まれたのが、同じSGMLを 母言語としつつも極めて厳密な仕様を持つXML であり、そのXMLという厳密な"ルールブック"を基に生まれた、HTMLの正当な後継が XHTMLなのです。
ハァハァ、、、
んで今回は、このXHTML仕様の一つ"XHTML Basic"にサイトを対応させようかとテスト中。 ようするに「書き方」だから、flavour(フレーバー。テンプレートのこと)を別個にXHTML 対応のヤツを作り上げれば完成。のハズが、いくつかのプラグインの出力結果がHTML準拠な内容なため、 これは最終的に出力されるデータそのものをXHTML準拠に置き換えるしか方法がないと思い、 HTMLとXHTMLを選択して出力できるような "html2xhtml"プラグインを作ってみた。
つまり、上に書いたとおり最終的な出力結果を書き換えてしまうんだから、
sub last {
my $content_type = $blosxom::header->{-type};
return 1 if ($content_type !~ m|^application/xhtml\+xml|i);
$blosxom::output =~ s|<meta(.*?)([^/])>|<meta$1$2 />|gi;
$blosxom::output =~ s|<link(.*?)([^/])>|<link$1$2 />|gi;
$blosxom::output =~ s|<img(.*?)>|<img$1/>|gi;
$blosxom::output =~ s|<br>|<br />|gi;
$blosxom::output =~ s|<input(.*?)([^/])>|<input$1$2 />|gi;
$blosxom::output =~ s|</?big.*?>||gi;
$blosxom::output =~ s|</?small.*?>||gi;
$blosxom::output =~ s|</?ins.*?>||gi;
$blosxom::output =~ s|</?del.*?>||gi;
$blosxom::output =~ s|<hr.*?>||gi;
$blosxom::output =~ s|<(.*?)\sstyle=".*?"(.*?)>|<$1$2>|gi;
$blosxom::output =~ s|<(.*?)\stabindex=".*?"(.*?)>|<$1$2>|gi;
1;
}
こんなんで解決。上から順に
- lastサブルーチンを使用します。
- 開かれたflavourのcontent-typeを、変数に格納します。
- content-typeが"application/xhtml+xml"でなければ、そのまま素通り。
- <meta>は末尾で終了している必要があります。
- <link>は(ry。
- <img>は(ry。
- <br>は(ry。
- <input>は(ry。
- <big>はXHTML Basicでは定義されていません。
- <small>は(ry
- <ins>は(ry
- <del>は(ry
- <hr>は(ry
- "style"属性はXHTML Basicでは定義されていません。
- "tabindex"属性は(ry
- 戻り値1を返します。
- lastサブルーチンここで終わり。
もうちょっとスマートな方法がないもんかなと思ったけど、おいらにはこれ以上思いつかないお、、、
で、反映結果。あ、IEだと多分表示されずに ダウンロード画面とか出るだろうとおもます。そんときはFirefoxとか使うかSleipnirなら Geckoプラグイン導入の上Geckoで見るか、そうでないときはレジストリいじって強制的に text/htmlで 表示させるか、えーとえーとあとはダウンロードしてメモ帳で開くか何かもうとにかく色々すると 表示されるはずです。悪いのはMicro$oftだよ だよ!とか言ってみるテスツヽ(∵ )ノ