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 Pointer extends Tag<Pointer.PointerType> { private static final Pattern IN_PATTERN = Pattern.compile("\\bin\\b"); private static final Pattern FUTURE_PATTERN = Pattern.compile("\\bfuture\\b"); private static final Pattern FOR_PATTERN = Pattern.compile("\\bfor\\b"); private static final Pattern PAST_PATTERN = Pattern.compile("\\bpast\\b"); public enum PointerType { PAST, FUTURE, NONE } public Pointer(Pointer.PointerType type) { super(type); } public static List<Token> scan(List<Token> tokens, Options options) { for (Token token : tokens) { Pointer t = Pointer.scanForAll(token, options); if (t != null) { token.tag(t); } } return tokens; } public static Pointer scanForAll(Token token, Options options) { Map<Pattern, Pointer.PointerType> scanner = new HashMap<>(); scanner.put(Pointer.PAST_PATTERN, Pointer.PointerType.PAST); scanner.put(Pointer.FUTURE_PATTERN, Pointer.PointerType.FUTURE); scanner.put(Pointer.FOR_PATTERN, Pointer.PointerType.FUTURE); scanner.put(Pointer.IN_PATTERN, Pointer.PointerType.FUTURE); for (Pattern scannerItem : scanner.keySet()) { if (scannerItem.matcher(token.getWord()).matches()) { return new Pointer(scanner.get(scannerItem)); } } return null; } @Override public String toString() { return "pointer-" + getType(); } }