first commit
This commit is contained in:
210
wp-includes/js/dist/wordcount.js
vendored
Normal file
210
wp-includes/js/dist/wordcount.js
vendored
Normal file
@@ -0,0 +1,210 @@
|
||||
"use strict";
|
||||
var wp;
|
||||
(wp ||= {}).wordcount = (() => {
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// packages/wordcount/build-module/index.mjs
|
||||
var index_exports = {};
|
||||
__export(index_exports, {
|
||||
count: () => count
|
||||
});
|
||||
|
||||
// packages/wordcount/build-module/defaultSettings.mjs
|
||||
var defaultSettings = {
|
||||
HTMLRegExp: /<\/?[a-z][^>]*?>/gi,
|
||||
HTMLcommentRegExp: /<!--[\s\S]*?-->/g,
|
||||
spaceRegExp: / | /gi,
|
||||
HTMLEntityRegExp: /&\S+?;/g,
|
||||
// \u2014 = em-dash.
|
||||
connectorRegExp: /--|\u2014/g,
|
||||
// Characters to be removed from input text.
|
||||
removeRegExp: new RegExp(
|
||||
[
|
||||
"[",
|
||||
// Basic Latin (extract)
|
||||
"!-/:-@[-`{-~",
|
||||
// Latin-1 Supplement (extract)
|
||||
"\x80-\xBF\xD7\xF7",
|
||||
/*
|
||||
* The following range consists of:
|
||||
* General Punctuation
|
||||
* Superscripts and Subscripts
|
||||
* Currency Symbols
|
||||
* Combining Diacritical Marks for Symbols
|
||||
* Letterlike Symbols
|
||||
* Number Forms
|
||||
* Arrows
|
||||
* Mathematical Operators
|
||||
* Miscellaneous Technical
|
||||
* Control Pictures
|
||||
* Optical Character Recognition
|
||||
* Enclosed Alphanumerics
|
||||
* Box Drawing
|
||||
* Block Elements
|
||||
* Geometric Shapes
|
||||
* Miscellaneous Symbols
|
||||
* Dingbats
|
||||
* Miscellaneous Mathematical Symbols-A
|
||||
* Supplemental Arrows-A
|
||||
* Braille Patterns
|
||||
* Supplemental Arrows-B
|
||||
* Miscellaneous Mathematical Symbols-B
|
||||
* Supplemental Mathematical Operators
|
||||
* Miscellaneous Symbols and Arrows
|
||||
*/
|
||||
"\u2000-\u2BFF",
|
||||
// Supplemental Punctuation.
|
||||
"\u2E00-\u2E7F",
|
||||
"]"
|
||||
].join(""),
|
||||
"g"
|
||||
),
|
||||
// Remove UTF-16 surrogate points, see https://en.wikipedia.org/wiki/UTF-16#U.2BD800_to_U.2BDFFF
|
||||
astralRegExp: /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
|
||||
wordsRegExp: /\S\s+/g,
|
||||
characters_excluding_spacesRegExp: /\S/g,
|
||||
/*
|
||||
* Match anything that is not a formatting character, excluding:
|
||||
* \f = form feed
|
||||
* \n = new line
|
||||
* \r = carriage return
|
||||
* \t = tab
|
||||
* \v = vertical tab
|
||||
* \u00AD = soft hyphen
|
||||
* \u2028 = line separator
|
||||
* \u2029 = paragraph separator
|
||||
*/
|
||||
characters_including_spacesRegExp: /[^\f\n\r\t\v\u00AD\u2028\u2029]/g,
|
||||
l10n: {
|
||||
type: "words"
|
||||
}
|
||||
};
|
||||
|
||||
// packages/wordcount/build-module/stripTags.mjs
|
||||
function stripTags(settings, text) {
|
||||
return text.replace(settings.HTMLRegExp, "\n");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/transposeAstralsToCountableChar.mjs
|
||||
function transposeAstralsToCountableChar(settings, text) {
|
||||
return text.replace(settings.astralRegExp, "a");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripHTMLEntities.mjs
|
||||
function stripHTMLEntities(settings, text) {
|
||||
return text.replace(settings.HTMLEntityRegExp, "");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripConnectors.mjs
|
||||
function stripConnectors(settings, text) {
|
||||
return text.replace(settings.connectorRegExp, " ");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripRemovables.mjs
|
||||
function stripRemovables(settings, text) {
|
||||
return text.replace(settings.removeRegExp, "");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripHTMLComments.mjs
|
||||
function stripHTMLComments(settings, text) {
|
||||
return text.replace(settings.HTMLcommentRegExp, "");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripShortcodes.mjs
|
||||
function stripShortcodes(settings, text) {
|
||||
if (settings.shortcodesRegExp) {
|
||||
return text.replace(settings.shortcodesRegExp, "\n");
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/stripSpaces.mjs
|
||||
function stripSpaces(settings, text) {
|
||||
return text.replace(settings.spaceRegExp, " ");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/transposeHTMLEntitiesToCountableChars.mjs
|
||||
function transposeHTMLEntitiesToCountableChars(settings, text) {
|
||||
return text.replace(settings.HTMLEntityRegExp, "a");
|
||||
}
|
||||
|
||||
// packages/wordcount/build-module/index.mjs
|
||||
function loadSettings(type = "words", userSettings = {}) {
|
||||
const mergedSettings = { ...defaultSettings, ...userSettings };
|
||||
const settings = {
|
||||
...mergedSettings,
|
||||
type,
|
||||
shortcodes: []
|
||||
};
|
||||
settings.shortcodes = settings.l10n?.shortcodes ?? [];
|
||||
if (settings.shortcodes && settings.shortcodes.length) {
|
||||
settings.shortcodesRegExp = new RegExp(
|
||||
"\\[\\/?(?:" + settings.shortcodes.join("|") + ")[^\\]]*?\\]",
|
||||
"g"
|
||||
);
|
||||
}
|
||||
if (settings.type !== "characters_excluding_spaces" && settings.type !== "characters_including_spaces") {
|
||||
settings.type = "words";
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
function countWords(text, regex, settings) {
|
||||
text = [
|
||||
stripTags.bind(null, settings),
|
||||
stripHTMLComments.bind(null, settings),
|
||||
stripShortcodes.bind(null, settings),
|
||||
stripSpaces.bind(null, settings),
|
||||
stripHTMLEntities.bind(null, settings),
|
||||
stripConnectors.bind(null, settings),
|
||||
stripRemovables.bind(null, settings)
|
||||
].reduce((result, fn) => fn(result), text);
|
||||
text = text + "\n";
|
||||
return text.match(regex)?.length ?? 0;
|
||||
}
|
||||
function countCharacters(text, regex, settings) {
|
||||
text = [
|
||||
stripTags.bind(null, settings),
|
||||
stripHTMLComments.bind(null, settings),
|
||||
stripShortcodes.bind(null, settings),
|
||||
transposeAstralsToCountableChar.bind(null, settings),
|
||||
stripSpaces.bind(null, settings),
|
||||
transposeHTMLEntitiesToCountableChars.bind(null, settings)
|
||||
].reduce((result, fn) => fn(result), text);
|
||||
text = text + "\n";
|
||||
return text.match(regex)?.length ?? 0;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
return __toCommonJS(index_exports);
|
||||
})();
|
||||
Reference in New Issue
Block a user