tc-ui-toolkit
Version:
React components used to develop tools for the desktop app translationCore
185 lines (142 loc) • 15.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.lookupStrongsNumbers = exports.lexiconEntryIdFromStrongs = exports.lexiconIdFromStrongs = exports.containsValidStrongsNumber = exports.getStrongsParts = exports.getMorphKeys = exports.getWordParts = void 0;
var _wordAligner = require("word-aligner");
var ZERO_WIDTH_SPACE = "\u200B";
var ZERO_WIDTH_JOINER = "\u2060";
/**
* splits a word by zero width spaces
* @param {String} word - compound word to split
* @return {Array} split parts
*/
var getWordParts = function getWordParts(word) {
if (word) {
var wordParts = [word];
if (word.includes(ZERO_WIDTH_JOINER)) {
wordParts = word.split(ZERO_WIDTH_JOINER);
} else if (word.includes(ZERO_WIDTH_SPACE)) {
wordParts = word.split(ZERO_WIDTH_SPACE);
}
return wordParts;
}
return [];
};
/**
* splits morph of compound word into parts
* @param {string} morph - morph string to convert
* @return {Array} morphology for each part
*/
exports.getWordParts = getWordParts;
var getMorphKeys = function getMorphKeys(morph) {
var morphKeys = _wordAligner.MorphUtils.getMorphLocalizationKeys(morph);
var morphKeysForParts = [];
var lastPos = 0;
var pos = 0;
var part;
var divider = '*:';
if ((pos = morphKeys.indexOf(divider)) >= 0) {
while (pos >= 0) {
part = morphKeys.slice(lastPos, pos);
morphKeysForParts.push(part);
lastPos = pos + 1;
pos = morphKeys.indexOf(divider, lastPos);
}
part = morphKeys.slice(lastPos);
if (part.length) {
morphKeysForParts.push(part);
}
} else {
morphKeysForParts.push(morphKeys);
}
return morphKeysForParts;
};
/**
* checks for formats such as `c:d:H0776` and splits into parts
* @param {String} strong - the strong's number to get the entryIds from
* @return {Array} - list of parts
*/
exports.getMorphKeys = getMorphKeys;
var getStrongsParts = function getStrongsParts(strong) {
if (strong) {
var parts = strong.split(':');
return parts;
}
return [];
};
/**
* searches through the parts to see if there is a valid strongs number
* @param strong
* @return {boolean}
*/
exports.getStrongsParts = getStrongsParts;
var containsValidStrongsNumber = function containsValidStrongsNumber(strong) {
var parts = getStrongsParts(strong);
for (var i = 0, len = parts.length; i < len; i++) {
var entryId = lexiconEntryIdFromStrongs(parts[i]);
if (entryId) {
return true;
}
}
return false;
};
/**
* @description - Get the lexiconIds from the strong's number
* @param {String} strong - the strong's number to get the entryIds from
* @return {String} - the id of the lexicon
*/
exports.containsValidStrongsNumber = containsValidStrongsNumber;
var lexiconIdFromStrongs = function lexiconIdFromStrongs(strong) {
var lexiconId = strong && strong.startsWith('G') ? 'ugl' : 'uhl';
return lexiconId;
};
/**
* @description - Get the lexicon entryIds from the strong's number
* @param {String} strong - the strong's number to get the entryIds from
* @return {int} - the number of the entry
*/
exports.lexiconIdFromStrongs = lexiconIdFromStrongs;
var lexiconEntryIdFromStrongs = function lexiconEntryIdFromStrongs(strong) {
if (strong) {
var strongsCode = strong.replace(/\w/, '');
if (!strong.startsWith('H')) {
// Greek has an extra 0 at end
strongsCode = strongsCode.slice(0, -1);
}
var entryId = strongsCode && parseInt(strongsCode) || 0;
return entryId;
}
return 0;
};
/**
* looks up the strongs numbers for each part of a multipart strongs
* @param {String} strong
* @param {Function} getLexiconData
* @return {*}
*/
exports.lexiconEntryIdFromStrongs = lexiconEntryIdFromStrongs;
var lookupStrongsNumbers = function lookupStrongsNumbers(strong, getLexiconData) {
var lexiconData = {};
var parts = getStrongsParts(strong);
for (var i = 0, len = parts.length; i < len; i++) {
var part = parts[i];
var entryId = lexiconEntryIdFromStrongs(part);
if (entryId) {
var lexiconId = lexiconIdFromStrongs(part);
var lexiconData_ = getLexiconData(lexiconId, entryId);
if (lexiconData_) {
if (lexiconData && lexiconData_[lexiconId] && lexiconData_[lexiconId][entryId]) {
// if already exists combine data
if (!lexiconData[lexiconId]) {
lexiconData[lexiconId] = {};
}
lexiconData[lexiconId][entryId] = lexiconData_[lexiconId][entryId];
}
}
}
}
return lexiconData;
};
exports.lookupStrongsNumbers = lookupStrongsNumbers;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TY3JpcHR1cmVQYW5lL2hlbHBlcnMvbGV4aWNvbkhlbHBlcnMuanMiXSwibmFtZXMiOlsiWkVST19XSURUSF9TUEFDRSIsIlpFUk9fV0lEVEhfSk9JTkVSIiwiZ2V0V29yZFBhcnRzIiwid29yZCIsIndvcmRQYXJ0cyIsImluY2x1ZGVzIiwic3BsaXQiLCJnZXRNb3JwaEtleXMiLCJtb3JwaCIsIm1vcnBoS2V5cyIsIk1vcnBoVXRpbHMiLCJnZXRNb3JwaExvY2FsaXphdGlvbktleXMiLCJtb3JwaEtleXNGb3JQYXJ0cyIsImxhc3RQb3MiLCJwb3MiLCJwYXJ0IiwiZGl2aWRlciIsImluZGV4T2YiLCJzbGljZSIsInB1c2giLCJsZW5ndGgiLCJnZXRTdHJvbmdzUGFydHMiLCJzdHJvbmciLCJwYXJ0cyIsImNvbnRhaW5zVmFsaWRTdHJvbmdzTnVtYmVyIiwiaSIsImxlbiIsImVudHJ5SWQiLCJsZXhpY29uRW50cnlJZEZyb21TdHJvbmdzIiwibGV4aWNvbklkRnJvbVN0cm9uZ3MiLCJsZXhpY29uSWQiLCJzdGFydHNXaXRoIiwic3Ryb25nc0NvZGUiLCJyZXBsYWNlIiwicGFyc2VJbnQiLCJsb29rdXBTdHJvbmdzTnVtYmVycyIsImdldExleGljb25EYXRhIiwibGV4aWNvbkRhdGEiLCJsZXhpY29uRGF0YV8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQSxJQUFNQSxnQkFBZ0IsR0FBRyxRQUF6QjtBQUNBLElBQU1DLGlCQUFpQixHQUFHLFFBQTFCO0FBRUE7Ozs7OztBQUtPLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNDLElBQUQsRUFBVTtBQUNwQyxNQUFJQSxJQUFKLEVBQVU7QUFDUixRQUFJQyxTQUFTLEdBQUcsQ0FBQ0QsSUFBRCxDQUFoQjs7QUFFQSxRQUFJQSxJQUFJLENBQUNFLFFBQUwsQ0FBY0osaUJBQWQsQ0FBSixFQUFzQztBQUNwQ0csTUFBQUEsU0FBUyxHQUFHRCxJQUFJLENBQUNHLEtBQUws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QUFZLENBQUNSLFNBQUQsQ0FBWixDQUF3QkgsT0FBeEIsQ0FBOUMsRUFBZ0Y7QUFBRTtBQUNoRixjQUFJLENBQUNVLFdBQVcsQ0FBQ1AsU0FBRCxDQUFoQixFQUE2QjtBQUMzQk8sWUFBQUEsV0FBVyxDQUFDUCxTQUFELENBQVgsR0FBeUIsRUFBekI7QUFDRDs7QUFDRE8sVUFBQUEsV0FBVyxDQUFDUCxTQUFELENBQVgsQ0FBdUJILE9BQXZCLElBQWtDVyxZQUFZLENBQUNSLFNBQUQsQ0FBWixDQUF3QkgsT0FBeEIsQ0FBbEM7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPVSxXQUFQO0FBQ0QsQ0F2Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb3JwaFV0aWxzIH0gZnJvbSAnd29yZC1hbGlnbmVyJztcblxuY29uc3QgWkVST19XSURUSF9TUEFDRSA9ICdcXHUyMDBCJztcbmNvbnN0IFpFUk9fV0lEVEhfSk9JTkVSID0gJ1xcdTIwNjAnO1xuXG4vKipcbiAqIHNwbGl0cyBhIHdvcmQgYnkgemVybyB3aWR0aCBzcGFjZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB3b3JkIC0gY29tcG91bmQgd29yZCB0byBzcGxpdFxuICogQHJldHVybiB7QXJyYXl9IHNwbGl0IHBhcnRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRXb3JkUGFydHMgPSAod29yZCkgPT4ge1xuICBpZiAod29yZCkge1xuICAgIGxldCB3b3JkUGFydHMgPSBbd29yZF07XG5cbiAgICBpZiAod29yZC5pbmNsdWRlcyhaRVJPX1dJRFRIX0pPSU5FUikpIHtcbiAgICAgIHdvcmRQYXJ0cyA9IHdvcmQuc3BsaXQoWkVST19XSURUSF9KT0lORVIpO1xuICAgIH0gZWxzZSBpZiAod29yZC5pbmNsdWRlcyhaRVJPX1dJRFRIX1NQQUNFKSkge1xuICAgICAgd29yZFBhcnRzID0gd29yZC5zcGxpdChaRVJPX1dJRFRIX1NQQUNFKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRQYXJ0cztcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG4vKipcbiAqIHNwbGl0cyBtb3JwaCBvZiBjb21wb3VuZCB3b3JkIGludG8gcGFydHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb3JwaCAtIG1vcnBoIHN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJuIHtBcnJheX0gbW9ycGhvbG9neSBmb3IgZWFjaCBwYXJ0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNb3JwaEtleXMgPSAobW9ycGgpID0+IHtcbiAgY29uc3QgbW9ycGhLZXlzID0gTW9ycGhVdGlscy5nZXRNb3JwaExvY2FsaXphdGlvbktleXMobW9ycGgpO1xuICBjb25zdCBtb3JwaEtleXNGb3JQYXJ0cyA9IFtdO1xuICBsZXQgbGFzdFBvcyA9IDA7XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgcGFydDtcbiAgY29uc3QgZGl2aWRlciA9ICcqOic7XG5cbiAgaWYgKChwb3MgPSBtb3JwaEtleXMuaW5kZXhPZihkaXZpZGVyKSkgPj0gMCkge1xuICAgIHdoaWxlIChwb3MgPj0gMCkge1xuICAgICAgcGFydCA9IG1vcnBoS2V5cy5zbGljZShsYXN0UG9zLCBwb3MpO1xuICAgICAgbW9ycGhLZXlzRm9yUGFydHMucHVzaChwYXJ0KTtcbiAgICAgIGxhc3RQb3MgPSBwb3MgKyAxO1xuICAgICAgcG9zID0gbW9ycGhLZXlzLmluZGV4T2YoZGl2aWRlciwgbGFzdFBvcyk7XG4gICAgfVxuICAgIHBhcnQgPSBtb3JwaEtleXMuc2xpY2UobGFzdFBvcyk7XG5cbiAgICBpZiAocGFydC5sZW5ndGgpIHtcbiAgICAgIG1vcnBoS2V5c0ZvclBhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1vcnBoS2V5c0ZvclBhcnRzLnB1c2gobW9ycGhLZXlzKTtcbiAgfVxuICByZXR1cm4gbW9ycGhLZXlzRm9yUGFydHM7XG59O1xuXG4vKipcbiAqIGNoZWNrcyBmb3IgZm9ybWF0cyBzdWNoIGFzIGBjOmQ6SDA3NzZgIGFuZCBzcGxpdHMgaW50byBwYXJ0c1xuICogQHBhcmFtIHtTdHJpbmd9IHN0cm9uZyAtIHRoZSBzdHJvbmcncyBudW1iZXIgdG8gZ2V0IHRoZSBlbnRyeUlkcyBmcm9tXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBsaXN0IG9mIHBhcnRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdHJvbmdzUGFydHMgPSAoc3Ryb25nKSA9PiB7XG4gIGlmIChzdHJvbmcpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cm9uZy5zcGxpdCgnOicpO1xuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG4vKipcbiAqIHNlYXJjaGVzIHRocm91Z2ggdGhlIHBhcnRzIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHZhbGlkIHN0cm9uZ3MgbnVtYmVyXG4gKiBAcGFyYW0gc3Ryb25nXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgY29udGFpbnNWYWxpZFN0cm9uZ3NOdW1iZXIgPSAoc3Ryb25nKSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0U3Ryb25nc1BhcnRzKHN0cm9uZyk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgZW50cnlJZCA9IGxleGljb25FbnRyeUlkRnJvbVN0cm9uZ3MocGFydHNbaV0pO1xuXG4gICAgaWYgKGVudHJ5SWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiAtIEdldCB0aGUgbGV4aWNvbklkcyBmcm9tIHRoZSBzdHJvbmcncyBudW1iZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJvbmcgLSB0aGUgc3Ryb25nJ3MgbnVtYmVyIHRvIGdldCB0aGUgZW50cnlJZHMgZnJvbVxuICogQHJldHVybiB7U3RyaW5nfSAtIHRoZSBpZCBvZiB0aGUgbGV4aWNvblxuICovXG5leHBvcnQgY29uc3QgbGV4aWNvbklkRnJvbVN0cm9uZ3MgPSAoc3Ryb25nKSA9PiB7XG4gIGNvbnN0IGxleGljb25JZCA9IChzdHJvbmcgJiYgc3Ryb25nLnN0YXJ0c1dpdGgoJ0cnKSkgPyAndWdsJzogJ3VobCc7XG4gIHJldHVybiBsZXhpY29uSWQ7XG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gLSBHZXQgdGhlIGxleGljb24gZW50cnlJZHMgZnJvbSB0aGUgc3Ryb25nJ3MgbnVtYmVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3Ryb25nIC0gdGhlIHN0cm9uZydzIG51bWJlciB0byBnZXQgdGhlIGVudHJ5SWRzIGZyb21cbiAqIEByZXR1cm4ge2ludH0gLSB0aGUgbnVtYmVyIG9mIHRoZSBlbnRyeVxuICovXG5leHBvcnQgY29uc3QgbGV4aWNvbkVudHJ5SWRGcm9tU3Ryb25ncyA9IChzdHJvbmcpID0+IHtcbiAgaWYgKHN0cm9uZykge1xuICAgIGxldCBzdHJvbmdzQ29kZSA9IHN0cm9uZy5yZXBsYWNlKC9cXHcvLCAnJyk7XG5cbiAgICBpZiAoIXN0cm9uZy5zdGFydHNXaXRoKCdIJykpIHsgLy8gR3JlZWsgaGFzIGFuIGV4dHJhIDAgYXQgZW5kXG4gICAgICBzdHJvbmdzQ29kZSA9IHN0cm9uZ3NDb2RlLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeUlkID0gKHN0cm9uZ3NDb2RlICYmIHBhcnNlSW50KHN0cm9uZ3NDb2RlKSkgfHwgMDtcbiAgICByZXR1cm4gZW50cnlJZDtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbi8qKlxuICogbG9va3MgdXAgdGhlIHN0cm9uZ3MgbnVtYmVycyBmb3IgZWFjaCBwYXJ0IG9mIGEgbXVsdGlwYXJ0IHN0cm9uZ3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJvbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldExleGljb25EYXRhXG4gKiBAcmV0dXJuIHsqfVxuICovXG5leHBvcnQgY29uc3QgbG9va3VwU3Ryb25nc051bWJlcnMgPSAoc3Ryb25nLCBnZXRMZXhpY29uRGF0YSkgPT4ge1xuICBsZXQgbGV4aWNvbkRhdGEgPSB7fTtcbiAgY29uc3QgcGFydHMgPSBnZXRTdHJvbmdzUGFydHMoc3Ryb25nKTtcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07XG4gICAgY29uc3QgZW50cnlJZCA9IGxleGljb25FbnRyeUlkRnJvbVN0cm9uZ3MocGFydCk7XG5cbiAgICBpZiAoZW50cnlJZCkge1xuICAgICAgY29uc3QgbGV4aWNvbklkID0gbGV4aWNvbklkRnJvbVN0cm9uZ3MocGFydCk7XG4gICAgICBjb25zdCBsZXhpY29uRGF0YV8gPSBnZXRMZXhpY29uRGF0YShsZXhpY29uSWQsIGVudHJ5SWQpO1xuXG4gICAgICBpZiAobGV4aWNvbkRhdGFfKSB7XG4gICAgICAgIGlmIChsZXhpY29uRGF0YSAmJiBsZXhpY29uRGF0YV9bbGV4aWNvbklkXSAmJiBsZXhpY29uRGF0YV9bbGV4aWNvbklkXVtlbnRyeUlkXSkgeyAvLyBpZiBhbHJlYWR5IGV4aXN0cyBjb21iaW5lIGRhdGFcbiAgICAgICAgICBpZiAoIWxleGljb25EYXRhW2xleGljb25JZF0pIHtcbiAgICAgICAgICAgIGxleGljb25EYXRhW2xleGljb25JZF0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV4aWNvbkRhdGFbbGV4aWNvbklkXVtlbnRyeUlkXSA9IGxleGljb25EYXRhX1tsZXhpY29uSWRdW2VudHJ5SWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBsZXhpY29uRGF0YTtcbn07XG4iXX0=