Feature #11529

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

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:

a 1
b 2]

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 ...


- I did expect this to be a problem. But it's not.
- in my faint memory, old ruby versions were rumoured to parse `%sqfooq %sqfooq => "foo"` "foo"
but this is no longer true: `%sqfooq %sqfooq => SyntaxError: (eval):2: unknown type of %string` %string

- the characters used for enclosing should be clearly defined
- we have two classes:

paired chars like `() () [] {} <>`
quoting chars like `' ' " / @ _ # $ %` %

My Suggestion:

- the quoting chars should be deprecated (try this: `%Q%%%%`) %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