diff --git a/source/libublsettings.c b/source/libublsettings.c index f3213c4..9963154 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -467,6 +467,39 @@ char *yon_cut(char *source, int size, int startpos) return NULL; } +config_str yon_char_wrap_to_lines(char *target, unsigned int line_count, unsigned int *final_size){ + if (!yon_char_is_empty(target)&&line_count){ + (*final_size)=0; + unsigned int spaces = yon_char_find_count(target," "); + float line_spaces = (float)spaces/line_count; + float left = spaces%line_count; + + int processed=0; + + int size; + config_str parsed = yon_char_parse(target,&size," "); + config_str final = NULL; + for (int i=0;ispaces+1) break; + if (final_str){ + char *temp = yon_char_unite(final_str," ",parsed[processed],NULL); + free(final_str); + final_str = temp; + } else { + final_str = parsed[processed]; + } + processed++; + } + if (left) left--; + yon_char_parsed_add_or_create_if_exists(final,final_size,final_str); + } + return final; + } + else return NULL; +} + char *yon_char_divide(char *source, int dividepos) { if (source&&strlen(source)>=dividepos){ @@ -489,13 +522,10 @@ int yon_char_find_count(char *source, char *find){ int i=0; int size=0; int pos=0; - config_str rtn = yon_char_parse(working_string,&size,"\n"); + config_str rtn = yon_char_parse(working_string,&size,find); free(working_string); - for (int j=0;jget_pos+2){ + if (size>get_pos+1){ free(parsed[get_pos+1]); parsed[get_pos+1]=yon_char_new(section); } } if (parameter){ - if (size>get_pos+3){ + if (size>=get_pos+2){ free(parsed[get_pos+2]); parsed[get_pos+2] = yon_char_new(parameter); } diff --git a/source/libublsettings.h b/source/libublsettings.h index 6004abc..196c8bb 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -335,6 +335,15 @@ char *yon_char_unite(const char *source, ...); */ char *yon_cut(char *source, int size, int startpos); +/**yon_char_wrap_to_lines(char *target, unsigned int line_count, unsigned int *final_size) + * [EN] + * + * [RU] + * Делит строку [target] на [line_count] частей по пробелу и + * возвращает массив строк длиной [final_size] + */ +config_str yon_char_wrap_to_lines(char *target, unsigned int line_count, unsigned int *final_size); + /**yon_char_divide(char *source, int dividepos) * [EN] * divides source string in dividepos position,