kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev - Core Application (3)

TiddlyWiki Core Applicationの続き

UIとレンダリングパイプライン

  • WikiText → パーズツリー → レンダツリー → DOM →シリアライズ→ 静的HTML

パーザ

  • コアプラグインはWikiTextのパーザを提供し、テキストをパーズツリーに変換する
  • パーザはparserタイプのモジュールとして提供される
  • パーザはモジュールからパーズのルールをロードする
  • wikiruleタイプのモジュールでルールを追加できる
    • 例:horizrule.jsは---から<hr>を作るwikirule

なんでも拡張可能になってるんだなあ

  • html ruleにより、WikiTextに含まれるHTMLタグはelementタイプの要素となる
  • html ruleはこっそりWikiTextのWidgetもパーズしている
  • その場合、elementタイプのノードを作る代わりにタグ名の先頭の$で認識できるようにする

ちょっとこのへん言ってることがわからないけど続きを読めばわかるらしい

ウィジェット

  • WikiTextがパーズツリーに変換されたら次はそれをウィジェットツリーにする

さっきはレンダツリーって言ったじゃん

  • コアプラグインは基本的なウィジェットオブジェクトを提供する
  • ウィジェットオブジェクトはパーズノードとDOMノードを取得して、パーズノードに対応するDOM構造を作る
  • LinkWidgetは<a>...</a>タグに対応するDOMノードを作って、与えられたDOMノードに追加する
  • パーズノードに子ノードがあれば対応する子ウィジェットも作成される

何言ってるかわからなくなってきたぞ

  • これらの機能は基本Widgetから提供される
  • 追加のウィジェットを作る場合はwidgetタイプのモジュールをロードする
  • ベースのウィジェットを拡張したり置き換えたりすることができる
  • ウィジェットモジュールはパーズノードの"type"プロパティによって指定される

  • 動的な振る舞いはふたつの方法で追加できる

今日はここまで