package me.eater.hefbrug.dsl.context import me.eater.hefbrug.dsl.annotation.HefbrugDSL import me.eater.hefbrug.selector.* @HefbrugDSL interface SelectionDefinitionContext { fun select(selector: SelectorInterface, block: C) fun all() = TrueSelector() fun node(selector: String): SelectorInterface = NodeSelector(selector) fun group(name: String): SelectorInterface = GroupSelector(name) fun group(vararg name: String): SelectorInterface = AllSelector(name.map { GroupSelector(it) }) fun group(name: String, block: C) { select(GroupSelector(name), block) } fun group(vararg name: String, block: C) { select(group(*name), block) } fun node(selector: String, block: C) { select(node(selector), block) } fun all(block: C) { select(all(), block) } operator fun SelectorInterface.invoke(block: C) { this@SelectionDefinitionContext.select(this, block) } }