Note:
Testo rimosso dalla rev 5 e
Testo aggiunto nella rev6
Il word wrapping consiste nel mandare a capo una parola quando la linea in cui si trova supera una certa lunghezza.
Un modo un po’ hackish per farlo:
?
che permette di effettuare molteplici operazioni sulle stringhe
Nel nostro caso si potrebbe fare
documentate ? insieme al modulo) per formattare la stringa.
In effetti se provate questo codice vi troverete una curiosa indentazione all’inizio
del testo. Se volete eliminarla vi bastera’ scrivere
def wordwrap(str, lunghezza ) str.gsub( /\n/, "\n\n" ).gsub( /(.{1,#{lunghezza}})(\s+|$)/, "\\1\n" ) endPossiamo migliorarlo un po’, ad esempio facendolo diventare un metodo di
String, e mettendo un valore di default (un valore di default e’ sempre utile)
class String def wordwrap( lung=72 ) gsub( /\n/, "\n\n" ).gsub( /(.{1,#{lun}})(\s+|$)/, "\\1\n" ) end endMa questo metodo rimane molto brutto e poco elastico. Fortunatemente ruby possiede un potente modulo, chiamato Text::Format
require 'text/format' formattatore = Text::Format.new { @columns = 72 } formattatore.format( stringa )Quale logica guida questo sistema? Nulla di speciale.
Text::Format.new accetta
in input un blocco, e lo esegue al suo interno
(tramite il metodo instance_eval(&blocco).)
Eseguendolo imposta il valore della variabile @columns a 68.
Quando viene chiamato il metodo format(), viene usata questa variabile ( e molte altre, Text::Format.new { @columns = 68 @first_indent = 0 }