diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 261a0cc..e9d6c50 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -297,9 +297,9 @@ char *yon_char_replace_single(char *source, char *find, char *replace){ return NULL; } -char **yon_char_parse(char *parameters, int *size, char *divider){ +char **yon_char_parse(const char *parameters, int *size, char *divider){ *size=0; - if (parameters){ + if (parameters&&!yon_char_is_empty(divider)){ char **string=NULL; char *paramline=yon_char_new(parameters); char *param = strstr(paramline,divider); @@ -450,6 +450,14 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){ return new_parsed; } +config_str yon_char_parsed_prepend(config_str parsed, int *size, char *string){ + config_str new_parsed=realloc(parsed,(*size+1)*sizeof(char*)); + memcpy(&new_parsed[1],new_parsed,(*size)*sizeof(char*)); + new_parsed[0]=yon_char_new(string); + (*size)++; + return new_parsed; +} + void yon_char_parsed_append_strings (config_str array, int size, char *prepend){ if (array && size>0 && !yon_char_is_empty(prepend)){ for (int i=0;i-1){ if (parsed_size>get_place+2){ for (int j=get_place+2;j0){ + int final_size; + config_str final = NULL; + yon_char_parsed_add_or_create_if_exists(final,&final_size,command[0]); + for (int i=1;i-1){ + char *cur_string = ""; + for (int j=pos;j0){ + char *final_command = yon_char_parsed_to_string(final,final_size," -- get "); + yon_char_parsed_free(final,final_size); + return final_command; + } + } + return NULL; +} + +config_str yon_config_command_get_parameters(const char *command, int *size){ + (*size)=0; + if (yon_char_is_empty(command)) return NULL; + + int parsed_size; + config_str parsed = yon_char_parse(command,&parsed_size," "); + int pos = yon_config_command_get_section_pos(command); + if (pos>-1){ + for (int i=0;i0){ + (*size)=parsed_size; + return parsed; + } + } + return NULL; +} + +int yon_config_command_check_parameter(const char *command,const char *parameter){ + int size; + config_str parameters = yon_config_command_get_parameters(command,&size); + for (int i=0;i0){ - for (int j=0;j0){ +// for (int j=0;jdata=data; + if (!dict) return 0; + dict->data=yon_char_new(data); dict->flag1=1; if (yon_dictionary_get(&__yon_config_ignored, dict->key)){ __yon_config_ignored = yon_dictionary_rip(__yon_config_ignored); @@ -723,6 +859,28 @@ int yon_config_default_remove(char *key){ return 0; } +/// @brief Получение всех параметров отдельного раздела конфигурации +/// @param section_name Название раздела конфигурации +/// @param size размер финального массива +/// @return массив строк со всеми параметрами для запрашиваемого раздела +config_str yon_config_get_parameters_for_section(const char *section_name, int *size){ + (*size)=0; + check_config{ + int parameters_size; + config_str parameters = NULL; + + yon_config_parameter *parameter; + for_dictionaries(parameter,__yon__config__strings){ + if (!strcmp(parameter->section,section_name)){ + yon_char_parsed_add_or_create_if_exists(parameters,¶meters_size,parameter->key); + } + } + (*size)=parameters_size; + return parameters; + } + return NULL; +} + enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char *data){ if (yon_char_is_empty(key)||yon_char_is_empty(config_load)) return YON_CONFIG_SAVED_ERROR; @@ -1130,8 +1288,11 @@ char *yon_config_parameter_prepare_command(char *command, char *path, char *sect } if (parameter){ if (size>=get_pos+2){ - free(parsed[get_pos+2]); - parsed[get_pos+2] = yon_char_new(parameter); + config_str temp = yon_char_parsed_copy(parsed,get_pos+1); + yon_char_parsed_free(parsed,size); + parsed = temp; + size=get_pos+1; + yon_char_parsed_add_or_create_if_exists(parsed,&size,parameter); } } char *final = yon_char_parsed_to_string(parsed,size," "); @@ -1306,8 +1467,10 @@ int yon_config_change_key(char *target, char *key){ char *yon_config_parameter_get_key(char *parameter_string){ char *key = yon_char_new(parameter_string); - if (strstr(key,"[")&&strstr(key,"]")){ - free(yon_char_divide_search(key,"[",-1)); + char *cut_text = strstr(key,"["); + if (cut_text&&strstr(key,"]")){ + memcpy(key,key+(strlen(key)-strlen(cut_text))+1,strlen(cut_text)); + // free(yon_char_divide_search(key,"[",-1)); yon_char_remove_last_symbol(key,']'); } return key; diff --git a/source/libublsettings.h b/source/libublsettings.h index ff6eed5..dcd16d9 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -437,7 +437,7 @@ char *yon_char_replace_single(char *source, char *find, char *replace); * then returns parsed string array and sets [size] to * size of returned array */ -char **yon_char_parse(char *parameters, int *size, char *divider); +char **yon_char_parse(const char *parameters, int *size, char *divider); #define yon_char_parsed_add_or_create_if_exists(parsed,size,data) {if (!parsed) parsed = yon_char_parsed_new(size,data,NULL);\ else parsed = yon_char_parsed_append(parsed,size,data);} @@ -519,6 +519,7 @@ config_str yon_char_parsed_copy(config_str to_copy, int size); * Добавляет строку [string] в конец массива строк [parsed] с длинной [size]. */ config_str yon_char_parsed_append(config_str parsed, int *size, char *string); +config_str yon_char_parsed_prepend(config_str parsed, int *size, char *string); void yon_char_parsed_append_strings (config_str array, int size, char *prepend); @@ -774,7 +775,7 @@ config_str yon_dir_get_by_mask(char *path, char *mask, int *size); #define ubconfig_set_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," set ",section," ",data,NULL) #define ubconfig_load_command(target) yon_char_unite("ubconfig --source ",target," get ",NULL) #define ubconfig_load_command_full(target, data) yon_char_unite("ubconfig --source ",target," get ",data,NULL) -#define ubconfig_remove_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," remove ",section," ",data,NULL) +#define ubconfig_remove_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," remove ",!yon_char_is_empty(section)?section:"",!yon_char_is_empty(section)?" ":"",data,NULL) /** * Типы конфигураций ubconfig-а @@ -862,12 +863,14 @@ int yon_config_parse_parameter(char *parameter,char **key, char **value); int yon_char_remove_brackets(char *string); -int yon_config_command_get_section_pos(config_str parsed, int size); +int yon_config_command_get_section_pos(const char *); char *yon_config_command_get_section(const char *command); int yon_config_command_get_path_pos(config_str parsed, int size); char *yon_config_command_get_path(const char *command); +config_str yon_config_command_get_parameters(const char *command, int *size); + char *yon_config_get_last_command(); void yon_config_set_last_command(char *command); @@ -942,6 +945,12 @@ void *yon_config_get_by_key(char *key); char *yon_config_get_section_for_key(char *key); +config_str yon_config_get_parameters_for_section(const char *section_name, int *size); + +config_str yon_config_get_parameters_for_all_sections(int *size); +config_str yon_config_get_parameters_for_all_sections_saved(int *size); +config_str yon_config_get_parameters_for_all_sections_removed(int *size); + /**yon_config_get_all_by_key(char *data) * [EN] *