@syls/string
Version:
Модуль строк.
3,217 lines (2,186 loc) • 92.6 kB
JavaScript
//#region YI
import { funcBypass } from '@syls/func';
import { dateGetMesuares } from '@syls/date';
import { condIsNumberLimit, condIsString } from '@syls/cond';
import { arrayGetDevideByCount, arrayJoin } from '@syls/array';
/** @type {import('./config.mjs')['default']?} */
let config = null;
await import('./config.mjs')
.then(c => config = c.default)
.catch(e => e);
/** @type {import('./error.mjs')['default']?} */
let error = null;
await import('./error.mjs')
.then(i => error = i.default)
.catch(e => e);
//#endregion
//#region YT
/** ### stringT
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
* Основной параметр модуля `string`.
*
* @typedef stringT
* @prop {string} string
*
*/
/** ### stringTRow
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef stringTRow
* @prop {number} y
*
*/
/** ### stringTLocal
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef stringTLocal
* @prop {string} local
*
*/
/** ### stringTIndex
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef {import('../ject/many/module.mjs').manyTIndex} stringTIndex
*
*/
/** ### stringTLimit
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef {import('../ject/many/module.mjs').manyTLimit} stringTLimit
*
*/
/** ### stringTLength
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef {import('../ject/many/module.mjs').manyTLength} stringTLength
*
*/
/** ### stringTColumn
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef stringTColumn
* @prop {number} x
*
*/
/** ### stringTInsert
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef stringTInsert
* @prop {string} find
* @prop {string} value
*
*/
/** ### stringTPosition
* - Тип `T`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef {stringTRow&stringTColumn} stringTPosition
*
*/
/** ### stringTTInserts
* - Тип `TT`
* - Версия `0.0.0`
* - Модуль `string`
*
*
*
* @typedef {(string|[string,string])} stringTTInserts
*
*/
//#endregion
//#region YV
//#endregion
//#region setRow 0.0.0
/** ### stringTFSetRow
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `setRow`.
*
* @typedef {stringTFUSetRow&stringT} stringTFSetRow
*
*/
/** ### stringTFUSetRow
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `setRow`.
*
* @typedef stringTFUSetRow
* @prop {string} row
* @prop {number} index
*/
/** @arg {stringTFSetRow} t */
function setRowDeceit(t) {
try {
return setRowVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFSetRow} t */
function setRowVerify(t) {
const {
} = t;
return setRowHandle(t);
};
/** @arg {stringTFSetRow} t */
function setRowHandle(t) {
const {
} = t;
return setRowComply(t);
};
/** @arg {stringTFSetRow} t */
function setRowComply(t) {
const {
row,
index,
string,
} = t;
const result = string.split('\n');
if (result[index] || result[index] === '') {
result[index] = row;
};
return result.join('\n');
};
/**
* ### stringSetRow
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция замены линии в указанной строке.
*
* ***
* @arg {string} row `Линия`
* @arg {string} string `Строка`
* @arg {number} index `Индекс`
*/
export function stringSetRow(string, row, index = 0) {
return setRowDeceit({ string, index, row, });
};
//#endregion
//#region get 0.0.0
/** ### stringTFGet
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `get`.
*
* @typedef {stringTFUGet&stringT&stringTPosition} stringTFGet
*
*/
/** ### stringTFUGet
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `get`.
*
* @typedef stringTFUGet
* @prop {any} _
*/
/** @arg {stringTFGet} t */
function getDeceit(t) {
try {
return getVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFGet} t */
function getVerify(t) {
const {
} = t;
return getHandle(t);
};
/** @arg {stringTFGet} t */
function getHandle(t) {
const {
} = t;
if (!t.x) {
[t.x, t.y] = [t.y, null];
};
return getComply(t);
};
/** @arg {stringTFGet} t */
function getComply(t) {
const {
y,
x,
string,
} = t;
const rows = string.split('\n');
if (condIsNumberLimit(y)) {
return rows[y][x];
} else {
return rows[0][x];
};
};
/**
* ### stringGet
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Метод получения символа указанной строки в указанной позиции.
*
* ***
* @arg {string} string `Строка`
* @arg {number} y `Линия`
*
* Если указывается без `столбца`, то будет предена как столбец.
* @arg {number} x `Столбец`
*/
export function stringGet(string, y, x) {
return getDeceit({ string, y, x });
};
//#endregion
//#region getRow 0.0.0
/** ### stringTFGetRow
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `getRow`.
*
* @typedef {stringTFUGetRow&stringT&stringTRow} stringTFGetRow
*
*/
/** ### stringTFUGetRow
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `getRow`.
*
* @typedef stringTFUGetRow
* @prop {any} _
*/
/** @arg {stringTFGetRow} t */
function getRowDeceit(t) {
try {
return getRowVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFGetRow} t */
function getRowVerify(t) {
const {
} = t;
return getRowHandle(t);
};
/** @arg {stringTFGetRow} t */
function getRowHandle(t) {
const {
} = t;
return getRowComply(t);
};
/** @arg {stringTFGetRow} t */
function getRowComply(t) {
const {
y,
string,
} = t;
const result = string.split('\n')[y];
if (result || result === '') {
return result;
} else {
return undefined;
};
};
/**
* ### stringgetRow
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция получения указанной линии из указанной строки.
*
* ***
* @arg {number} y `Линия`
* @arg {string} string `Строка`
*/
export function stringGetRow(string, y) {
return getRowDeceit({ string, y });
};
//#endregion
//#region getRows 0.0.0
/** ### stringTFGetRows
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `getRows`.
*
* @typedef {stringTFUGetRows&stringT} stringTFGetRows
*
*/
/** ### stringTFUGetRows
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `getRows`.
*
* @typedef stringTFUGetRows
* @prop {any} _
*/
/** @arg {stringTFGetRows} t */
function getRowsDeceit(t) {
try {
return getRowsVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFGetRows} t */
function getRowsVerify(t) {
const {
} = t;
return getRowsHandle(t);
};
/** @arg {stringTFGetRows} t */
function getRowsHandle(t) {
const {
} = t;
return getRowsComply(t);
};
/** @arg {stringTFGetRows} t */
function getRowsComply(t) {
const {
string,
} = t;
return string.split('\n');
};
/**
* ### stringGetRows
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция получения всех линий строки в виде массива.
*
* ***
* @arg {string} string `Строка`
*/
export function stringGetRows(string) {
return getRowsDeceit({ string, });
};
//#endregion
//#region getMatrix 0.0.0
/** ### stringTFGetMatrix
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `getMatrix`.
*
* @typedef {stringTFUGetMatrix&stringT} stringTFGetMatrix
*
*/
/** ### stringTFUGetMatrix
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `getMatrix`.
*
* @typedef stringTFUGetMatrix
* @prop {any} _
*/
/** @arg {stringTFGetMatrix} t */
function getMatrixDeceit(t) {
try {
return getMatrixVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFGetMatrix} t */
function getMatrixVerify(t) {
const {
} = t;
return getMatrixHandle(t);
};
/** @arg {stringTFGetMatrix} t */
function getMatrixHandle(t) {
const {
} = t;
return getMatrixComply(t);
};
/** @arg {stringTFGetMatrix} t */
function getMatrixComply(t) {
const {
string,
} = t;
return string.split('\n').map(y => y.split(''));
};
/**
* ### stringGetMatrix
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция получения матрицы символов.
*
* ***
* @arg {string} string `Строка`
*/
export function stringGetMatrix(string) {
return getMatrixDeceit({ string, });
};
//#endregion
//#region pad 0.1.1
/** ### stringTFPad
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `pad`.
*
* @typedef {stringTFUPad&stringT&stringTIndex&stringTLimit} stringTFPad
*
*/
/** ### stringTFUPad
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `pad`.
*
* @typedef stringTFUPad
* @prop {string} pad
* @prop {boolean} modeCut
*/
/** @arg {stringTFPad} t */
function padDeceit(t) {
try {
return padVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPad} t */
function padVerify(t) {
const {
} = t;
return padHandle(t);
};
/** @arg {stringTFPad} t */
function padHandle(t) {
const {
} = t;
return padComply(t);
};
/** @arg {stringTFPad} t */
function padComply(t) {
const {
pad,
limit,
index,
string,
modeCut,
} = t;
if (string.length >= limit || !limit || !pad) {
return string;
} else {
const count = Math.floor((limit - string.length) / pad.length);
const overflow = t.limit - (count * pad.length + string.length);
return stringAppend(string, index, pad.repeat(count) + pad.slice(0, overflow > 0 ? overflow : 0));
};
};
/**
* ### stringPad
* - Версия `0.1.1`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция доведения указанной `строки` до указанного `лимита` символов `строкой доведения`.
*
* В отличии от обычной функции `pad` позволяет доводить строку до указанного лимита с указанной позиции.
*
* ***
* @arg {string} pad `Строка доведения`
* @arg {number} limit `Лимит`
* @arg {number} index `Позиция`
* @arg {string} string `Строка`
* @arg {boolean} modeCut `Режим отсечения`
*
* Режим отсечения позволяет обрезать ту часть дополнения, что превзошла указанный лимит.
*
* - Дефолт `true`
*/
export function stringPad(string, pad, limit, index = string?.length ?? 0, modeCut = true) {
return padDeceit({ string, limit, index, pad, modeCut });
};
//#endregion
//#region padRow 0.0.0
/** ### stringTFPadRow
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `padColumn`.
*
* @typedef {stringTFUPadRow&stringT&stringTFPad} stringTFPadRow
*
*/
/** ### stringTFUPadRow
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `padColumn`.
*
* @typedef stringTFUPadRow
* @prop {} _
*/
/** @arg {stringTFPadRow} t */
function padRowDeceit(t) {
try {
return padRowVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPadRow} t */
function padRowVerify(t) {
const {
limit,
string,
} = t;
if (!limit || limit <= stringGetRows(string).length) {
return t.string;
};
return padRowHandle(t);
};
/** @arg {stringTFPadRow} t */
function padRowHandle(t) {
const {
} = t;
return padRowComply(t);
};
/** @arg {stringTFPadRow} t */
function padRowComply(t) {
const {
pad,
limit,
string,
} = t;
return string + pad.repeat(limit - string.split('\n').length, pad);
};
/**
* ### stringPadColumn
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция приведения указанной строки к указанному количеству строк.
*
* ***
* @arg {string} pad `Дополнитель`
*
* - Дефолт `\n`
* @arg {string} string `Строка`
* @arg {number} limit `Лимит`
*/
export function stringPadRow(string, limit, pad = config.rowEnd) {
return padRowDeceit({ string, limit, pad, });
};
//#endregion
//#region padColumn 0.0.0
/** ### stringTFPadColumn
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `padColumn`.
*
* @typedef {stringTFUPadColumn&stringT&stringTFPad} stringTFPadColumn
*
*/
/** ### stringTFUPadColumn
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `padColumn`.
*
* @typedef stringTFUPadColumn
* @prop {any} _
*/
/** @arg {stringTFPadColumn} t */
function padColumnDeceit(t) {
try {
return padColumnVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPadColumn} t */
function padColumnVerify(t) {
const {
} = t;
return padColumnHandle(t);
};
/** @arg {stringTFPadColumn} t */
function padColumnHandle(t) {
const {
} = t;
return padColumnComply(t);
};
/** @arg {stringTFPadColumn} t */
function padColumnComply(t) {
const {
pad,
limit,
string,
} = t;
return string.split('\n').map(y => {
const r = stringPad(y, pad, limit);
return r;
}).join('\n');
};
/**
* ### stringPadColumn
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция приведения каждой линии указанной строки к указанному кол-ву столбцов.
*
* ***
* @arg {string} pad `Дополнитель`
*
* - Дефолт ` `
* @arg {string} string `Строка`
* @arg {number} limit `Лимит`
*/
export function stringPadColumn(string, limit, pad = ' ') {
return padColumnDeceit({ string, limit, pad, });
};
//#endregion
//#region padToPosition 0.0.0
/** ### stringTFPadToPosition
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `padToPosition`.
*
* @typedef {stringTFUPadToPosition&stringT&stringTPosition} stringTFPadToPosition
*
*/
/** ### stringTFUPadToPosition
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `padToPosition`.
*
* @typedef stringTFUPadToPosition
* @prop {string} space
* @prop {string} rowEnd
*/
/** @arg {stringTFPadToPosition} t */
function padToPositionDeceit(t) {
try {
return padToPositionVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPadToPosition} t */
function padToPositionVerify(t) {
const {
} = t;
return padToPositionHandle(t);
};
/** @arg {stringTFPadToPosition} t */
function padToPositionHandle(t) {
const {
} = t;
return padToPositionComply(t);
};
/** @arg {stringTFPadToPosition} t */
function padToPositionComply(t) {
let {
y,
} = t;
const {
space,
string,
x,
rowEnd,
} = t;
let result = string;
result = funcBypass(result,
[stringPadRow, y + 1, rowEnd],
[stringSplit, rowEnd],
);
result[y] = stringPad(result[y], space, x);
return result.join(rowEnd);
};
/**
* ### stringPadToPosition
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция приведения указанной строки до указанной позиции.
*
* ***
* @arg {string} string `Строка`
* @arg {number} y `Линия`
* @arg {number} x `Столбец`
* @arg {string?} space `Заполнитель`
* @arg {string?} rowEnd `Конец линии`
*/
export function stringPadToPosition(string, y, x, space = config.space, rowEnd = config.rowEnd) {
return padToPositionDeceit({ string, y, x, space, rowEnd, });
};
//#endregion
//#region skip 0.0.0
/** ### stringTFSkip
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `skip`.
*
* @typedef {stringTFUSkip&stringT} stringTFSkip
*
*/
/** ### stringTFUSkip
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `skip`.
*
* @typedef stringTFUSkip
* @prop {string} layer
* @prop {string} symbol
*/
/** @arg {stringTFSkip} t */
function skipDeceit(t) {
try {
return skipVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFSkip} t */
function skipVerify(t) {
const {
} = t;
return skipHandle(t);
};
/** @arg {stringTFSkip} t */
function skipHandle(t) {
const {
} = t;
return skipComply(t);
};
/** @arg {stringTFSkip} t */
function skipComply(t) {
const {
layer,
string,
symbol,
} = t;
let result = stringPaste(string, layer, 0, layer.length);
Array.from(layer.matchAll(symbol)).forEach(match => result = stringPaste(result, string[match.index] ?? symbol, match.index, true));
return result;
};
/**
* ### stringSkip
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция пропускания слоя через строку.
*
* Возвращает в качестве результата исходную строку, в которой:
* - Часть заменена на слой.
* - Слой оставляет символы исходной строки, которые он не покрыл или те, которые были указаны в нём как пропускные.
*
* Пропускной символ - указатель слоя, который говорит функции, что она должна оставить на данном месте символ исходной строки.
*
* ***
* @arg {string} string `Строка`
* @arg {string} layer `Слой`
*
* Слой, эта строка, которая встанет на ту часть исходной строки, которую сможет покрыть от начала и до конца своей длины.
* @arg {string} symbol `Символ`
*/
export function stringSkip(string, layer, symbol) {
return skipDeceit({ string, layer, symbol, });
};
//#endregion
//#region trim 0.2.0
/** ### stringTFTrim
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `trim`.
*
* @typedef {stringTFUTrim&stringT} stringTFTrim
*
*/
/** ### stringTFUTrim
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `trim`.
*
* @typedef stringTFUTrim
* @prop {boolean} end
* @prop {boolean} start
*/
/** @arg {stringTFTrim} t */
function trimDeceit(t) {
try {
return trimVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFTrim} t */
function trimVerify(t) {
const {
} = t;
return trimHandle(t);
};
/** @arg {stringTFTrim} t */
function trimHandle(t) {
const {
} = t;
return trimComply(t);
};
/** @arg {stringTFTrim} t */
function trimComply(t) {
const {
end,
start,
string,
} = t;
let result = string;
if (end && start) {
result = result.trim();
} else if (end) {
result = result.trimEnd();
} else if (start) {
result = result.trimStart();
};
return result;
};
/**
* ### stringTrim
* - Версия `0.2.0`
* - Цепочка `DVHCa`
* - Пространство `string`
*
* Функция обрезки каждой линии строки и самой строки от свободных линий.
* ***
* @arg {string} string `Строка`
* @arg {boolean} end `Обрезка конца строки`
* - По умолчанию `true`
* @arg {boolean} start `Обрезка начала строки`
* - По умолчанию `false`
*/
export function stringTrim(string, end = true, start = false) {
return trimDeceit({ string, start, end, });
};
//#endregion
//#region trimRow 0.0.0
/** ### stringTFTrimRow
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `trimRow`.
*
* @typedef {stringTFUTrimRow&stringT&stringTFTrim} stringTFTrimRow
*
*/
/** ### stringTFUTrimRow
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `trimRow`.
*
* @typedef stringTFUTrimRow
* @prop {any} _
*/
/** @arg {stringTFTrimRow} t */
function trimRowDeceit(t) {
try {
return trimRowVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFTrimRow} t */
function trimRowVerify(t) {
const {
} = t;
return trimRowHandle(t);
};
/** @arg {stringTFTrimRow} t */
function trimRowHandle(t) {
const {
} = t;
return trimRowComply(t);
};
/** @arg {stringTFTrimRow} t */
function trimRowComply(t) {
const {
end,
start,
string,
} = t;
return string.split('\n').map(y => {
if (end) {
y = y.trimEnd();
};
if (start) {
y = y.trimStart();
};
return y;
}).join('\n');
};
/**
* ### stringTrimRow
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция построчного усечения.
*
* ***
* @arg {string} string `Строка`
* @arg {boolean} end `Конец`
* @arg {boolean} start `Начало`
*/
export function stringTrimRow(string, start, end = true) {
return trimRowDeceit({ string, start, end, });
};
//#endregion
//#region markInsert
/** ### stringTFMarkInsert
* - Тип `TF`
* ***
*
* Результирующие параметры функции `markInsert`.
*
* @typedef {stringTFUMarkInsert&stringT} stringTFMarkInsert
*
*/
/** ### stringTFUMarkInsert
* - Тип `TFU`
*
* Уникальные параметры функции `markInsert`.
*
* @typedef stringTFUMarkInsert
* @prop {[string][]} marks
*/
/** @arg {stringTFMarkInsert} t */
function markInsertDeceit(t) {
try {
return markInsertVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFMarkInsert} t */
function markInsertVerify(t) {
const {
} = t;
return markInsertHandle(t);
};
/** @arg {stringTFMarkInsert} t */
function markInsertHandle(t) {
const {
} = t;
return markInsertComply(t);
};
/** @arg {stringTFMarkInsert} t */
function markInsertComply(t) {
const {
marks,
string,
} = t;
const labels = [];
const fragments = [];
for (const mark of marks) {
if (!mark || !mark.length || !mark[0]) continue;
labels.push(mark.slice(1));
fragments.push(mark[0]);
};
const matches = string.matchAll(new RegExp(fragments.join('|'), 'gmsu'));
for (let match = matches.next(); !match.done; match = matches.next()) {
console.log(match, fragments);
};
return this;
};
/**
* ### stringMarkInsert
*
* ***
*
* Функция маркировки вставок.
*
* ***
* @arg {string} string `Строка`
* @arg {...[string, string]} marks `Значения`
*/
export function stringMarkInsert(string, ...marks) {
return markInsertDeceit({ string, marks, });
};
//#endregion
//#region split 0.0.0
/** ### stringTFSplit
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `split`.
*
* @typedef {stringTFUSplit&stringT} stringTFSplit
*
*/
/** ### stringTFUSplit
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `split`.
*
* @typedef stringTFUSplit
* @prop {number} count
* @prop {string} separator
*/
/** @arg {stringTFSplit} t */
function splitDeceit(t) {
try {
return splitVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFSplit} t */
function splitVerify(t) {
const {
} = t;
return splitHandle(t);
};
/** @arg {stringTFSplit} t */
function splitHandle(t) {
const {
} = t;
return splitComply(t);
};
/** @arg {stringTFSplit} t */
function splitComply(t) {
const {
count,
string,
separator,
} = t;
let result = string.split(separator);
if (count) {
return [...result.slice(0, count), result.slice(count).join(separator)];
} else {
return result;
};
};
/**
* ### stringSplit
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция разбивки указанной строки на подстроки по указанному разделителю.
*
* С помощью `счётчика` можно задать кол-во разбиений.
*
* ***
* @arg {string} string `Строка`
* @arg {string} separator `Разделитель`
* @arg {number} count `Счётчик`
*/
export function stringSplit(string, separator, count) {
return splitDeceit({ string, separator, count, });
};
//#endregion
//#region splitByCount 0.0.0
/** ### stringTFSplitByCount
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `splitByCount`.
*
* @typedef {stringTFUSplitByCount&stringT} stringTFSplitByCount
*
*/
/** ### stringTFUSplitByCount
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `splitByCount`.
*
* @typedef stringTFUSplitByCount
* @prop {number} count
*/
/** @arg {stringTFSplitByCount} t */
function splitByCountDeceit(t) {
try {
return splitByCountVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFSplitByCount} t */
function splitByCountVerify(t) {
const {
} = t;
return splitByCountHandle(t);
};
/** @arg {stringTFSplitByCount} t */
function splitByCountHandle(t) {
const {
} = t;
return splitByCountComply(t);
};
/** @arg {stringTFSplitByCount} t */
function splitByCountComply(t) {
const {
count,
string,
} = t;
return arrayGetDevideByCount(string, count);
};
/**
* ### stringSplitByCount
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция разбиения указанной строки на подстроки указанной длины.
*
* ***
* @arg {string} string `Строка`
* @arg {number} count `Счётчик`
*/
export function stringSplitByCount(string, count) {
return splitByCountDeceit({ string, count, });
};
//#endregion
//#region unify 0.0.1
/** ### stringTFUnify
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `unify`.
*
* @typedef {stringTFUUnify&stringT} stringTFUnify
*
*/
/** ### stringTFUUnify
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `unify`.
*
* @typedef stringTFUUnify
* @prop {string} symbols
*/
/** @arg {stringTFUnify} t */
function unifyDeceit(t) {
try {
return unifyVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFUnify} t */
function unifyVerify(t) {
const {
} = t;
return unifyHandle(t);
};
/** @arg {stringTFUnify} t */
function unifyHandle(t) {
const {
} = t;
return unifyComply(t);
};
/** @arg {stringTFUnify} t */
function unifyComply(t) {
let {
string,
} = t;
const {
symbols,
} = t;
for (let i = 0; i < string.length; i++) {
if (string[i + 1] && string[i] === string[i + 1] && (!symbols || (symbols && symbols.includes(string[i])))) {
string = stringRemove(string, i, 1);
i--;
};
};
return string;
};
/**
* ### stringUnify
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция унифицирования содержимого строки.
*
* Унификация исключает дублирование символов идущих подряд, удаляя дубли.
*
* ***
* @arg {string} string `Строка`
*/
export function stringUnify(string) {
return unifyDeceit({ string, });
};
/**
* ### stringUnifyBySymbol
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция {@link stringUnify|унифицирования} по указанным символам.
*
* ***
* @arg {string} string `Строка`
* @arg {string} symbols `Символы`
*/
export function stringUnifyBySymbol(string, symbols) {
return unifyDeceit({ string, symbols, });
};
//#endregion
//#region paste 0.2.0
/** ### stringTFPaste
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `paste`.
*
* @typedef {stringTFUPaste&stringTIndex&stringTLength&stringT} stringTFPaste
*
*/
/** ### stringTFUPaste
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `paste`.
*
* @typedef stringTFUPaste
* @prop {string} paste
* @prop {boolean} modeSkip
*/
/** @arg {stringTFPaste} t */
function pasteDeceit(t) {
try {
return pasteVerify(t);
} catch (e) {
if (config.strict) throw e;
return undefined;
};
};
/** @arg {stringTFPaste} t */
function pasteVerify(t) {
const {
} = t;
return pasteHandle(t);
};
/** @arg {stringTFPaste} t */
function pasteHandle(t) {
const {
} = t;
if (!t.length) {
t.length = t.paste.length;
};
if (t.modeSkip) {
t.paste = stringSkip(t.string.slice(t.index, (t.length + t.index) ?? undefined), t.paste, config.skipValue).slice(0, t.length ?? t.paste.length);
};
return pasteComply(t);
};
/** @arg {stringTFPaste} t */
function pasteComply(t) {
let {
index,
string,
} = t;
const {
paste,
length,
} = t;
string = stringRemove(string, index, length);
if (length < -1) {
const d = index + length;
if (d < 0) {
index += length - d;
} else {
index += length + 1;
};
};
return stringAppend(string, index, paste);
};
/**
* ### stringPaste
* - Версия `0.2.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция вставки с замещением указанной индексом и размером области в строку.
*
* ***
* @arg {number} length `Размер`
* @arg {number} index `Индекс`
*
* - Дефолт `string.length ?? 0`
* @arg {string} paste `Вставка`
* @arg {string} string `Строка`
*/
export function stringPaste(string, paste, index = string.length ?? 0, length = 0, modeSkip = config.modeSkip) {
return pasteDeceit({ string, paste, index, length, modeSkip, });
};
//#endregion
//#region pasteWrap 0.0.0
/** ### stringTFPasteWrap
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `pasteWrap`.
*
* @typedef {stringTFUPasteWrap&stringT&stringTPosition} stringTFPasteWrap
*
*/
/** ### stringTFUPasteWrap
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `pasteWrap`.
*
* @typedef stringTFUPasteWrap
* @prop {string} wrap
* @prop {boolean} modeSkip
*/
/** @arg {stringTFPasteWrap} t */
function pasteWrapDeceit(t) {
try {
return pasteWrapVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPasteWrap} t */
function pasteWrapVerify(t) {
const {
} = t;
return pasteWrapHandle(t);
};
/** @arg {stringTFPasteWrap} t */
function pasteWrapHandle(t) {
const {
} = t;
return pasteWrapComply(t);
};
/** @arg {stringTFPasteWrap} t */
function pasteWrapComply(t) {
const {
y,
wrap,
x,
string,
modeSkip,
} = t;
let result = string;
wrap.split('\n').forEach((rowWrap, i) => {
result = stringPadToPosition(result, y + i, x);
let row = stringGetRow(result, y + i);
row = stringPaste(row, rowWrap, x, rowWrap.length, modeSkip);
result = stringSetRow(result, row, y + i);
});
return result;
};
/**
* ### stringPasteWrap
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция вставки в указанную строку указанную вставку с переносом.
*
* ***
* @arg {string} string `Строка`
* @arg {string} wrap `Вставка`
* @arg {number} y `Строка`
* @arg {number} x `Столбец`
* @arg {boolean} modeSkip `Режим пропуска`
*/
export function stringPasteWrap(string, wrap = '', y, x, modeSkip) {
return pasteWrapDeceit({ string, wrap, y, x, modeSkip, });
};
//#endregion
//#region pasteByPosition 0.0.0
/** ### stringTFPasteByPosition
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `pasteByPosition`.
*
* @typedef {stringTFUPasteByPosition&stringT} stringTFPasteByPosition
*
*/
/** ### stringTFUPasteByPosition
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `pasteByPosition`.
*
* @typedef stringTFUPasteByPosition
* @prop {any} _
*/
/** @arg {stringTFPasteByPosition} t */
function pasteByPositionDeceit(t) {
try {
return pasteByPositionVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFPasteByPosition} t */
function pasteByPositionVerify(t) {
const {
} = t;
return pasteByPositionHandle(t);
};
/** @arg {stringTFPasteByPosition} t */
function pasteByPositionHandle(t) {
const {
} = t;
return pasteByPositionComply(t);
};
/** @arg {stringTFPasteByPosition} t */
function pasteByPositionComply(t) {
const {
} = t;
};
/**
* ### stringPasteByPosition
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
*
*
* ***
*
*/
export function stringPasteByPosition() {
return pasteByPositionDeceit({});
};
//#endregion
//#region append 0.0.1
/** ### stringTFAppend
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `append`.
*
* @typedef {stringTFUAppend&stringT&stringTIndex} stringTFAppend
*
*/
/** ### stringTFUAppend
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `append`.
*
* @typedef stringTFUAppend
* @prop {string[]} appends
*/
/** @arg {stringTFAppend} t */
function appendDeceit(t) {
try {
return appendVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFAppend} t */
function appendVerify(t) {
const {
} = t;
return appendHandle(t);
};
/** @arg {stringTFAppend} t */
function appendHandle(t) {
const {
} = t;
return appendComply(t);
};
/** @arg {stringTFAppend} t */
function appendComply(t) {
const {
index,
string,
appends,
} = t;
if (condIsNumberLimit(index) && index >= 0) {
return string.slice(0, index) + appends.join('') + string.slice(index);
} else {
return string;
};
};
/**
* ### stringAppend
* - Версия `0.0.1`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция добавления указанных значений к указанной строке с указанной позиции.
*
* ***
* @arg {string} string `Строка`
* @arg {number} index `Индекс`
* @arg {string} appends `Добавления`
*/
export function stringAppend(string, index, ...appends) {
return appendDeceit({ string, index, appends, });
};
//#endregion
//#region remove 0.0.1
/** ### stringTFRemove
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `remove`.
*
* @typedef {stringTFURemove&stringT&stringTLength&stringTIndex} stringTFRemove
*
*/
/** ### stringTFURemove
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `remove`.
*
* @typedef stringTFURemove
* @prop {any} _
*/
/** @arg {stringTFRemove} t */
function removeDeceit(t) {
try {
return removeVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFRemove} t */
function removeVerify(t) {
const {
} = t;
return removeHandle(t);
};
/** @arg {stringTFRemove} t */
function removeHandle(t) {
const {
} = t;
if (t.index < 0) t.index = 0;
if (t.index >= t.string.length) t.index = t.string.length;
if (t.length < 0 && t.length + t.index < 0) [t.index, t.length] = [null, t.index + 1];
else if (t.length > 0 && t.length + t.index >= t.string.length) [t.index, t.length] = [t.index, null];
else if (t.length > 0) [t.index, t.length] = [t.index, t.index + t.length];
else[t.index, t.length] = [t.index + t.length + 1, t.index + 1];
return removeComply(t);
};
/** @arg {stringTFRemove} t */
function removeComply(t) {
const {
index,
length,
string,
} = t;
if (!index && index !== 0) {
return string.slice(length);
} else if (!length && length !== 0) {
return string.slice(0, index);
} else {
return string.slice(0, index) + string.slice(length);
};
};
/**
* ### stringRemove
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция удаления фрагмента из указанной строки начиная с указанного индекса и до указанной длины.
*
* ***
* @arg {number} index `Индекс`
* @arg {number} length `Длина`
* @arg {string} string `Строка`
*/
export function stringRemove(string, index, length) {
return removeDeceit({ string, index, length });
};
/**
* ### stringRemoveEnd
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция для удаления фрагмента строки начиная с конца строки.
*
* ***
* @arg {number} length `Длина`
* @arg {string} string `Строка`
*/
export function stringRemoveEnd(string, length) {
return removeDeceit({ string, index: string.length - length, length });
};
/**
* ### stringRemoveStart
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция для удаления фрагмента строки начиная с начала строки.
*
* ***
* @arg {number} length `Длина`
* @arg {string} string `Строка`
*/
export function stringRemoveStart(string, length) {
return removeDeceit({ string, index: 0, length, });
};
//#endregion
//#region filter 0.0.0
/** ### stringTFFilter
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `filter`.
*
* @typedef {stringTFUFilter&stringT} stringTFFilter
*
*/
/** ### stringTFUFilter
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `filter`.
*
* @typedef stringTFUFilter
* @prop {(string|RegExp)[]} filters
*/
/** @arg {stringTFFilter} t */
function filterDeceit(t) {
try {
return filterVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFFilter} t */
function filterVerify(t) {
const {
} = t;
return filterHandle(t);
};
/** @arg {stringTFFilter} t */
function filterHandle(t) {
const {
} = t;
t.filters.forEach((e, i, a) => {
if (e instanceof RegExp && !e.flags.includes('g')) {
a[i] = new RegExp(e, 'g');
};
});
return filterComply(t);
};
/** @arg {stringTFFilter} t */
function filterComply(t) {
const {
string,
filters,
} = t;
let result = string;
filters.forEach(filter => {
result = result.replaceAll(filter, '');
});
return result;
};
/**
* ### stringFilter
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция фильтрации указанной строки указанными фильтрами.
*
* ***
* @arg {string} string `Строка`
* @arg {...(string|RegExp)} filters `Фильтры`
*/
export function stringFilter(string, ...filters) {
return filterDeceit({ string, filters, });
};
//#endregion
//#region shield 0.1.0
/** ### stringTFShield
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `shield`.
*
* @typedef {stringTFUShield&stringT} stringTFShield
*
*/
/** ### stringTFUShield
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `shield`.
*
* @typedef stringTFUShield
* @prop {any} _
*/
/** @arg {stringTFShield} t */
function shieldDeceit(t) {
try {
return shieldVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFShield} t */
function shieldVerify(t) {
const {
} = t;
return shieldHandle(t);
};
/** @arg {stringTFShield} t */
function shieldHandle(t) {
const {
} = t;
return shieldComply(t);
};
/** @arg {stringTFShield} t */
function shieldComply(t) {
const {
string,
} = t;
let result = string;
const replaces = [
'\r',
'\n',
'\b',
'\x1b',
'\\',
'/',
'?',
'!',
'*',
'.',
'[',
']',
'(',
')',
'&',
'^',
'%',
'$',
'#',
'@',
'~',
',',
'{',
'}',
'"',
'\'',
'+',
'-',
'_',
'=',
'`',
'|',
'>',
'<',
':',
';',
].map(replace => {
switch (replace) {
case '\n': return [replace, '\\n'];
case '\r': return [replace, '\\r'];
case '\b': return [replace, '\\b'];
case '\x1b': return [replace, '\\x1b'];
};
return [replace, '\\' + replace];
}).forEach(replace => {
result = result.replaceAll(...replace);
});
return result;
};
/**
* ### stringShield
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция экранирования символов строки.
*
* ***
* @arg {string} string `Строка`
*/
export function stringShield(string) {
return shieldDeceit({ string, });
};
//#endregion
//#region insert 0.0.0
/** ### stringTFInsert
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `insert`.
*
* @typedef {stringTFUInsert&stringT} stringTFInsert
*
*/
/** ### stringTFUInsert
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `insert`.
*
* @typedef stringTFUInsert
* @prop {stringTTInserts} inserts
*/
/** @arg {stringTFInsert} t */
function insertDeceit(t) {
try {
return insertVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFInsert} t */
function insertVerify(t) {
const {
} = t;
return insertHandle(t);
};
/** @arg {stringTFInsert} t */
function insertHandle(t) {
const {
} = t;
t.inserts.forEach((e, i, a) => {
if (condIsString(e)) {
a[i] = stringSplit(e, config.insertSpliter, 1);
};
return e;
});
return insertComply(t);
};
/** @arg {stringTFInsert} t */
function insertComply(t) {
const {
string,
inserts,
} = t;
let result = string;
for (const insert of inserts) {
result = result.replaceAll(insert[0], insert[1]);
};
return result;
};
/**
* ### stringInsert
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция вставки укзанного значения за место указанного соответсвия во всех местах указанной строки.
*
* ***
* @arg {string} find `Поиск`
* @arg {string} value `Значение`
* @arg {string} string `Строка`
*/
export function stringInsert(string, find, value) {
return insertDeceit({ string, inserts: [[find, value]], });
};
/**
* ### stringInsertMany
* - Версия `0.0.0`
* - Цепочка `DVHCa`
* - Модуль `string`
* ***
*
* Функция множественной вставки указанных значений в указанные строки.
*
* ***
* @arg {string} string `Строка`
* @arg {...(string|[string, string])} inserts `Вставки`
*
* Могут быть указаны двумя вариантами:
* - Через строки с разделителем `-`, где первая часть - `поиск`, а вторая - `вставка`.
* - Через массивы с двумя строковыми значениями, где первое значение - `поиск`, а второе - `вставка`.
*
* Оба варианта могут использоваться в перемешку друг с другом, но рекомендуется соблюдать единство параметров.
*/
export function stringInsertMany(string, ...inserts) {
return insertDeceit({ string, inserts, });
};
//#endregion
//#region insertBypass 0.0.0
/** ### stringTFinsertBypass
* - Тип `TF`
* - Версия `0.0.0`
* - Модуль `string`
* ***
*
* Результирующие параметры функции `insertBypass`.
*
* @typedef {stringTFUinsertBypass&stringT} stringTFinsertBypass
*
*/
/** ### stringTFUinsertBypass
* - Тип `TFU`
* - Версия `0.0.0`
* - Модуль `string`
*
* Уникальные параметры функции `insertBypass`.
*
* @typedef stringTFUinsertBypass
* @prop {string} find
* @prop {string[]} values
*/
/** @arg {stringTFinsertBypass} t */
function insertBypassDeceit(t) {
try {
return insertBypassVerify(t);
} catch (e) {
if (config?.strict) {
throw e;
};
return undefined;
} finally {
};
};
/** @arg {stringTFinsertBypass} t */
function insertBypassVerify(t) {
const {
} = t;
return insertBypassHandle