Send to your Kindle RIGHT:[[:t/実装]] [[:t/要素]] [[:t/Wiki]] †[[: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)の優先順位は設定された記法定義のあと。%%デフォルト間の優先順位は決まっていて変更不可能。記法が決まっているので優先順位も決めていい。 ビルトイン記法を優先。そうしないと記法変換に支障が出るので。 RIGHT:[[:t/実装]] [[:t/要素]] [[:t/Wiki]] †[[: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)の優先順位は設定された記法定義のあと。%%デフォルト間の優先順位は決まっていて変更不可能。記法が決まっているので優先順位も決めていい。 ビルトイン記法を優先。そうしないと記法変換に支障が出るので。