PyukiWiki仕様書（仮）

        "PyukiWiki" ver 0.2.1-beta1 $$
        Copyright (C) 2005-2012 PukiWiki Developers Team
        Copyright (C) 2004-2012 Nekyo (Based on PukiWiki, YukiWiki)
        License: GPL version 3 or (at your option) any later version
        and/or Artistic version 1 or later version.
        Based on YukiWiki http://www.hyuki.com/yukiwiki/
        and PukiWiki http://pukiwiki.sfjp.jp/
        URL:
        http://pyukiwiki.info/

        MAIL:
        ななみ <nanami (at) daiba (dot) cx> (注：バーチャル女の子です)

        $Id: specification.txt,v 1.1 2012/08/16 01:24:31 papu Exp $
        This text file written UTF-8 Codeset

目次

 ・ PyukiWiki仕様書（仮）
 ・ 目次
 ・ 注意
 ・ CGI起動
 ・ ディレクトリ構成
 ・ 主な本体ファイル構成
 ・ 主なperlモジュール構成
 ・ 主なExplugin構成
 ・ 主なプラグイン構成
 ・ explugin仕様情報
     □ 初期化
     □ 有効になっているexpluginの強制読み込み
     □ リソースの読み込み
     □ JavaScript、CSSの読み込み
     □ 初期化時の返り値（ハッシュ）
 ・ プラグイン仕様情報
     □ 初期化
     □ リソースの読み込み
     □ JavaScript、CSSの読み込み
     □ inlineメソッド
     □ convertメソッド
     □ actionメソッド
     □ actionメソッドの返り値（ハッシュ）
 ・ 内部変数仕様情報

注意

突然、何らかの理由で、仕様変更を行なうことがあります。
この説明書は、参考までで、内容を保障するものではありません。

CGI起動

CGIは、通常の index.cgi形式、及び、nph-index.cgi形式で起動されます。 mod_perl環
境で動作はしますが、あくまで互換環境での動作となります。

多くの環境変数が Apacheに依存していますが、一部のみIISで動作確認は行なわれてい
ます。

urlhack.inc.cgi Explugin は、PATH_INFO、または、404 ステータスの戻り値の、
REDIRECT_URL を参照して、ページ名を決定します。PATH_INFOのが汎用性が高い分、制
限がありますが、REDIRECT_URLのが、自由度が高く設定できます。

ディレクトリ構成

 ・ attach
    添付ファイル（添付画像も直接参照します）
 ・ backup
    バックアップ
 ・ cache
    システムキャッシュ
 ・ counter
    アクセスカウンター
 ・ diff
    差分
 ・ image
    画像
 ・ info
    情報ディレクトリ
 ・ lib
    本体、perlモジュール、Explugin
 ・ logs
    アクセスログ保存用（拡張）
 ・ plugin
    プラグイン
 ・ resource
    リソース
 ・ session
    予約
 ・ skin
    スキンファイル、JavaScript、CSSファイル
 ・ trackback
    トラックバック保存用（拡張）
 ・ user
    予約
 ・ wiki
    Wiki文書
 ・ wikidb
    内部のURL短縮用（拡張）

主な本体ファイル構成

 ・ index.cgi
    wrapper
 ・ lib/wiki.cgi
    本体起動
 ・ lib/wiki_init.cgi
    初期化用
 ・ lib/wiki_auth.cgi
    認証モジュール
 ・ lib/wiki_db.cgi
    データベース
 ・ lib/wiki_func.cgi
    汎用関数
 ・ lib/wiki_html.cgi
    HTML生成
 ・ lib/wiki_http.cgi
    HTTPモジュール
 ・ lib/wiki_link.cgi
    リンク用モジュール
 ・ lib/wiki_plugin.cgi
    プラグイン用モジュール
 ・ lib/wiki_spam.cgi
    スパムフィルターモジュール
 ・ lib/wiki_sub.cgi
    自動生成される内部サブルーチン定義スクリプト
 ・ lib/wiki_wiki.cgi
    その他のモジュール
 ・ lib/wiki_write.cgi
    書き込み用モジュール

