npmtest-talisman (v0.0.1)

Code coverage report for node-npmtest-talisman/node_modules/talisman/phonetics/nysiis.js

Statements: 53.33% (16 / 30)      Branches: 37.5% (3 / 8)      Functions: 50% (1 / 2)      Lines: 55.56% (15 / 27)      Ignored: none     

All files » node-npmtest-talisman/node_modules/talisman/phonetics/ » nysiis.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98    1     1   1   1   1   1                           1                                     1                                                                                   1     1 1 1 1 1 1  
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: false
});
exports.refined = exports.original = undefined;
 
var _helpers = require('../helpers');
 
var _deburr = require('lodash/deburr');
 
var _deburr2 = _interopRequireDefault(_deburr);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
/**
 * Patterns.
 */
/**
 * Talisman phonetics/nysiis
 * ==========================
 *
 * The nysiis algorithm, original & refined.
 *
 * [Reference]:
 * https://en.wikipedia.org/wiki/New_York_State_Identification_and_Intelligence_System
 */
var PATTERNS = {
  original: {
    first: [[/JR$/g, ''], [/SR$/g, ''], [/^MAC/g, 'MCC'], [/^KN/g, 'NN'], [/^K/g, 'C'], [/^(PH|PF)/g, 'FF'], [/^SCH/g, 'SSS'], [/(EE|IE)$/g, 'Y'], [/(DT|RT|RD|NT|ND)$/g, 'D']],
    second: [[/EV/g, 'AF'], [/[EIOU]/g, 'A'], [/Q/g, 'G'], [/Z/g, 'S'], [/(M|KN)/g, 'N'], [/K/g, 'C'], [/SCH/g, 'SSS'], [/PH/g, 'FF'], [/([^A])H/g, '$1'], [/(.)H[^A]/g, '$1'], [/AW/g, 'A'], [/S$/g, ''], [/AY$/g, 'Y'], [/A$/g, '']]
  },
  refined: {
    first: [[/JR$/g, ''], [/SR$/g, ''], [/(S|Z)$/g, ''], [/MAC/g, 'MC'], [/PH/g, 'F'], [/IX$/g, 'IC'], [/EX$/g, 'EC'], [/(YE|EE|IE)/g, 'Y'], [/(DT|RT|RD|NT|ND)$/g, 'D'], [/(.+)EV/g, '$1EF']],
    second: [[/([AEIOU]+)W/g, '$1'], [/[EIOU]/g, 'A'], [/AA+/g, 'A'], [/GHT/g, 'GT'], [/DG/g, 'G'], [/PH/g, 'F'], [/(.+)HA/g, '$1A'], [/A+H/g, 'A'], [/KN/g, 'N'], [/K/g, 'C'], [/(.+)M/g, '$1N'], [/(.+)Q/g, '$1G'], [/(SH|SCH)/g, 'S'], [/YW/g, 'Y'], [/(.+)Y(.+)/g, '$1A$2'], [/WR/g, 'R'], [/(.+)Z/g, '$1S'], [/AY$/g, 'Y'], [/A+$/g, ''], [/^\w/g, '']]
  }
};
 
/**
 * Function taking a single name and computing its NYSIIS code.
 *
 * @param  {string}  name - The name to process.
 * @return {string}       - The NYSIIS code.
 *
 * @throws {Error} The function expects the name to be a string.
 */
function nysiis(type, name) {
  if (typeof name !== 'string') throw Error('talisman/phonetics/nysiis: the given name is not a string.');
 
  // Preparing the string
  name = (0, _deburr2.default)(name).toUpperCase().trim().replace(/[^A-Z]/g, '');
 
  // Getting the proper patterns
  var patterns = PATTERNS[type];
 
  // Applying the first substitutions
  for (var i = 0, l = patterns.first.length; i < l; i++) {
    var _patterns$first$i = patterns.first[i],
        match = _patterns$first$i[0],
        replacement = _patterns$first$i[1];
 
 
    name = name.replace(match, replacement);
  }
 
  // Storing the first letter
  var firstLetter = name.charAt(0);
 
  // Eating the first letter if applying the original algorithm
  if (type === 'original') name = name.slice(1);
 
  // Applying the second substitutions
  for (var _i = 0, _l = patterns.second.length; _i < _l; _i++) {
    var _patterns$second$_i = patterns.second[_i],
        match = _patterns$second$_i[0],
        replacement = _patterns$second$_i[1];
 
 
    name = name.replace(match, replacement);
  }
 
  // Returning the squeezed code
  return firstLetter + (0, _helpers.squeeze)(name);
}
 
/**
 * Exporting functions.
 */
var original = nysiis.bind(null, 'original'),
    refined = nysiis.bind(null, 'refined');
 
exports.default = original;
exports.original = original;
exports.refined = refined;
module.exports = exports['default'];
exports['default'].original = exports.original;
exports['default'].refined = exports.refined;