mt-sukeroku-plus.plの改造

MovableType で Wiki文法を使えるようになる素晴らしいプラグインです。しかし、これまでの HTMLベースの運用から、完全なWiki文法では少し使い勝手が悪いこともありました。そこで少し改造をしました。

配布元

画像参照でtitle指定をしたい

差しあたっての不満点は、imgタグにtitle属性を指定できないことです。うちは、画像の説明のために、title属性を使っているので、これがないと不便です。alt属性がありますが、これは代替文字列のための属性であり、画像にマウスオーバーしただけでは表示されません(Firefoxでは表示されません。IEでは表示されますが、本来は表示されないほうが望ましい)。

ソースを、"#ref"で検索すると、sukeroku_plus_pukiwiki_format関数内のif文がかかると思います。

# 参照
elsif (/^\#ref\((.+)\)$/) {
  my $localRefParam = $1;
  # カンマ区切りがあれば
  if($localRefParam =~ /^([^,]+)(,.+)$/){
    push(@result, splice(@saved), 
      &$func_inlineRefParam(&buildAnchorString($1, ''), $2));
  }
  else{
    push(@result, splice(@saved), &buildAnchorString($localRefParam, ''));
  }
}

buildAnchorString関数でタグを生成し、$func_inlineRefParam(無名関数)で、パラメータに応じた変換処理を行なっています。

まず、buildAnchorString関数をのぞくと、そもそもimgタグにtitle属性がないので、下記のように追加します。

$localAnswer = qq(<a href="${localAddress}" title="${localAltText}" 
  ${localTarget}><img src="${localAddress}" alt="${localAltText}" 
  title="" border="0" /></a>);

${localAltText} は不要です。実際に値を代入するのは、$func_inlineRefParam(無名関数)だからです。

続いて、$func_inlineRefParam(無名関数)を見ていきます。下記のように、alt属性を代入している箇所があります。

$localAnchorString =~ s|alt=\"[^\"]*\"|alt=\"${localAltString}\"|gi;

それに倣って、title属性も代入します。

$localAnchorString =~ s|title=\"[^\"]*\"|title=\"${localAltString}\"|gi;

これでtitle属性も設定されるようになりました。設定される値は、alt属性と同じです。

画像リンクを使いたい

&ref()で画像表示をした場合、デフォルトでその画像へのリンクが貼られますが、表示画像と別のリンク先を指定することはできません。つまり、サムネイル画像を表示して、実際の画像へリンクを貼るといったことは、できません。

タグを生成するさいのref内のパラメータ解析は、最初のカンマが現れるまでの値と、最後のカンマ以降の値しか検出しません。そこで、画像のURLに"|"区切りでリンク先URLを新たに追加できる仕様にしました。"|"がない場合は、従来通りの処理を行います。

改造は、次の通りに行ないます。Addで、追加箇所や追加範囲を示しています。

sub buildAnchorString{
  # 宣言部
  my $localAddress   = '';
  my $localAddress2  = ''; # Add
  my $localAltText   = '';
  my $localAnswer    = '';
  my $localTarget    = '';
  ($localAddress, $localAltText) = @_;

  # Add start
  if ($localAddress =~ /\|/) {
    ($localAddress, $localAddress2) = split(/\|/, $localAddress);
  }
  else {
    $localAddress2 = $localAddress;
  }
  # Add end

あとは、その下でタグを生成している部分のhref値を、${localAddress}から${localAddress2}に変更すれば大丈夫です。

$localAnswer = qq(<a href="${localAddress2}" title="${localAltText}"

Wiki文法を描く場合には、次のように使います。

&ref(/sample-mini.jpg|/sample-big.jpg,200,150,sample);
&ref(/yahoo-banner.gif|http://www.yahoo.com/,200,150,yahoo.com);

※nolinkを指定すると、aタグは削除されるので、注意してください。

動画貼り付けをしたい

refコマンドで動画貼り付けをできるようにします。しかし、mt-sukeroku-plus.plでは、refコマンドの引数を2つ(カンマ区切り)しか取得できないため、先述の画像リンクのように1つ目の引数のなかに複数の情報を詰め込む必要があります。

今回は、拡張子で動画ファイルであることを判断します。もし1つ目の引数を"|"区切りした1番目の値が、末尾に.flvを付けていた場合、動画貼り付けのタグを用意します。

&ref(http://xxx.flv|100/75)

上記が書式です。"|"の後ろには動画の表示サイズを"/"区切りで書いています。

実際の改造は、下記の通りです。buildAnchorString関数内の、画像拡張子チェックのif節の次に入れてください。

   elsif ($localAddress =~ /\.flv$/) {
     my ($flv_width, $flv_height) = split(/\//, $localAddress2);
     $localAnswer = qq(<object type="application/x-shockwave-flash" 
width="${flv_width}" height="${flv_height}" wmode="transparent" 
data="/util/player/flvplayer.swf?file=${localAddress}"><param 
name="movie" value="/util/player/flvplayer.swf?file=${localAddress}" />
<param name="wmode" value="transparent" /></object>);
   }

FQDNでない絶対パスを使いたい

画像を貼るためには、プロトコル指定(http:、ftp:など)を含むFQDNでないといけません。しかし、これでは万が一ドメイン名が変更になったときの対応が大変なので、"/"始まりの絶対パスを使っていました。この指定を、このプラグインでも出来るようにします。

buildAnchorString関数を見ます。下記のようなコードがありますので、"/"始まりの場合も許可するように追加してください。

##
## http, https, ftpプロトコルのURI
##
if ($localAddress =~ /^(http|https|ftp):/) {

下記のように追加します。

if ($localAddress =~ /^((http|https|ftp):|\/)/) {

もしかしたら、別箇所で弊害が出るかもしれません。そのへんはご承知ください。


履歴


トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-03 (水) 23:02:05