言語内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>&gt;&lt;</li>
        </ul>
        <ul>
            <li>hogehoge</li>
            <li>hagehage</li>
        </ul>
    </body>
</html>

我ながら小気味よいものができたと思ってる。ソースはそのうち公開予定→した。
http://coderepos.org/share/browser/lang/csharp/DoloresWebserver/trunk/Dolores内のHtmlBuilder.cs。