static string ToSingularInternal(string s)
{
if (string.IsNullOrEmpty(s))
{
return s;
}
// lookup special words
Word word;
if (_specialPlurals.TryGetValue(s, out word))
{
return word.Singular;
}
// apply suffix rules
string singular;
foreach (SuffixRule rule in _suffixRules)
{
if (rule.TryToSingular(s, out singular))
{
return singular;
}
}
// apply the default rule
if (s.EndsWith("s", StringComparison.OrdinalIgnoreCase))
{
return s.Substring(0, s.Length - 1);
}
return s;
}