MathML: itexToMMLを導入する

MT4からWP2.3に移行した最大の理由がMathMMLの記述をサポートしてくれるプラグインitex2MMLの動作にあります。MT版のプラグインがPerlで書かれたものしか無い為に、ダイナミックパブリッシングと組み合わせる為には別途プラグインが必要になってきてしまうのです。

プラグインの動作の為に別途プラグインが必要で…という図式は個人的にあまり好ましいものではありません。やはり独立して動かしたいものです。…というわけでWP2.3にitex2MMLを組み込んでみます。あ、そうそう。itex2MMLのバイナリには一切手を加えていません。MTの時と同じものを使っています。

プラグインのダウンロード

WP1.2用のプラグインを用いました(via: WordPress 1.2, MathML Goodness | Musings)。単純にitexの書式からの変換だけをしたかったのでこれで十分です。

実際に表示をしようとすると次の問題点が発覚しました。

  1. math要素を一意にブロック扱いしている為に$で囲われた内容についてもp要素を付加してしまう。
  2. &rightarrowなどの記号を実体参照表示できるように強制変換してしまう。

2番目の問題は兎も角1番目についてはapplication/xhtml+xmlで表示しようとする以上致命的です(結果的にエラーで表示されない)。そこで実際にWPのコードに手を入れる事になりました。

wp-includes/formatting.phpの修正

上記の問題点を解決すべく書き換えて、前後でdiffを取ったものを次に示します。

% diff formatting.php.org formatting.php
60a61,66
> // ++ add 2008-02-04
> function clean_math($matches) {
>       if ( is_array($matches) )
>              $text = $matches[1] . $matches[2] . "</math>";
>       else
>               $text = $matches;
61a68,75
>       $text = str_replace('&#038;', '&',$text);
>       $text = str_replace('<br />', '', $text);
>       $text = str_replace('<p>', "n", $text);
>       $text = str_replace('</p>', '', $text);
>
>       return $text;
> }
> // -- add 2008-02-04
66c80,85
<       $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
---
> // ++ del 2008-02-04
> //    $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
> // -- del 2008-02-04
> // ++ add 2008-02-04
>       $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|style|input|p|h[1-6]|hr)';
> // -- add 2008-02-04
89a109,112
> // ++ add 2008-02-04
>       if (strpos($pee, '<math') !== false)
>               $pee = preg_replace_callback('!(<math.*?>)(.*?)</math.*?>!is', 'clean_math', $pee );
> // -- add 2008-02-04

これで一応キチンと表示されるようになりました。

本当はもっと巧い遣り方もあったのかも知れませんが、とりあえずはこれでOKかと。

続きを読む MathML: itexToMMLを導入する

MT4: PerlDynamicの適用とエントリのインポート完了

それなりにベータ版やRC版でテストをしていたつもりでしたが、最後には特大のトラップが色々と待っていたお陰で約半日完全に公開できない状態に陥っていた私たち夫婦のブログです。それでも何とかここまで来たので報告も兼ねてエントリ。

先ず話が早い方からですが、MT3.3のエクスポートデータって標準でタグ情報持っていないんですね…知らなかった…(´Д⊂ そんなわけでこれまでのタグ情報は綺麗サッパリ全部飛んでしまいました。これからの暇な時間はせこせこと過去のエントリにタグでも打ちますかね。

もう一点ですが、PerlDynamicの適用に関してです。今回もThe blog of H.Fujimoto:Perl版ダイナミック・パブリッシング(MT4用)にお世話になります。壱さんありがとうございます。プラグインの適用自体は全然問題無かったんですが、関連の箇所で引っかかったので覚書。

<$MTCGIPath$>が生成するパス

MTCGIPathはmt-config.cgiに記載されている変数CGIPathの値を持ってくるタグですが、別ドメインを被せていたりすると次のような現象が発生します。

例えば http://hoge.net をエイリアスとして http://foo.net/hoge に被せた場合、ブログのURL設定は http://hoge.net となりますが物理位置は ~foo/hoge みたいな感じになりますよね。この状態でMTCGIPathを呼び出すと生成されるパスが http://hoge.net/CGIPathの値 となってしまいます。

実際にMTを ~/foo/hoge/mt のように設置していれば何の問題もありませんが、 ~foo/mt というように設置している場合には指定のディレクトリに到達できなくなるので注意が必要です。私の場合はシンボリックリンクを張って解決しました。上記の例の場合だとこんな感じですね。

% ln -s ~foo/mt ~foo/hoge/mt

同じようなドメインの被せ方をしていて “キャッシュファイルのコピーに失敗しました” とか mt-dynamic.php の181行目で怒られたりする場合には確認してみては如何でしょうか。

iddy: iddyMyProfile でプロファイルのテンプレートを作成してみる

iddy へ登録している情報を Movable Type 上に引っ張ってくる為のプラグインが提供されています。

導入方法は配布元に丁寧な説明があるのでそれに従えば問題なし。但し複数のブログを管理している場合は iddy のアカウント名の入力がそれぞれのブログ依存になるので注意が必要です。例えばこのサイトであれば

メイン・メニュー > CEFA::Blog > プラグインの設定

の様にブログ別の設定画面から iddy のアカウント名を入力するようにします。

ここまで終ったら後はテンプレートに修正するだけです。因みに私の場合は標準配布のテンプレートのカラム beta を Widget で管理していますので新規モジュールとして次のような内容で作成してみました。

<div class="module">
<h2 class="module-header">プロフィール</h2>
<div class="module-content">
<!-- ++ iddyMyProfile -->
<img src="<$MTIddyImageurl$>" width="96" height="96" alt="<$MTIddyAccountname$> image" />
<ul class="module-list">
<li><$MTIddyAccountname$> (<$MTIddyGender$>)</li>
<li><$MTIddyBirthday$> 生まれ</li>
<li><$MTIddyHometown$>,<$MTIddyPref$>,<$MTIddyCountry$></li>
<li><$MTIddyProfile$></li>
</ul>
<a href="<$MTIddyProfileurl$>" title="My Profile"><img src="http://iddy.jp/image/banner/88x31_03.gif" width="88" height="31" alt="My Profile by iddy" /></a>
<!-- iddyMyProfile ++ -->
</div>
</div>

CEFA–Blog_1177750955516.png

こういう感じで表示されるのですが如何でしょうか。 Google Talk のアカウントが上手く表示できなかったりとか良く判らない部分も未だありますが、簡単なプロフィール作成には使えそうな感じです。

参考URL
Movable Type 用プラグイン iddyMyProfile | iddy

続きを読む iddy: iddyMyProfile でプロファイルのテンプレートを作成してみる