taraskevizer 6.1.19 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,6 +4,20 @@ var __export = (target, all) => {
4
4
  __defProp(target, name, { get: all[name], enumerable: true });
5
5
  };
6
6
 
7
+ // src/dict/index.ts
8
+ var dict_exports = {};
9
+ __export(dict_exports, {
10
+ arabLetters: () => arabLetters,
11
+ gobj: () => gobj,
12
+ latinLettersLowerCase: () => latinLettersLowerCase,
13
+ latinLettersLowerCaseJi: () => latinLettersLowerCaseJi,
14
+ latinLettersUpperCase: () => latinLettersUpperCase,
15
+ latinLettersUpperCaseJi: () => latinLettersUpperCaseJi,
16
+ noSoften: () => noSoften,
17
+ softeners: () => softeners,
18
+ wordlist: () => wordlist
19
+ });
20
+
7
21
  // src/dict/lib.ts
8
22
  var dictFrom = {
9
23
  raw: (dict) => {
@@ -1988,31 +2002,142 @@ var softeners = dictFrom.raw([
1988
2002
  [/([сз])ʼ(?=[яюеё])/, "$1ь"]
1989
2003
  ]);
1990
2004
 
1991
- // src/replace-g.ts
1992
- var replaceG = (text, replacer) => text.replace(
2005
+ // src/alphabet.ts
2006
+ var ALPHABET = {
2007
+ LATIN: {
2008
+ lower: latinLettersLowerCase,
2009
+ upper: latinLettersUpperCase
2010
+ },
2011
+ LATIN_JI: {
2012
+ lower: latinLettersLowerCaseJi,
2013
+ upper: latinLettersUpperCaseJi
2014
+ },
2015
+ ARABIC: {
2016
+ lower: arabLetters
2017
+ },
2018
+ CYRILLIC: {
2019
+ lower: [],
2020
+ upper: []
2021
+ }
2022
+ };
2023
+
2024
+ // src/config.ts
2025
+ var TaraskConfig = class {
2026
+ constructor(options) {
2027
+ if (!options)
2028
+ return;
2029
+ for (const [target, source] of [
2030
+ [this.general, options.general],
2031
+ [this.html, options.html],
2032
+ [this.nonHtml, options.nonHtml]
2033
+ ]) {
2034
+ if (source)
2035
+ for (const [key, value] of Object.entries(source)) {
2036
+ if (value !== void 0)
2037
+ target[key] = value;
2038
+ }
2039
+ }
2040
+ }
2041
+ general = {
2042
+ abc: ALPHABET.CYRILLIC,
2043
+ j: REPLACE_J.NEVER,
2044
+ doEscapeCapitalized: true
2045
+ };
2046
+ html = {
2047
+ g: false
2048
+ };
2049
+ nonHtml = {
2050
+ h: false,
2051
+ ansiColors: false,
2052
+ variations: VARIATION.ALL
2053
+ };
2054
+ };
2055
+ var REPLACE_J = {
2056
+ NEVER: 0,
2057
+ RANDOM: 1,
2058
+ ALWAYS: 2
2059
+ };
2060
+ var VARIATION = {
2061
+ NO: 0,
2062
+ FIRST: 1,
2063
+ ALL: 2
2064
+ };
2065
+
2066
+ // src/tarask.ts
2067
+ var tarask = (text, pipeline, cfg = new TaraskConfig()) => {
2068
+ const options = { cfg, storage: {} };
2069
+ return pipeline.reduce((text2, step) => step(text2, options), text);
2070
+ };
2071
+
2072
+ // src/steps/index.ts
2073
+ var steps_exports = {};
2074
+ __export(steps_exports, {
2075
+ applyHtmlG: () => applyHtmlG,
2076
+ applyHtmlVariations: () => applyHtmlVariations,
2077
+ applyNoFix: () => applyNoFix,
2078
+ applyNonHtmlG: () => applyNonHtmlG,
2079
+ applyNonHtmlVariations: () => applyNonHtmlVariations,
2080
+ applyVariableParts: () => applyVariableParts,
2081
+ convertAlphabet: () => convertAlphabet,
2082
+ convertAlphabetLowerCase: () => convertAlphabetLowerCase,
2083
+ highlightDiffNonHtmlStep: () => highlightDiffNonHtmlStep,
2084
+ highlightDiffStep: () => highlightDiffStep,
2085
+ joinSplittedText: () => joinSplittedText,
2086
+ prepare: () => prepare,
2087
+ replaceIbyJ: () => replaceIbyJ,
2088
+ resolveSpecialSyntax: () => resolveSpecialSyntax,
2089
+ restoreCaseStep: () => restoreCaseStep,
2090
+ restoreWhitespaces: () => restoreWhitespaces,
2091
+ storeSplittedAbcConvertedOrig: () => storeSplittedAbcConvertedOrig,
2092
+ storeSplittedText: () => storeSplittedText,
2093
+ taraskevize: () => taraskevize,
2094
+ trim: () => trim,
2095
+ whitespacesToSpaces: () => whitespacesToSpaces
2096
+ });
2097
+
2098
+ // src/lib/index.ts
2099
+ var lib_exports = {};
2100
+ __export(lib_exports, {
2101
+ afterTarask: () => afterTarask,
2102
+ ansiColorWrappers: () => ansiColorWrappers,
2103
+ dictFrom: () => dictFrom,
2104
+ highlightDiff: () => highlightDiff,
2105
+ htmlWrappers: () => htmlWrappers,
2106
+ replaceG: () => replaceG,
2107
+ replaceWithDict: () => replaceWithDict,
2108
+ restoreCase: () => restoreCase
2109
+ });
2110
+
2111
+ // src/lib/after-tarask.ts
2112
+ var iaReplacer = ($0, $1, $2) => {
2113
+ var _a;
2114
+ return ((_a = $2.match(/[аеёіоуыэюя]/g)) == null ? void 0 : _a.length) === 1 ? $1 + "я" + $2 : $0;
2115
+ };
2116
+ var afterTarask = [
2117
+ [/( б)е(зь? \S+)/g, iaReplacer],
2118
+ [/( н)е( \S+)/g, iaReplacer],
2119
+ [
2120
+ /( (?:б[ея]|пра|цера)?з) і(\S*)/g,
2121
+ ($0, $1, $2) => /([ая]ў|ну)$/.test($2) ? $1 + "ь і" + $2 : $0
2122
+ ]
2123
+ ];
2124
+
2125
+ // src/lib/replace-g.ts
2126
+ var replaceG = (replacer) => (text) => text.replace(
1993
2127
  /[Ґґ]/g,
1994
2128
  // @ts-ignore
1995
2129
  replacer
1996
2130
  );
1997
2131
 
1998
- // src/highlight-diff.ts
1999
- var wrappers = {
2000
- html: {
2001
- fix: (content) => `<tarF>${content}</tarF>`,
2002
- letterH: (content) => `<tarH>${content}</tarH>`
2003
- },
2004
- ansiColors: {
2005
- fix: (content) => `\x1B[32m${content}\x1B[0m`,
2006
- variable: (content) => `\x1B[35m${content}\x1B[0m`
2007
- }
2008
- };
2132
+ // src/lib/highlight-diff.ts
2009
2133
  var highlightDiff = (text, orig, isCyrillic, highlight) => {
2134
+ const replaceGByOpposite = replaceG(($0) => gobj[$0]);
2010
2135
  for (let i = 0; i < text.length; i++) {
2011
2136
  const word = text[i];
2012
2137
  const oWord = orig[i];
2013
2138
  if (oWord === word)
2014
2139
  continue;
2015
- const wordH = isCyrillic ? replaceG(word, ($0) => gobj[$0]) : word;
2140
+ const wordH = isCyrillic ? replaceGByOpposite(word) : word;
2016
2141
  if (oWord === wordH)
2017
2142
  continue;
2018
2143
  if (!/\(/.test(word)) {
@@ -2063,14 +2188,18 @@ var highlightDiff = (text, orig, isCyrillic, highlight) => {
2063
2188
  }
2064
2189
  };
2065
2190
 
2066
- // src/i-to-j.ts
2067
- var toJ = (shortU) => " + (shortU ? "у" : "");
2068
- var replaceIbyJ = (text, always = false) => text.replace(
2069
- /(?<=[аеёіоуыэюя] (ў?)/g,
2070
- always ? ($0, $1) => toJ($1) : ($0, $1) => Math.random() >= 0.5 ? toJ($1) : $0
2071
- );
2191
+ // src/lib/replace-with-dict.ts
2192
+ var replaceWithDict = (text, dict = []) => {
2193
+ for (const [pattern, result] of dict)
2194
+ text = text.replace(
2195
+ pattern,
2196
+ //@ts-ignore
2197
+ result
2198
+ );
2199
+ return text;
2200
+ };
2072
2201
 
2073
- // src/restore-case.ts
2202
+ // src/lib/restore-case.ts
2074
2203
  var isUpperCase = (str) => str === str.toUpperCase();
2075
2204
  var getLastLetter = (word, i) => {
2076
2205
  const result = new RegExp("\\p{L}(?=[^\\p{L}]*$)", "u").exec(word);
@@ -2106,71 +2235,73 @@ var restoreCase = (text, orig) => {
2106
2235
  return text;
2107
2236
  };
2108
2237
 
2109
- // src/after-tarask.ts
2110
- var iaReplacer = ($0, $1, $2) => {
2111
- var _a;
2112
- return ((_a = $2.match(/[аеёіоуыэюя]/g)) == null ? void 0 : _a.length) === 1 ? $1 + "я" + $2 : $0;
2238
+ // src/lib/wrappers.ts
2239
+ var htmlWrappers = {
2240
+ fix: (content) => `<tarF>${content}</tarF>`,
2241
+ letterH: (content) => `<tarH>${content}</tarH>`
2113
2242
  };
2114
- var afterTarask = [
2115
- [/( б)е(зь? \S+)/g, iaReplacer],
2116
- [/( н)е( \S+)/g, iaReplacer],
2117
- [
2118
- /( (?:б[ея]|пра|цера)?з) і(\S*)/g,
2119
- ($0, $1, $2) => /([ая]ў|ну)$/.test($2) ? $1 + "ь і" + $2 : $0
2120
- ]
2121
- ];
2122
-
2123
- // src/config-constants.ts
2124
- var ALPHABET = {
2125
- CYRILLIC: 0,
2126
- LATIN: 1,
2127
- ARABIC: 2,
2128
- LATIN_JI: 3
2129
- };
2130
- var REPLACE_J = {
2131
- NEVER: 0,
2132
- RANDOM: 1,
2133
- ALWAYS: 2
2134
- };
2135
- var VARIATION = {
2136
- NO: 0,
2137
- FIRST: 1,
2138
- ALL: 2
2243
+ var ansiColorWrappers = {
2244
+ fix: (content) => `\x1B[32m${content}\x1B[0m`,
2245
+ variable: (content) => `\x1B[35m${content}\x1B[0m`
2139
2246
  };
2140
2247
 
2141
- // src/letters.ts
2142
- var letters = {
2143
- [ALPHABET.LATIN]: latinLettersLowerCase,
2144
- [ALPHABET.ARABIC]: arabLetters,
2145
- [ALPHABET.LATIN_JI]: latinLettersLowerCaseJi
2146
- };
2147
- var lettersUpperCase = {
2148
- [ALPHABET.LATIN]: latinLettersUpperCase,
2149
- [ALPHABET.LATIN_JI]: latinLettersUpperCaseJi
2150
- };
2248
+ // src/steps/convert-alphabet.ts
2249
+ var convertAlphabet = (text, {
2250
+ cfg: {
2251
+ general: { abc }
2252
+ }
2253
+ }) => replaceWithDict(replaceWithDict(text, abc.lower), abc.upper);
2254
+ var convertAlphabetLowerCase = (text, {
2255
+ cfg: {
2256
+ general: { abc }
2257
+ }
2258
+ }) => replaceWithDict(text, abc.lower);
2151
2259
 
2152
- // src/tools.ts
2153
- var replaceWithDict = (text, dict = []) => {
2154
- for (const [pattern, result] of dict)
2155
- text = text.replace(
2156
- pattern,
2157
- //@ts-ignore
2158
- result
2159
- );
2160
- return text;
2260
+ // src/steps/highlight-diff.ts
2261
+ var highlightDiffStep = (highlight) => (_, {
2262
+ cfg: {
2263
+ general: { abc }
2264
+ },
2265
+ storage: { text, orig }
2266
+ }) => {
2267
+ highlightDiff(text, orig, abc === ALPHABET.CYRILLIC, highlight);
2268
+ return _;
2269
+ };
2270
+ var highlightDiffNonHtmlStep = (_, {
2271
+ cfg: {
2272
+ general: { abc },
2273
+ nonHtml: { ansiColors }
2274
+ },
2275
+ storage: { text, orig }
2276
+ }) => {
2277
+ if (ansiColors)
2278
+ highlightDiff(text, orig, abc === ALPHABET.CYRILLIC, ansiColorWrappers.fix);
2279
+ return _;
2161
2280
  };
2162
- var convertAlphabet = (text, abc) => replaceWithDict(replaceWithDict(text, letters[abc]), lettersUpperCase[abc]);
2163
2281
 
2164
- // src/resolve-syntax.ts
2282
+ // src/steps/resolve-syntax.ts
2165
2283
  var NOFIX_CHAR = "  ";
2166
2284
  var NOFIX_REGEX = new RegExp(NOFIX_CHAR, "g");
2167
- var applyNoFix = (arr, text) => arr.length ? text.replace(NOFIX_REGEX, () => arr.shift()) : text;
2168
- var applyVariableParts = (text, callback) => text.replace(/\([^)]*?\)/g, ($0) => callback($0.slice(1, -1).split("|")));
2169
- var resolveSpecialSyntax = (text, noFixArr, leftAngleBracket, convertAlphavet, doEscapeCaps) => {
2170
- const escapeCapsIfNeeded = (text2) => doEscapeCaps ? text2.replace(new RegExp("(?!<=\\p{Lu} )\\p{Lu}{2}[\\p{Lu} ]*(?!= \\p{Lu})", "gu"), ($0) => {
2171
- noFixArr.push(convertAlphavet($0));
2172
- return NOFIX_CHAR;
2173
- }) : text2;
2285
+ var applyNoFix = (text, { storage: { noFixArr } }) => noFixArr.length ? text.replace(NOFIX_REGEX, () => noFixArr.shift()) : text;
2286
+ var applyVariableParts = (callback) => (text) => text.replace(/\([^)]*?\)/g, ($0) => callback($0.slice(1, -1).split("|")));
2287
+ var resolveSpecialSyntax = (leftAngleBracket) => (text, {
2288
+ storage,
2289
+ cfg: {
2290
+ general: { doEscapeCapitalized, abc }
2291
+ }
2292
+ }) => {
2293
+ const noFixArr = storage.noFixArr = [];
2294
+ const convertAlphavet = (abcOnlyText, abc2) => restoreCase(
2295
+ replaceWithDict(abcOnlyText.toLowerCase(), abc2.lower).split(" "),
2296
+ abcOnlyText.split(" ")
2297
+ ).join(" ");
2298
+ const escapeCapsIfNeeded = (text2) => doEscapeCapitalized ? text2.replace(
2299
+ new RegExp("(?!<=\\p{Lu} )\\p{Lu}{2}[\\p{Lu} ]*(?!= \\p{Lu})", "gu"),
2300
+ ($0) => {
2301
+ noFixArr.push(convertAlphavet($0, abc));
2302
+ return NOFIX_CHAR;
2303
+ }
2304
+ ) : text2;
2174
2305
  const parts = text.split(/(?=[<>])/g);
2175
2306
  if (parts.length === 1)
2176
2307
  return escapeCapsIfNeeded(text);
@@ -2187,11 +2318,12 @@ var resolveSpecialSyntax = (text, noFixArr, leftAngleBracket, convertAlphavet, d
2187
2318
  currentPart += part;
2188
2319
  } else {
2189
2320
  let char = "";
2190
- const abc = currentPart[1] === "*";
2191
- if (abc) {
2321
+ const isAbc = currentPart[1] === "*";
2322
+ if (isAbc) {
2192
2323
  char = currentPart[2];
2193
2324
  currentPart = convertAlphavet(
2194
- currentPart.slice(char === "," || char === "." ? 3 : 2)
2325
+ currentPart.slice(char === "," || char === "." ? 3 : 2),
2326
+ abc
2195
2327
  );
2196
2328
  } else {
2197
2329
  char = currentPart[1];
@@ -2208,7 +2340,7 @@ var resolveSpecialSyntax = (text, noFixArr, leftAngleBracket, convertAlphavet, d
2208
2340
  break;
2209
2341
  default:
2210
2342
  toAddToResult = leftAngleBracket + NOFIX_CHAR;
2211
- noFixArr.push((abc ? "" : char) + currentPart + ">");
2343
+ noFixArr.push((isAbc ? "" : char) + currentPart + ">");
2212
2344
  }
2213
2345
  result += toAddToResult + escapeCapsIfNeeded(part.slice(1));
2214
2346
  currentPart = "";
@@ -2220,163 +2352,211 @@ var resolveSpecialSyntax = (text, noFixArr, leftAngleBracket, convertAlphavet, d
2220
2352
  return result + escapeCapsIfNeeded(currentPart);
2221
2353
  };
2222
2354
 
2223
- // src/tarask.ts
2224
- var afterJoin = (text) => text.replace(/&nbsp;/g, " ").replace(new RegExp(" (\\p{P}|\\p{S}|\\d+|&#40) ", "gu"), "$1");
2225
- var finalize = (text, newLine) => text.replace(/\n/g, newLine).trim();
2226
- var restoreParentheses = (text) => text.replace(/&#40/g, "(");
2227
- var wordlistPlusNoSoften = wordlist.concat(noSoften);
2228
- var Taraskevizer = class {
2229
- general = {
2230
- abc: ALPHABET.CYRILLIC,
2231
- j: REPLACE_J.NEVER,
2232
- doEscapeCapitalized: true
2233
- };
2234
- html = {
2235
- g: false
2236
- };
2237
- nonHtml = {
2238
- h: false,
2239
- ansiColors: false,
2240
- variations: VARIATION.ALL
2241
- };
2242
- spaces = [];
2243
- restoreSpaces(text) {
2244
- return text.replace(/ /g, () => this.spaces.shift());
2245
- }
2246
- constructor(options) {
2247
- if (!options)
2248
- return;
2249
- Object.assign(this.general, options.general);
2250
- Object.assign(this.html, options.html);
2251
- Object.assign(this.nonHtml, options.nonHtml);
2252
- if (options.taraskevize)
2253
- this.taraskevize = options.taraskevize;
2254
- }
2255
- convert(text) {
2256
- const wrapInColorOf = wrappers.ansiColors;
2257
- const isCyrillic = this.general.abc === ALPHABET.CYRILLIC;
2258
- const noFixArr = [];
2259
- const { splitted, splittedOrig } = this.process(
2260
- this.prepare(text, noFixArr, "<")
2261
- );
2262
- if (this.nonHtml.ansiColors)
2263
- highlightDiff(splitted, splittedOrig, isCyrillic, wrapInColorOf.fix);
2264
- text = afterJoin(this.restoreSpaces(splitted.join(" ")));
2265
- if (isCyrillic && (this.nonHtml.h || this.nonHtml.ansiColors))
2266
- text = replaceG(
2267
- text,
2268
- this.nonHtml.ansiColors ? this.nonHtml.h ? ($0) => wrapInColorOf.variable(gobj[$0]) : wrapInColorOf.variable("$&") : ($0) => gobj[$0]
2269
- );
2270
- if (this.nonHtml.variations !== VARIATION.ALL) {
2271
- const partIndex = this.nonHtml.variations;
2272
- text = applyVariableParts(
2273
- text,
2274
- this.nonHtml.ansiColors ? (parts) => wrapInColorOf.variable(parts[partIndex]) : (parts) => parts[partIndex]
2275
- );
2276
- }
2277
- return finalize(restoreParentheses(applyNoFix(noFixArr, text)), "\n");
2355
+ // src/steps/html-steps.ts
2356
+ var applyHtmlVariations = applyVariableParts((parts) => {
2357
+ const main = parts.shift();
2358
+ return `<tarL data-l='${parts}'>${main}</tarL>`;
2359
+ });
2360
+ var applyHtmlG = (text, {
2361
+ cfg: {
2362
+ general: { abc },
2363
+ html: { g }
2278
2364
  }
2279
- convertToHtml(text) {
2280
- const wrapInTag = wrappers.html;
2281
- const isCyrillic = this.general.abc === ALPHABET.CYRILLIC;
2282
- const noFixArr = [];
2283
- const { splitted, splittedOrig } = this.process(
2284
- this.prepare(text, noFixArr, "&lt;")
2285
- );
2286
- highlightDiff(splitted, splittedOrig, isCyrillic, wrapInTag.fix);
2287
- text = afterJoin(this.restoreSpaces(splitted.join(" ")));
2288
- if (isCyrillic)
2289
- text = replaceG(
2290
- text,
2291
- this.html.g ? wrapInTag.letterH("$&") : ($0) => wrapInTag.letterH(gobj[$0])
2292
- );
2293
- return finalize(
2294
- applyVariableParts(applyNoFix(noFixArr, text), (parts) => {
2295
- const main = parts.shift();
2296
- return `<tarL data-l='${parts}'>${main}</tarL>`;
2297
- }),
2298
- "<br>"
2299
- );
2365
+ }) => {
2366
+ const colorize = htmlWrappers.letterH;
2367
+ return abc === ALPHABET.CYRILLIC ? replaceG(g ? colorize("$&") : ($0) => colorize(gobj[$0]))(text) : text;
2368
+ };
2369
+
2370
+ // src/steps/i-to-j.ts
2371
+ var toJ = (shortU) => "й " + (shortU ? "у" : "");
2372
+ var replaceIbyJ = (text, {
2373
+ cfg: {
2374
+ general: { j, abc }
2300
2375
  }
2301
- prepare(text, noFixArr, LEFT_ANGLE_BRACKET, doEscapeCapitalized = this.general.doEscapeCapitalized) {
2302
- text = resolveSpecialSyntax(
2303
- ` ${text.trim()} `.replace(//g, ""),
2304
- noFixArr,
2305
- LEFT_ANGLE_BRACKET,
2306
- (abcOnlyText) => restoreCase(
2307
- replaceWithDict(
2308
- abcOnlyText.toLowerCase(),
2309
- letters[this.general.abc]
2310
- ).split(" "),
2311
- abcOnlyText.split(" ")
2312
- ).join(" "),
2313
- doEscapeCapitalized
2314
- ).replace(/г'(?![еёіюя])/g, "ґ").replace(/ - /g, " — ").replace(new RegExp("(\\p{P}|\\p{S}|\\d+)", "gu"), " $1 ").replace(/ ['`’] (?=\S)/g, "ʼ").replace(/\(/g, "&#40");
2315
- text = text.replace(/\s+/g, (match) => {
2316
- this.spaces.push(match);
2317
- return " ";
2318
- });
2319
- return text;
2376
+ }) => j && abc !== ALPHABET.LATIN_JI ? text.replace(
2377
+ /(?<=[аеёіоуыэюя] (ў?)/g,
2378
+ j === REPLACE_J.ALWAYS ? ($0, $1) => toJ($1) : ($0, $1) => Math.random() >= 0.5 ? toJ($1) : $0
2379
+ ) : text;
2380
+
2381
+ // src/steps/join-splitted.ts
2382
+ var joinSplittedText = (_, { storage: { text } }) => text.join(" ");
2383
+
2384
+ // src/steps/non-html-steps.ts
2385
+ var applyNonHtmlVariations = (text, options) => {
2386
+ const partIndex = options.cfg.nonHtml.variations;
2387
+ const colorize = ansiColorWrappers.variable;
2388
+ return partIndex === VARIATION.ALL ? text : applyVariableParts(
2389
+ options.cfg.nonHtml.ansiColors ? (parts) => colorize(parts[partIndex]) : (parts) => parts[partIndex]
2390
+ )(text, options);
2391
+ };
2392
+ var applyNonHtmlG = (text, {
2393
+ cfg: {
2394
+ general: { abc },
2395
+ nonHtml: { h, ansiColors }
2320
2396
  }
2321
- convertAlphabetOnly(text) {
2322
- const noFixArr = [];
2323
- return finalize(
2324
- afterJoin(
2325
- restoreParentheses(
2326
- applyNoFix(
2327
- noFixArr,
2328
- this.restoreSpaces(
2329
- convertAlphabet(
2330
- this.prepare(text, noFixArr, "<", false),
2331
- this.general.abc
2332
- )
2333
- )
2334
- )
2335
- )
2336
- ),
2337
- "\n"
2338
- );
2397
+ }) => {
2398
+ const colorize = ansiColorWrappers.variable;
2399
+ return abc === ALPHABET.CYRILLIC && (h || ansiColors) ? replaceG(
2400
+ ansiColors ? h ? ($0) => colorize(gobj[$0]) : colorize("$&") : ($0) => gobj[$0]
2401
+ )(text) : text;
2402
+ };
2403
+
2404
+ // src/steps/prepare.ts
2405
+ var prepare = (text) => text.replace(/г'(?![еёіюя])/g, "ґ").replace(/ - /g, " — ").replace(new RegExp("(\\p{P}|\\p{S}|\\d+)", "gu"), " $1 ").replace(/ ['`’] (?=\S)/g, "ʼ").replace(/\(/g, "&#40");
2406
+
2407
+ // src/steps/restore-case.ts
2408
+ var restoreCaseStep = (_, {
2409
+ cfg: {
2410
+ general: { abc }
2411
+ },
2412
+ storage
2413
+ }) => {
2414
+ if (abc !== ALPHABET.ARABIC) {
2415
+ storage.text = restoreCase(storage.text, storage.orig);
2339
2416
  }
2340
- process(text) {
2341
- const { abc, j } = this.general;
2342
- const splittedOrig = convertAlphabet(text, abc).split(" ");
2343
- text = this.taraskevize(text.toLowerCase());
2344
- if (j && abc !== ALPHABET.LATIN_JI)
2345
- text = replaceIbyJ(text, j === REPLACE_J.ALWAYS);
2346
- text = replaceWithDict(text, letters[abc]);
2347
- let splitted = text.split(" ");
2348
- if (abc !== ALPHABET.ARABIC)
2349
- splitted = restoreCase(splitted, splittedOrig);
2350
- return { splittedOrig, splitted };
2417
+ return _;
2418
+ };
2419
+
2420
+ // src/steps/store-splitted-abc-converted-orig.ts
2421
+ var storeSplittedAbcConvertedOrig = (text, options) => {
2422
+ options.storage.orig = convertAlphabet(text, options).split(" ");
2423
+ return text;
2424
+ };
2425
+
2426
+ // src/steps/store-splitted-text.ts
2427
+ var storeSplittedText = (text, { storage }) => {
2428
+ storage.text = text.split(" ");
2429
+ return text;
2430
+ };
2431
+
2432
+ // src/steps/taraskevize.ts
2433
+ var wordlistPlusNoSoften = wordlist.concat(noSoften);
2434
+ var taraskevize = (text) => {
2435
+ text = replaceWithDict(text, wordlistPlusNoSoften);
2436
+ softening:
2437
+ do {
2438
+ text = replaceWithDict(text, softeners);
2439
+ for (const [pattern, result] of softeners)
2440
+ if (result !== "$1дзьдз" && pattern.test(text))
2441
+ continue softening;
2442
+ break;
2443
+ } while (true);
2444
+ return replaceWithDict(text.replace(//g, ""), afterTarask);
2445
+ };
2446
+
2447
+ // src/steps/whitespaces.ts
2448
+ var whitespacesToSpaces = (text, { storage }) => {
2449
+ storage.spaces = [];
2450
+ storage.positions = [];
2451
+ let result = "";
2452
+ let i = 0;
2453
+ while (i < text.length) {
2454
+ if (/\s/.test(text[i])) {
2455
+ let start = i;
2456
+ while (i < text.length && /\s/.test(text[i]))
2457
+ ++i;
2458
+ storage.spaces.push(text.slice(start, i));
2459
+ storage.positions.push(result.length);
2460
+ result += " ";
2461
+ } else {
2462
+ result += text[i];
2463
+ ++i;
2464
+ }
2351
2465
  }
2352
- taraskevize(text) {
2353
- text = replaceWithDict(text, wordlistPlusNoSoften);
2354
- softening:
2355
- do {
2356
- text = replaceWithDict(text, softeners);
2357
- for (const [pattern, result] of softeners)
2358
- if (result !== "$1дзьдз" && pattern.test(text))
2359
- continue softening;
2360
- break;
2361
- } while (true);
2362
- return replaceWithDict(text.replace(//g, ""), afterTarask);
2466
+ return result;
2467
+ };
2468
+ var restoreWhitespaces = (text, { storage }) => {
2469
+ let result = "";
2470
+ let lastIndex = 0;
2471
+ let spaceIndex = 0;
2472
+ for (let i = 0; i < text.length; i++) {
2473
+ if (text[i] === " " && spaceIndex < storage.spaces.length) {
2474
+ result += text.slice(lastIndex, i) + storage.spaces[spaceIndex];
2475
+ lastIndex = i + 1;
2476
+ ++spaceIndex;
2477
+ }
2363
2478
  }
2479
+ result += text.slice(lastIndex);
2480
+ return result;
2364
2481
  };
2365
2482
 
2366
- // src/for-plugins.ts
2367
- var for_plugins_exports = {};
2368
- __export(for_plugins_exports, {
2369
- afterTarask: () => afterTarask,
2370
- noSoften: () => noSoften,
2371
- replaceWithDict: () => replaceWithDict,
2372
- softeners: () => softeners,
2373
- wordlist: () => wordlist
2374
- });
2483
+ // src/steps/trim.ts
2484
+ var trim = (text) => ` ${text.trim()} `;
2485
+
2486
+ // src/pipelines.ts
2487
+ var restoreParentheses = (text) => text.replace(/&#40/g, "(");
2488
+ var afterJoin = (text) => text.replace(/&nbsp;/g, " ").replace(new RegExp(" (\\p{P}|\\p{S}|\\d+|&#40) ", "gu"), "$1");
2489
+ var finalize = (newLine) => (text) => text.replace(/\n/g, newLine).trim();
2490
+ var resolveSpecialSyntaxWithLAB = resolveSpecialSyntax("<");
2491
+ var toLowerCase = (text) => text.toLowerCase();
2492
+ var finalizeWithNewLine = finalize("\n");
2493
+ var abcOnlyPipeline = [
2494
+ (_, { storage, cfg: { general } }) => {
2495
+ storage.doEscapeCapitalized = general.doEscapeCapitalized;
2496
+ general.doEscapeCapitalized = false;
2497
+ return _;
2498
+ },
2499
+ trim,
2500
+ resolveSpecialSyntaxWithLAB,
2501
+ prepare,
2502
+ whitespacesToSpaces,
2503
+ convertAlphabet,
2504
+ restoreWhitespaces,
2505
+ applyNoFix,
2506
+ restoreParentheses,
2507
+ afterJoin,
2508
+ finalizeWithNewLine,
2509
+ (_, { storage, cfg: { general } }) => {
2510
+ general.doEscapeCapitalized = storage.doEscapeCapitalized;
2511
+ return _;
2512
+ }
2513
+ ];
2514
+ var createPipeline = (resolveSpecialSyntax2, applyG, applyVariations, finalize2, highlightDiffStep2) => [
2515
+ trim,
2516
+ resolveSpecialSyntax2,
2517
+ prepare,
2518
+ whitespacesToSpaces,
2519
+ storeSplittedAbcConvertedOrig,
2520
+ toLowerCase,
2521
+ taraskevize,
2522
+ replaceIbyJ,
2523
+ convertAlphabetLowerCase,
2524
+ storeSplittedText,
2525
+ restoreCaseStep,
2526
+ highlightDiffStep2,
2527
+ joinSplittedText,
2528
+ restoreWhitespaces,
2529
+ restoreParentheses,
2530
+ afterJoin,
2531
+ applyG,
2532
+ applyVariations,
2533
+ applyNoFix,
2534
+ finalize2
2535
+ ];
2536
+ var plainTextPipeline = createPipeline(
2537
+ resolveSpecialSyntaxWithLAB,
2538
+ applyNonHtmlG,
2539
+ applyNonHtmlVariations,
2540
+ finalizeWithNewLine,
2541
+ highlightDiffNonHtmlStep
2542
+ );
2543
+ var htmlPipeline = createPipeline(
2544
+ resolveSpecialSyntax("&lt;"),
2545
+ applyHtmlG,
2546
+ applyHtmlVariations,
2547
+ finalize("<br>"),
2548
+ highlightDiffStep(htmlWrappers.fix)
2549
+ );
2375
2550
  export {
2376
2551
  ALPHABET,
2377
2552
  REPLACE_J,
2378
- Taraskevizer,
2553
+ TaraskConfig,
2379
2554
  VARIATION,
2380
- for_plugins_exports as __TARASK__,
2381
- gobj
2555
+ abcOnlyPipeline,
2556
+ dict_exports as dicts,
2557
+ htmlPipeline,
2558
+ lib_exports as lib,
2559
+ steps_exports as pipelineSteps,
2560
+ plainTextPipeline,
2561
+ tarask
2382
2562
  };