RIGHT:[[:t/実装]] [[:t/要素]] [[:t/Wiki]]

†[[:i/ページに型を]]与えるときページ/要素/クラス名を指定するので、現在のTokenize対象をNotationTextだけにする。
†[[:i/ページに型を]]与えるときページ/要素/クラス名を指定するので、現在のTokenize対象をNotationTextクラスだけにする。
%%NotationTextのFactoryメソッドにstringを1つ与えるとNotationText.Tokenize実行。Elementsを返すように。%%
%%他のElements系クラスにもstringを1つ受けるFactoryメソッドを用意。それぞれでページ/型として使われたときの対応をする。%%

***Notations系クラスの解析手順 [#p1a7c3ae]
 Notation(parent:Element, source:NotationText)
最上位parentは特定Element.(Document?)
sourceはNotationText(フォームからの入力)
呼び出し元ページのページ/属性から記法定義を取得して、自身以降を処理。記法定義は記法→クラス名で、クラス名は重複していていいので…自身が何番目の記法から呼ばれたかを教えてもらわないと。

→要素クラスで記法を探索。要素クラスにはStringを与える。これでページ/型として使われたときに対応。
NotationTextはstring.
 Notation.記法定義を読む(parent:Element, source:NotationText)
 Notation.記法定義を読んで要素生成(parent:Element, source:NotationText, notations:List<Tuple<notationPattern:String.Regex, className:String.ClassName>>)

呼び出し順は…
+PageかDocument
+記法定義を読む(parent, source)
対象ページのページ/属性 → 設定ページ名 → 設定ページのページ/内容 → 記法定義(記法・要素クラス名の対)のリスト ⇔ 全記法定義
+記法定義を読んで要素生成(parent, source, 全記法定義)
先頭の記法定義だけ切り出して、
+要素クラス.記法検出(parent, source, String.Regex, 残りの記法定義)→NotationText上の記法を自身のインスタンス記法に置き換えた後のsource:NotationText
…Regexをラッピングするメソッド。自身のコンストラクターに渡すパラメーターをsourceから取得。同じクラスなのでパラメーターの型は自由。
++要素クラス.コンストラクター(parent, 用意したパラメーター)
++記法定義を読んで要素生成(parent:自身, source:置き換えた後のNotationText, 残りの記法定義)
***変更可能な記法の後にビルトインのデフォルト記法を解析 [#k9b56d42]
%%デフォルト記法(WikiCreole)の優先順位は設定された記法定義のあと。%%デフォルト間の優先順位は決まっていて変更不可能。記法が決まっているので優先順位も決めていい。

ビルトイン記法を優先。そうしないと記法変換に支障が出るので。