UNPKG

yoastseo

Version:

Yoast client-side content analysis

118 lines (111 loc) 5.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.detectAndStemRegularParticiple = detectAndStemRegularParticiple; var _exceptionsParticiplesActive = _interopRequireDefault(require("../../config/internal/exceptionsParticiplesActive")); var _passiveVoiceRegex = _interopRequireDefault(require("../../config/internal/passiveVoiceRegex")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** * Detects whether a word is a regular participle without a prefix and if so, returns the stem. * * @param {Object} morphologyDataVerbs The German morphology data for verbs. * @param {string} word The word (not stemmed) to check. * * @returns {string|null} The stem or null if no participle was matched. */ const detectAndStemParticiplesWithoutPrefixes = function (morphologyDataVerbs, word) { const geStemTParticipleRegex = new RegExp("^" + morphologyDataVerbs.participleStemmingClasses[1].regex); const geStemEtParticipleRegex = new RegExp("^" + morphologyDataVerbs.participleStemmingClasses[0].regex); /* * Check if it's a ge + stem ending in d/t + et participle. * As this is the more specific regex, it needs to be checked before the ge + stem + t regex. */ if (geStemEtParticipleRegex.test(word)) { // Remove the two-letter prefix and the two-letter suffix. return word.slice(2, word.length - 2); } // Check if it's a ge + stem + t participle. if (geStemTParticipleRegex.test(word)) { // Remove the two-letter prefix and the one-letter suffix. return word.slice(2, word.length - 1); } return null; }; /** * Determines whether a given participle pattern combined with prefixes from a given class applies to a given word * and if so, returns the stem. * * @param {string} word The word (not stemmed) to check. * @param {string[]} prefixes The prefixes of a certain prefix class. * @param {string} regexPart The regex part for a given class (completed to a full regex within the function). * @param {number} startStem Where to start cutting off the de-prefixed word. * @param {number} endStem Where to end cutting off the de-prefixed word (from the end index). * * @returns {string|null} The stem or null if no prefixed participle was matched. */ const detectAndStemParticiplePerPrefixClass = function (word, prefixes, regexPart, startStem, endStem) { for (const currentPrefix of prefixes) { const participleRegex = new RegExp("^" + currentPrefix + regexPart); if (participleRegex.test(word)) { const wordWithoutPrefix = word.slice(currentPrefix.length - word.length); const wordWithoutParticipleAffixes = wordWithoutPrefix.slice(startStem, wordWithoutPrefix.length - endStem); return currentPrefix + wordWithoutParticipleAffixes; } } return null; }; /** * Detects whether a word is a regular participle with a prefix and if so, returns the stem. * * @param {Object} morphologyDataVerbs The German morphology data for verbs. * @param {string} word The word (not stemmed) to check. * * @returns {string|null} The stem or null if no participle with prefix was matched. */ const detectAndStemParticiplesWithPrefixes = function (morphologyDataVerbs, word) { const prefixesSeparableOrInseparable = morphologyDataVerbs.prefixes.separableOrInseparable; /* * It's important to preserve order here, since the ge + stem ending in d/t + et regex is more specific than * the ge + stem + t regex, and therefore must be checked first. */ for (const participleClass of morphologyDataVerbs.participleStemmingClasses) { const regex = participleClass.regex; const startStem = participleClass.startStem; const endStem = participleClass.endStem; const separable = participleClass.separable; const prefixes = separable ? morphologyDataVerbs.prefixes.separable : morphologyDataVerbs.prefixes.inseparable; let stem = detectAndStemParticiplePerPrefixClass(word, prefixes, regex, startStem, endStem); if (stem) { return stem; } stem = detectAndStemParticiplePerPrefixClass(word, prefixesSeparableOrInseparable, regex, startStem, endStem); if (stem) { return stem; } } return null; }; /** * Detects whether a word is a regular participle and if so, returns the stem. * * @param {Object} morphologyDataVerbs The German morphology data for verbs. * @param {string} word The word (not stemmed) to check. * * @returns {string|null} The participle stem or null if no regular participle was matched. */ function detectAndStemRegularParticiple(morphologyDataVerbs, word) { if ((0, _passiveVoiceRegex.default)(word).length > 0 || _exceptionsParticiplesActive.default.includes(word)) { return ""; } let stem = detectAndStemParticiplesWithoutPrefixes(morphologyDataVerbs, word); if (stem) { return stem; } stem = detectAndStemParticiplesWithPrefixes(morphologyDataVerbs, word); if (stem) { return stem; } return null; } //# sourceMappingURL=detectAndStemRegularParticiple.js.map