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

Notations系クラスの解析手順 Edit

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>>)

呼び出し順は…

  1. PageかDocument
  2. 記法定義を読む(parent, source)
    対象ページページ/属性 → 設定ページ名 → 設定ページページ/内容 → 記法定義(記法・要素クラス名の対)のリスト ⇔ 全記法定義
  3. 記法定義を読んで要素生成(parent, source, 全記法定義)
    先頭の記法定義だけ切り出して、
  4. 要素クラス.記法検出(parent, source, String.Regex, 残りの記法定義)→NotationText上の記法を自身のインスタンス記法に置き換えた後のsource:NotationText
    Regexをラッピングするメソッド。自身のコンストラクターに渡すパラメーターをsourceから取得。同じクラスなのでパラメーターのは自由。
    1. 要素クラス.コンストラクター(parent, 用意したパラメーター)
    2. 記法定義を読んで要素生成(parent:自身, source:置き換えた後のNotationText, 残りの記法定義)

変更可能な記法の後にビルトインのデフォルト記法を解析 Edit

デフォルト記法(WikiCreole)の優先順位は設定された記法定義のあと。デフォルト間の優先順位は決まっていて変更不可能。記法が決まっているので優先順位も決めていい。

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