トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

blosxom

bracket_fep plug-in

 エントリ内のブラケット( [ 〜 ] )で囲った特定の文字列を、決まった文字列に変換するための汎用プラグインです。

開発ログ

Feb 28, 2007

Sep 18, 2007

  • 照合用文字パターン $pattern を bfep の story 関数呼び出し時の引数として、引き渡すように仕様を変更

Nov 23, 2007

  • bfep 呼び出し後、変換が行われなかった場合(特にエラー時)は文字列を変換しない(エントリテキストのまま)で保持する仕様に変更

Nov 23, 2007 版全ソース

# Blosxom Plugin : bracket_fep
# Author(s) : kay <info@ellinikonblue.com>
# Version : 2007-11-23

package bracket_fep;

# ---------------------------------------
# Configuration Variable
my $bfep_dir = "$blosxom::plugin_dir/bfep";

# ---------------------------------------
# Variable Definition
my @bfeps;
my %bfeps;
# ---------------------------------------
# Main Routines
$bfep_dir =~ s!/$!!;

sub start {
  return 0 unless $bfep_dir;                # Directory path for bfep defined?
  if (!-e $bfep_dir ) {                     # Directory for bfep existed?
    my $mkdir_r = mkdir( $bfep_dir, 0755 ); # if not exist, make diretory for bfep.
    $mkdir_r or return 0;
  }

  # Plugins for blacket_fep search
  if ( -e $bfep_dir and opendir BPLUGINS, $bfep_dir ) {
    foreach my $bfep ( grep { /^\w+$/ && -f "$bfep_dir/$_"  } sort readdir(BPLUGINS) ) {
      my ( $bfep_name, $off ) = $bfep =~ /^\d*(\w+?)(_?)$/;
      my $on_off = $off eq '_' ? -1 : 1;
      require "$bfep_dir/$bfep";
      $bfep_name->start() and  ( $bfeps{$bfep_name} = $on_off ) and push @bfeps, $bfep_name;
    }
    closedir BPLUGINS;
  }
  return 0 if ( !keys( %bfeps ) ); # if no bfep, bracket_fep is unavailable.

  return 1;
}

sub story {
  my ( $pkg, $path, $filename, $story_ref, $title_ref, $body_ref ) = @_;

  $$body_ref =~ s/\[(.+?)\]/callbfep($1)/gei;

  return 1;
}

sub callbfep {
  my ( $pattern ) = @_;
  my $rtn;

  foreach my $bfep ( @bfeps ) {
    $bfeps{ $bfep } > 0 and $bfep->can('story') and $rtn = $bfep->story( $pattern ) and last;
  }
  $rtn = "[$pattern]" if ( !$rtn );

  return $rtn;
}

1;

導入

プラグイン本体の編集

 以下の変数を必要に応じて書き換えてください。

$bfep_dir
 bracket_fep プラグイン は専用のプラグインをインストールするディレクトリを指定します。問題がなければ特に変更する必要がありません。設定したディレクトリはアップロード前に作成するようにしてください。

アップロード

 bracket_fep プラグイン 本体を blosxom のプラグインディレクトリへアップロードし、bracket_fep プラグイン は専用のプラグインを、変数 $bfep_dir で指定したディレクトリへアップロードしてください。

 以上の作業が終了すると、インストールした bracket_fep プラグイン は専用のプラグインの機能によって、story フレーバー 内で [ 〜 ] で囲まれた部分が変換されるようになります。

bracket_fep plug-in 用 bfep

 bracket_fep プラグイン は専用のプラグイン bfep(Bracket Front-End Plugin) を追加することで、機能を追加できるようになっており、またその仕様も blosxom のプラグインと酷似しています。

 純粋な blosxom のプラグインと大きく違うところは、プラグイン側で用意する関数が start と story だけでよいところ。start 関数で機能のオン、オフを決定し、story 関数で bracket_fep プラグイン から渡される引数 $pattern に応じて処理を行い、その結果を返せばよいだけです*1

 以下に bfep を作成する際のテンプレートを示します*2

# Bracket Front End Plugin for blosxom: template

package template;

# ----------------------------
# Configuration Variable

# ----------------------------
# Packege Variable
 
# ----------------------------
# Main Routines
sub start {
  return 1;
}

sub story {
  my ( $pkg, $pattern ) = @_;
  my $rtn; # is return value.

  return $rtn;
}

1;

bfep の実装例

 以下にいくつか当方で作成した bracket_fep プラグイン 専用のプラグイン( bfep )を紹介します。

bsnap_asin プラグイン
 Amazon.co.jpアソシエイトプログラム に参加して、エントリ中に個別商品情報を挿入するためのプラグイン「 asin_complex プラグイン 」を bfep として書き換えたプラグインです。
bsnap_in プラグイン
 snap_in プラグイン を bfep として書き換えたプラグインです。
bsnap_hs プラグイン
 snap_in プラグイン を強化し、Highslide JS を使用し、拡大機能を実装した bfep です。ただし、bsnap_in プラグイン と違って、テキストファイルを取り込む機能はありません。
bsnap_lt プラグイン
 bsnap_hs プラグイン 相当の機能を有しますが、こちらは Lightbox2 を使用し、画像をグルーピングして表示することができるようになっています。テキストファイルを取り込む機能がないことは bsnap_hs プラグイン と同じです。
bsnap_tx プラグイン
 bsnap_hs プラグイン が、テキストファイルを読み込む機能を実装しなかったために、別立てでテキストファイルを読み込む機能だけを有した bfep を用意しました。snap_in プラグイン から bsnap_hs プラグイン プラグインへの置き換えの際、必要であればご使用ください。

リンク集



*1 基本、エラーもしくは何も処理をしないときは 0 を返すようにしてください
*2 あくまで一例です

© 2004-2010 Ellinikonblue.com All Rights Reserved.