package openmods.calc.command;
import com.google.common.base.Joiner;
import java.util.Arrays;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WhitespaceSplitters {
private static class ArrayBasedWhitespaceSplitter implements IWhitespaceSplitter {
private final Iterator<String> parts;
public ArrayBasedWhitespaceSplitter(String[] parts) {
this.parts = Arrays.asList(parts).iterator();
}
@Override
public String getNextPart() {
if (!parts.hasNext()) throw new CommandSyntaxException("openmodslib.command.not_enough_arguments");
return parts.next();
}
@Override
public String getTail() {
if (!parts.hasNext()) throw new CommandSyntaxException("openmodslib.command.not_enough_arguments");
return Joiner.on(" ").join(parts);
}
@Override
public boolean isFinished() {
return !parts.hasNext();
}
}
public static IWhitespaceSplitter fromSplitArray(String... args) {
return new ArrayBasedWhitespaceSplitter(args);
}
private static final Pattern SPLITTER_PATTERN = Pattern.compile("\\s*(\\S+)\\s*");
private static class StringWhitespaceSplitter implements IWhitespaceSplitter {
private final String contents;
private final Matcher matcher;
private boolean matchResult;
public StringWhitespaceSplitter(String contents) {
this.contents = contents;
this.matcher = SPLITTER_PATTERN.matcher(contents);
this.matchResult = this.matcher.find();
}
@Override
public String getNextPart() {
if (!matchResult) throw new CommandSyntaxException("openmodslib.command.not_enough_arguments");
final String result = matcher.group(1);
matchResult = matcher.find();
return result;
}
@Override
public String getTail() {
if (!matchResult) throw new CommandSyntaxException("openmodslib.command.not_enough_arguments");
matchResult = false;
return contents.substring(matcher.start(1));
}
@Override
public boolean isFinished() {
return !matchResult;
}
}
public static IWhitespaceSplitter fromString(String contents) {
return new StringWhitespaceSplitter(contents);
}
}