Skip to content

Commit fb86b8a

Browse files
author
Nirav Mehta
committed
Handle some unusual names
Based on emgee3#5
1 parent c7e52cd commit fb86b8a

2 files changed

Lines changed: 25 additions & 16 deletions

File tree

namecase.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@
4545
{ s : /\'/, r : "'"},
4646
{ s : /\"/, r : '"'},
4747
{ s : /\(/, r : "("},
48-
{ s : /\./, r : "."}
48+
{ s : /\./, r : "."},
49+
{ s : /,/, r : ","},
50+
{ s : /\//, r : "/"}
4951
];
5052

5153
for (var i = 0; i < splitters.length; i++) {
@@ -96,7 +98,8 @@
9698
.replace(/\bMacKey\b/, "Mackey")
9799
.replace(/\bMacKley\b/, "Mackley")
98100
.replace(/\bMacHell\b/, "Machell")
99-
.replace(/\bMacHon\b/, "Machon");
101+
.replace(/\bMacHon\b/, "Machon")
102+
.replace(/\bMacAyla\b/, "Macayla");
100103
}
101104

102105

@@ -107,17 +110,18 @@
107110

108111

109112
// Fixes for "son (daughter) of" etc. in various languages.
110-
.replace(/\bAl(?=\s+\w)/g, "al") // al Arabic or forename Al.
113+
.replace(/\bAl(?=\s+\w)\b/g, "al") // al Arabic or forename Al.
111114
.replace(/\b(Bin|Binti|Binte)\b/, "bin") // bin, binti, binte Arabic
112115
.replace(/\bAp\b/g, "ap") // ap Welsh.
113116
.replace(/\bBen(?=\s+\w)\b/g, "ben") // ben Hebrew or forename Ben.
114117
.replace(/\bDell([ae])\b/g, "dell$1") // della and delle Italian.
115118
.replace(/\bD([aeiu])\b/g, "d$1") // da, de, di Italian; du French.
116119
.replace(/\bDe([nlr])\b/g, "de$1") // del Italian; der/den Dutch/Flemish.
117120
.replace(/\bEl\b/g, "el") // el Greek
118-
.replace(/\bLa\b/g, "la") // la French
119-
.replace(/\bL([eo])\b/g, "l$1") // lo Italian; le French.
120-
.replace(/\bVan(?=\s+\w)/g, "van") // van German or forename Van.
121+
.replace(/\bLa\b/g, "la") // la French
122+
.replace(/\bLe(?=\s+\w)\b/g, "le") // le French
123+
.replace(/\bLo\b/g, "lo") // lo Italian
124+
.replace(/\bVan(?=\s+\w)\b/g, "van") // van German or forename Van.
121125
.replace(/\bVon\b/g, "von") // von Dutch/Flemish
122126

123127
// Fixes for roman numeral names, e.g. Henry VIII
@@ -138,14 +142,14 @@
138142
// Somewhat arbitrary rule where two letter combos not containing vowels should be capitalized
139143
// fixes /JJ Abrams/ and /JD Salinger/
140144
// With some exceptions
141-
.replace(/\b[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]{2}\s/, function (v) { return v.toUpperCase(); } )
142-
.replace(/\bMR\s/, "Mr")
143-
.replace(/\bMS\s/, "Ms")
144-
.replace(/\bDR\s/, "Dr")
145-
.replace(/\bST\s/, "St")
146-
.replace(/\bJR\s/, "Jr")
147-
.replace(/\bSR\s/, "Sr")
148-
.replace(/\bLT\s/, "Lt")
145+
.replace(/\b[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]{2}\s/, function (v) { return v.toUpperCase(); } )
146+
.replace(/\bMR\.?\b/, "Mr")
147+
.replace(/\bMS\.?\b/, "Ms")
148+
.replace(/\bDR\.?\b/, "Dr")
149+
.replace(/\bST\.?\b/, "St")
150+
.replace(/\bJR\.?\b/, "Jr")
151+
.replace(/\bSR\.?\b/, "Sr")
152+
.replace(/\bLT\.?\b/, "Lt")
149153

150154

151155
// lowercase words

test/tests.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ var individualFields = [
7676
"Mackle", "Macklin", "Mackie",
7777
"Macquarie", "Machado", "Macevicius",
7878
"Maciulis", "Macias", "MacMurdo",
79-
"Mackrell", "Maclin", "McConnachie",
79+
"Mackrell", "Maclin", "McConnachie",
80+
"Macayla",
8081
// Roman numerals
8182
"Henry VIII", "Louis III", "Louis XIV",
8283
"Charles II", "Fred XLIX", "Iñtërnâtiônàlizætiøn"
@@ -162,7 +163,11 @@ var combinedFields = [
162163
"Bruce Wilcox", "Evan Williams", "Roberta Williams", "Sophie Wilson",
163164
"Dave Winer", "Niklaus Wirth", "Stephen Wolfram", "Don Woods",
164165
"Steve Wozniak", "Will Wright", "Jerry Yang", "Victor Yngve",
165-
"Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg"
166+
"Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg",
167+
/* Unusual names */
168+
"Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano",
169+
"Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb", "Eugene L. Nath,Jr.",
170+
"Lori & Leslie Cotton/Smith", "Ron/Alejandra Brown", "Derrick/Sandra Jackson"
166171
];
167172

168173
describe('NameCase on combined fields', function () {

0 commit comments

Comments
 (0)