Если вы согласны со случайным переносом слов, то решение тривиально.
Простое сокращение пробела на границе переноса слов легко.
wordwrap(line_length, input_string, output_string_list):
offset = backward_search_for_space( input_string + line_length )
if offset is zero ## a word taking more than a line !!
offset = forward_search(input_string )
append line_length[0:offset] to ouptput_string_list
if input_string is not null
wordwrap( line_length, input_string + offset, string_list)
Если вы хотите использовать неслучайный перенос (то есть неизвестное разрешено, byt unk-own - нет), чем вам нужно сохранить список слов или набор правил с дефисами и изменить вышеописанный алгоритм
, если вы хотите, чтобы он был «одинаково разнесен», чем послеВыше algo вам нужно взять строки меньше, чем line_length, и увеличить пробелы в середине строк.Легко сделать
Если ваш шрифт имеет переменную ширину, вам нужно будет использовать алгоритм в физических единицах измерения, а не в количестве символов.Это также легко сделать.Массив 'width' должен быть сохранен, а проверка line_length должна быть вычислена.