cayman.js
function parse_arguments( argv ) {
	var parsed       = {};
	var current      = false;
	var name         = false;
	var unrecognized = false;
	var have_action  = false;
	var is_global    = false;
	var name_format, option;

	var i, j;

	for ( i = 3, len = argv.length; i < len; i++ ) {
		// Параметр или значение? //
		if ( argv[ i ][ 0 ] === '-' ) {
			// Объявление параметра //
			 
			// Сброс буфера имени текущего параметра //
			current     = false;

			// Сброс флага наличия связанного действия //
			have_action = false;
			
			// Полное или краткое название параметра? // 
			if ( argv[ i ][ 1 ] === '-' ) {
				// Полное //
				name        = argv[ i ].substr( 2 );
				name_format = 'full_name';
			} else {
				// Краткое //
				name        = argv[ i ].substr( 1 );
				name_format = 'short_name';
			}

			// Перебор параметров текущей команды //
			for ( j = 0; j < this.cmd.options.length; j++ ) {
				if ( this.cmd.options[ j ][ name_format ] === name ) {
					parsed[ this.cmd.options[ j ].access_name ] = true;
					current = this.cmd.options[ j ].access_name;
					option  = this.cmd.options[ j ];
					break;
				}
			}

			// Если параметр не принадлежит выполняемой команде //
			if ( !current ) {
				// Перебор глобальных параметров //
				for ( j = 0; j < this.options.length; j++ ) {
					if ( this.options[ j ][ name_format ] === name ) {
						parsed[ this.options[ j ].access_name ] = true;
						current = this.options[ j ].access_name;
						option  = this.options[ j ];
						break;
					}
				}	
			}

			// Если параметр определен в описании программы //
			if ( current ) {
				// Если параметр требует выполнения некой функции //
				if ( option.action ) {
					have_action = true;
					actions_quee.push({
						'action' : option.action,
						'value'  : parsed[ current ]
					});
				}
			} else {
				// Если текущий параметр не найден нигде, предупреждаем пользователя //
				unrecognized = true;
				console.warn( "  Unrecognized option '%s', see help.", name );
			}
		} else {
			// Объявление значения параметра //
			
			// Если значению предшествует название параметра //
			if ( current ) {
				// Регистрация параметра и его значения //
				parsed[ current ] = argv[ i ];

				// Если параметр имеет связанное действие //
				if ( have_action ) {
					// Регистрация значения параметра //
					actions_quee[ actions_quee.length - 1 ].value = argv[ i ];
				}
			} else {
				// WTF? //
				console.warn( "  Unexpected value '%s' without option, check syntax.", argv[ i ] );
				unrecognized = true;
			}
		}
	}

	return unrecognized ? false : parsed;
}
function parse_arguments( argv ) {
	var parsed       = {};
	var current      = false;
	var name         = false;
	var unrecognized = false;
	var have_action  = false;
	var is_global    = false;
	var name_format, option;

	var i, j;

	for ( i = 3, len = argv.length; i < len; i++ ) {
		// Параметр или значение? //
		if ( argv[ i ][ 0 ] === '-' ) {
			// Объявление параметра //
			 
			// Сброс буфера имени текущего параметра //
			current     = false;

			// Сброс флага наличия связанного действия //
			have_action = false;
			
			// Полное или краткое название параметра? // 
			if ( argv[ i ][ 1 ] === '-' ) {
				// Полное //
				name        = argv[ i ].substr( 2 );
				name_format = 'full_name';
			} else {
				// Краткое //
				name        = argv[ i ].substr( 1 );
				name_format = 'short_name';
			}

			// Перебор параметров текущей команды //
			for ( j = 0; j < this.cmd.options.length; j++ ) {
				if ( this.cmd.options[ j ][ name_format ] === name ) {
					parsed[ this.cmd.options[ j ].access_name ] = true;
					current = this.cmd.options[ j ].access_name;
					option  = this.cmd.options[ j ];
					break;
				}
			}

			// Если параметр не принадлежит выполняемой команде //
			if ( !current ) {
				// Перебор глобальных параметров //
				for ( j = 0; j < this.options.length; j++ ) {
					if ( this.options[ j ][ name_format ] === name ) {
						parsed[ this.options[ j ].access_name ] = true;
						current = this.options[ j ].access_name;
						option  = this.options[ j ];
						break;
					}
				}	
			}

			// Если параметр определен в описании программы //
			if ( current ) {
				// Если параметр требует выполнения некой функции //
				if ( option.action ) {
					have_action = true;
					actions_quee.push({
						'action' : option.action,
						'value'  : parsed[ current ]
					});
				}
			} else {
				// Если текущий параметр не найден нигде, предупреждаем пользователя //
				unrecognized = true;
				console.warn( "  Unrecognized option '%s', see help.", name );
			}
		} else {
			// Объявление значения параметра //
			
			// Если значению предшествует название параметра //
			if ( current ) {
				// Регистрация параметра и его значения //
				parsed[ current ] = argv[ i ];

				// Если параметр имеет связанное действие //
				if ( have_action ) {
					// Регистрация значения параметра //
					actions_quee[ actions_quee.length - 1 ].value = argv[ i ];
				}
			} else {
				// WTF? //
				console.warn( "  Unexpected value '%s' without option, check syntax.", argv[ i ] );
				unrecognized = true;
			}
		}
	}

	return unrecognized ? false : parsed;
}
function parse_arguments ( argv ) { var parsed = { } ; var current = false ; var name = false ; var unrecognized = false ; var have_action = false ; var is_global = false ; var name_format , option ; var i , j ; for ( i = 3 , len = argv . length ; i < len ; i ++ ) { // Параметр или значение? // if ( argv [ i ] [ 0 ] === '-' ) { // Объявление параметра // // Сброс буфера имени текущего параметра // current = false ; // Сброс флага наличия связанного действия // have_action = false ; // Полное или краткое название параметра? //  if ( argv [ i ] [ 1 ] === '-' ) { // Полное // name = argv [ i ] . substr ( 2 ) ; name_format = 'full_name' ; } else { // Краткое // name = argv [ i ] . substr ( 1 ) ; name_format = 'short_name' ; } // Перебор параметров текущей команды // for ( j = 0 ; j < this . cmd . options . length ; j ++ ) { if ( this . cmd . options [ j ] [ name_format ] === name ) { parsed [ this . cmd . options [ j ] . access_name ] = true ; current = this . cmd . options [ j ] . access_name ; option = this . cmd . options [ j ] ; break ; } } // Если параметр не принадлежит выполняемой команде // if ( ! current ) { // Перебор глобальных параметров // for ( j = 0 ; j < this . options . length ; j ++ ) { if ( this . options [ j ] [ name_format ] === name ) { parsed [ this . options [ j ] . access_name ] = true ; current = this . options [ j ] . access_name ; option = this . options [ j ] ; break ; } } } // Если параметр определен в описании программы // if ( current ) { // Если параметр требует выполнения некой функции // if ( option . action ) { have_action = true ; actions_quee . push ( { 'action' : option . action , 'value' : parsed [ current ] } ) ; } } else { // Если текущий параметр не найден нигде, предупреждаем пользователя // unrecognized = true ; console . warn ( "  Unrecognized option '%s', see help." , name ) ; } } else { // Объявление значения параметра // // Если значению предшествует название параметра // if ( current ) { // Регистрация параметра и его значения // parsed [ current ] = argv [ i ] ; // Если параметр имеет связанное действие // if ( have_action ) { // Регистрация значения параметра // actions_quee [ actions_quee . length - 1 ] . value = argv [ i ] ; } } else { // WTF? // console . warn ( "  Unexpected value '%s' without option, check syntax." , argv [ i ] ) ; unrecognized = true ; } } } return unrecognized ? false : parsed ; }
Выполняет парсинг массива параметров в результирующий
объект согласно описанию этих параметров.
@param  {object} argv Массив переданных при запуске параметров
@return {object} 	 Результат парсинга
Выполняет парсинг массива параметров в результирующий объект согласно описанию этих параметров .