You don't even need much: loops, conditionals on attributes, and conditionals on nodes.
In fact, we could have that cross-language.