2004年09月02日 (木)

iblogPatcher のブログ定義ファイルテンプレート

iblogPatcher 用カスタマイズ済みテンプレート(BlogPage.txt)」から「iblogPatcher 用ナビゲーション項目」の一連のエントリで紹介したテンプレートやナビゲーション項目に合わせたブログ定義ファイルのテンプレートを掲載します。

一連のエントリと同様に全くの未検証です。間違いなどがありましたらコメントなどでフィードバックをお願いします。


ユーザが値を埋めなければならない箇所は %短い説明% というように % % で囲んでいます。黄色く強調してあります。それぞれの説明は後述します。
%BLOG = (
  'preview'  => "$ENV{'HOME'}/Sites/iblog/%BlogUUID%",
  'publish'  => '%公開先のローカルでのフォルダー%',
);

%ACTION = (
  'preview'  => {
    'before'  => {
      'onStart'  => undef,
      'file'    => undef,
      'onFinish'  => undef,
    },
    'after'  => {
       'onStart'  => sub {
         #---- iBlog のバグを修正する(必須) ----------------------------
         # シングルクォーテーションの間違ったエスケープを直す
         #   Latin2UTF8::OnStart(@_) より前になければならない
         EscapeSQuot::OnStart(@_);

        # ラテン文字扱いによる文字化けを解消
        Latin2UTF8::OnStart(@_);

        # <$BlogDescription$> の &<"> を実体参照にする
        HtmlChar2EntityRef::OnStart(@_);

        # iBlog が REPLACE に出力する間違った XHTML を直す
        ValidXhtml::OnStart(@_);
        #--------------------------------------------------------------

         #---- ブラウザなどのバグを回避する(ほぼ必須) ------------------
        # IE でフィードバックのサブジェクトが文字化けしないようにする
        IEFeedback::OnStart(@_);

        # title に勝手に挿入された改行コードを取り去る
        DeleteTitleLF::OnStart(@_);
        #--------------------------------------------------------------

        #---- 他のプラグインの設定(オプション) ------------------------
        # コピーターゲットを追加する
        push @{$COPY_FILES::Conf{'target'}}, {
          'src'  => 'AroundEntries.js',
          'dst'  => 'AroundEntries.js',
        };

        # RECENT_ENTRIES_JS の設定をする
        $RECENT_ENTRIES_JS::entry_count = 15;
        $RECENT_ENTRIES_JS::entry_before = '&#9679;';
        $RECENT_ENTRIES_JS::entry_after = '<br />';
        $RECENT_ENTRIES_JS::jsfile = 'recent_entries.js';

        # 独自の REPLACE を定義する
        push @{$MY_REPLACE::Conf{'replace'}}, (
          {
            # キーワード
            'name'  => '<$MetaKeywords$>',
            'value'  => '%キーワード%',
            'context'  => 'html',
          },
          {
            # ブログのドキュメントルート
            'name'  => '[$DocumentRoot$]',
            'value'  => '%公開先URL%',
          },
          {
            # HaloScan ID
            'name'  => '<$HaloScanID$>',
            'value'  => '%HaloScanアカウント名%',
          },
          {
            # Copyright
            'name'  => '<$MetaCopyright$>',
            'value'  => '&#169; %blogの運営期間(西暦年)% <$MetaAuthor$>, All rights reserved.',
          },
          {
            # Author
            'name'  => '<$MetaAuthor$>',
            'value'  => '%名前もしくはハンドル名%',
          },
          {
            # Mail Address
            'name'  => '<$LinkMade$>',
            'value'  => '%メールアドレス%',
          },
        );

        # 連続する <br /> を一つにまとめる
#        foreach my $page (keys %CHANGE_CONTENT::Conf) {
#          push @{$CHANGE_CONTENT::Conf{$page}}, {
#            'condition'  => '<br ¥/>(?:¥s*<br ¥/>)+',
#            'replace'  => '<br ¥/>',
#            'option'  => 'gs',
#          };
#        }
        
        # meta タグで description に <$BlogDescription$> を使用するとき
        # & < " > を実体参照にする
        foreach (
          'BlogPage',
          'CategoryPage',
          'EntryPage',
          'ArchivePage',
          'YearPage',
          'DayPage',
        ) {
          my  $targetPage = $_;
      
          push @{$CHANGE_CONTENT::Conf{$targetPage}}, {
            'condition'  => '<meta name="description" content="((?:[^"]|"(?! ¥/>))*)" ¥/>',
            'replace'  => '¥'<meta name="description" content="¥'.ApplyModule($1, ¥'HtmlChar2EntityRef¥').¥'" ¥/>¥'',
            'option'  => 'es',
          };
        }
        #--------------------------------------------------------------

        #---- iBlog の機能拡張(オプション) ----------------------------
        # 日時の書式を変更する
        ReformatDateTime::OnStart(@_);

        # UNYO_DISABLE を有効にする
        UNYO_DISABLE::OnStart(@_);

        # 独自 REPLACE を有効にする
        MY_REPLACE::OnStart(@_);

        # URI2LINK を有効にする
        URI2LINK::OnStart(@_);

        # QuickTimeObject を有効にする
        QuickTimeObject::OnStart(@_);

        # 高速化のための前処理をする
#        CHANGE_ENCODE::OnStart(@_);
        #--------------------------------------------------------------

        1;  # onStart がエラーを返さないようにするため
      },
      'file'    => sub {
        #---- 必須 ----------------------------------------------------
        # ファイル書き換えを実行する
        CHANGE_CONTENT::File(@_);
        #--------------------------------------------------------------

        #---- オプション ----------------------------------------------
        # エンコードを変更する
        #  他の大抵のプラグインよりも先に行う。
#        CHANGE_ENCODE::File(@_);

        # 全エントリをリストアップした entries.js のデータを収集する
        ENTRIES_JS::File(@_);

        # エントリのデータを収集する
        ENTRYPAGE_ACTION::File(@_);

        # カテゴリのデータを収集する
        CATEGORYPAGE_ACTION::File(@_);
        #--------------------------------------------------------------
      },
      'onFinish'  => sub {
        #---- 必須 ----------------------------------------------------
        # ファイル書き換えを実行する
        CHANGE_CONTENT::OnFinish(@_);
        #--------------------------------------------------------------

        #---- オプション ----------------------------------------------
        # 全エントリをリストアップした entries.js ファイルを作成する
        ENTRIES_JS::OnFinish(@_);

        # カテゴリの unyo.js を作成する
        CATEGORYPAGE_ACTION::OnFinish(@_);

        # ブロッグの unyo.js を作成する
        BLOGPAGE_ACTION::OnFinish(@_);

        # 最近のエントリ一覧を作成する
        RECENT_ENTRIES_JS::OnFinish(@_);

        # entries.js 活用のための各種ファイルをコピーする
        COPY_FILES::OnFinish(@_);

        # 次回エンコード変更のための .CHANGE_ENCODE.time を作成する
        #  一番最後に行う
#        CHANGE_ENCODE::OnFinish(@_);
        #--------------------------------------------------------------
      },
    },
  },
  'publish'  => {
    'before'  => {
      'onStart'  => undef,
      'file'    => undef,
      'onFinish'  => undef,
    },
    'after'  => {
      'onStart'  => sub {
        #---- 必須 ----------------------------------------------------
        # iBlog に頼らず iblogPatcher で公開版 RSS を作成する準備
        $GenPubRSS::Conf{'DocumentRoot'} = '%公開先URL%';
        #--------------------------------------------------------------
      },
      'file'    => undef,
      'onFinish'  => sub {
        #---- 必須 ----------------------------------------------------
        # iBlog に頼らず iblogPatcher で公開版 RSS を作成する
        GenPubRSS::OnFinish(@_);
        #--------------------------------------------------------------

        #---- オプション ----------------------------------------------
        # 公開後オープンするファイルを設定する
        $OPEN_FILES::Conf{'target'} = [
          # バックアップを行う
#          "$ENV{'HOME'}/Library/Script/iBlogFreezer",
          # BlogPeople に Ping する
#          "$ENV{'HOME'}/Library/Application Support/iblogPatcher/PingBlogPeople.webloc",
          # Bulkfeeds に Ping する
#          "$ENV{'HOME'}/Library/Application Support/iblogPatcher/PingBulkfeeds.webloc",
        ];
        # 設定されたファイルをオープンする
#        OPEN_FILES::OnFinish(@_);
        #--------------------------------------------------------------
      },
    },
  },
);

