Word Wrap

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


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:
   def wordwrap(str, lunghezza )
       str.gsub( /\n/, "\n\n" ).gsub( /(.{1,#{lunghezza}})(\s+|$)/, "\\1\n" )
   end
Possiamo 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
   end
Ma questo metodo rimane molto brutto e poco elastico. Fortunatemente ruby possiede un potente modulo, chiamato Text::Format che permette di effettuare molteplici operazioni sulle stringhe Nel nostro caso si potrebbe fare
   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, 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
   Text::Format.new {
     @columns = 68
     @first_indent = 0
   }
Updated on November 25, 2005 13:49 by Ruby Fan (127.0.0.1)