Feature #11529
closedextensible % literal declarations
Description
The ruby syntax provides for declaring literals by using the % escapes:
- %q(foo) => 'foo'
 - %Q(foo) => "foo"
 - %w(foo bar) => ['foo', 'bar']
 - %i(foo bar) => [:foo, :bar]
 
It should be possible to define new % escapes.
Use cases:
I currently use:
%q{select foo from bar}
to quote my sql statements.
It would improve readability to spell that:
%sql{select foo from bar}
(with %sql being an alias of %q [see parsing problems below])
But there could be more interesting uses:
%hash[
   a 1
   b 2]
%triples[
    a b c
    1 2 3]
%json/{"foo":"bar", "zip":"zap"}/
%octal_data[012 345 677]
and the extension code would be something like
def %hash(s)
return ...
end
Notes:
- 
I did expect this to be a problem. But it's not.
 - 
in my faint memory, old ruby versions were rumoured to parse
%sqfooq => "foo"
but this is no longer true:%sqfooq => SyntaxError: (eval):2: unknown type of %string - 
the characters used for enclosing should be clearly defined
 - 
we have two classes:
- paired chars like 
() [] {} <> - quoting chars like 
' " / @ _ # $ % 
 - paired chars like 
 
My Suggestion:
- 
the quoting chars should be deprecated (try this:
%Q%%%%) - 
the set of paired chars should be extended to include selected pairs from unicode math symbols
- unicode does not yet define a plane for open-close-brackets
 - see http://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets