共通レイアウト

ソース

1import std.stdio;
2import jp.ku6.sweets.core;
3
4// 共通レイアウト
5immutable string LAYOUT = `<html>
6    <head>
7        <title>title</title>
8    </head>
9    <body>
10        <div s:id="content"/>
11    </body>
12</html>`;
13
14// 個別内容
15immutable string CONTENT = `<div>
16    hogehoge
17</div>`;
18
19void main()
20{
21    // データを出力するdelegate
22    void printer(const(char)[] data)
23    {
24        write(data);
25    }
26
27    // 解析器を作成
28    auto parser = new SweetsParser;
29
30    // 元のテキストからテンプレートオブジェクトを作成
31    auto layoutTemplate = parser.parse(LAYOUT);
32    auto contentTemplate = parser.parse(CONTENT);
33
34    // テンプレートデータを渡して生成
35    auto layout = new Sweets(layoutTemplate);
36    auto content = new Sweets(contentTemplate);
37
38    // タグを処理するdelegateの定義
39    void processor(SweetsPrinter printer, SweetsElement element, const(SweetsNode[]) children)
40    {
41        // 開始タグを出力する
42        element.printStartTag(printer, false);
43
44        // 共通レイアウトの挿入個所で個別内容を出力する
45        content.print(printer);
46
47        // 終了タグを出力する
48        element.printEndTag(printer);
49    }
50
51    // s:id="content"にprocessorを割り当てる
52    layout.assign("content", &processor);
53
54    // 割り当てた処理を実行し、結果を出力する
55    layout.print(&printer);
56}

実行結果

<html>
	<head>
		<title>title</title>
	</head>
	<body>
		<div><div>
	hogehoge
</div></div>
	</body>
</html>