UNPKG

yoastseo

Version:

Yoast client-side content analysis

108 lines (102 loc) 3.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = require("lodash"); /** * A DeviationFragment represents a partial deviation when counting syllables. */ class DeviationFragment { /** * Constructs a new DeviationFragment. * * @param {Object} options Extra options that are used to match this deviation fragment. * @param {string} options.location The location in the word where this deviation can occur. * @param {string} options.word The actual string that should be counted differently. * @param {number} options.syllables The amount of syllables this fragment has. * @param {string[]} [options.notFollowedBy] A list of characters that this fragment shouldn't be followed with. * @param {string[]} [options.alsoFollowedBy] A list of characters that this fragment could be followed with. * * @constructor */ constructor(options) { this._location = options.location; this._fragment = options.word; this._syllables = options.syllables; this._regex = null; this._options = (0, _lodash.pick)(options, ["notFollowedBy", "alsoFollowedBy"]); } /** * Creates a regex that matches this fragment inside a word. * * @returns {void} */ createRegex() { const options = this._options; let fragment = this._fragment; if (!(0, _lodash.isUndefined)(options.notFollowedBy)) { fragment += "(?![" + options.notFollowedBy.join("") + "])"; } if (!(0, _lodash.isUndefined)(options.alsoFollowedBy)) { fragment += "[" + options.alsoFollowedBy.join("") + "]?"; } let regexString; switch (this._location) { case "atBeginning": regexString = "^" + fragment; break; case "atEnd": regexString = fragment + "$"; break; case "atBeginningOrEnd": regexString = "(^" + fragment + ")|(" + fragment + "$)"; break; default: regexString = fragment; break; } this._regex = new RegExp(regexString); } /** * Returns the regex that matches this fragment inside a word. * * @returns {RegExp} The regex that matches this fragment. */ getRegex() { if (null === this._regex) { this.createRegex(); } return this._regex; } /** * Returns whether this fragment occurs in a word. * * @param {string} word The word to match the fragment in. * @returns {boolean} Whether or not this fragment occurs in a word. */ occursIn(word) { const regex = this.getRegex(); return regex.test(word); } /** * Removes this fragment from the given word. * * @param {string} word The word to remove this fragment from. * @returns {string} The modified word. */ removeFrom(word) { // Replace by a space to keep the remaining parts separated. return word.replace(this._fragment, " "); } /** * Returns the amount of syllables for this fragment. * * @returns {number} The amount of syllables for this fragment. */ getSyllables() { return this._syllables; } } exports.default = DeviationFragment; //# sourceMappingURL=DeviationFragment.js.map