Сегодня за полдня написал небольшой эффектик. Ничего сложного, просто бот сидит пишет программку по некоторым шаблонам и правилам.
Так выглядит XML с шаблонами.
<config>
<node name="const">
<static var="0" color="AAAAAA"/>
</node>
<node name="string">
<static var="0" color="60e18c"/>
</node>
<node name="root">
<input name="site"/>
</node>
<node name="site">
<static text="site " color="00FFFF"/><input name="name"/><static text=" {"/><br/>
<static text=" "/><input name="content"/><br/>
<static text="}"/>
</node>
<node name="statement">
<input name="statement"/>
</node>
<node name="expression">
<input name="expression"/>
</node>
<node name="variable">
<static text="var "/><input name="name"/><static text=" = "/><input name="value"/>
</node>
<node name="object">
<static var="0" color="00FFFF"/><static text="."/><input name="method"/>
</node>
<node name="function">
<static var="0" color="AAAAAA"/><static text="( "/><input name="parameters"/><static text=" )"/>
</node>
<node name="quotes">
<static text="&quot;" color="60e18c"/><input name="string"/><static text="&quot;" color="60e18c"/>
</node>
</config>
А так, собственно, код.
q.addNodeText( ":site", "site", "site", 200, 500 ); q.addConstText( "site:name", "ru.valyard.site", 200 ); q.addNodeList( "site:content", "statement" ); var c: String = "site.content"; q.addText( c+".0:statement", "Application", 200 ); q.addNode( c, "object", ["Application"], 500 ); q.addNodeText( c+".0:method", "function", "addModules", 200, 500 ); q.addNodeList( c+".0.method:parameters", "expression", ", " ); var p: String = c+".0.method.parameters"; q.addText( p+".0:expression", "\"", 200 ); q.addNode( p, "quotes" ); q.addStringText( p+".0:string", "Test", 200, 500 ); q.addText( p+".1:expression", "\"", 200 ); q.addNode( p, "quotes" ); q.addStringText( p+".1:string", "Apple", 200, 500 ); q.addText( p+".2:expression", "\"", 200 ); q.addNode( p, "quotes" ); q.addStringText( p+".2:string", "Warcraft LOL", 200, 500 ); q.addText( c+".1:statement", "var", 200 ) q.addNode( c, "variable", null, 500 ); q.addConstText( c+".1:name", "module", 200, 500 ); q.addNodeText( c+".1:value", "object", "Application", 200, 500 ); q.addNodeText( c+".1.value:method", "function", "loadModule", 200, 500 );
Не знаю, что с жтим делать кроме того назначения, ради которого он был написан. Но добавлять новые шаблончики и перекрашивать старые чрезвычайно удобно. Так как данные хранятся в дереве, легко можно удалять части написанной программы, переписывать ее части.

Очень прикольно! Почему-то сразу захотелось заглянуть на source.valyard.ru. Хм..