主なperlモジュール構成

 ・ lib/Algorithm/Diff.pm
    差分生成用
 ・ lib/AWS 以下
    アクセスログ、ユーザーエイジェント振り分け用
 ・ lib/Digest/Perl/MD5.pm
    Pure Perl MD5モジュール
 ・ lib/File 以下
    ファイル判定用モジュール
 ・ lib/HTTP/Lite.pm
    簡易HTTPクライアント(未使用）
 ・ lib/IDNA/Punycode.pm
    国際化ドメイン用モジュール（URLでも使用）
 ・ lib/Jcode.pm、lib/Jocde 以下
    Jcode.pm
 ・ lib/Time/Local.pm
    Time::Local
 ・ lib/Nana/Cache.pm
    キャッシュ管理モジュール
 ・ lib/Nana/Cookie.pm
    クッキー管理モジュール
 ・ lib/Nana/Enc.pm
    簡易暗号化モジュール
 ・ lib/Nana/File.pm
    ファイルアクセスモジュール
 ・ lib/Nana/GZIP.pm
    gzip圧縮、解凍モジュール
 ・ lib/Nana/HTMLOpt.pm
    HTML最適化モジュール
 ・ lib/Nana/HTTP.pm
    HTTPアクセスモジュール
 ・ lib/Nana/HTTPCompress.pm
    HTTP gzip圧縮出力モジュール
 ・ lib/Nana/Lock.pm
    ファイルロックモジュール
 ・ lib/Nana/Logs.pm
    アクセスログ解析モジュール
 ・ lib/Nana/Mail.pm
    メール送信モジュール
 ・ lib/Nana/MD5.pm
    互換MD5生成wrapperモジュール
 ・ lib/Nana/Pod2Wiki.pm
    perl pod 簡易変換モジュール
 ・ lib/Nana/RemoteHost.pm
    リモートホスト取得モジュール
 ・ lib/Nana/Search.pm
    あいまい検索モジュール
 ・ lib/Nana/ServerInfo.pm
    サーバー情報取得モジュール
 ・ lib/Nana/YukiWikiDB.pm
    ロック対策済 YukiWikiDBモジュール
 ・ lib/Nana/YukiWikiDB_GZIP.pm
    ?のgzip圧縮対応版
 ・ lib/Yuki/DiffText.pm
    Diff.pm を共用した差分生成モジュール
 ・ lib/Yuki/RSS.pm
    RSS1.0モジュール
 ・ lib/Yuki/YukiWikiDB.pm
    YukiWikiDB.pm のオリジナル

主なExplugin構成

 ・ lib/aguse.inc.pl
    リンク先チェッカー
 ・ lib/antispam.inc.pl
    メールアドレス簡易暗号化
 ・ lib/antispamwiki.inc.pl
    簡易アンチスパム
 ・ lib/authadmin_cookie.inc.pl
    管理者パスワードのcookie簡易保存
 ・ lib/autometarobot.inc.pl
    自動ロボット向けキーワード抽出
 ・ lib/canonical.inc.pl
    重複URL防止
 ・ lib/captcha.inc.pl
    CAPTCHAスパム対策
 ・ lib/debug.inc.pl
    デバッグ（develのみ）
 ・ lib/iecompatiblehack.inc.pl
    IEの互換表示ボタンをなくす
 ・ lib/lang.inc.pl
    国際化対応モジュール
 ・ lib/linktrack.inc.pl
    外部リンク簡易トラッキングモジュール
 ・ lib/logs.inc.pl
    アクセスログ取得モジュール
 ・ lib/ogp.inc.pl
    Open Graph Protocol モジュール
 ・ lib/pathmenu.inc.pl
    階層下に MenuBar等を作れるモジュール
 ・ lib/ping.inc.pl
    Weblog ping
 ・ lib/punyurl.inc.pl
    国際化ドメインURLに対応する
 ・ lib/setting.inc.pl
    閲覧者設定機能
 ・ lib/slashpage.inc.pl
    階層下のページ名を容易にリンクする
 ・ lib/trackback.inc.pl
    トラックバック
 ・ lib/urlhack.inc.pl
    URL改造
 ・ lib/xframe.inc.pl
    frame、iframe等でページを表示できないようにする

主なプラグイン構成

執筆中

explugin仕様情報

初期化

 ・ plugin_NAME_init メソッドを起動する
 ・ expluginが有効になっていると、必ず起動されます。
 ・ 引数はありませんので、$::form から読み出す必要があります。

有効になっているexpluginの強制読み込み

依存関係で、先に読み込む必要があるexpluginは、以下のようにして読み出すことがで
きる。

&exec_explugin_sub("explugin name") ;

リソースの読み込み

&read_resource で読み込まれます。

プラグインと同じ名前のファイルであれば、指定しなくても自動読み込みをします。

JavaScript、CSSの読み込み

&jscss_include で読み込まれます。

プラグインと同じ名前のファイルであれば、指定しなくても自動読み込みをします。

初期化時の返り値（ハッシュ）

 ・ init
    1を指定することで、正常終了したことを通知する。
 ・ func
    上書きする関数
 ・ value
    上書きする変数名
 ・ msg
    タイトル
 ・ body
    文書本体
 ・ header
    <head>〜</head>の内容
 ・ http_header
    HTTPヘッダー
 ・ cssheader
    生のCSS
 ・ jsheader
    JavaScriptファイル読み込み後に実行するJavaScript文
 ・ jsheadervalue
    ページ表示後すぐに実行するJavaScript文
 ・ bodytag
    <body> の中の文
 ・ last_func
    ページを表示後に実行する関数
 ・ 返り値サンプル

return('init'=>1, func=>'override1,override2',
  'jsheader'=>$javascript, 'lastfunc'=>'&lastcallback;');

プラグイン仕様情報

初期化

初期化することはできません。

リソースの読み込み

&read_resource で読み込まれます。

プラグインと同じ名前のファイルであれば、指定しなくても自動読み込みをします。

JavaScript、CSSの読み込み

&jscss_include で読み込まれます。

プラグインと同じ名前のファイルであれば、指定しなくても自動読み込みをします。

inlineメソッド

&plugin(...) ; で呼び出されます。

引数は、上記の ... の中身のテキストが入ります。

sub plugin_NAME_inline {
my @arg=split(/,/,shift);

戻り値は、文字列で、HTMLを返すことにより表示されます。

return $html;

convertメソッド

#plugin (...) で呼び出されます。

引数は、上記の ... の中身のテキストが入ります。

sub plugin_NAME_convert {
my @arg=split(/,/,shift);

戻り値は、文字列で、HTMLを返すことにより表示されます。

return $html;

actionメソッド

URLの cmd=pluginname で呼び出されます。

引数はありませんので、$::form から読み出す必要があります。

actionメソッドの返り値（ハッシュ）

 ・ msg
    タイトル
 ・ body
    文書本体
 ・ header
    <head>〜</head>の内容
 ・ http_header
    HTTPヘッダー
 ・ cssheader
    生のCSS
 ・ jsheader
    JavaScriptファイル読み込み後に実行するJavaScript文
 ・ jsheadervalue
    ページ表示後すぐに実行するJavaScript文
 ・ bodytag
    <body> の中の文
 ・ ispage
    ページであることを返す
 ・ notviewmenu
    予約

内部変数仕様情報

 ・ $::HTTP_HEADER
    HTTPヘッダー
 ・ $::IN_HEAD
    <head>〜</head>
 ・ $::IN_JSHEADVALUE
    最初に実行されるJavaScript
 ・ $::IN_JSHEAD
    JavaScriptファイル読み込み後に実行されるJavaScript
 ・ $::IN_CSSHEAD
    生のCSS
 ・ $::IN_CSSFILES
    CSSファイル一覧
 ・ $::IN_JSFILES
    JavaScriptファイル一覧
 ・ $::IN_JSLOADER
    JavaScriptローダーのHTMLが入る
 ・ $::IN_BODY
    <body>の中に入る
 ・ $::IN_TITLE
    タイトルタグ
 ・ $::IN_META_ROBOTS
    ロボット制御
 ・ %::functions
    グローバル関数の一覧
 ・ %::database
    wiki/
 ・ %::infobase
    info/
 ・ %::diffbase
    diff/
 ・ %::backupbase
    backup/
 ・ %::resource
    リソース
 ・ %::form
    フォーム (GET/POST共用）
 ・ $::is_xhtml
    XHTMLであれば1
 ・ $::version
    バージョン
 ・ $::version_number
    バージョン数値（Majer?10000+Miner?100+Sub)

