[[開発日記/2002-07-02]]にも書きましたが、今後の作業を行いやすくするために、ソースを大幅にいじっています。~ 今のところ下記のようにクラス分けを行うつもりです。まだまだ企画段階ですが。~ とりあえず、中身的にはTranslationEngineを独立させるんで、ページごとにエンジンの切り替えができるようにしようかなと。~ そうするとページによっては、そのままHTML使えるとか、ソースコード用のページならキーワードに色がつくページとか。~ ファイル部分もラップするので、あとで高速化の為DBなどへの対応も可能です。 -Pluginとか、Transrator 自体をクラスにしてしまって、ManagerをFactoryにして使うようにすると、後から追加とかやりやすいようにも思います。 -- [[seagull]] SIZE(1):2002-07-03 (水) 22:19:36 -すみません、TranslateEngineはそれを継承してWikiEngineなどとして使うつもりです。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 00:45:11 -うーん、プラグインの互換性はラッパーを書くか、どっちにしろ書き換えになるから、普通にクラス化しちゃうかなー。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 00:46:18 -Pageクラスが、TranslateEngineFactoryクラスを兼ねるつもりだったけど、わかりづらくなるから独立したクラスにしますね。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 00:47:54 -ええ、「ページ」と「変換エンジン」(レンダラ?)は別の方がいいでしょうね。 -- [[seagull]] SIZE(1):2002-07-04 (木) 01:22:30 -多分、「ページ」がデータソースで、それを元に適切な「変換エンジン」を探しだして構築し、レンダリング要求を出すといった感じでしょうか。 -- [[seagull]] SIZE(1):2002-07-04 (木) 01:25:54 -だとすると、「ページ」が自分をレンダリングする「変換エンジン」を知っているようにすると、引数なりの外部要因で切替えができなくなるので、捜し出すクラスは別にして置いた方が、面白い応用がありそうに思えます。 -- [[seagull]] SIZE(1):2002-07-04 (木) 01:29:03 -たとえば、同じページを HTMLにレンダリングする変わりに、XMLにしたりプレーンテキストに整形したり。HNF型のページからリンクを張ったり、直接描画したり。 -- [[seagull]] SIZE(1):2002-07-04 (木) 01:32:09 -新たな可能性が広がりそうですね。楽しみ♪ -- [[reimy]] SIZE(1):2002-07-04 (木) 05:22:07 -うーん、よくわからないんですが、文法と変換エンジンを選べるってことですか? PukiWiki 文法 から HTML、XML、i-mode用、Cのソースから HTML、XML、i-mode 用....みたいな。 -- [[とおりすがり]] SIZE(1):2002-07-04 (木) 11:42:45 -Page->get_type()で得られるものが、そのページのデフォルト変換エンジンですが、page->convert_htmlで引数をとって別のエンジンも使えるようにしますね。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 12:05:10 -文法と変換エンジンが一緒になったものを選択できるようになります。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 12:05:53 -WikiEngineというクラスがあれば、Wiki文法を解釈して出力します。 なにで出力するかも選択できるなら、Wiki2HTMLEngineとかWiki2XMLEngineとかを作ることになりそうですね。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 12:07:05 -Cソースまで行くと先走りすぎかも(笑) 個人的には、2XML, 2Textがあるとアプリケーション間連携とかできて面白そう。C2HTMLって、PukiWikiの枠組みの中でドキュメントライティングできそうですねぇ。 -- [[seagull]] SIZE(1):2002-07-04 (木) 12:41:09 -文章の途中で文法って切り替えできるようになるんでしょうか? 上だか下だかに添える説明文は Wiki の文法使いたいですし。それぞれの文法のコメント中で Wiki 文法つかえるようにするってのは無茶だろうけど、ブロック単位できりかえられると便利ですよね。 -- [[とおりすがり]] SIZE(1):2002-07-04 (木) 13:13:55 -中間フォーマットを決めるのはどうかな、と思ったんですけど、中間フォーマットに含める語彙を決めるのが大変そう。一般的にしないと後々困るだろうし。 -- [[とおりすがり]] SIZE(1):2002-07-04 (木) 13:17:07 -中間フォーマットはいらないと思います。工数を考えると結局意味のないものになりそうですし。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 13:23:07 -うーん、あまり複雑にすると敷居が高くなりそうで悩んでいます。ブロックごとに構文を変えるってのはできるとは思いますが。あまり構文が複雑になるならWikiを使う意味はないような気がしてます。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 13:25:02 -プラグインが自分に与えられたテキストからPukiWikiフォーマットを作成する責任をもつと、CソースはCソースプラグインに任せられますね。 -- SIZE(1):2002-07-04 (木) 13:35:51 -構文切り替えは意味が無いとおもいますよ。プラグインでどうとでもできますし。 -- [[seagull]] SIZE(1):2002-07-04 (木) 13:44:20 -[[seagull:Xiki]]こんなん作ってますが、こっちはユーザの編集時にすべてXMLに変換してしまって、レンダラの源泉はXML一本って方向でやってます。 -- [[seagull]] SIZE(1):2002-07-04 (木) 13:45:55 -作業中・・・・・・・・ うおー!結構大変だ! -- [[ゆう]] SIZE(1):2002-07-04 (木) 20:11:37 -源泉 XML 一本だと、俺さま専用 Wiki 文法! なんてのが作りやすくていいですよね。サイト毎に自分ごのみの文法もちあるけたらなぁ・・・ -- [[とおりすがり]] SIZE(1):2002-07-04 (木) 21:49:49 -XMLを扱うにはPHPは力不足な気がしますねー。それこそrubyでやりたい・・。 -- [[ゆう]] SIZE(1):2002-07-04 (木) 23:24:22 #comment // ウエブインターフェース部分 // このクラスから各処理を行います。 class Interface { // インターフェースを初期化 function Interface(); // HTTP経由でくる変数 var $post, $get, $vars; // 編集を実行 function do_edit(); // プレビューを実行 function do_preview(); // 書き込みを実行 function do_write(); // 一覧を実行 function do_list(); // 最終更新を実行 function do_recent(); // 差分を実行 function do_diff(); // 編集フォーム function edit_form($postdata,$data,$add=false); } // ページを管理 class PageStorage { // ページストレージを初期化 function PageStorage(); // ページを取得 function get_page(); // = Page // ページが存在するか? function page_exists(); // = boolean // ページ名リストを出力 function get_list(); // = array(pagename,..) // 更新日順ページ名リストを function get_list_order_update(); // = array(pagename,..) // 検索を実行 function search($word,$type="AND",$non_format=0); // = array(pagename,..) } // ページ class Page { // このページのソースを取得 function get_source(); // = string // このページのソースを設定 function set_source($src); // = boolean // ページのプロパティを設定 function set_properties($prop); // array('key'=>value) // ページのプロパティを取得 function get_properties(); // array('key'=>value) // このページのデフォルトソースを取得 function get_defaultsource(); // = string // このページの最終更新日を取得 (UNIX timestamp) function get_lastupdate(); // = int // このページが表示可能か (これがfalseでもget_sourceは可能) function is_visible(); // = boolean // このページが編集可能か (これがfalseでもset_sourceは可能) function is_editable(); // = boolean // このページが凍結されているか (これがfalseでもset_sourceは可能) function is_freeze(); // = boolean // このページのタイプ function get_type(); // = string // ページをhtmlに変更 function convert_html(); // = string (html) // このページのバックアップオブジェクトを初期化 function backup(); // = Backup } // バックアップを管理します class Backup { // バックアップを初期化 function Backup($page); // バックアップをセット function set($src); // = int (バックアップ世代数) // バックアップを取得 function get($gen); // = string // バックアップ世代数 function count(); // = int } // TranslateEngine生成クラス class TranslateEngineFactory { // $typeにあったTraslateEngineクラスを生成 function create($type); } // Wikiやその他フォーマットからHTMLに変換 class TranslateEngine { // トランスレーションエンジンを初期化 function TranslateEngine($pagestorage); // クラス内変数 var $pluginmanager; // = PluginManager // $srcからhtmlを生成 $pagenameはページ名, $varsはその他変数を指定 function run($src, $pagename, $vars); // = string // service functions // pagenameがBracketNameだった場合に、Bracketを除去 function strip_bracket($pagename); // = string // このページからのリンクリスト function linkto(); // = array(pagename); // このページへのリンクリスト function linkfrom(); // = array(pagename); // $strがWikiNameか? function is_wikiname($str); // = boolean // $strがBracketNameか? function is_bracketname($str); // = boolean // $strがInterWikiNameか? function is_interwikiname($str); // = boolean // $nameのリンクを作成 function make_link($name); // = string (html) // $strにstr_rulesユーザルールを適用 function do_strrules($str); // = string // $strにline_rulesユーザルールを適用 function do_linerules($str); // = string } // プラグイン管理用 class PluginFactory { // プラグインマネージャーを初期化 function PluginManager(); // プラグインを取得 function get_plugin($name); // プラグインが存在するか? function plugin_exists($name); } class Plugin { // プラグインの初期化を実行 function Plugin(); // プラグイン(action)を実行 function do_action($name); // プラグイン(convert)を実行 $page=呼び出し元ページ function do_convert($plugin_args, $vars, $page); // actionメソッドが存在するか function exist_action($name); // convertメソッドが存在するか function exist_convert($name); // service function // 初期メッセージを設定します function set_messages($messages); // = void } RIGHT: written at first by [[ゆう]]