1- using System . Collections . Generic ;
1+ using System . Collections . Generic ;
22using System . Text . RegularExpressions ;
33
44namespace Humanizer . Inflections
@@ -75,15 +75,15 @@ public void AddSingular(string rule, string replacement)
7575 /// <returns></returns>
7676 public string Pluralize ( string word , bool inputIsKnownToBeSingular = true )
7777 {
78- var result = ApplyRules ( _plurals , word ) ;
78+ var result = ApplyRules ( _plurals , word , false ) ;
7979
8080 if ( inputIsKnownToBeSingular )
8181 {
82- return result ;
82+ return result ?? word ;
8383 }
8484
85- var asSingular = ApplyRules ( _singulars , word ) ;
86- var asSingularAsPlural = ApplyRules ( _plurals , asSingular ) ;
85+ var asSingular = ApplyRules ( _singulars , word , false ) ;
86+ var asSingularAsPlural = ApplyRules ( _plurals , asSingular , false ) ;
8787 if ( asSingular != null && asSingular != word && asSingular + "s" != word && asSingularAsPlural == word && result != word )
8888 {
8989 return word ;
@@ -97,19 +97,20 @@ public string Pluralize(string word, bool inputIsKnownToBeSingular = true)
9797 /// </summary>
9898 /// <param name="word">Word to be singularized</param>
9999 /// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure call it with false</param>
100+ /// <param name="skipSimpleWords">Skip singularizing single words that have an 's' on the end</param>
100101 /// <returns></returns>
101- public string Singularize ( string word , bool inputIsKnownToBePlural = true )
102+ public string Singularize ( string word , bool inputIsKnownToBePlural = true , bool skipSimpleWords = false )
102103 {
103- var result = ApplyRules ( _singulars , word ) ;
104+ var result = ApplyRules ( _singulars , word , skipSimpleWords ) ;
104105
105106 if ( inputIsKnownToBePlural )
106107 {
107- return result ;
108+ return result ?? word ;
108109 }
109110
110111 // the Plurality is unknown so we should check all possibilities
111- var asPlural = ApplyRules ( _plurals , word ) ;
112- var asPluralAsSingular = ApplyRules ( _singulars , asPlural ) ;
112+ var asPlural = ApplyRules ( _plurals , word , false ) ;
113+ var asPluralAsSingular = ApplyRules ( _singulars , asPlural , false ) ;
113114 if ( asPlural != word && word + "s" != asPlural && asPluralAsSingular == word && result != word )
114115 {
115116 return word ;
@@ -118,7 +119,7 @@ public string Singularize(string word, bool inputIsKnownToBePlural = true)
118119 return result ?? word ;
119120 }
120121
121- private string ApplyRules ( IList < Rule > rules , string word )
122+ private string ApplyRules ( IList < Rule > rules , string word , bool skipFirstRule )
122123 {
123124 if ( word == null )
124125 {
@@ -131,7 +132,8 @@ private string ApplyRules(IList<Rule> rules, string word)
131132 }
132133
133134 var result = word ;
134- for ( var i = rules . Count - 1 ; i >= 0 ; i -- )
135+ var end = skipFirstRule ? 1 : 0 ;
136+ for ( var i = rules . Count - 1 ; i >= end ; i -- )
135137 {
136138 if ( ( result = rules [ i ] . Apply ( word ) ) != null )
137139 {
@@ -168,4 +170,4 @@ public string Apply(string word)
168170 }
169171 }
170172 }
171- }
173+ }
0 commit comments