|
|
|
@ -173,38 +173,93 @@ void MainSpaceParser::ParseSingleArgument(size_t argc, const char ** argv, size_
|
|
|
|
|
ConvertStr(argv[argv_index], temp_val);
|
|
|
|
|
temp_list_val.push_back(temp_val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( opt_size > 0 )
|
|
|
|
|
{
|
|
|
|
|
last_status = status_reading_eof;
|
|
|
|
|
last_error_token.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
temp_val.clear();
|
|
|
|
|
|
|
|
|
|
if( temp_list_val.empty() )
|
|
|
|
|
space->Add(temp_arg, temp_val);
|
|
|
|
|
else
|
|
|
|
|
if( temp_list_val.size() == 1 )
|
|
|
|
|
space->Add(temp_arg, temp_list_val[0] );
|
|
|
|
|
else
|
|
|
|
|
space->table[temp_arg] = temp_list_val; // !! IMPROVE ME
|
|
|
|
|
AddValueToItem(temp_arg, temp_val, temp_list_val);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MainSpaceParser::ParseMultiArgument(size_t argc, const char ** argv, size_t & argv_index)
|
|
|
|
|
{
|
|
|
|
|
ConvertStr(argv[argv_index] + 2, wide_arg);
|
|
|
|
|
ConvertStr(argv[argv_index] + 2, temp_arg);
|
|
|
|
|
argv_index += 1;
|
|
|
|
|
|
|
|
|
|
size_t opt_size = RequireOption(temp_arg);
|
|
|
|
|
temp_list_val.clear();
|
|
|
|
|
|
|
|
|
|
if( opt_size > 0 )
|
|
|
|
|
{
|
|
|
|
|
for( ; opt_size > 0 && argv_index < argc ; --opt_size, ++argv_index)
|
|
|
|
|
{
|
|
|
|
|
ConvertStr(argv[argv_index], temp_val);
|
|
|
|
|
temp_list_val.push_back(temp_val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( opt_size > 0 )
|
|
|
|
|
{
|
|
|
|
|
last_status = status_reading_eof;
|
|
|
|
|
last_error_token.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
temp_val.clear();
|
|
|
|
|
AddValueToItem(temp_arg, temp_val, temp_list_val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* IMPLEMENT ME
|
|
|
|
|
* add checking for files here
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
space->Add(wide_arg, temp_val);
|
|
|
|
|
|
|
|
|
|
argv_index += 1;
|
|
|
|
|
void MainSpaceParser::AddValueToItem(const std::wstring & name, const std::wstring & empty_value, const std::vector<std::wstring> & list)
|
|
|
|
|
{
|
|
|
|
|
std::wstring * val = space->GetValue(name);
|
|
|
|
|
|
|
|
|
|
if( !val )
|
|
|
|
|
{
|
|
|
|
|
if( list.empty() )
|
|
|
|
|
space->Add(name, empty_value);
|
|
|
|
|
else
|
|
|
|
|
if( list.size() == 1 )
|
|
|
|
|
space->Add(name, list[0]);
|
|
|
|
|
else
|
|
|
|
|
space->table[name] = list; // !! IMPROVE ME there'll be a new api in space
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
PT::Space::Table::iterator i = space->table.find(name);
|
|
|
|
|
PT::Space::Value * table_value;
|
|
|
|
|
|
|
|
|
|
if( i == space->table.end() )
|
|
|
|
|
{
|
|
|
|
|
table_value = &space->table[name];
|
|
|
|
|
table_value->push_back(*val);
|
|
|
|
|
space->table_single.erase(name);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
table_value = &i->second;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( list.empty() )
|
|
|
|
|
{
|
|
|
|
|
table_value->push_back(empty_value);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for(const auto & list_item : list)
|
|
|
|
|
table_value->push_back(list_item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
size_t MainSpaceParser::RequireOption(const std::wstring & arg)
|
|
|
|
|
{
|
|
|
|
|
size_t res = 0;
|
|
|
|
|