Si vous acceptez la césure aléatoire, la solution est triviale. Il suffit simplement de couper un espace sur la limite d'enveloppement Word-Wrap.
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)
Si vous voulez césures non aléatoire (ie. Un connu est autorisé, byt UNK-propre n'est pas), que vous devez garder une liste de mots césure ou un ensemble de règles et modifier ci-dessus algorithme Si vous voulez 'à espacement égal', vous devez prendre des lignes inférieures à ligne_length et augmenter les espaces au milieu des lignes. Facile à faire
Si votre police est de largeur variable, vous devez implémenter l'algo dans les unités de mesure physiques plutôt que le nombre de caractères. C'est aussi facile à faire. Un tableau 'width' doit être conservé, et line_length check doit être calculé.
Quel genre de texte? Prose anglaise? –
@belisarius: Oui, la prose anglaise. – fbrereto
Si vous google pour "brevet de mise en page de paragraphe automatisé" vous obtiendrez quelques brevets, certains avec pseudo-code inspirant inclus. Je ne poste pas cela comme une réponse parce qu'un brevet est un brevet, et il ne faut pas jouer avec ça :) –