Eric Mahurin wrote: > On 5/21/07, Brad Phelan <phelan / tttech.ttt> wrote: >> I've tried posting several times without success ... here again. >> >> http://xtargets.com/snippets/posts/show/68 >> >> shows a partial solution to your challenge by overloading require. It is >> a quick hack but shows you how to write your own pre-processor. The >> new require checks to find files of type .pyrb and then coverts them >> to .rb files before loading them. > > If you change this: > > if l =~ /:\s*$/ > stack.push indent > l.gsub! /:\s*$/,'' > end > > to this: > > if l.sub!(/(\|[^\|]*\|)\s*:\s*$/,' do \1') or > l.sub!(/:\s*$/,'') > stack.push indent > end > > your example won't need the do's: > > def foo: > [1,2,3,4].each |i|: > puts i > [1,2,3,4].each |i|: > puts i > > Unfortunately, this isn't too easy to implement in a formal parser > though, since the "|" after each initially looks ambiguous with the > "|" operator. The ":" to start the indentation style block should > probaly be where the "do" or "{" used to. You could even get rid of > the || by using ":" to start the args and "\n" to end the args (you'd > need an exlicit * to mean don't care about the args): > > def foo : > [1,2,3,4].each : i > puts i > [1,2,3,4].each : i > puts i > > In this example, you get rid of 3 lines and 9 symbols/identifiers (and > add the 3 ":"s) compared to the original ruby. > > All of these ":" solutions would have potential incompatibilities with > the ? : operator and :symbol. > I think I would prefer the leaving the 'do' in and keeping the rubish syntax. It will avoid the potential for the conflicts that you describe. though I do like the economy of > def foo : > [1,2,3,4].each : i > puts i > [1,2,3,4].each : i > puts i Perhapps another symbol other than : -- Brad Phelan http://xtargets.com