package magic.model.event; import magic.model.MagicColor; import magic.model.MagicSubType; import magic.model.MagicType; import magic.model.MagicAbility; import magic.model.MagicAbilityList; import java.util.Arrays; import java.util.regex.Matcher; import java.util.Set; import java.util.List; import java.util.LinkedList; public class PermanentSpecParser { public final int[] pt; public final Set<MagicColor> colors; public final Set<MagicSubType > subTypes; public final Set<MagicType> types; public final MagicAbilityList abilities; public final boolean duration; public final boolean additionTo; public PermanentSpecParser(final Matcher matcher) { final String[] ptStr = matcher.group("pt") == null ? null : matcher.group("pt").split("/"); pt = ptStr == null ? null : new int[]{Integer.parseInt(ptStr[0]), Integer.parseInt(ptStr[1])}; final List<String> tokens = new LinkedList<>(Arrays.asList(matcher.group("all").split(", | and | "))); colors = MagicColor.prefixColors(tokens); subTypes = MagicSubType.prefixSubTypes(tokens); types = MagicType.prefixTypes(tokens); if (tokens.isEmpty() == false) { throw new RuntimeException("unmatched becomes specification " + tokens); } abilities = matcher.group("ability") == null ? null : MagicAbility.getAbilityList(matcher.group("ability")); duration = matcher.group("duration") != null; additionTo = matcher.group("additionTo") != null; } }