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; |