言語内DSLでHTMLをスマートに記述する
昨日のつづき。
演算子オーバロードかわいいかわいい!と言ってるうちにこんなのができた。
string html=HtmlBuilder.Begin(t=> t.html/( +t.head/( +t.title["my home page"] +t.meta("description","myhomepage")) +t.body/( +t.h1["WELCOME!!!"] +t.ul/t.code(()=>from x in new[]{"item1","item2","item3","><"} select t.li[x]) +t.ul/t.code(()=>{ return t.container / ( +t.li["hogehoge"] +t.li["hagehage"]); })))).indent(true).ToString();
これが↓こうなる。
<html> <head> <title>my home page</title> <meta name="description" content="myhomepage" /> </head> <body> <h1>WELCOME!!!</h1> <ul> <li>item1</li> <li>item2</li> <li>item3</li> <li>><</li> </ul> <ul> <li>hogehoge</li> <li>hagehage</li> </ul> </body> </html>
我ながら小気味よいものができたと思ってる。ソースはそのうち公開予定→した。
http://coderepos.org/share/browser/lang/csharp/DoloresWebserver/trunk/Dolores内のHtmlBuilder.cs。