PluginProbe
Gutenberg / 22.9.0
Gutenberg v22.9.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / wordcount / index.js

index.js in Gutenberg 22.9.0, at build/scripts/wordcount/index.js

212 lines 7.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2 var wp;
3 (wp ||= {}).wordcount = (() => {
4 var __defProp = Object.defineProperty;
5 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6 var __getOwnPropNames = Object.getOwnPropertyNames;
7 var __hasOwnProp = Object.prototype.hasOwnProperty;
8 var __export = (target, all) => {
9 for (var name in all)
10 __defProp(target, name, { get: all[name], enumerable: true });
11 };
12 var __copyProps = (to, from, except, desc) => {
13 if (from && typeof from === "object" || typeof from === "function") {
14 for (let key of __getOwnPropNames(from))
15 if (!__hasOwnProp.call(to, key) && key !== except)
16 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17 }
18 return to;
19 };
20 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
22 // packages/wordcount/build-module/index.mjs
23 var index_exports = {};
24 __export(index_exports, {
25 count: () => count
26 });
27
28 // packages/wordcount/build-module/defaultSettings.mjs
29 var defaultSettings = {
30 HTMLRegExp: /<\/?[a-z][^>]*?>/gi,
31 HTMLcommentRegExp: /<!--[\s\S]*?-->/g,
32 spaceRegExp: /&nbsp;|&#160;/gi,
33 HTMLEntityRegExp: /&\S+?;/g,
34 // \u2014 = em-dash.
35 connectorRegExp: /--|\u2014/g,
36 // Characters to be removed from input text.
37 removeRegExp: new RegExp(
38 [
39 "[",
40 // Basic Latin (extract)
41 "!-/:-@[-`{-~",
42 // Latin-1 Supplement (extract)
43 "\x80-\xBF\xD7\xF7",
44 /*
45 * The following range consists of:
46 * General Punctuation
47 * Superscripts and Subscripts
48 * Currency Symbols
49 * Combining Diacritical Marks for Symbols
50 * Letterlike Symbols
51 * Number Forms
52 * Arrows
53 * Mathematical Operators
54 * Miscellaneous Technical
55 * Control Pictures
56 * Optical Character Recognition
57 * Enclosed Alphanumerics
58 * Box Drawing
59 * Block Elements
60 * Geometric Shapes
61 * Miscellaneous Symbols
62 * Dingbats
63 * Miscellaneous Mathematical Symbols-A
64 * Supplemental Arrows-A
65 * Braille Patterns
66 * Supplemental Arrows-B
67 * Miscellaneous Mathematical Symbols-B
68 * Supplemental Mathematical Operators
69 * Miscellaneous Symbols and Arrows
70 */
71 "\u2000-\u2BFF",
72 // Supplemental Punctuation.
73 "\u2E00-\u2E7F",
74 "]"
75 ].join(""),
76 "g"
77 ),
78 // Remove UTF-16 surrogate points, see https://en.wikipedia.org/wiki/UTF-16#U.2BD800_to_U.2BDFFF
79 astralRegExp: /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
80 wordsRegExp: /\S\s+/g,
81 characters_excluding_spacesRegExp: /\S/g,
82 /*
83 * Match anything that is not a formatting character, excluding:
84 * \f = form feed
85 * \n = new line
86 * \r = carriage return
87 * \t = tab
88 * \v = vertical tab
89 * \u00AD = soft hyphen
90 * \u2028 = line separator
91 * \u2029 = paragraph separator
92 */
93 characters_including_spacesRegExp: /[^\f\n\r\t\v\u00AD\u2028\u2029]/g,
94 l10n: {
95 type: "words"
96 }
97 };
98
99 // packages/wordcount/build-module/stripTags.mjs
100 function stripTags(settings, text) {
101 return text.replace(settings.HTMLRegExp, "\n");
102 }
103
104 // packages/wordcount/build-module/transposeAstralsToCountableChar.mjs
105 function transposeAstralsToCountableChar(settings, text) {
106 return text.replace(settings.astralRegExp, "a");
107 }
108
109 // packages/wordcount/build-module/stripHTMLEntities.mjs
110 function stripHTMLEntities(settings, text) {
111 return text.replace(settings.HTMLEntityRegExp, "");
112 }
113
114 // packages/wordcount/build-module/stripConnectors.mjs
115 function stripConnectors(settings, text) {
116 return text.replace(settings.connectorRegExp, " ");
117 }
118
119 // packages/wordcount/build-module/stripRemovables.mjs
120 function stripRemovables(settings, text) {
121 return text.replace(settings.removeRegExp, "");
122 }
123
124 // packages/wordcount/build-module/stripHTMLComments.mjs
125 function stripHTMLComments(settings, text) {
126 return text.replace(settings.HTMLcommentRegExp, "");
127 }
128
129 // packages/wordcount/build-module/stripShortcodes.mjs
130 function stripShortcodes(settings, text) {
131 if (settings.shortcodesRegExp) {
132 return text.replace(settings.shortcodesRegExp, "\n");
133 }
134 return text;
135 }
136
137 // packages/wordcount/build-module/stripSpaces.mjs
138 function stripSpaces(settings, text) {
139 return text.replace(settings.spaceRegExp, " ");
140 }
141
142 // packages/wordcount/build-module/transposeHTMLEntitiesToCountableChars.mjs
143 function transposeHTMLEntitiesToCountableChars(settings, text) {
144 return text.replace(settings.HTMLEntityRegExp, "a");
145 }
146
147 // packages/wordcount/build-module/index.mjs
148 function loadSettings(type = "words", userSettings = {}) {
149 const mergedSettings = { ...defaultSettings, ...userSettings };
150 const settings = {
151 ...mergedSettings,
152 type,
153 shortcodes: []
154 };
155 settings.shortcodes = settings.l10n?.shortcodes ?? [];
156 if (settings.shortcodes && settings.shortcodes.length) {
157 settings.shortcodesRegExp = new RegExp(
158 "\\[\\/?(?:" + settings.shortcodes.join("|") + ")[^\\]]*?\\]",
159 "g"
160 );
161 }
162 if (settings.type !== "characters_excluding_spaces" && settings.type !== "characters_including_spaces") {
163 settings.type = "words";
164 }
165 return settings;
166 }
167 function countWords(text, regex, settings) {
168 text = [
169 stripTags.bind(null, settings),
170 stripHTMLComments.bind(null, settings),
171 stripShortcodes.bind(null, settings),
172 stripSpaces.bind(null, settings),
173 stripHTMLEntities.bind(null, settings),
174 stripConnectors.bind(null, settings),
175 stripRemovables.bind(null, settings)
176 ].reduce((result, fn) => fn(result), text);
177 text = text + "\n";
178 return text.match(regex)?.length ?? 0;
179 }
180 function countCharacters(text, regex, settings) {
181 text = [
182 stripTags.bind(null, settings),
183 stripHTMLComments.bind(null, settings),
184 stripShortcodes.bind(null, settings),
185 transposeAstralsToCountableChar.bind(null, settings),
186 stripSpaces.bind(null, settings),
187 transposeHTMLEntitiesToCountableChars.bind(null, settings)
188 ].reduce((result, fn) => fn(result), text);
189 text = text + "\n";
190 return text.match(regex)?.length ?? 0;
191 }
192 function count(text, type, userSettings) {
193 const settings = loadSettings(type, userSettings);
194 let matchRegExp;
195 switch (settings.type) {
196 case "words":
197 matchRegExp = settings.wordsRegExp;
198 return countWords(text, matchRegExp, settings);
199 case "characters_including_spaces":
200 matchRegExp = settings.characters_including_spacesRegExp;
201 return countCharacters(text, matchRegExp, settings);
202 case "characters_excluding_spaces":
203 matchRegExp = settings.characters_excluding_spacesRegExp;
204 return countCharacters(text, matchRegExp, settings);
205 default:
206 return 0;
207 }
208 }
209 return __toCommonJS(index_exports);
210 })();
211 //# sourceMappingURL=index.js.map
212