package net.asfun.jangod.lib.macro;
import net.asfun.jangod.lib.Macro;
import net.asfun.jangod.parse.ParseException;
import net.asfun.jangod.parse.TagToken;
import net.asfun.jangod.tree.Node;
import net.asfun.jangod.tree.TagNode;
import net.asfun.jangod.tree.TreeRebuilder;
public class CallMacro implements Macro {
final String MACRONAME = "call";
@Override
public String getEndMacroName() {
return null;
}
@Override
public void refactor(Node current, String helpers, TreeRebuilder rebuilder)
throws ParseException {
// helpers like name arg2=val2,arg3=var3
String name = "";// TODO get from helpers;
Node defineNode = rebuilder.fetchNode(MacroMacro.MACRO_NAME_PREFIX
+ name);
if (defineNode == null) {
throw new ParseException("Call a macro didn't define yet >>> "
+ name);
}
String[] args = new String[] {};// TODO resolve from macro's helpers
String[] vals = new String[] {};// TODO resolve from helpers and macro's
// helpers
for (int i = 0; i < args.length; i++) {
TagNode tn = new TagNode(new TagToken("{%set " + args[i] + " "
+ vals[i] + " just %}"));
rebuilder.nodeInsertBefore(current, tn);
}
rebuilder.nodeReplace(current, defineNode.clone().children());
}
@Override
public String getName() {
return MACRONAME;
}
}