thanks pit, works like a treat! nice idea of having it in the string class. thanks a lot, luke "Pit Capitain" <pit / capitain.de> wrote in message news:43807149.9050509 / capitain.de... > luke schrieb: > > ideally how i would like it to behave given your examples, would be like: > > > > "abcde\n c".wrap(5) # => "abcde\nc" > > "a e\na".wrap(5) # => "a e\na" > > > > does that make sense? so text would be flush with the left margin with no > > white space at the beginning of new lines. but whitespace within a line > > should remain intact. > > Of course it makes sense. Here's one version: > > class String > def wrap n > gsub( > / > \b # word boundary > [ \t\r\f]* # whitespace (no newline) > \n # newline > [ \t\r\f]* # whitespace (no newline) > \b # word boundary > /x, > " " # replaced by space > ).gsub( > / > (.{1,#{n}}) # upto n characters > ( # followed by either: > \n # exactly one newline > |\s+ # or other whitespace characters > ) > /x, > "\\1\n" # insert newline after first part > ) > end > end > > I used extended regular expressions to show what they are doing. You can > shorten them if you want. > > The first gsub replaces newlines inside of paragraphs into spaces, but > leaves newlines between paragraphs unchanged. The second gsub is mostly > the original one, but it consumes at most one newline character > (replacing it with itself). This has the effect that newlines between > paragraphs are preserved. > > If you still have problems or questions, feel free to ask. > > Regards, > Pit > >