<commit_before>/*
	Copyright  2014  2015 <NAME>. All rights reserved.
	Licensed under the GNU AFFERO GENERAL PUBLIC LICENSE, Version 3
	License: https://github.com/simvesel/wsh-lib/blob/master/LICENSE
*/


"use strict";

/*
	     :
	*) Everyone quotes command line arguments the wrong way - Twisty Little Passages, All Alike - Site Home - MSDN Blogs
			http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx?Redirected=true
	*) Parsing C++ Command-Line Arguments (C++)
			http://msdn.microsoft.com/en-us/library/17w5ykft%28v=vs.85%29.aspx

	API  ... ظ 2015 ,        API ,
	        .
	    Linux,    API   .
	,   : execv, execve
*/
function fn_exec_arg_escape( masIn )
{
	var pos = 0, ind;
	var masNew = "";
	echo( masIn );

//    ,      :
//        ,   slice    
	masIn = ' ' + masIn + ' "';

	do
	{
		ind = masIn.indexOf( '"' , pos );
		if( ind === -1 )
		{
			break;
		}

		//    -- 
		var cnt_bslashes = 0,
				reverse_ind = ind;

		do
		{
			--reverse_ind;
			if( masIn.charAt( reverse_ind ) !== '\\' )
			{
				break;
			}

			++cnt_bslashes;
		}
		while( true );

		masNew += masIn.slice( pos, ind );

//		echo( reverse_ind ); echo( cnt_bslashes );
//		echo( masNew );

		var masBSlashes = "\\".repeat( cnt_bslashes );
//		echo( masBSlashes );

		var masEscapeQuotes = '\\"';
		masNew += masBSlashes + masEscapeQuotes;

		pos = ind + 1;
	}
	while( true );

	var masRes = masNew.slice( 1, - (masEscapeQuotes.length + 1) );

//	dbg_echo( masRes );
	return masRes;
}


function fn_exec_arg_smart_quote( masArg )
{
	if( /[ \t\n\v\"]/.test( masArg ) === true )
	{
		//  
		return '"' + fn_exec_arg_escape( masArg ) + '"';
	}

	return masArg;
}<commit_msg>Изменил кодировку файла на UTF-8<commit_after>/*
	Copyright © 2014 — 2015 <NAME>. All rights reserved.
	Licensed under the GNU AFFERO GENERAL PUBLIC LICENSE, Version 3
	License: https://github.com/simvesel/wsh-lib/blob/master/LICENSE
*/


"use strict";

/*
	Функция сделана по мотивам этих документов:
	*) Everyone quotes command line arguments the wrong way - Twisty Little Passages, All Alike - Site Home - MSDN Blogs
			http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx?Redirected=true
	*) Parsing C++ Command-Line Arguments (C++)
			http://msdn.microsoft.com/en-us/library/17w5ykft%28v=vs.85%29.aspx

	API просто жесть... Шёл 2015 год, а они так и не додумались сделать API так,
	чтобы прикладные программисты не могли неправильно вызывать дочерние процессы.
	Подсмотрели бы уже у Linux, как они сделали API по созданию процессов.
	Например, интерфейсы системных функций: execv, execve
*/
function fn_exec_arg_escape( masIn )
{
	var pos = 0, ind;
	var masNew = "";
	echo( masIn );

// Изменяем данные в строке, чтобы был проще алгоритм по преобразованию:
// в конце строки нужны пробел и двойная ковычка, чтобы через slice выбирался и конец строки
	masIn = ' ' + masIn + ' "';

	do
	{
		ind = masIn.indexOf( '"' , pos );
		if( ind === -1 )
		{
			break;
		}

		// Найдена двойная кавычка -- анализируем
		var cnt_bslashes = 0,
				reverse_ind = ind;

		do
		{
			--reverse_ind;
			if( masIn.charAt( reverse_ind ) !== '\\' )
			{
				break;
			}

			++cnt_bslashes;
		}
		while( true );

		masNew += masIn.slice( pos, ind );

//		echo( reverse_ind ); echo( cnt_bslashes );
//		echo( masNew );

		var masBSlashes = "\\".repeat( cnt_bslashes );
//		echo( masBSlashes );

		var masEscapeQuotes = '\\"';
		masNew += masBSlashes + masEscapeQuotes;

		pos = ind + 1;
	}
	while( true );

	var masRes = masNew.slice( 1, - (masEscapeQuotes.length + 1) );

//	dbg_echo( masRes );
	return masRes;
}


function fn_exec_arg_smart_quote( masArg )
{
	if( /[ \t\n\v\"]/.test( masArg ) === true )
	{
		// нужно преобразовывать
		return '"' + fn_exec_arg_escape( masArg ) + '"';
	}

	return masArg;
}
{'fraction_non_alphanumeric': 0.14551563711553372, 'fraction_numerical': 0.018867924528301886, 'mean_word_length': 2.854581673306773, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, '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': '7432194', 'n_tokens_mistral': 1706, 'n_tokens_neox': 1597, 'n_words': 352}