要素(Elements)とそれを利用するフレームワーク/WikiEngineの仕組み。

機能の実装。ほとんどのプラグインページ/要素。拡張の要。

機能とは Edit


呼び方「機能」→「PageElement」に。

機能追加の仕組みと追加されるもの。

記法の機能。

汎用の機能呼び出し記法か、機能ごとに定義した記法で記述すると機能するようになる。

内部では記法は機能呼び出し記法に置き換えられる。

機能呼び出しをするクラスは機能記法だけを扱えればいい。

名前付きパラメーター Edit


無名引数を使うならリファレンスやコード補完があるときだけ。

汎用記法では名前付きパラメーターにする。

機能にUsage Edit


機能に書かれているテキストをヘルプに出す。

マウスポイント時のバルーンやtipsにも出せるようなシンプルな体裁で。

というか、組み込み済みの記法で。

Usage()→組み込み済記法汎用記法

時刻だけ書いたら同じページに書かれている日付を加味 Edit


検索時の同一性評価で、足りない情報を同じページから取得。

時刻だけの表現には同じページにある日付を。同じページに日付だけの表現がないなら日付時刻から日付を流用。

足りないフィールドは同じ(近い)ページから取得。

Wikiなので情報は非定。補える場合は少ないし重複がある。

→足りない情報を補うための機能ではなく、近い情報を加味する基本的な機能で。
  • -------
    属性継承とは違う。

    機能が独自に使うデータなので、フレームワークは関わらない。

    広い期間で有効なデータ領域を用意するだけ。

    →数種類。ページ、プロセス、セッション、アプリケーション。機能向け機能。

各機能はそこにパラメーター履歴を残して置けばいい。

インスタンス Edit


というか、設定を複数用意可能に。

同じ機能でも設定ごとに異なる記法を当てて、使い分けできるように。

機能側で設定ページをパラメーター化すればいい。

記法の記述で、Notation設定を抱き合わせにすれば実現可能。

フレームワークでやる必要はない。

複数行パラメーターの書き方 Edit


複数行を機能に渡すには、置き換えと埋め込みページが良さそう。
  • 置き換え
    plugin(l1
    l2,p2)

    WikiCreole式。

    改行文字になる表現を使って。機能には改行文字が渡る。
  • 埋め込み
    plugin({{ページ}})

    他のページを指すリファレンスを渡す。ページ埋め込みの仕組みを使って展開されてからパラメーターとして機能へ。

3態 Edit


WikiText→オブジェクト→HTML

…を機能ごとに行う。出力はそのままレスポンスに含める。

記法設定に依存しない基本的な記法)をHTMLに変換するためのライブラリを用意。

これで他の記法と変換結果を統一。

HTMLのメモ化は機能ごとに。

オブジェクトの保存はバージョニングのこと。

ページ属性次第で保存するかしないかが決まる。

保存しないのは特殊なページ

ページがコンポジション Edit


ページは機能のコンポジション。永続化と復帰を単純化。

リンクは1つのオブジェクトにしたほうが都合が良い。

…が、機能が低下するので却下。

永続化と復帰が複雑になる。

機能の展開タイミング Edit


ページ特有の解析処理(利用者登録など)の前か後かは機能の実装次第で決まるように。

ページ特有の処理の前に展開すれば展開後のテキストも解析されることになる。

includeのように他のページを取り込む機能を使えば、任意のページ利用者登録ページに取り込んで一括登録できる。その代わり取り込まれるページ管理者権限でしか編集できないようにしなければならない。など利点と欠点がある。

機能の出力はそれ以上処理しないので、自動リンク埋め込みの展開などは機能側で行なう。

記法(機能呼び出し)のパラメーター部分に記法があっても処理するのは機能。それ以外はページが処理。

これでページ/編集/HTML書き込み[?]埋め込みと展開を邪魔しないようにできる。

機能の出力はWikiTextではなくHTML。そのままレスポンスの一部になる。

機能の処理のうち共通部分に埋め込みの展開を置いてもいい。

メタシンボル埋め込みで動的なパラメーター指定ができるが、これを全機能の仕様にしたいので。


