<commit_before>/*!
 * API для организации микрошаблонов внутри директивы
 */

/**
 * Разбить строку по пробелам и вернуть массив
 * (учитываются директивы)
 *
 * @param {string} str - исходная строка
 * @return {!Array}
 */
function splitBySpace(str) {
	var escape = false;
	var res = [''],
		bOpen = 0,
		bStart = false;

	for (let i = -1; ++i < str.length;) {
		let currentEscape = escape;
		let el = str.charAt(i),
			part = str.substr(i, includeDirLength);

		if (el === '\\' || escape) {
			escape = !escape;
		}

		if (!currentEscape && includeDirMap[part]) {
			i += includeDirLength - 1;
			res[res.length - 1] += part;

			bStart = true;
			bOpen++;

			continue;
		}

		if (bStart) {
			if (el === LEFT_BLOCK) {
				bOpen++;

			} else if (el === RIGHT_BLOCK) {
				bOpen--;
			}
		}

		if (el === ' ' && !bOpen) {
			res.push('');
		}

		if (el !== ' ' || bOpen) {
			res[res.length - 1] += el;
		}
	}

	return res;
}

/**
 * Заменить ${ ... } или #{ ... } в указанной строке на значение вывода
 *
 * @param {string} str - исходная строка
 * @param {?boolean=} [opt_sys=false] - если true, то запуск функции считается системным вызовом
 * @param {?boolean=} [opt_replace=false] - если true, то директивы экранируются (заменяются на __SNAKESKIN__\d+_)
 * @return {string}
 */
DirObj.prototype.replaceTplVars = function (str, opt_sys, opt_replace) {
	str = this.pasteDangerBlocks(str);

	var start = 0;
	var begin = 0,
		dir = '',
		res = '';

	var escape = false,
		comment = false;

	var bOpen = false,
		bEnd = true,
		bEscape = false;

	var part = '',
		rPart = '';

	var nextLineMap = {
		'n': '\n',
		'r': '\r'
	};

	for (let i = -1; ++i < str.length;) {
		let currentEscape = escape,
			pos = i;

		let el = str.charAt(i),
			next = str.charAt(i + 1);

		if (str.substr(i, 2) === '\r\n') {
			continue;
		}

		if (begin) {
			if (!bOpen) {
				if ((el === '\\' && strongSysEscapeMap[next]) || escape) {
					escape = !escape;
				}

				if (escape) {<commit_msg>Refactoring<commit_after>/*!
 * API для организации микрошаблонов внутри директивы
 */

/**
 * Разбить строку по пробелам и вернуть массив
 * (учитываются директивы)
 *
 * @param {string} str - исходная строка
 * @return {!Array}
 */
function splitBySpace(str) {
	const
		res = [''];

	let
		escape = false,
		bOpen = 0,
		bStart = false;

	for (let i = -1; ++i < str.length;) {
		const
			currentEscape = escape,
			el = str.charAt(i),
			part = str.substr(i, includeDirLength);

		if (el === '\\' || escape) {
			escape = !escape;
		}

		if (!currentEscape && includeDirMap[part]) {
			i += includeDirLength - 1;
			res[res.length - 1] += part;

			bStart = true;
			bOpen++;

			continue;
		}

		if (bStart) {
			if (el === LEFT_BLOCK) {
				bOpen++;

			} else if (el === RIGHT_BLOCK) {
				bOpen--;
			}
		}

		if (el === ' ' && !bOpen) {
			res.push('');
		}

		if (el !== ' ' || bOpen) {
			res[res.length - 1] += el;
		}
	}

	return res;
}

/**
 * Заменить ${ ... } или #{ ... } в указанной строке на значение вывода
 *
 * @param {string} str - исходная строка
 * @param {?boolean=} [opt_sys=false] - если true, то запуск функции считается системным вызовом
 * @param {?boolean=} [opt_replace=false] - если true, то директивы экранируются (заменяются на __SNAKESKIN__\d+_)
 * @return {string}
 */
DirObj.prototype.replaceTplVars = function (str, opt_sys, opt_replace) {
	str = this.pasteDangerBlocks(str);

	let
		start = 0,
		begin = 0,
		dir = '',
		res = '';

	let
		escape = false,
		comment = false;

	let
		bOpen = false,
		bEnd = true,
		bEscape = false;

	let
		part = '',
		rPart = '';

	const nextLineMap = {
		'n': '\n',
		'r': '\r'
	};

	for (let i = -1; ++i < str.length;) {
		const
			currentEscape = escape,
			pos = i;

		let
			el = str.charAt(i),
			next = str.charAt(i + 1);

		if (str.substr(i, 2) === '\r\n') {
			continue;
		}

		if (begin) {
			if (!bOpen) {
				if ((el === '\\' && strongSysEscapeMap[next]) || escape) {
					escape = !escape;
				}

				if (escape) {
{'fraction_non_alphanumeric': 0.18149824032176973, 'fraction_numerical': 0.005027652086475616, 'mean_word_length': 2.6205641492265697, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '84764', 'n_tokens_mistral': 1837, 'n_tokens_neox': 1672, 'n_words': 392}