最小限のコード

ソース

1import std.stdio;
2import jp.ku6.sweets.core;
3
4void main()
5{
6    // タグを処理するdelegateの定義
7    void processor(SweetsPrinter printer, SweetsElement element, const(SweetsNode[]) children)
8    {
9        // 開始タグを出力する
10        // 今回の場合は「<span class="fuga">」を出力します
11        // s:id="hoge"は取り除かれます。
12        // 開始タグを表示したく無い場合はこの関数を呼び出さなければ出力しません。
13        element.printStartTag(printer, false);
14
15        // Hello work!!の文字列を出力する
16        // ここで任意の文字列を出力することで文字列の置き換えを行えます。
17        printer("Hello work!!");
18
19        // 終了タグを出力する
20        // 今回の場合は</span>を出力します
21        // こちらも必要でなければ関数を呼び出さなければ出力しません。
22        element.printEndTag(printer);
23    }
24
25    // データを出力するdelegate
26    void printer(const(char)[] data)
27    {
28        // 出力を要求されたデータを標準出力に出力する
29        // ここでたとえばファイルへの出力や、
30        // 予め確保済みのメモリ領域への出力を記述することができます。
31        write(data);
32    }
33
34
35    // 解析器を作成
36    auto parser = new SweetsParser;
37
38    // 元のテキストからテンプレートオブジェクトを作成
39    auto tpl = parser.parse("<span s:id=\"hoge\" class=\"fuga\">hogehoge</span>");
40
41
42    // テンプレートデータを渡して生成
43    auto sweets = new Sweets(tpl);
44
45    // s:id="hoge"にprocessorを割り当てる
46    sweets.assign("hoge", &processor);
47
48    // 割り当てた処理を実行し、結果を出力する
49    // 今回の場合は、s:id="hoge"のタグにprocessor関数を実行し、結果を出力します
50    sweets.print(&printer);
51}


実行結果

<span class="fuga">Hello work!!</span>