package er.chronic.tags;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import er.chronic.Options;
import er.chronic.utils.Token;
public class Grabber extends Tag<Grabber.Relative> {
private static final Pattern THIS_PATTERN = Pattern.compile("this");
private static final Pattern NEXT_PATTERN = Pattern.compile("next");
private static final Pattern LAST_PATTERN = Pattern.compile("last");
public static enum Relative {
LAST, NEXT, THIS
}
public Grabber(Grabber.Relative type) {
super(type);
}
public static List<Token> scan(List<Token> tokens, Options options) {
for (Token token : tokens) {
Grabber t = Grabber.scanForAll(token, options);
if (t != null) {
token.tag(t);
}
}
return tokens;
}
public static Grabber scanForAll(Token token, Options options) {
Map<Pattern, Grabber.Relative> scanner = new HashMap<>();
scanner.put(Grabber.LAST_PATTERN, Grabber.Relative.LAST);
scanner.put(Grabber.NEXT_PATTERN, Grabber.Relative.NEXT);
scanner.put(Grabber.THIS_PATTERN, Grabber.Relative.THIS);
for (Pattern scannerItem : scanner.keySet()) {
if (scannerItem.matcher(token.getWord()).matches()) {
return new Grabber(scanner.get(scannerItem));
}
}
return null;
}
@Override
public String toString() {
return "grabber-" + getType();
}
}