annotate Source/Templates/PluralSingular.ttinclude @ 4:f757da6161a1

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