Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Sep 18, 2024. It is now read-only.
/inflectPublic archive

Commitaac57ce

Browse files
Add rules and cases for fe/lf/af suffixes. Add flag to irregular to require a full-string match.
1 parent915b0b1 commitaac57ce

File tree

3 files changed

+44
-14
lines changed

3 files changed

+44
-14
lines changed

‎lib/defaults.js‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module.exports = function (inflect) {
1212
inflect.plural(/([ti])um$/i,'$1a');
1313
inflect.plural(/([ti])a$/i,'$1a');
1414
inflect.plural(/sis$/i,'ses');
15-
inflect.plural(/(?:([^f])fe|([lr])f)$/i,'$1ves');
15+
inflect.plural(/(?:([^fa])fe|(?:(oa)f)|([lr])f)$/i,'$1ves');
1616
inflect.plural(/(hive)$/i,'$1s');
1717
inflect.plural(/([^aeiouy]|qu)y$/i,'$1ies');
1818
inflect.plural(/(x|ch|ss|sh)$/i,'$1es');
@@ -23,7 +23,6 @@ module.exports = function (inflect) {
2323
inflect.plural(/^(oxen)$/i,'$1');
2424
inflect.plural(/(quiz)$/i,'$1zes');
2525

26-
2726
inflect.singular(/s$/i,'');
2827
inflect.singular(/(n)ews$/i,'$1ews');
2928
inflect.singular(/([ti])a$/i,'$1um');
@@ -32,6 +31,7 @@ module.exports = function (inflect) {
3231
inflect.singular(/([^f])ves$/i,'$1fe');
3332
inflect.singular(/(hive)s$/i,'$1');
3433
inflect.singular(/(tive)s$/i,'$1');
34+
inflect.singular(/(oave)s$/i,'oaf');
3535
inflect.singular(/([lr])ves$/i,'$1f');
3636
inflect.singular(/([^aeiouy]|qu)ies$/i,'$1y');
3737
inflect.singular(/(s)eries$/i,'$1eries');
@@ -58,6 +58,11 @@ module.exports = function (inflect) {
5858
inflect.irregular('move','moves');
5959
inflect.irregular('cow','kine');
6060
inflect.irregular('zombie','zombies');
61+
inflect.irregular('oaf','oafs',true);
62+
inflect.irregular('jefe','jefes');
63+
inflect.irregular('save','saves');
64+
inflect.irregular('safe','safes');
65+
inflect.irregular('fife','fifes');
6166

62-
inflect.uncountable(['equipment','information','rice','money','species','series','fish','sheep','jeans']);
67+
inflect.uncountable(['equipment','information','rice','money','species','series','fish','sheep','jeans','sushi']);
6368
}

‎lib/inflections.js‎

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,24 @@ Inflections.prototype.singular = function (rule, replacement) {
4949
//
5050
// irregular 'octopus', 'octopi'
5151
// irregular 'person', 'people'
52-
Inflections.prototype.irregular=function(singular,plural){
52+
Inflections.prototype.irregular=function(singular,plural,fullMatchRequired){
5353
this.uncountables=util.array.del(this.uncountables,singular);
5454
this.uncountables=util.array.del(this.uncountables,plural);
55+
varprefix="";
56+
if(fullMatchRequired){
57+
prefix="^";
58+
}
5559
if(singular[0].toUpperCase()==plural[0].toUpperCase()){
56-
this.plural(newRegExp("("+singular[0]+")"+singular.slice(1)+"$","i"),'$1'+plural.slice(1));
57-
this.plural(newRegExp("("+plural[0]+")"+plural.slice(1)+"$","i"),'$1'+plural.slice(1));
58-
this.singular(newRegExp("("+plural[0]+")"+plural.slice(1)+"$","i"),'$1'+singular.slice(1));
60+
this.plural(newRegExp("("+prefix+singular[0]+")"+singular.slice(1)+"$","i"),'$1'+plural.slice(1));
61+
this.plural(newRegExp("("+prefix+plural[0]+")"+plural.slice(1)+"$","i"),'$1'+plural.slice(1));
62+
this.singular(newRegExp("("+prefix+plural[0]+")"+plural.slice(1)+"$","i"),'$1'+singular.slice(1));
5963
}else{
60-
this.plural(newRegExp(""+(singular[0].toUpperCase())+singular.slice(1)+"$"),plural[0].toUpperCase()+plural.slice(1));
61-
this.plural(newRegExp(""+(singular[0].toLowerCase())+singular.slice(1)+"$"),plural[0].toLowerCase()+plural.slice(1));
62-
this.plural(newRegExp(""+(plural[0].toUpperCase())+plural.slice(1)+"$"),plural[0].toUpperCase()+plural.slice(1));
63-
this.plural(newRegExp(""+(plural[0].toLowerCase())+plural.slice(1)+"$"),plural[0].toLowerCase()+plural.slice(1));
64-
this.singular(newRegExp(""+(plural[0].toUpperCase())+plural.slice(1)+"$"),singular[0].toUpperCase()+singular.slice(1));
65-
this.singular(newRegExp(""+(plural[0].toLowerCase())+plural.slice(1)+"$"),singular[0].toLowerCase()+singular.slice(1));
64+
this.plural(newRegExp(prefix+(singular[0].toUpperCase())+singular.slice(1)+"$"),plural[0].toUpperCase()+plural.slice(1));
65+
this.plural(newRegExp(prefix+(singular[0].toLowerCase())+singular.slice(1)+"$"),plural[0].toLowerCase()+plural.slice(1));
66+
this.plural(newRegExp(prefix+(plural[0].toUpperCase())+plural.slice(1)+"$"),plural[0].toUpperCase()+plural.slice(1));
67+
this.plural(newRegExp(prefix+(plural[0].toLowerCase())+plural.slice(1)+"$"),plural[0].toLowerCase()+plural.slice(1));
68+
this.singular(newRegExp(prefix+(plural[0].toUpperCase())+plural.slice(1)+"$"),singular[0].toUpperCase()+singular.slice(1));
69+
this.singular(newRegExp(prefix+(plural[0].toLowerCase())+plural.slice(1)+"$"),singular[0].toLowerCase()+singular.slice(1));
6670
}
6771
};
6872

‎test/inflector/cases.js‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,28 @@
8181
"prize":"prizes",
8282
"edge":"edges",
8383
"cow":"kine",
84-
"database":"databases"
84+
"database":"databases",
85+
"safe":"safes",
86+
"belief":"beliefs",
87+
"gaffe":"gaffes",
88+
"cafe":"cafes",
89+
"caffe":"caffes",
90+
"life":"lives",
91+
"wife":"wives",
92+
"save":"saves",
93+
"fife":"fifes",
94+
"carafe":"carafes",
95+
"giraffe":"giraffes",
96+
"elf":"elves",
97+
"calf":"calves",
98+
"bookshelf":"bookshelves",
99+
"wolf":"wolves",
100+
"half":"halves",
101+
"meatloaf":"meatloaves",
102+
"loaf":"loaves",
103+
"oaf":"oafs",
104+
"jefe":"jefes",
105+
"afterlife":"afterlives"
85106
},
86107
CamelToUnderscore:{
87108
"Product":"product",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp