summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/strings/metaphone.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/strings/metaphone.js')
-rw-r--r--node_modules/locutus/php/strings/metaphone.js227
1 files changed, 0 insertions, 227 deletions
diff --git a/node_modules/locutus/php/strings/metaphone.js b/node_modules/locutus/php/strings/metaphone.js
deleted file mode 100644
index 09117ef..0000000
--- a/node_modules/locutus/php/strings/metaphone.js
+++ /dev/null
@@ -1,227 +0,0 @@
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-module.exports = function metaphone(word, maxPhonemes) {
- // discuss at: http://locutus.io/php/metaphone/
- // original by: Greg Frazier
- // improved by: Brett Zamir (http://brett-zamir.me)
- // improved by: RafaƂ Kukawski (http://blog.kukawski.pl)
- // example 1: metaphone('Gnu')
- // returns 1: 'N'
- // example 2: metaphone('bigger')
- // returns 2: 'BKR'
- // example 3: metaphone('accuracy')
- // returns 3: 'AKKRS'
- // example 4: metaphone('batch batcher')
- // returns 4: 'BXBXR'
-
- var type = typeof word === 'undefined' ? 'undefined' : _typeof(word);
-
- if (type === 'undefined' || type === 'object' && word !== null) {
- // weird!
- return null;
- }
-
- // infinity and NaN values are treated as strings
- if (type === 'number') {
- if (isNaN(word)) {
- word = 'NAN';
- } else if (!isFinite(word)) {
- word = 'INF';
- }
- }
-
- if (maxPhonemes < 0) {
- return false;
- }
-
- maxPhonemes = Math.floor(+maxPhonemes) || 0;
-
- // alpha depends on locale, so this var might need an update
- // or should be turned into a regex
- // for now assuming pure a-z
- var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- var vowel = 'AEIOU';
- var soft = 'EIY';
- var leadingNonAlpha = new RegExp('^[^' + alpha + ']+');
-
- word = typeof word === 'string' ? word : '';
- word = word.toUpperCase().replace(leadingNonAlpha, '');
-
- if (!word) {
- return '';
- }
-
- var is = function is(p, c) {
- return c !== '' && p.indexOf(c) !== -1;
- };
-
- var i = 0;
- var cc = word.charAt(0); // current char. Short name because it's used all over the function
- var nc = word.charAt(1); // next char
- var nnc; // after next char
- var pc; // previous char
- var l = word.length;
- var meta = '';
- // traditional is an internal param that could be exposed for now let it be a local var
- var traditional = true;
-
- switch (cc) {
- case 'A':
- meta += nc === 'E' ? nc : cc;
- i += 1;
- break;
- case 'G':
- case 'K':
- case 'P':
- if (nc === 'N') {
- meta += nc;
- i += 2;
- }
- break;
- case 'W':
- if (nc === 'R') {
- meta += nc;
- i += 2;
- } else if (nc === 'H' || is(vowel, nc)) {
- meta += 'W';
- i += 2;
- }
- break;
- case 'X':
- meta += 'S';
- i += 1;
- break;
- case 'E':
- case 'I':
- case 'O':
- case 'U':
- meta += cc;
- i++;
- break;
- }
-
- for (; i < l && (maxPhonemes === 0 || meta.length < maxPhonemes); i += 1) {
- // eslint-disable-line no-unmodified-loop-condition,max-len
- cc = word.charAt(i);
- nc = word.charAt(i + 1);
- pc = word.charAt(i - 1);
- nnc = word.charAt(i + 2);
-
- if (cc === pc && cc !== 'C') {
- continue;
- }
-
- switch (cc) {
- case 'B':
- if (pc !== 'M') {
- meta += cc;
- }
- break;
- case 'C':
- if (is(soft, nc)) {
- if (nc === 'I' && nnc === 'A') {
- meta += 'X';
- } else if (pc !== 'S') {
- meta += 'S';
- }
- } else if (nc === 'H') {
- meta += !traditional && (nnc === 'R' || pc === 'S') ? 'K' : 'X';
- i += 1;
- } else {
- meta += 'K';
- }
- break;
- case 'D':
- if (nc === 'G' && is(soft, nnc)) {
- meta += 'J';
- i += 1;
- } else {
- meta += 'T';
- }
- break;
- case 'G':
- if (nc === 'H') {
- if (!(is('BDH', word.charAt(i - 3)) || word.charAt(i - 4) === 'H')) {
- meta += 'F';
- i += 1;
- }
- } else if (nc === 'N') {
- if (is(alpha, nnc) && word.substr(i + 1, 3) !== 'NED') {
- meta += 'K';
- }
- } else if (is(soft, nc) && pc !== 'G') {
- meta += 'J';
- } else {
- meta += 'K';
- }
- break;
- case 'H':
- if (is(vowel, nc) && !is('CGPST', pc)) {
- meta += cc;
- }
- break;
- case 'K':
- if (pc !== 'C') {
- meta += 'K';
- }
- break;
- case 'P':
- meta += nc === 'H' ? 'F' : cc;
- break;
- case 'Q':
- meta += 'K';
- break;
- case 'S':
- if (nc === 'I' && is('AO', nnc)) {
- meta += 'X';
- } else if (nc === 'H') {
- meta += 'X';
- i += 1;
- } else if (!traditional && word.substr(i + 1, 3) === 'CHW') {
- meta += 'X';
- i += 2;
- } else {
- meta += 'S';
- }
- break;
- case 'T':
- if (nc === 'I' && is('AO', nnc)) {
- meta += 'X';
- } else if (nc === 'H') {
- meta += '0';
- i += 1;
- } else if (word.substr(i + 1, 2) !== 'CH') {
- meta += 'T';
- }
- break;
- case 'V':
- meta += 'F';
- break;
- case 'W':
- case 'Y':
- if (is(vowel, nc)) {
- meta += cc;
- }
- break;
- case 'X':
- meta += 'KS';
- break;
- case 'Z':
- meta += 'S';
- break;
- case 'F':
- case 'J':
- case 'L':
- case 'M':
- case 'N':
- case 'R':
- meta += cc;
- break;
- }
- }
-
- return meta;
-};
-//# sourceMappingURL=metaphone.js.map \ No newline at end of file