2010-10-18 14 views
0

J'ai une implémentation de dialogue qui reçoit une longueur de texte de l'utilisateur et je voudrais le formater sur plusieurs lignes d'une manière visuellement agréable. L'utilisateur peut inclure ses propres sauts de ligne dans la chaîne que je voudrais également prendre en compte.Comment démarrer l'implémentation d'un algorithme de texte en cours?

Quelqu'un est-il au courant du pseudocode ou d'autre chose accessible au public que je pourrais utiliser comme référence pour coder un tel algorithme?

+0

Quel genre de texte? Prose anglaise? –

+0

@belisarius: Oui, la prose anglaise. – fbrereto

+0

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 :) –

Répondre

0

Si vous voulez dire un mot de base, j'ai trouvé this posting une lecture agréable. Si vous parlez de la césure, de la justification complète, et du crénage ... Je suis vide pour l'instant.

0

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é.