package org.geogebra.common.kernel.advanced;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.StringTemplate;
import org.geogebra.common.kernel.arithmetic.Command;
import org.geogebra.common.kernel.commands.CommandProcessor;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoList;
import org.geogebra.common.main.MyError;
/**
* Sequence[ <expression>, <number-var>, <from>, <to> ] Sequence[ <expression>,
* <number-var>, <from>, <to>, <step> ] Sequence[ <number-var>]
*/
public class CmdZip extends CommandProcessor {
/**
* Creates new zip command
*
* @param kernel
* kernel
*/
public CmdZip(Kernel kernel) {
super(kernel);
}
@Override
final public GeoElement[] process(Command c) throws MyError {
int n = c.getArgumentNumber();
// avoid
// "Command Sequence not known eg
// Sequence[If[Element[list1,i]=="b",0,1]]
if (n < 3) {
throw argNumErr(app, c, n);
}
// create local variable at position 1 and resolve arguments
GeoElement arg = null;
GeoElement[] vars = new GeoElement[n / 2];
GeoList[] over = new GeoList[(n - 1) / 2];
boolean oldval = cons.isSuppressLabelsActive();
try {
cons.setSuppressLabelCreation(true);
arg = resArgsForZip(c, vars, over);
} finally {
for (GeoElement localVar : vars) {
if (localVar != null) {
cons.removeLocalVariable(
localVar.getLabel(StringTemplate.defaultTemplate));
}
}
cons.setSuppressLabelCreation(oldval);
}
AlgoZip algo = new AlgoZip(cons, c.getLabel(), arg, vars, over);
return algo.getOutput();
}
}