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;
}
}