From: Ken Bloom Date: 2008-10-20T21:09:00+09:00 Subject: Re: a new quotation operator to automatically unindent %q and %Q On Sun, 19 Oct 2008 21:33:56 -0500, Trans wrote: > On Oct 19, 5:38 pm, Suraj Kurapati wrote: >> Hello everyone, >> >> Many times I have faced the situation of embedding multi-line strings >> in my programs while wanting to preserve the indentation of the >> surrounding code: >> >>   module Foo >>     class Bar >>       def to_s >>         %q{ >>           This block of text will, >> >>             unfortunately, >> >>           contain the indentation of >> >>             the >>                 surrounding >>                             code! >> >>           Unless we manually remove it, >>           as shown by the gsub() below: >> >>         }.gsub(/^          /, '') >>       end >>     end >>   end >> >> The same problem occurs for "here documents" as well.  We are forced to >> manually remove the indentation. >> >> I would like to propose a new set of string quotation operators %s and >> %S which behave just like %q and %Q respectively, except that they are >> automatically unindented by the Ruby interpreter using the first line >> of non-whitespace text: >> >>   amount_to_unindent = input_string[/\A(?:\r?\n)+([ \t]+)(?=\S)/, 1] >>   input_string.gsub! /^#{amount_to_unindent}/, '' >> >> What do you think? > > Hi-- > > This is not an uncommon request. Consider: > > http://rcrchive.net/rcrs/2 > > Long long ago I proposed %l and %L: > > %l{ > |This block of text will, > | > | unfortunately, > | > |contain the indentation of > | > | the > | surrounding > | code! > | > |Unless we manually remove it, > |as shown by the gsub() below: > } > > But matz does not seem to see merit in any of this. I'm not sure why. > > T. Probably because it can easily be done in a library. See the facets gem's String#margin -- Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/