package dk.itu.kasper.Macros; import java.util.Map; import java.util.HashMap; public class MacroDefs extends MacroExpander { private final Map definitions = new HashMap(); public String def(String[] args){ if (args.length != 2 ) return "***def needs two arguments, a name and a macro definition***"; definitions.put(args[0],args[1]); return ""; } public String undefined(String name, final String[] args){ class ParameterExpander extends MacroExpander { public String undefined(String name, String[] dummy){ int index; try{ index = Integer.parseInt(name); }catch(NumberFormatException e){ return "*** Illegal parameter name ***"; } if ( index >= 0 && index < args.length ) return args[index]; else return "*** Wrong parameter number ***"; }}; if ( definitions.containsKey( name ) ) return super.process( definitions.get( name ), new ParameterExpander() ); else return "*** undefined macro: " + name + " ***"; } }