入力:WikiText →
ページ記法の解釈、オブジェクト化。
機能埋め込み展開
機能自身の処理と自動リンク(機能次第)

→ 出力:HTML
  1. 機能とは
  2. 名前付きパラメーター
  3. 機能にUsage
  4. 時刻だけ書いたら同じページに書かれている日付を加味
  5. インスタンス
  6. 複数行パラメーターの書き方
  7. 3態
  8. ページがコンポジション
  9. 機能の展開タイミング
  1. :t/要素より
    1. 機能は部品
    2. URLクエリー
      1. :/検索式を使う検索
    3. 投稿時展開するものは要らない
    4. いろいろなページ/要素
      1. :i/レイアウト要素
    5. 未分類
    6. その他の機能
      1. :i/時刻だけ書いたら同じページに書かれている日付を加味
      2. :i/投稿時展開する記法は要らない
      3. :/階層化ページ名がタグなら一覧化しないと
      4. :/HTMLコンテナー
      5. :/HTML変換の内部処理
      6. :/WikiEngineから機能の呼び出し
      7. :/データアクセスとは
      8. :/ブロック要素は段落単位で
      9. :/プラグインが使えるフック
      10. :/ページ全体も要素
      11. :/ページ属性の型は文字列だけ
      12. :/機能/API/オブジェクト取得API
      13. :/機能/API/トリガー2種類
      14. :/機能/API/バージョン
      15. :/機能/APIとは
      16. :/継承対応要素
      17. :/要素からWikiEngineインスタンスを起動可能
      18. :/解釈をはさんだ検索
      19. :Done/2つ呼ぶ記法
      20. :Done/クライアント側にサービス側オブジェクトのProxyを作るには
      21. :/グローバルオブジェクトを書き換える機能
      22. :/セレクターは属性値デコレーションに使えない
      23. :Done/ページセット取得記法とエレメント取得記法
      24. :Done/ページ型/スレッド/データコンテキスト/記法定義まとめ
      25. :Done/履歴はオブジェクト形式で?
      26. :Done/検索はクエリーとページの類似度判定
      27. :Done/検索フォーマットは機能を呼ぶか
      28. :Done/目次に出したいだけの見出しはどう書くか
      29. :Done/要素がアクティブなWiki/Page/Userを得るには
      30. :Done/記法の衝突対策
      31. :Done/タグとはページか
      32. :i/APIリファレンスはページ
      33. :i/LTSV→テーブル
      34. :i/ToWikitextはそのまま返す
      35. :i/Tokenize対象はNotationText
      36. :i/UIからの呼び出し方法2種
      37. :i/UIを使うページ要素
      38. :i/UI要素
      39. :i/URIは内部型を含むラッパー
      40. :i/URIを解析して異なるページ要素に渡す仕組み
      41. :i/URLクエリーは一時的ページ
      42. :i/class属性を付けるならそれごと記法として実装
      43. :i/to…は複数指定
      44. :i/「Wiki記法」の削減
      45. :i/おとなりページ
      46. :i/ここからの目次
      47. :i/なにかのカウンター
      48. :i/インライン/ブロック/ページの3スコープ → ページ/ラインの2スコープ
      49. :i/オブジェクトにUIを持たせる
      50. :i/クエリーにどう反応するか
      51. :i/データの保存先指定
      52. :i/ハブとして機能する要素
      53. :i/ファセットを並べるだけでなく集計もしたい
      54. :i/ファセット分類
      55. :i/ファセット化の対象は専用のメタデータ
      56. :i/フォーム要素
      57. :i/ブロック要素/インライン要素を区別しない
      58. :i/プラグイン内でプラグインを呼び出すために
      59. :i/プラグイン要素は記法
      60. :i/プレビューの集め方
      61. :i/プレースホルダー記法
      62. :i/プログラムコードを記述するには
      63. :i/プロセス起動ごとに呼ばれる要素
      64. :i/ページ──要素間はコンポジションに
      65. :i/ページとは
      66. :i/ページと他オブジェクトとの関わり合い
      67. :i/ページと要素は似ている[?]
      68. :i/ページのイテレーター
      69. :i/ページは…
      70. :i/ページは要素でもある
      71. :i/ページは要素のインターフェイス
      72. :i/ページは要素のコンポジション
      73. :i/ページ内容がオブジェクト構成を表す
      74. :i/ページ要素のUI
      75. :i/ページ要素間のつながり[?]
      76. :i/ページ要素間の連携方法[?]
      77. :i/metaになる要素
      78. :i/ユースケースに即席ページを
      79. :i/リンクは種別によって見せ方を変える
      80. :i/ローカライズに関西弁や語尾に何かを付ける方言も
      81. :i/一行テキスト
      82. :i/下位展開範囲のスレッドを統合するもの
      83. :i/何かのカウンター
      84. :i/全ページの属性を一覧化して書き換え
      85. :i/名前の同一視
      86. :i/型別一覧
      87. :i/大抵のHTMLはテンプレートで
      88. :i/改行は要素
      89. :i/文字列からの型変換はExcelでもやっている
      90. :i/日付に経過日数
      91. :i/検索で共起要素を探すには
      92. :i/検索式は1つの要素で
      93. :i/検索用テキストを作るならページ要素で
      94. :i/検索語にスケール指定を [#u3c753
    7. プラグインは記法
    8. 展開は閲覧時
    9. Chain of Responsibility
    10. ページ─機能はコンポジションに
    11. どの機能か
    12. クラス継承
    13. 使い方2種類
    14. 使い方が2種類あっても実体は同じ
    15. リクエストからの直接呼び出しでもネスト可能に
    16. URLクエリーは一時的ページ
    17. MVC
    18. 機能を実行時に取得
      1. URIで示された場所に置くもの

:t/要素より Edit

機能は部品 Edit


機能は部品であるべき。

組み合わせる余地が要る。
  • tag.inc.phpのように固いものや大きなもの、応用の利かないものはまずい。
  • ツール化しないように。
    ツールページ+機能で。

    アプリケーションはWiki全体で。

URLクエリー Edit

:/検索式を使う検索 Edit


利用するユースケースクラスによってはURLクエリーがページと同じになる。ページとの違いはデータコンテキストの違いだけ。呼ばれたページに含まれるページ/要素は、URLクエリーからデータを引き出すことになる。

あるユースケースでは、URLクエリー上で一時的なページを作れる。レスポンスにはそのページが載る。複数のページをひとつのレスポンスにまとめたりできる。

投稿時展開するものは要らない Edit


投稿時展開するくらいなら編集時にボタンなどで展開後のテキストを挿入した方がいい。

MediaWikiの~~~~のようなもの。

そういったボタンを使えないクライアントにはただの文字列を提供。編集ページを開いた時点で展開しておく。それをコピペ。量が多くなるのであまり一度に用意できない。

いろいろなページ/要素 Edit

:i/レイアウト要素 Edit


随時作ればいい。

スタイルを与えるだけのもの。あるいは入口と出口の要素を分けて、出口をテンプレート内に配置。入口はページ本文で後から追加。入口の内容が出口にだけ表示される。

未分類 Edit

その他の機能 Edit

:i/時刻だけ書いたら同じページに書かれている日付を加味 Edit


その要素自身の機能で。

:i/投稿時展開する記法は要らない Edit

:/階層化ページ名がタグなら一覧化しないと Edit

:/HTMLコンテナー Edit

:/HTML変換の内部処理 Edit

:/WikiEngineから機能の呼び出し Edit

:/データアクセスとは Edit

:/ブロック要素は段落単位で Edit

:/プラグインが使えるフック Edit

:/ページ全体も要素 Edit

:/ページ属性の型は文字列だけ Edit

:/機能/API/オブジェクト取得API Edit

:/機能/API/トリガー2種類 Edit

:/機能/API/バージョン Edit

:/機能/APIとは Edit

:/継承対応要素 Edit

:/要素からWikiEngineインスタンスを起動可能 Edit

:/解釈をはさんだ検索 Edit

:Done/2つ呼ぶ記法 Edit

:Done/クライアント側にサービス側オブジェクトのProxyを作るには Edit

:/グローバルオブジェクトを書き換える機能 Edit

:/セレクターは属性値デコレーションに使えない Edit

:Done/ページセット取得記法とエレメント取得記法 Edit

:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ Edit

:Done/履歴はオブジェクト形式で? Edit

:Done/検索はクエリーとページの類似度判定 Edit

:Done/検索フォーマットは機能を呼ぶか Edit

:Done/目次に出したいだけの見出しはどう書くか Edit

:Done/要素がアクティブなWiki/Page/Userを得るには Edit

:Done/記法の衝突対策 Edit

:Done/タグとはページか Edit

:i/APIリファレンスはページ Edit

:i/LTSV→テーブル Edit

:i/ToWikitextはそのまま返す Edit

:i/Tokenize対象はNotationText Edit

:i/UIからの呼び出し方法2種 Edit

:i/UIを使うページ要素 Edit

:i/UI要素 Edit

:i/URIは内部型を含むラッパー Edit

:i/URIを解析して異なるページ要素に渡す仕組み Edit

:i/URLクエリーは一時的ページ Edit

:i/class属性を付けるならそれごと記法として実装 Edit

:i/to…は複数指定 Edit

:i/「Wiki記法」の削減 Edit

:i/おとなりページ Edit

:i/ここからの目次 Edit

:i/なにかのカウンター Edit

:i/インライン/ブロック/ページの3スコープ → ページ/ラインの2スコープ Edit

:i/オブジェクトにUIを持たせる Edit

:i/クエリーにどう反応するか Edit

:i/データの保存先指定 Edit

:i/ハブとして機能する要素 Edit

:i/ファセットを並べるだけでなく集計もしたい Edit

:i/ファセット分類 Edit

:i/ファセット化の対象は専用のメタデータ Edit

:i/フォーム要素 Edit

:i/ブロック要素/インライン要素を区別しない Edit

:i/プラグイン内でプラグインを呼び出すために Edit

:i/プラグイン要素は記法 Edit

:i/プレビューの集め方 Edit

:i/プレースホルダー記法 Edit

:i/プログラムコードを記述するには Edit

:i/プロセス起動ごとに呼ばれる要素 Edit

:i/ページ──要素間はコンポジションに Edit

:i/ページとは Edit

:i/ページと他オブジェクトとの関わり合い Edit

:i/ページと要素は似ている[?] Edit

:i/ページのイテレーター Edit

:i/ページは… Edit

:i/ページは要素でもある Edit

:i/ページは要素のインターフェイス Edit

:i/ページは要素のコンポジション Edit

:i/ページ内容がオブジェクト構成を表す Edit

:i/ページ要素のUI Edit

:i/ページ要素間のつながり[?] Edit

:i/ページ要素間の連携方法[?] Edit

:i/metaになる要素 Edit

:i/ユースケースに即席ページを Edit

:i/リンクは種別によって見せ方を変える Edit

:i/ローカライズに関西弁や語尾に何かを付ける方言も Edit

:i/一行テキスト Edit

:i/下位展開範囲のスレッドを統合するもの Edit

:i/何かのカウンター Edit

:i/全ページの属性を一覧化して書き換え Edit

:i/名前の同一視 Edit

:i/型別一覧 Edit

:i/大抵のHTMLはテンプレートで Edit

:i/改行は要素 Edit

:i/文字列からの型変換はExcelでもやっている Edit

:i/日付に経過日数 Edit

:i/検索で共起要素を探すには Edit

:i/検索式は1つの要素で Edit

:i/検索用テキストを作るならページ要素で Edit

:i/検索語にスケール指定を [#u3c753 Edit

プラグイン記法 Edit


プラグインというクラスは作らない。

記法と同じ扱い。X/PageElement[?]

記法はネスト可能。

独自データをページに保存可能。ページに残すので履歴付き。

プラグインのアンインストール方法は?しやすく

しやすくする以上のことはできない。

PageElementをオブジェクトとして永続化する場合、Pageと一緒にということになる。

動的データはPageが持つWikiTextからすべて作成可能。

PageインスタンスはWikiTextから生成したPageElement構造体。

利用者による編集と同じで、ページ更新するときは履歴を作るのが基本。

でも、PageElementの設定(PageElementのコードで定義)で履歴を作らないことが指示されていれば作らない。

展開は閲覧時 Edit


閲覧時展開

置き換えない。

HTMLに置き換えてもHTMLエスケープしてしまうので。

ずっと動的に展開。

メタシンボルの類も同じ。他の機能と同様に。

Chain of Responsibility Edit


ユーザーが直接呼び出すタイプの機能はChain of Responsibility。

クエリーは機能名とページ名を指定するのでなく、やって欲しいことを。

同じクエリーでも導入されている機能次第で別の処理が行われるかも知れないし、いくつの機能が反応するかも変わってくる。管理次第。

これはWikiが正しく構築されていれば正しく動くし、間違っていれば結果(ページ出力)に表れるので分かりやすい。対応付けを厳格にすると設定が難しくなるし、後から付け足した設定で以前の設定が無効になることもあるので、それを回避するのが狙い。

フレームワークもChain of Responsibility。

ページ─機能はコンポジションに Edit


Notationオブジェクトは書くたびにインスタンス生成。

リファレンスだけを増やしたいときはPukiWikiでの「include機能」のような特別な方法で。

どの機能か Edit


機能使用時の記述は機能を表すキーワードと、機能指定のキーワードで。

1つのキーワードで複数の機能呼び出し可能。

処理できる機能1つが処理する。

処理可能かどうかの判定は機能ごとに優先順位ありで、機能内に優先度を記述しておく。

クラス継承 Edit


組み込み済みクラスを継承して機能化。上位クラスと同じ扱いをされるように。下位クラスを知っているクラスからはそのクラスとして扱われるように。

記法類は機能に継承されていいように。

使い方2種類 Edit

  • ページに記述→機能はHTML生成。
  • 別機能のパラメーターとして記述→別機能からパラメーターを渡すよう要求される→純粋なデータを生成。

ls→ページ名リストを生成。パラメーターとしてはページセットを生成。

書かれた場所…コンテキスト文脈文脈次第でが変わる。意味は変わらない。使いにくくなるので。

使い方が2種類あっても実体は同じ Edit


どちらの使われ方でも記法を返す。それが何に埋め込まれるかはフレームワークが決める。

実装はインターフェイス。

イベントハンドラーのようなもの。

ユーザーからのリクエストで呼ばれるだけの機能でも、ページに書かれたときに自身を呼ぶリンクやボタンを生成するようにすれば使いやすくなる。

リクエストからの直接呼び出しでもネスト可能に Edit


PukiWikiのコマンド機能のように、ページに書かずに使う場合でもネスト可能に。一時的なページを生成してもいい。

またはデリゲート可能に。最後に呼ぶもの以外はデータコンテキスト

URLクエリーは一時的ページ Edit


URLクエリーもページ

同じように解析、展開。

使い方も実装も統一できる。

MVC Edit

M
いくつでも。(複数クラス、複数ファイル)
名前などすべて利用者の任意。
V
いくつでも。
Mと同じように任意。
C
機能のエントリーポイント。
同機能のMとVを呼び出す。

名前に規則あり。フレームワークから呼び出しやすくするため。

C(前)とC(後)がある。
フレームワーク1.C(前)2.M、Vなど
3.子のC(前)4.子のM、子のVなど
5.子のC(後)6.子のM、子のVなど
7.C(後)8.M、Vなど

深さ優先の呼び出し。

機能を実行時に取得 Edit


機能をUIからのシステム呼び出し時に取得したい。

管理者が機能のURIを入力して。

システムが機能を取得、インストール。

アンインストールは…

機能と同じ著作者のファイルだけ消す。

他の機能でも使うようなものは除く。

参照数をカウントしておけば(また、カウントし直しが随時できれば)より正確にアンインストールできる。

URIで示された場所に置くもの Edit

  • ログラム他、インストールするもの
  • 必要なもの(他者が作ったもの)
  • インストールの仕方、形式的な書式

URI集を特定のサイトで作り、RSS化。

各Wikiで定期的に取得。

管理者用の機能。