11using System ;
22using System . Threading ;
33
4- namespace Humanizer . Inflections
4+ namespace Humanizer . Inflections ;
5+
6+ /// <summary>
7+ /// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
8+ /// </summary>
9+ internal static class Vocabularies
510{
11+ static readonly Lazy < Vocabulary > Instance = new ( BuildDefault , LazyThreadSafetyMode . PublicationOnly ) ;
12+
613 /// <summary>
7- /// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
14+ /// The default vocabulary used for singular/plural irregularities.
15+ /// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
16+ /// At this time, multiple vocabularies and removing existing rules are not supported.
817 /// </summary>
9- internal static class Vocabularies
10- {
11- private static readonly Lazy < Vocabulary > Instance ;
12-
13- static Vocabularies ( )
14- {
15- Instance = new Lazy < Vocabulary > ( BuildDefault , LazyThreadSafetyMode . PublicationOnly ) ;
16- }
18+ public static Vocabulary Default => Instance . Value ;
1719
18- /// <summary>
19- /// The default vocabulary used for singular/plural irregularities.
20- /// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
21- /// At this time, multiple vocabularies and removing existing rules are not supported.
22- /// </summary>
23- public static Vocabulary Default => Instance . Value ;
24-
25- private static Vocabulary BuildDefault ( )
26- {
27- var _default = new Vocabulary ( ) ;
28-
29- _default . AddPlural ( "$" , "s" ) ;
30- _default . AddPlural ( "s$" , "s" ) ;
31- _default . AddPlural ( "(ax|test)is$" , "$1es" ) ;
32- _default . AddPlural ( "(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$" , "$1i" ) ;
33- _default . AddPlural ( "(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$" , "$1es" ) ;
34- _default . AddPlural ( "(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$" , "$1oes" ) ;
35- _default . AddPlural ( "([dti])um$" , "$1a" ) ;
36- _default . AddPlural ( "sis$" , "ses" ) ;
37- _default . AddPlural ( "(?:([^f])fe|([lr])f)$" , "$1$2ves" ) ;
38- _default . AddPlural ( "(hive)$" , "$1s" ) ;
39- _default . AddPlural ( "([^aeiouy]|qu)y$" , "$1ies" ) ;
40- _default . AddPlural ( "(x|ch|ss|sh)$" , "$1es" ) ;
41- _default . AddPlural ( "(matr|vert|ind|d)ix|ex$" , "$1ices" ) ;
42- _default . AddPlural ( "(^[m|l])ouse$" , "$1ice" ) ;
43- _default . AddPlural ( "^(ox)$" , "$1en" ) ;
44- _default . AddPlural ( "(quiz)$" , "$1zes" ) ;
45- _default . AddPlural ( "(buz|blit|walt)z$" , "$1zes" ) ;
46- _default . AddPlural ( "(hoo|lea|loa|thie)f$" , "$1ves" ) ;
47- _default . AddPlural ( "(alumn|alg|larv|vertebr)a$" , "$1ae" ) ;
48- _default . AddPlural ( "(criteri|phenomen)on$" , "$1a" ) ;
20+ static Vocabulary BuildDefault ( )
21+ {
22+ var _default = new Vocabulary ( ) ;
4923
50- _default . AddSingular ( "s$" , "" ) ;
51- _default . AddSingular ( "(n)ews$" , "$1ews" ) ;
52- _default . AddSingular ( "([dti])a$" , "$1um" ) ;
53- _default . AddSingular ( "(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$" , "$1sis" ) ;
54- _default . AddSingular ( "([^f])ves$" , "$1fe" ) ;
55- _default . AddSingular ( "(hive)s$" , "$1" ) ;
56- _default . AddSingular ( "(tive)s$" , "$1" ) ;
57- _default . AddSingular ( "([lr]|hoo|lea|loa|thie)ves$" , "$1f" ) ;
58- _default . AddSingular ( "(^zomb)?([^aeiouy]|qu)ies$" , "$2y" ) ;
59- _default . AddSingular ( "(s)eries$" , "$1eries" ) ;
60- _default . AddSingular ( "(m)ovies$" , "$1ovie" ) ;
61- _default . AddSingular ( "(x|ch|ss|sh)es$" , "$1" ) ;
62- _default . AddSingular ( "(^[m|l])ice$" , "$1ouse" ) ;
63- _default . AddSingular ( "(o)es$" , "$1" ) ;
64- _default . AddSingular ( "(shoe)s$" , "$1" ) ;
65- _default . AddSingular ( "(cris|ax|test)es$" , "$1is" ) ;
66- _default . AddSingular ( "(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$" , "$1us" ) ;
67- _default . AddSingular ( "(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$" , "$1" ) ;
68- _default . AddSingular ( "^(ox)en" , "$1" ) ;
69- _default . AddSingular ( "(matr|d)ices$" , "$1ix" ) ;
70- _default . AddSingular ( "(vert|ind)ices$" , "$1ex" ) ;
71- _default . AddSingular ( "(quiz)zes$" , "$1" ) ;
72- _default . AddSingular ( "(buz|blit|walt)zes$" , "$1z" ) ;
73- _default . AddSingular ( "(alumn|alg|larv|vertebr)ae$" , "$1a" ) ;
74- _default . AddSingular ( "(criteri|phenomen)a$" , "$1on" ) ;
75- _default . AddSingular ( "([b|r|c]ook|room|smooth)ies$" , "$1ie" ) ;
24+ _default . AddPlural ( "$" , "s" ) ;
25+ _default . AddPlural ( "s$" , "s" ) ;
26+ _default . AddPlural ( "(ax|test)is$" , "$1es" ) ;
27+ _default . AddPlural ( "(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$" , "$1i" ) ;
28+ _default . AddPlural ( "(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$" , "$1es" ) ;
29+ _default . AddPlural ( "(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$" , "$1oes" ) ;
30+ _default . AddPlural ( "([dti])um$" , "$1a" ) ;
31+ _default . AddPlural ( "sis$" , "ses" ) ;
32+ _default . AddPlural ( "(?:([^f])fe|([lr])f)$" , "$1$2ves" ) ;
33+ _default . AddPlural ( "(hive)$" , "$1s" ) ;
34+ _default . AddPlural ( "([^aeiouy]|qu)y$" , "$1ies" ) ;
35+ _default . AddPlural ( "(x|ch|ss|sh)$" , "$1es" ) ;
36+ _default . AddPlural ( "(matr|vert|ind|d)(ix|ex)$" , "$1ices" ) ;
37+ _default . AddPlural ( "(^[m|l])ouse$" , "$1ice" ) ;
38+ _default . AddPlural ( "^(ox)$" , "$1en" ) ;
39+ _default . AddPlural ( "(quiz)$" , "$1zes" ) ;
40+ _default . AddPlural ( "(buz|blit|walt)z$" , "$1zes" ) ;
41+ _default . AddPlural ( "(hoo|lea|loa|thie)f$" , "$1ves" ) ;
42+ _default . AddPlural ( "(alumn|alg|larv|vertebr)a$" , "$1ae" ) ;
43+ _default . AddPlural ( "(criteri|phenomen)on$" , "$1a" ) ;
7644
77- _default . AddIrregular ( "person" , "people" ) ;
78- _default . AddIrregular ( "man" , "men" ) ;
79- _default . AddIrregular ( "human" , "humans" ) ;
80- _default . AddIrregular ( "child" , "children" ) ;
81- _default . AddIrregular ( "sex" , "sexes" ) ;
82- _default . AddIrregular ( "glove" , "gloves" ) ;
83- _default . AddIrregular ( "move" , "moves" ) ;
84- _default . AddIrregular ( "goose" , "geese" ) ;
85- _default . AddIrregular ( "wave" , "waves" ) ;
86- _default . AddIrregular ( "die" , "dice" ) ;
87- _default . AddIrregular ( "foot" , "feet" ) ;
88- _default . AddIrregular ( "tooth" , "teeth" ) ;
89- _default . AddIrregular ( "curriculum" , "curricula" ) ;
90- _default . AddIrregular ( "database" , "databases" ) ;
91- _default . AddIrregular ( "zombie" , "zombies" ) ;
92- _default . AddIrregular ( "personnel" , "personnel" ) ;
93- //Fix #789
94- _default . AddIrregular ( "cache" , "caches" ) ;
45+ _default . AddSingular ( "s$" , "" ) ;
46+ _default . AddSingular ( "(n)ews$" , "$1ews" ) ;
47+ _default . AddSingular ( "([dti])a$" , "$1um" ) ;
48+ _default . AddSingular ( "(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$" , "$1sis" ) ;
49+ _default . AddSingular ( "([^f])ves$" , "$1fe" ) ;
50+ _default . AddSingular ( "(hive)s$" , "$1" ) ;
51+ _default . AddSingular ( "(tive)s$" , "$1" ) ;
52+ _default . AddSingular ( "([lr]|hoo|lea|loa|thie)ves$" , "$1f" ) ;
53+ _default . AddSingular ( "(^zomb)?([^aeiouy]|qu)ies$" , "$2y" ) ;
54+ _default . AddSingular ( "(s)eries$" , "$1eries" ) ;
55+ _default . AddSingular ( "(m)ovies$" , "$1ovie" ) ;
56+ _default . AddSingular ( "(x|ch|ss|sh)es$" , "$1" ) ;
57+ _default . AddSingular ( "(^[m|l])ice$" , "$1ouse" ) ;
58+ _default . AddSingular ( "(?<!^[a-z])(o)es$" , "$1" ) ;
59+ _default . AddSingular ( "(shoe)s$" , "$1" ) ;
60+ _default . AddSingular ( "(cris|ax|test)es$" , "$1is" ) ;
61+ _default . AddSingular ( "(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$" , "$1us" ) ;
62+ _default . AddSingular ( "(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$" , "$1" ) ;
63+ _default . AddSingular ( "^(ox)en" , "$1" ) ;
64+ _default . AddSingular ( "(matr|d)ices$" , "$1ix" ) ;
65+ _default . AddSingular ( "(vert|ind)ices$" , "$1ex" ) ;
66+ _default . AddSingular ( "(quiz)zes$" , "$1" ) ;
67+ _default . AddSingular ( "(buz|blit|walt)zes$" , "$1z" ) ;
68+ _default . AddSingular ( "(alumn|alg|larv|vertebr)ae$" , "$1a" ) ;
69+ _default . AddSingular ( "(criteri|phenomen)a$" , "$1on" ) ;
70+ _default . AddSingular ( "([b|r|c]ook|room|smooth)ies$" , "$1ie" ) ;
9571
96- //Fix 975
97- _default . AddIrregular ( "ex" , "exes" , matchEnding : false ) ;
72+ _default . AddIrregular ( "person" , "people" ) ;
73+ _default . AddIrregular ( "man" , "men" ) ;
74+ _default . AddIrregular ( "human" , "humans" ) ;
75+ _default . AddIrregular ( "child" , "children" ) ;
76+ _default . AddIrregular ( "sex" , "sexes" ) ;
77+ _default . AddIrregular ( "glove" , "gloves" ) ;
78+ _default . AddIrregular ( "move" , "moves" ) ;
79+ _default . AddIrregular ( "goose" , "geese" ) ;
80+ _default . AddIrregular ( "wave" , "waves" ) ;
81+ _default . AddIrregular ( "foot" , "feet" ) ;
82+ _default . AddIrregular ( "tooth" , "teeth" ) ;
83+ _default . AddIrregular ( "curriculum" , "curricula" ) ;
84+ _default . AddIrregular ( "database" , "databases" ) ;
85+ _default . AddIrregular ( "zombie" , "zombies" ) ;
86+ _default . AddIrregular ( "personnel" , "personnel" ) ;
87+ _default . AddIrregular ( "cache" , "caches" ) ;
88+ _default . AddIrregular ( "ex" , "exes" , matchEnding : false ) ;
89+ _default . AddIrregular ( "is" , "are" , matchEnding : false ) ;
90+ _default . AddIrregular ( "was" , "were" , matchEnding : false ) ;
91+ _default . AddIrregular ( "that" , "those" , matchEnding : false ) ;
92+ _default . AddIrregular ( "this" , "these" , matchEnding : false ) ;
93+ _default . AddIrregular ( "bus" , "buses" , matchEnding : false ) ;
94+ _default . AddIrregular ( "die" , "dice" , matchEnding : false ) ;
95+ _default . AddIrregular ( "tie" , "ties" , matchEnding : false ) ;
96+ _default . AddIrregular ( "lens" , "lenses" ) ;
97+ _default . AddIrregular ( "clove" , "cloves" ) ;
98+ _default . AddIrregular ( "valve" , "valves" ) ;
99+ _default . AddIrregular ( "explosive" , "explosives" ) ;
98100
99- _default . AddIrregular ( "is" , "are" , matchEnding : false ) ;
100- _default . AddIrregular ( "that" , "those" , matchEnding : false ) ;
101- _default . AddIrregular ( "this" , "these" , matchEnding : false ) ;
102- _default . AddIrregular ( "bus" , "buses" , matchEnding : false ) ;
103- _default . AddIrregular ( "staff" , "staff" , matchEnding : false ) ;
104- _default . AddIrregular ( "training" , "training" , matchEnding : false ) ;
101+ _default . AddUncountable ( "staff" ) ;
102+ _default . AddUncountable ( "training" ) ;
103+ _default . AddUncountable ( "equipment" ) ;
104+ _default . AddUncountable ( "information" ) ;
105+ _default . AddUncountable ( "corn" ) ;
106+ _default . AddUncountable ( "milk" ) ;
107+ _default . AddUncountable ( "rice" ) ;
108+ _default . AddUncountable ( "money" ) ;
109+ _default . AddUncountable ( "species" ) ;
110+ _default . AddUncountable ( "series" ) ;
111+ _default . AddUncountable ( "fish" ) ;
112+ _default . AddUncountable ( "sheep" ) ;
113+ _default . AddUncountable ( "deer" ) ;
114+ _default . AddUncountable ( "aircraft" ) ;
115+ _default . AddUncountable ( "oz" ) ;
116+ _default . AddUncountable ( "tsp" ) ;
117+ _default . AddUncountable ( "tbsp" ) ;
118+ _default . AddUncountable ( "ml" ) ;
119+ _default . AddUncountable ( "l" ) ;
120+ _default . AddUncountable ( "water" ) ;
121+ _default . AddUncountable ( "waters" ) ;
122+ _default . AddUncountable ( "semen" ) ;
123+ _default . AddUncountable ( "sperm" ) ;
124+ _default . AddUncountable ( "bison" ) ;
125+ _default . AddUncountable ( "grass" ) ;
126+ _default . AddUncountable ( "hair" ) ;
127+ _default . AddUncountable ( "mud" ) ;
128+ _default . AddUncountable ( "elk" ) ;
129+ _default . AddUncountable ( "luggage" ) ;
130+ _default . AddUncountable ( "moose" ) ;
131+ _default . AddUncountable ( "offspring" ) ;
132+ _default . AddUncountable ( "salmon" ) ;
133+ _default . AddUncountable ( "shrimp" ) ;
134+ _default . AddUncountable ( "someone" ) ;
135+ _default . AddUncountable ( "swine" ) ;
136+ _default . AddUncountable ( "trout" ) ;
137+ _default . AddUncountable ( "tuna" ) ;
138+ _default . AddUncountable ( "corps" ) ;
139+ _default . AddUncountable ( "scissors" ) ;
140+ _default . AddUncountable ( "means" ) ;
141+ _default . AddUncountable ( "mail" ) ;
142+ _default . AddUncountable ( "pliers" ) ;
143+ _default . AddUncountable ( "sheers" ) ;
144+ _default . AddUncountable ( "clothes" ) ;
145+ _default . AddUncountable ( "apparatus" ) ;
146+ _default . AddUncountable ( "chassis" ) ;
147+ _default . AddUncountable ( "debris" ) ;
105148
106- _default . AddUncountable ( "equipment" ) ;
107- _default . AddUncountable ( "information" ) ;
108- _default . AddUncountable ( "corn" ) ;
109- _default . AddUncountable ( "milk" ) ;
110- _default . AddUncountable ( "rice" ) ;
111- _default . AddUncountable ( "money" ) ;
112- _default . AddUncountable ( "species" ) ;
113- _default . AddUncountable ( "series" ) ;
114- _default . AddUncountable ( "fish" ) ;
115- _default . AddUncountable ( "sheep" ) ;
116- _default . AddUncountable ( "deer" ) ;
117- _default . AddUncountable ( "aircraft" ) ;
118- _default . AddUncountable ( "oz" ) ;
119- _default . AddUncountable ( "tsp" ) ;
120- _default . AddUncountable ( "tbsp" ) ;
121- _default . AddUncountable ( "ml" ) ;
122- _default . AddUncountable ( "l" ) ;
123- _default . AddUncountable ( "water" ) ;
124- _default . AddUncountable ( "waters" ) ;
125- _default . AddUncountable ( "semen" ) ;
126- _default . AddUncountable ( "sperm" ) ;
127- _default . AddUncountable ( "bison" ) ;
128- _default . AddUncountable ( "grass" ) ;
129- _default . AddUncountable ( "hair" ) ;
130- _default . AddUncountable ( "mud" ) ;
131- _default . AddUncountable ( "elk" ) ;
132- _default . AddUncountable ( "luggage" ) ;
133- _default . AddUncountable ( "moose" ) ;
134- _default . AddUncountable ( "offspring" ) ;
135- _default . AddUncountable ( "salmon" ) ;
136- _default . AddUncountable ( "shrimp" ) ;
137- _default . AddUncountable ( "someone" ) ;
138- _default . AddUncountable ( "swine" ) ;
139- _default . AddUncountable ( "trout" ) ;
140- _default . AddUncountable ( "tuna" ) ;
141- _default . AddUncountable ( "corps" ) ;
142- _default . AddUncountable ( "scissors" ) ;
143- _default . AddUncountable ( "means" ) ;
144- _default . AddUncountable ( "mail" ) ;
149+ //Fix 1132
150+ _default . AddUncountable ( "metadata" ) ;
145151
146- return _default ;
147- }
152+ return _default ;
148153 }
149154}
0 commit comments