1;
%BlogUUID%
プレビューで保存されるフォルダーの名前です。
ホームから Sites > iblog と Finder で辿ると B1234567890 というようなフォルダーがあります。それを入れます。
%公開先のローカルでのフォルダー%
iDisk をマウントしたときの公開先のパスです。
多くの場合 /Volumes/.Macアカウント/Sites/iblog か /Volumes/.Macアカウント/Sites/iblog/BlogUUID になります。
%キーワード%
あなたのサイトのキーワードです。複数ある場合はカンマで区切ってスペースなど入れないでください。
これは検索エンジンを助けます。
%公開先URL%
公開後の URL のベース部分です。
多くの場合 http://homepage.mac.com/.Macアカウント/iblog あるいは http://homepage.mac.com/.Macアカウント/iblog/BlogUUID になります。
最後に / や index.html は入れないでください。
これは下の方でも使用されています。こちらの置き換えもお忘れなく。
%HaloScanアカウント名%
HaloScan で取得したアカウント名(ID)です。
%blogの運営期間(西暦年)%
著作権の発生期間です。blog の運営期間でよいでしょう。
例えば 2003, 2004 とかです。
meta タグによる copyright が上の書式で本当によいかどうか実は知りません。
%名前もしくはハンドル名%
あなたの名前もしくはハンドル名です。
ここに日本語は使わない方がよいと思います。
%メールアドレス%
あなたのメールアドレスです。
メールアドレスの収集に利用されるのが嫌なときは、人が見たらわかるけどそのままでは使えないような書き方をしておくか、全文字を実体参照にしてしまうかなどをしてください。
このシリーズはまだ続きがあります。プラグインの機能を活かしたエントリの書き方などです。

Posted: 13:32    | Comment | Trackback


以下、類似エントリです。