package net.asfun.jangod.lib.macro;
import net.asfun.jangod.lib.Macro;
import net.asfun.jangod.parse.ParseException;
import net.asfun.jangod.tree.Node;
import net.asfun.jangod.tree.TreeRebuilder;
import net.asfun.jangod.util.HelperStringTokenizer;
public class BlockMacro implements Macro {
final String MACRONAME = "block";
final String ENDMACRONAME = "endblock";
final String BLK_NAME_PREFIX = "'BLK\"NAME:";
@Override
public String getEndMacroName() {
return ENDMACRONAME;
}
@Override
public void refactor(Node current, String helpers, TreeRebuilder rebuilder)
throws ParseException {
String[] helper = new HelperStringTokenizer(helpers).allTokens();
if (helper.length != 1) {
throw new ParseException("Macro 'block' expects 1 helper >>> "
+ helper.length);
}
String blockName = rebuilder.resolveString(helper[0]);
// if is parent
if (rebuilder.parent == null) {
rebuilder.assignNode(BLK_NAME_PREFIX + blockName, current);
} else {
Node parentBlock = rebuilder.fetchNode(BLK_NAME_PREFIX + blockName);
if (parentBlock == null) {
throw new ParseException(
"Dosen't define block in extends parent with name >>> "
+ blockName);
}
// current.replaceWithChildren(parentBlock);
rebuilder.nodeReplace(parentBlock, current.children());
}
}
@Override
public String getName() {
return MACRONAME;
}
}