| 0 | 1 <#@ import namespace="System" #> | 
|  | 2 <#@ import namespace="System.Collections.Generic" #> | 
|  | 3 <#@ import namespace="System.Text" #> | 
|  | 4 <#@ import namespace="System.Text.RegularExpressions" #> | 
|  | 5 <# | 
|  | 6 	{ | 
|  | 7 		var psPrevAfterLoadMetadata = AfterLoadMetadata; | 
|  | 8 | 
|  | 9 		AfterLoadMetadata = _ => | 
|  | 10 		{ | 
|  | 11 			psPrevAfterLoadMetadata(_); | 
|  | 12 | 
|  | 13 			if (PluralizeDataContextPropertyNames || SingularizeDataContextPropertyNames) | 
|  | 14 			{ | 
|  | 15 				foreach (var t in Tables.Values) | 
|  | 16 				{ | 
|  | 17 					var propName = t.DataContextPropertyName ?? t.ClassName ?? t.TableName; | 
|  | 18 					var newName  = PluralizeDataContextPropertyNames ? ToPlural(propName) : ToSingular(propName); | 
|  | 19 | 
|  | 20 					t.DataContextPropertyName = newName; | 
|  | 21 				} | 
|  | 22 			} | 
|  | 23 | 
|  | 24 			if (PluralizeClassNames || SingularizeClassNames) | 
|  | 25 			{ | 
|  | 26 				foreach (var t in Tables.Values) | 
|  | 27 				{ | 
|  | 28 					var className = t.ClassName ?? t.TableName; | 
|  | 29 					var newName   = PluralizeClassNames ? ToPlural(className) : ToSingular(className); | 
|  | 30 | 
|  | 31 					t.ClassName = newName; | 
|  | 32 				} | 
|  | 33 			} | 
|  | 34 		}; | 
|  | 35 | 
|  | 36 		PluralizeAssociationName   = ToPlural; | 
|  | 37 		SingularizeAssociationName = ToSingular; | 
|  | 38 	} | 
|  | 39 | 
|  | 40 #><#+ | 
|  | 41 | 
|  | 42 bool PluralizeClassNames                 = false; | 
|  | 43 bool SingularizeClassNames               = true; | 
|  | 44 bool PluralizeDataContextPropertyNames   = true; | 
|  | 45 bool SingularizeDataContextPropertyNames = false; | 
|  | 46 | 
|  | 47 string ToPlural(string str) | 
|  | 48 { | 
|  | 49 	var word    = GetLastWord(str); | 
|  | 50 	var newWord = Plurals.ToPlural(word); | 
|  | 51 | 
|  | 52 	if (word != newWord) | 
|  | 53 	{ | 
|  | 54 		if (char.IsUpper(word[0])) | 
|  | 55 			newWord = char.ToUpper(newWord[0]) + newWord.Substring(1, newWord.Length - 1); | 
|  | 56 | 
|  | 57 		return word == str ? newWord : str.Substring(0, str.Length - word.Length) + newWord; | 
|  | 58 	} | 
|  | 59 | 
|  | 60 	return str; | 
|  | 61 } | 
|  | 62 | 
|  | 63 string ToSingular(string str) | 
|  | 64 { | 
|  | 65 	var word    = GetLastWord(str); | 
|  | 66 	var newWord = Plurals.ToSingular(word); | 
|  | 67 | 
|  | 68 	if (word != newWord) | 
|  | 69 	{ | 
|  | 70 		if (char.IsUpper(word[0])) | 
|  | 71 			newWord = char.ToUpper(newWord[0]) + newWord.Substring(1, newWord.Length - 1); | 
|  | 72 | 
|  | 73 		return word == str ? newWord : str.Substring(0, str.Length - word.Length) + newWord; | 
|  | 74 	} | 
|  | 75 | 
|  | 76 	return str; | 
|  | 77 } | 
|  | 78 | 
|  | 79 string GetLastWord(string word) | 
|  | 80 { | 
|  | 81 	if (string.IsNullOrEmpty(word)) | 
|  | 82 		return word; | 
|  | 83 | 
|  | 84 	var len = word.Length; | 
|  | 85 	var n   = len - 1; | 
|  | 86 | 
|  | 87 	if (char.IsLower(word[n])) | 
|  | 88 	{ | 
|  | 89 		for (; n > 0 && char.IsLower(word[n]); n--); | 
|  | 90 	} | 
|  | 91 	else | 
|  | 92 	{ | 
|  | 93 		for (; n > 0 && char.IsUpper(word[n]); n--); | 
|  | 94 		if (char.IsLower(word[n])) | 
|  | 95 			n++; | 
|  | 96 	} | 
|  | 97 | 
|  | 98 	return n > 0 ? word.Substring(n) : word; | 
|  | 99 } | 
|  | 100 | 
|  | 101 // Shamelessly jacked from http://www.bennysutton.com/C-sharp/Plural-Singular-Words.aspx with little modifications. | 
|  | 102 // | 
|  | 103 | 
|  | 104 //using System; | 
|  | 105 //using System.Collections.Generic; | 
|  | 106 //using System.Text; | 
|  | 107 //using System.Text.RegularExpressions; | 
|  | 108 | 
|  | 109 /// <summary> | 
|  | 110 /// Convert words to and from singulars/plurals | 
|  | 111 /// Copyright www.BennySutton.com 2008 | 
|  | 112 /// You may reuse this code BUT not for sale AND ONLY with credit to www.BennySutton.com | 
|  | 113 /// </summary> | 
|  | 114 public sealed class Plurals | 
|  | 115 { | 
|  | 116 	/// <summary> | 
|  | 117 	/// Store irregular plurals in a dictionary | 
|  | 118 	/// </summary> | 
|  | 119 	private static Dictionary<string, string> _dictionary = new Dictionary<string, string>(); | 
|  | 120 | 
|  | 121 	#region Constructors | 
|  | 122 | 
|  | 123 	/// <summary> | 
|  | 124 	/// The singleton instance (thanks to dotnetpearls.com for help here) | 
|  | 125 	/// </summary> | 
|  | 126 	static readonly Plurals _instance = new Plurals(); | 
|  | 127 	/// <summary> | 
|  | 128 	/// Get an instance of the structure singleton. This effectively caches the dictionary | 
|  | 129 	/// </summary> | 
|  | 130 	public static Plurals Instance | 
|  | 131 	{ | 
|  | 132 		get | 
|  | 133 		{ | 
|  | 134 			// Fastest solution that avoids null check and is thread-safe | 
|  | 135 			// because of readonly keyword. | 
|  | 136 			return _instance; | 
|  | 137 		} | 
|  | 138 	} | 
|  | 139 | 
|  | 140 	/// <summary> | 
|  | 141 	/// Run initialization on this singleton class | 
|  | 142 	/// </summary> | 
|  | 143 	private Plurals() | 
|  | 144 	{ | 
|  | 145 		Initialize(); | 
|  | 146 	} | 
|  | 147 | 
|  | 148 	private void Initialize() | 
|  | 149 	{ | 
|  | 150 		//to test that this class only initializes once uncomment next line | 
|  | 151 		//System.Web.HttpContext.Current.Response.Write("initializing singleton <br>"); | 
|  | 152 		// irregular plurals | 
|  | 153 		_dictionary.Add("access",       "accesses"); | 
|  | 154 		_dictionary.Add("afterlife",    "afterlives"); | 
|  | 155 		_dictionary.Add("alga",         "algae"); | 
|  | 156 		_dictionary.Add("alumna",       "alumnae"); | 
|  | 157 		_dictionary.Add("alumnus",      "alumni"); | 
|  | 158 		_dictionary.Add("analysis",     "analyses"); | 
|  | 159 		_dictionary.Add("antenna",      "antennae"); | 
|  | 160 		_dictionary.Add("appendix",     "appendices"); | 
|  | 161 		_dictionary.Add("axis",         "axes"); | 
|  | 162 		_dictionary.Add("bacillus",     "bacilli"); | 
|  | 163 		_dictionary.Add("basis",        "bases"); | 
|  | 164 		_dictionary.Add("Bedouin",      "Bedouin"); | 
|  | 165 		_dictionary.Add("cactus",       "cacti"); | 
|  | 166 		_dictionary.Add("calf",         "calves"); | 
|  | 167 		_dictionary.Add("cherub",       "cherubim"); | 
|  | 168 		_dictionary.Add("child",        "children"); | 
|  | 169 		_dictionary.Add("cod",          "cod"); | 
|  | 170 		_dictionary.Add("cookie",       "cookies"); | 
|  | 171 		_dictionary.Add("criterion",    "criteria"); | 
|  | 172 		_dictionary.Add("curriculum",   "curricula"); | 
|  | 173 		_dictionary.Add("data",         "data"); | 
|  | 174 		_dictionary.Add("deer",         "deer"); | 
|  | 175 		_dictionary.Add("diagnosis",    "diagnoses"); | 
|  | 176 		_dictionary.Add("die",          "dice"); | 
|  | 177 		_dictionary.Add("dormouse",     "dormice"); | 
|  | 178 		_dictionary.Add("elf",          "elves"); | 
|  | 179 		_dictionary.Add("elk",          "elk"); | 
|  | 180 		_dictionary.Add("erratum",      "errata"); | 
|  | 181 		_dictionary.Add("esophagus",    "esophagi"); | 
|  | 182 		_dictionary.Add("fauna",        "faunae"); | 
|  | 183 		_dictionary.Add("fish",         "fish"); | 
|  | 184 		_dictionary.Add("flora",        "florae"); | 
|  | 185 		_dictionary.Add("focus",        "foci"); | 
|  | 186 		_dictionary.Add("foot",         "feet"); | 
|  | 187 		_dictionary.Add("formula",      "formulae"); | 
|  | 188 		_dictionary.Add("fundus",       "fundi"); | 
|  | 189 		_dictionary.Add("fungus",       "fungi"); | 
|  | 190 		_dictionary.Add("genie",        "genii"); | 
|  | 191 		_dictionary.Add("genus",        "genera"); | 
|  | 192 		_dictionary.Add("goose",        "geese"); | 
|  | 193 		_dictionary.Add("grouse",       "grouse"); | 
|  | 194 		_dictionary.Add("hake",         "hake"); | 
|  | 195 		_dictionary.Add("half",         "halves"); | 
|  | 196 		_dictionary.Add("headquarters", "headquarters"); | 
|  | 197 		_dictionary.Add("hippo",        "hippos"); | 
|  | 198 		_dictionary.Add("hippopotamus", "hippopotami"); | 
|  | 199 		_dictionary.Add("hoof",         "hooves"); | 
|  | 200 		_dictionary.Add("housewife",    "housewives"); | 
|  | 201 		_dictionary.Add("hypothesis",   "hypotheses"); | 
|  | 202 		_dictionary.Add("index",        "indices"); | 
|  | 203 		_dictionary.Add("jackknife",    "jackknives"); | 
|  | 204 		_dictionary.Add("knife",        "knives"); | 
|  | 205 		_dictionary.Add("labium",       "labia"); | 
|  | 206 		_dictionary.Add("larva",        "larvae"); | 
|  | 207 		_dictionary.Add("leaf",         "leaves"); | 
|  | 208 		_dictionary.Add("life",         "lives"); | 
|  | 209 		_dictionary.Add("loaf",         "loaves"); | 
|  | 210 		_dictionary.Add("louse",        "lice"); | 
|  | 211 		_dictionary.Add("magus",        "magi"); | 
|  | 212 		_dictionary.Add("man",          "men"); | 
|  | 213 		_dictionary.Add("memorandum",   "memoranda"); | 
|  | 214 		_dictionary.Add("midwife",      "midwives"); | 
|  | 215 		_dictionary.Add("millennium",   "millennia"); | 
|  | 216 		_dictionary.Add("moose",        "moose"); | 
|  | 217 		_dictionary.Add("mouse",        "mice"); | 
|  | 218 		_dictionary.Add("nebula",       "nebulae"); | 
|  | 219 		_dictionary.Add("neurosis",     "neuroses"); | 
|  | 220 		_dictionary.Add("nova",         "novas"); | 
|  | 221 		_dictionary.Add("nucleus",      "nuclei"); | 
|  | 222 		_dictionary.Add("oesophagus",   "oesophagi"); | 
|  | 223 		_dictionary.Add("offspring",    "offspring"); | 
|  | 224 		_dictionary.Add("ovum",         "ova"); | 
|  | 225 		_dictionary.Add("ox",           "oxen"); | 
|  | 226 		_dictionary.Add("papyrus",      "papyri"); | 
|  | 227 		_dictionary.Add("passerby",     "passersby"); | 
|  | 228 		_dictionary.Add("penknife",     "penknives"); | 
|  | 229 		_dictionary.Add("person",       "people"); | 
|  | 230 		_dictionary.Add("phenomenon",   "phenomena"); | 
|  | 231 		_dictionary.Add("placenta",     "placentae"); | 
|  | 232 		_dictionary.Add("pocketknife",  "pocketknives"); | 
|  | 233 		_dictionary.Add("process",      "processes"); | 
|  | 234 		_dictionary.Add("pupa",         "pupae"); | 
|  | 235 		_dictionary.Add("radius",       "radii"); | 
|  | 236 		_dictionary.Add("reindeer",     "reindeer"); | 
|  | 237 		_dictionary.Add("retina",       "retinae"); | 
|  | 238 		_dictionary.Add("rhinoceros",   "rhinoceros"); | 
|  | 239 		_dictionary.Add("roe",          "roe"); | 
|  | 240 		_dictionary.Add("salmon",       "salmon"); | 
|  | 241 		_dictionary.Add("scarf",        "scarves"); | 
|  | 242 		_dictionary.Add("self",         "selves"); | 
|  | 243 		_dictionary.Add("seraph",       "seraphim"); | 
|  | 244 		_dictionary.Add("series",       "series"); | 
|  | 245 		_dictionary.Add("sheaf",        "sheaves"); | 
|  | 246 		_dictionary.Add("sheep",        "sheep"); | 
|  | 247 		_dictionary.Add("shelf",        "shelves"); | 
|  | 248 		_dictionary.Add("species",      "species"); | 
|  | 249 		_dictionary.Add("spectrum",     "spectra"); | 
|  | 250 		_dictionary.Add("status",       "status"); | 
|  | 251 		_dictionary.Add("stimulus",     "stimuli"); | 
|  | 252 		_dictionary.Add("stratum",      "strata"); | 
|  | 253 		_dictionary.Add("supernova",    "supernovas"); | 
|  | 254 		_dictionary.Add("swine",        "swine"); | 
|  | 255 		_dictionary.Add("terminus",     "termini"); | 
|  | 256 		_dictionary.Add("thesaurus",    "thesauri"); | 
|  | 257 		_dictionary.Add("thesis",       "theses"); | 
|  | 258 		_dictionary.Add("thief",        "thieves"); | 
|  | 259 		_dictionary.Add("trout",        "trout"); | 
|  | 260 		_dictionary.Add("vulva",        "vulvae"); | 
|  | 261 		_dictionary.Add("wife",         "wives"); | 
|  | 262 		_dictionary.Add("wildebeest",   "wildebeest"); | 
|  | 263 		_dictionary.Add("wolf",         "wolves"); | 
|  | 264 		_dictionary.Add("woman",        "women"); | 
|  | 265 		_dictionary.Add("yen",          "yen"); | 
|  | 266 	} | 
|  | 267 | 
|  | 268 	#endregion //Constructors | 
|  | 269 | 
|  | 270 	#region Methods | 
|  | 271 | 
|  | 272 	/// <summary> | 
|  | 273 	/// Call this method to get the properly pluralized | 
|  | 274 	/// English version of the word. | 
|  | 275 	/// </summary> | 
|  | 276 	/// <param name="word">The word needing conditional pluralization.</param> | 
|  | 277 	/// <param name="count">The number of items the word refers to.</param> | 
|  | 278 	/// <returns>The pluralized word</returns> | 
|  | 279 	static public string ToPlural(string word) | 
|  | 280 	{ | 
|  | 281 		word = word.ToLower(); | 
|  | 282 | 
|  | 283 		if (_dictionary.ContainsKey(word)) | 
|  | 284 		//it's an irregular plural, use the word from the dictionary | 
|  | 285 		{ | 
|  | 286 			return _dictionary[word]; | 
|  | 287 		} | 
|  | 288 | 
|  | 289 		if (TestIsPlural(word) == true) | 
|  | 290 		{ | 
|  | 291 			return word; //it's already a plural | 
|  | 292 		} | 
|  | 293 | 
|  | 294 		if (word.Length <= 2) | 
|  | 295 		{ | 
|  | 296 			return word; //not a word that can be pluralised! | 
|  | 297 		} | 
|  | 298 | 
|  | 299 		////1. If the word ends in a consonant plus -y, change the -y into | 
|  | 300 		///-ie and add an -s to form the plural | 
|  | 301 		///e.g. enemy--enemies baby--babies | 
|  | 302 		switch (word.Substring(word.Length - 2)) | 
|  | 303 		{ | 
|  | 304 			case "by": | 
|  | 305 			case "cy": | 
|  | 306 			case "dy": | 
|  | 307 			case "fy": | 
|  | 308 			case "gy": | 
|  | 309 			case "hy": | 
|  | 310 			case "jy": | 
|  | 311 			case "ky": | 
|  | 312 			case "ly": | 
|  | 313 			case "my": | 
|  | 314 			case "ny": | 
|  | 315 			case "py": | 
|  | 316 			case "ry": | 
|  | 317 			case "sy": | 
|  | 318 			case "ty": | 
|  | 319 			case "vy": | 
|  | 320 			case "wy": | 
|  | 321 			case "xy": | 
|  | 322 			case "zy": | 
|  | 323 				{ | 
|  | 324 					return word.Substring(0, word.Length - 1) + "ies"; | 
|  | 325 				} | 
|  | 326 | 
|  | 327 			//2. For words that end in -is, change the -is to -es to make the plural form. | 
|  | 328 			//synopsis--synopses | 
|  | 329 			//thesis--theses | 
|  | 330 			case "is": | 
|  | 331 				{ | 
|  | 332 					return word.Substring(0, word.Length - 1) + "es"; | 
|  | 333 				} | 
|  | 334 | 
|  | 335 			//3. For words that end in a "hissing" sound (s,z,x,ch,sh), add an -es to form the plural. | 
|  | 336 			//box--boxes | 
|  | 337 			//church--churches | 
|  | 338 			case "ch": | 
|  | 339 			case "sh": | 
|  | 340 				{ | 
|  | 341 					return word + "es"; | 
|  | 342 				} | 
|  | 343 			default: | 
|  | 344 				{ | 
|  | 345 					switch (word.Substring(word.Length - 1)) | 
|  | 346 					{ | 
|  | 347 						case "s": | 
|  | 348 						case "z": | 
|  | 349 						case "x": | 
|  | 350 							{ | 
|  | 351 								return word + "es"; | 
|  | 352 							} | 
|  | 353 						default: | 
|  | 354 							{ | 
|  | 355 								//4. Assume add an -s to form the plural of most words. | 
|  | 356 								return word + "s"; | 
|  | 357 							} | 
|  | 358 					} | 
|  | 359 				} | 
|  | 360 		} | 
|  | 361 	} | 
|  | 362 | 
|  | 363 	/// <summary> | 
|  | 364 	/// Call this method to get the singular | 
|  | 365 	/// version of a plural English word. | 
|  | 366 	/// </summary> | 
|  | 367 	/// <param name="word">The word to turn into a singular</param> | 
|  | 368 	/// <returns>The singular word</returns> | 
|  | 369 	static public string ToSingular(string word) | 
|  | 370 	{ | 
|  | 371 		word = word.ToLower(); | 
|  | 372 | 
|  | 373 		if (_dictionary.ContainsKey(word)) | 
|  | 374 			return word; | 
|  | 375 | 
|  | 376 		if (_dictionary.ContainsValue(word)) | 
|  | 377 		{ | 
|  | 378 			foreach (KeyValuePair<string, string> kvp in _dictionary) | 
|  | 379 			{ | 
|  | 380 				if (kvp.Value == word) return kvp.Key; | 
|  | 381 			} | 
|  | 382 		} | 
|  | 383 | 
|  | 384 		if (word.Substring(word.Length - 1) != "s") | 
|  | 385 		{ | 
|  | 386 			return word; // not a plural word if it doesn't end in S | 
|  | 387 		} | 
|  | 388 | 
|  | 389 		if (word.Length <= 2) | 
|  | 390 		{ | 
|  | 391 			return word; // not a word that can be made singular if only two letters! | 
|  | 392 		} | 
|  | 393 | 
|  | 394 		if (word.Length >= 4) | 
|  | 395 		{ | 
|  | 396 			// 1. If the word ends in a consonant plus -y, change the -y into -ie and add an -s to form the plural – so reverse engineer it to get the singular | 
|  | 397 			// e.g. enemy--enemies baby--babies family--families | 
|  | 398 			switch (word.Substring(word.Length - 4)) | 
|  | 399 			{ | 
|  | 400 				case "bies": | 
|  | 401 				case "cies": | 
|  | 402 				case "dies": | 
|  | 403 				case "fies": | 
|  | 404 				case "gies": | 
|  | 405 				case "hies": | 
|  | 406 				case "jies": | 
|  | 407 				case "kies": | 
|  | 408 				case "lies": | 
|  | 409 				case "mies": | 
|  | 410 				case "nies": | 
|  | 411 				case "pies": | 
|  | 412 				case "ries": | 
|  | 413 				case "sies": | 
|  | 414 				case "ties": | 
|  | 415 				case "vies": | 
|  | 416 				case "wies": | 
|  | 417 				case "xies": | 
|  | 418 				case "zies": | 
|  | 419 					{ | 
|  | 420 						return word.Substring(0, word.Length - 3) + "y"; | 
|  | 421 					} | 
|  | 422 				//3. For words that end in a "hissing" sound (s,z,x,ch,sh), add an -es to form the plural. | 
|  | 423 				//church--churches | 
|  | 424 				case "ches": | 
|  | 425 				case "shes": | 
|  | 426 					{ | 
|  | 427 						return word.Substring(0, word.Length - 2); | 
|  | 428 					} | 
|  | 429 			} | 
|  | 430 		} | 
|  | 431 | 
|  | 432 		if (word.Length >= 3) | 
|  | 433 		{ | 
|  | 434 			switch (word.Substring(word.Length - 3)) | 
|  | 435 			{ | 
|  | 436 				//box--boxes | 
|  | 437 				case "ses": | 
|  | 438 				//NOTE some false positives here - For words that end in -is, change the -is to -es to make the plural form. | 
|  | 439 				//synopsis--synopses | 
|  | 440 				//thesis--theses | 
|  | 441 				case "zes": | 
|  | 442 				case "xes": | 
|  | 443 					{ | 
|  | 444 						return word.Substring(0, word.Length - 2); | 
|  | 445 					} | 
|  | 446 			} | 
|  | 447 		} | 
|  | 448 | 
|  | 449 		if (word.Length >= 3) | 
|  | 450 		{ | 
|  | 451 			switch (word.Substring(word.Length - 2)) | 
|  | 452 			{ | 
|  | 453 				case "es": | 
|  | 454 					{ | 
|  | 455 						return word.Substring(0, word.Length - 1); // + "is"; | 
|  | 456 					} | 
|  | 457 				//4. Assume add an -s to form the plural of most words. | 
|  | 458 				default: | 
|  | 459 					{ | 
|  | 460 						return word.Substring(0, word.Length - 1); | 
|  | 461 					} | 
|  | 462 			} | 
|  | 463 		} | 
|  | 464 | 
|  | 465 		return word; | 
|  | 466 	} | 
|  | 467 | 
|  | 468 	/// <summary> | 
|  | 469 	/// test if a word is plural | 
|  | 470 	/// </summary> | 
|  | 471 	/// <param name="word">word to test</param> | 
|  | 472 	/// <returns>true if a word is plural</returns> | 
|  | 473 	static public bool TestIsPlural(string word) | 
|  | 474 	{ | 
|  | 475 		word = word.ToLower(); | 
|  | 476 | 
|  | 477 		if (word.Length <= 2) | 
|  | 478 		{ | 
|  | 479 			return false; // not a word that can be made singular if only two letters! | 
|  | 480 		} | 
|  | 481 | 
|  | 482 		if (_dictionary.ContainsValue(word)) | 
|  | 483 		{ | 
|  | 484 			return true; //it's definitely already a plural | 
|  | 485 		} | 
|  | 486 | 
|  | 487 		if (word.Length >= 4) | 
|  | 488 		{ | 
|  | 489 			//1. If the word ends in a consonant plus -y, change the -y into -ie and add an -s to form the plural | 
|  | 490 			// e.g. enemy--enemies baby--babies family--families | 
|  | 491 			switch (word.Substring(word.Length - 4)) | 
|  | 492 			{ | 
|  | 493 				case "bies": | 
|  | 494 				case "cies": | 
|  | 495 				case "dies": | 
|  | 496 				case "fies": | 
|  | 497 				case "gies": | 
|  | 498 				case "hies": | 
|  | 499 				case "jies": | 
|  | 500 				case "kies": | 
|  | 501 				case "lies": | 
|  | 502 				case "mies": | 
|  | 503 				case "nies": | 
|  | 504 				case "pies": | 
|  | 505 				case "ries": | 
|  | 506 				case "sies": | 
|  | 507 				case "ties": | 
|  | 508 				case "vies": | 
|  | 509 				case "wies": | 
|  | 510 				case "xies": | 
|  | 511 				case "zies": | 
|  | 512 				case "ches": | 
|  | 513 				case "shes": | 
|  | 514 					{ | 
|  | 515 						return true; | 
|  | 516 					} | 
|  | 517 			} | 
|  | 518 		} | 
|  | 519 | 
|  | 520 		if (word.Length >= 3) | 
|  | 521 		{ | 
|  | 522 			switch (word.Substring(word.Length - 3)) | 
|  | 523 			{ | 
|  | 524 				//box--boxes | 
|  | 525 				case "ses": | 
|  | 526 				case "zes": | 
|  | 527 				case "xes": | 
|  | 528 					{ | 
|  | 529 						return true; | 
|  | 530 					} | 
|  | 531 			} | 
|  | 532 		} | 
|  | 533 | 
|  | 534 		if (word.Length >= 3) | 
|  | 535 		{ | 
|  | 536 			switch (word.Substring(word.Length - 2)) | 
|  | 537 			{ | 
|  | 538 				case "es": | 
|  | 539 					{ | 
|  | 540 						return true; | 
|  | 541 					} | 
|  | 542 			} | 
|  | 543 		} | 
|  | 544 | 
|  | 545 		if (word.Substring(word.Length - 1) != "s") | 
|  | 546 		{ | 
|  | 547 			return false; // not a plural word if it doesn't end in S | 
|  | 548 		} | 
|  | 549 | 
|  | 550 		return true; | 
|  | 551 	} | 
|  | 552 | 
|  | 553 	#endregion | 
|  | 554 } | 
|  | 555 | 
|  | 556 #> |