From 8a25c2a20c5896e9c9f96f66f9c57736f756393d Mon Sep 17 00:00:00 2001 From: Jonathon Hill Date: Wed, 19 Sep 2018 17:21:59 -0400 Subject: [PATCH 1/5] =?UTF-8?q?Handle=20=E2=80=9CMacayla=E2=80=9D=20and=20?= =?UTF-8?q?=E2=80=9CLe=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- namecase.js | 10 ++++++---- test/tests.js | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/namecase.js b/namecase.js index bdcf989..55d3a17 100644 --- a/namecase.js +++ b/namecase.js @@ -96,7 +96,8 @@ .replace(/\bMacKey\b/, "Mackey") .replace(/\bMacKley\b/, "Mackley") .replace(/\bMacHell\b/, "Machell") - .replace(/\bMacHon\b/, "Machon"); + .replace(/\bMacHon\b/, "Machon") + .replace(/\bMacAyla\b/, "Macayla"); } @@ -107,7 +108,7 @@ // Fixes for "son (daughter) of" etc. in various languages. - .replace(/\bAl(?=\s+\w)/g, "al") // al Arabic or forename Al. + .replace(/\bAl(?=\s+\w)\b/g, "al") // al Arabic or forename Al. .replace(/\bAp\b/g, "ap") // ap Welsh. .replace(/\bBen(?=\s+\w)\b/g, "ben") // ben Hebrew or forename Ben. .replace(/\bDell([ae])\b/g, "dell$1") // della and delle Italian. @@ -115,8 +116,9 @@ .replace(/\bDe([lr])\b/g, "de$1") // del Italian; der Dutch/Flemish. .replace(/\bEl\b/g, "el") // el Greek .replace(/\bLa\b/g, "la") // la French - .replace(/\bL([eo])\b/g, "l$1") // lo Italian; le French. - .replace(/\bVan(?=\s+\w)/g, "van") // van German or forename Van. + .replace(/\bLe(?=\s+\w)\b/g, "le") // le French + .replace(/\bLo\b/g, "lo") // lo Italian + .replace(/\bVan(?=\s+\w)\b/g, "van") // van German or forename Van. .replace(/\bVon\b/g, "von") // von Dutch/Flemish diff --git a/test/tests.js b/test/tests.js index 99cf6f9..b30bbbd 100644 --- a/test/tests.js +++ b/test/tests.js @@ -75,6 +75,7 @@ var individualFields = [ "Macquarie", "Machado", "Macevicius", "Maciulis", "Macias", "MacMurdo", "Mackrell", "Maclin", "McConnachie", + "Macayla", // Roman numerals "Henry VIII", "Louis III", "Louis XIV", "Charles II" @@ -160,7 +161,9 @@ var combinedFields = [ "Bruce Wilcox", "Evan Williams", "Roberta Williams", "Sophie Wilson", "Dave Winer", "Niklaus Wirth", "Stephen Wolfram", "Don Woods", "Steve Wozniak", "Will Wright", "Jerry Yang", "Victor Yngve", - "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg" + "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg", + /* Additional tests */ + "Khiem Le", "Macayla Carrns" ]; describe('NameCase on combined fields', function () { From 15225e26478de5ac79110f05cea37c58042838e5 Mon Sep 17 00:00:00 2001 From: Jonathon Hill Date: Thu, 20 Sep 2018 13:35:27 -0400 Subject: [PATCH 2/5] Fix whitespace stripping when title abbreviation is missing a period Fixes `Dr Carmen Balzano` => `DrCarmen Balzano` --- namecase.js | 14 +++++++------- test/tests.js | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/namecase.js b/namecase.js index 55d3a17..5e034a4 100644 --- a/namecase.js +++ b/namecase.js @@ -137,13 +137,13 @@ // fixes /JJ Abrams/ and /JD Salinger/ // With some exceptions .replace(/\b[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]{2}\s/, function (v) { return v.toUpperCase(); } ) - .replace(/\bMR\s/, "Mr") - .replace(/\bMS\s/, "Ms") - .replace(/\bDR\s/, "Dr") - .replace(/\bST\s/, "St") - .replace(/\bJR\s/, "Jr") - .replace(/\bSR\s/, "Sr") - .replace(/\bLT\s/, "Lt") + .replace(/\bMR\.?\b/, "Mr") + .replace(/\bMS\.?\b/, "Ms") + .replace(/\bDR\.?\b/, "Dr") + .replace(/\bST\.?\b/, "St") + .replace(/\bJR\.?\b/, "Jr") + .replace(/\bSR\.?\b/, "Sr") + .replace(/\bLT\.?\b/, "Lt") // lowercase words diff --git a/test/tests.js b/test/tests.js index b30bbbd..5a637c1 100644 --- a/test/tests.js +++ b/test/tests.js @@ -162,8 +162,8 @@ var combinedFields = [ "Dave Winer", "Niklaus Wirth", "Stephen Wolfram", "Don Woods", "Steve Wozniak", "Will Wright", "Jerry Yang", "Victor Yngve", "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg", - /* Additional tests */ - "Khiem Le", "Macayla Carrns" + /* Unusual names */ + "Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano" ]; describe('NameCase on combined fields', function () { From 1aea6a2e547fdc8b24b32336c376f84466d94b83 Mon Sep 17 00:00:00 2001 From: Jonathon Hill Date: Thu, 20 Sep 2018 13:44:17 -0400 Subject: [PATCH 3/5] Handle two-letter names with `y` correctly --- namecase.js | 2 +- test/tests.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/namecase.js b/namecase.js index 5e034a4..4c6be50 100644 --- a/namecase.js +++ b/namecase.js @@ -136,7 +136,7 @@ // Somewhat arbitrary rule where two letter combos not containing vowels should be capitalized // fixes /JJ Abrams/ and /JD Salinger/ // With some exceptions - .replace(/\b[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]{2}\s/, function (v) { return v.toUpperCase(); } ) + .replace(/\b[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]{2}\s/, function (v) { return v.toUpperCase(); } ) .replace(/\bMR\.?\b/, "Mr") .replace(/\bMS\.?\b/, "Ms") .replace(/\bDR\.?\b/, "Dr") diff --git a/test/tests.js b/test/tests.js index 5a637c1..512ee8b 100644 --- a/test/tests.js +++ b/test/tests.js @@ -163,7 +163,8 @@ var combinedFields = [ "Steve Wozniak", "Will Wright", "Jerry Yang", "Victor Yngve", "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg", /* Unusual names */ - "Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano" + "Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano", + "Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb" ]; describe('NameCase on combined fields', function () { From a50247fc593c518b908d0ac81e12d37a43b48780 Mon Sep 17 00:00:00 2001 From: Jonathon Hill Date: Thu, 20 Sep 2018 13:48:15 -0400 Subject: [PATCH 4/5] Tolerate missing whitespace before suffix --- namecase.js | 3 ++- test/tests.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/namecase.js b/namecase.js index 4c6be50..2435119 100644 --- a/namecase.js +++ b/namecase.js @@ -45,7 +45,8 @@ { s : /\'/, r : "'"}, { s : /\"/, r : '"'}, { s : /\(/, r : "("}, - { s : /\./, r : "."} + { s : /\./, r : "."}, + { s : /,/, r : ","} ]; for (var i = 0; i < splitters.length; i++) { diff --git a/test/tests.js b/test/tests.js index 512ee8b..46f99d6 100644 --- a/test/tests.js +++ b/test/tests.js @@ -164,7 +164,7 @@ var combinedFields = [ "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg", /* Unusual names */ "Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano", - "Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb" + "Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb", "Eugene L. Nath,Jr." ]; describe('NameCase on combined fields', function () { From 5c2b3564d0e279f0e73f2d5a1665694425279647 Mon Sep 17 00:00:00 2001 From: Jonathon Hill Date: Thu, 20 Sep 2018 13:49:42 -0400 Subject: [PATCH 5/5] Handle names separated by `/` --- namecase.js | 3 ++- test/tests.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/namecase.js b/namecase.js index 2435119..08b1b88 100644 --- a/namecase.js +++ b/namecase.js @@ -46,7 +46,8 @@ { s : /\"/, r : '"'}, { s : /\(/, r : "("}, { s : /\./, r : "."}, - { s : /,/, r : ","} + { s : /,/, r : ","}, + { s : /\//, r : "/"} ]; for (var i = 0; i < splitters.length; i++) { diff --git a/test/tests.js b/test/tests.js index 46f99d6..4c42a6f 100644 --- a/test/tests.js +++ b/test/tests.js @@ -164,7 +164,8 @@ var combinedFields = [ "Jamie Zawinski", "Philip Zimmermann", "Mark Zuckerberg", /* Unusual names */ "Khiem Le", "Macayla Carrns", "Dr Carmen Balzano", "Dr. Carmen Balzano", - "Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb", "Eugene L. Nath,Jr." + "Dr Robert & Ann Leitz", "Thao & Hy Nguyen", "Ty Cobb", "Eugene L. Nath,Jr.", + "Lori & Leslie Cotton/Smith", "Ron/Alejandra Brown", "Derrick/Sandra Jackson" ]; describe('NameCase on combined fields', function () {