@wordpress/wordcount
Version:
WordPress word count utility.
119 lines (112 loc) • 5.39 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.count = count;
var _defaultSettings = require("./defaultSettings");
var _stripTags = _interopRequireDefault(require("./stripTags"));
var _transposeAstralsToCountableChar = _interopRequireDefault(require("./transposeAstralsToCountableChar"));
var _stripHTMLEntities = _interopRequireDefault(require("./stripHTMLEntities"));
var _stripConnectors = _interopRequireDefault(require("./stripConnectors"));
var _stripRemovables = _interopRequireDefault(require("./stripRemovables"));
var _stripHTMLComments = _interopRequireDefault(require("./stripHTMLComments"));
var _stripShortcodes = _interopRequireDefault(require("./stripShortcodes"));
var _stripSpaces = _interopRequireDefault(require("./stripSpaces"));
var _transposeHTMLEntitiesToCountableChars = _interopRequireDefault(require("./transposeHTMLEntitiesToCountableChars"));
/**
* Internal dependencies
*/
/**
* @typedef {import('./defaultSettings').WPWordCountDefaultSettings} WPWordCountSettings
* @typedef {import('./defaultSettings').WPWordCountUserSettings} WPWordCountUserSettings
*/
/**
* Possible ways of counting.
*
* @typedef {'words'|'characters_excluding_spaces'|'characters_including_spaces'} WPWordCountStrategy
*/
/**
* Private function to manage the settings.
*
* @param {WPWordCountStrategy} type The type of count to be done.
* @param {WPWordCountUserSettings} userSettings Custom settings for the count.
*
* @return {WPWordCountSettings} The combined settings object to be used.
*/
function loadSettings(type, userSettings) {
var _settings$l10n$shortc;
const settings = Object.assign({}, _defaultSettings.defaultSettings, userSettings);
settings.shortcodes = (_settings$l10n$shortc = settings.l10n?.shortcodes) !== null && _settings$l10n$shortc !== void 0 ? _settings$l10n$shortc : [];
if (settings.shortcodes && settings.shortcodes.length) {
settings.shortcodesRegExp = new RegExp('\\[\\/?(?:' + settings.shortcodes.join('|') + ')[^\\]]*?\\]', 'g');
}
settings.type = type;
if (settings.type !== 'characters_excluding_spaces' && settings.type !== 'characters_including_spaces') {
settings.type = 'words';
}
return settings;
}
/**
* Count the words in text
*
* @param {string} text The text being processed
* @param {RegExp} regex The regular expression pattern being matched
* @param {WPWordCountSettings} settings Settings object containing regular expressions for each strip function
*
* @return {number} Count of words.
*/
function countWords(text, regex, settings) {
var _text$match$length;
text = [_stripTags.default.bind(null, settings), _stripHTMLComments.default.bind(null, settings), _stripShortcodes.default.bind(null, settings), _stripSpaces.default.bind(null, settings), _stripHTMLEntities.default.bind(null, settings), _stripConnectors.default.bind(null, settings), _stripRemovables.default.bind(null, settings)].reduce((result, fn) => fn(result), text);
text = text + '\n';
return (_text$match$length = text.match(regex)?.length) !== null && _text$match$length !== void 0 ? _text$match$length : 0;
}
/**
* Count the characters in text
*
* @param {string} text The text being processed
* @param {RegExp} regex The regular expression pattern being matched
* @param {WPWordCountSettings} settings Settings object containing regular expressions for each strip function
*
* @return {number} Count of characters.
*/
function countCharacters(text, regex, settings) {
var _text$match$length2;
text = [_stripTags.default.bind(null, settings), _stripHTMLComments.default.bind(null, settings), _stripShortcodes.default.bind(null, settings), _transposeAstralsToCountableChar.default.bind(null, settings), _stripSpaces.default.bind(null, settings), _transposeHTMLEntitiesToCountableChars.default.bind(null, settings)].reduce((result, fn) => fn(result), text);
text = text + '\n';
return (_text$match$length2 = text.match(regex)?.length) !== null && _text$match$length2 !== void 0 ? _text$match$length2 : 0;
}
/**
* Count some words.
*
* @param {string} text The text being processed
* @param {WPWordCountStrategy} type The type of count. Accepts 'words', 'characters_excluding_spaces', or 'characters_including_spaces'.
* @param {WPWordCountUserSettings} userSettings Custom settings object.
*
* @example
* ```js
* import { count } from '@wordpress/wordcount';
* const numberOfWords = count( 'Words to count', 'words', {} )
* ```
*
* @return {number} The word or character count.
*/
function count(text, type, userSettings) {
const settings = loadSettings(type, userSettings);
let matchRegExp;
switch (settings.type) {
case 'words':
matchRegExp = settings.wordsRegExp;
return countWords(text, matchRegExp, settings);
case 'characters_including_spaces':
matchRegExp = settings.characters_including_spacesRegExp;
return countCharacters(text, matchRegExp, settings);
case 'characters_excluding_spaces':
matchRegExp = settings.characters_excluding_spacesRegExp;
return countCharacters(text, matchRegExp, settings);
default:
return 0;
}
}
//# sourceMappingURL=index.js.map