From 066d45fbc3f5ee694cc07d47058a4b7ee60bde81 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 29 May 2013 14:44:25 +0000 Subject: [PATCH] Lang lib tries to determine correct article for nouns --- .../card/ability/effects/DrawEffect.java | 2 +- src/main/java/forge/util/Lang.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/forge/card/ability/effects/DrawEffect.java b/src/main/java/forge/card/ability/effects/DrawEffect.java index be2a524b601..bf583a0d3d3 100644 --- a/src/main/java/forge/card/ability/effects/DrawEffect.java +++ b/src/main/java/forge/card/ability/effects/DrawEffect.java @@ -27,7 +27,7 @@ public class DrawEffect extends SpellAbilityEffect { sb.append(" each"); } sb.append(Lang.joinVerb(tgtPlayers, " draw")).append(" "); - sb.append(Lang.nounWithAmount(numCards, " card")); + sb.append(Lang.nounWithAmount(numCards, "card")); sb.append("."); } diff --git a/src/main/java/forge/util/Lang.java b/src/main/java/forge/util/Lang.java index 0b526e28fa3..9a85126b405 100644 --- a/src/main/java/forge/util/Lang.java +++ b/src/main/java/forge/util/Lang.java @@ -49,9 +49,13 @@ public class Lang { } public static String nounWithAmount(int cnt, String noun) { - // Simpliest check - String suffix = cnt <= 1 ? "" : ( noun.endsWith("s") || noun.endsWith("x") ? "es" : "s"); - return String.valueOf(cnt) + " " + noun + suffix; + String suffix = cnt <= 1 ? "" : ( noun.endsWith("s") || noun.endsWith("x") ? "es" : "s"); + final String strCount; + if( cnt == 1 ) + strCount = startsWithVowel(noun) ? "an " : "a "; + else + strCount = String.valueOf(cnt) + " "; + return strCount + noun + suffix; } /** @@ -62,4 +66,17 @@ public class Lang { public static String getPossesive(String name) { return name.endsWith("s") ? name + "'" : name + "'s"; } + + public static boolean startsWithVowel(String word) { + return isVowel(word.trim().charAt(0)); + } + + private static final char[] vowels = { 'a', 'i', 'e', 'o', 'u' }; + public static boolean isVowel(char letter) { + char l = Character.toLowerCase(letter); + for(char c : vowels) + if ( c == l ) return true; + return false; + + } }