support ability containing comma by quoting them like in rules text

master
melvin 2013-10-17 14:33:41 +08:00
parent 1195fb4242
commit 3f4b7fb05a
4 changed files with 20 additions and 6 deletions

View File

@ -7,6 +7,6 @@ type=Creature
subtype=Sliver subtype=Sliver
cost={B}{R} cost={B}{R}
pt=2/2 pt=2/2
ability=lord all slivers have pay {2},{S}: SN deals 2 damage to target creature or player. ability=lord all slivers have "pay {2},{S}: SN deals 2 damage to target creature or player."
static=all static=all
timing=main timing=main

View File

@ -7,7 +7,7 @@ type=Creature
subtype=Sliver subtype=Sliver
cost={R}{W} cost={R}{W}
pt=2/2 pt=2/2
ability=lord all slivers have pay {1},{S}: SN deals 1 damage to target creature or player. ability=lord all slivers have "pay {1},{S}: SN deals 1 damage to target creature or player."
static=all static=all
timing=main timing=main
requires_groovy_code requires_groovy_code

View File

@ -7,6 +7,6 @@ type=Creature
subtype=Sliver subtype=Sliver
cost={2}{U} cost={2}{U}
pt=2/2 pt=2/2
ability=lord all slivers have pay {2},{S}: PN draws a card. ability=lord all slivers have "pay {2},{S}: PN draws a card."
static=all static=all
timing=main timing=main

View File

@ -87,6 +87,8 @@ import magic.model.trigger.MagicWhenDamageIsDealtTrigger;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Set; import java.util.Set;
import java.util.List; import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public enum MagicAbility { public enum MagicAbility {
@ -811,7 +813,7 @@ public enum MagicAbility {
card.add(MagicStatic.genPTStatic(filter, power, toughness)); card.add(MagicStatic.genPTStatic(filter, power, toughness));
} }
} else { } else {
final MagicAbilityList abilityList = MagicAbility.getAbilityList(tokens[1].split(", ")); final MagicAbilityList abilityList = MagicAbility.getAbilityList(tokens[1]);
if (other) { if (other) {
card.add(MagicStatic.genABStaticOther(filter, abilityList)); card.add(MagicStatic.genABStaticOther(filter, abilityList));
} else { } else {
@ -912,6 +914,18 @@ public enum MagicAbility {
return abilityList; return abilityList;
} }
private static final Pattern SUB_ABILITY_LIST = Pattern.compile("\"([^\"]*)\"|([A-Za-z][^,]*)");
public static MagicAbilityList getAbilityList(final String names) {
final MagicAbilityList abilityList = new MagicAbilityList();
final Matcher m = SUB_ABILITY_LIST.matcher(names);
while (m.find()) {
final String name = m.group(1) != null ? m.group(1) : m.group(2);
getAbility(name).addAbility(abilityList, name);
}
return abilityList;
}
public static Set<MagicAbility> of(final MagicAbility first, MagicAbility... rest) { public static Set<MagicAbility> of(final MagicAbility first, MagicAbility... rest) {
return EnumSet.of(first, rest); return EnumSet.of(first, rest);
} }