Alternate string literal syntax (with mixins)?
Kristian Kilpi
kjkilpi at gmail.com
Fri Feb 16 03:48:24 PST 2007
On Fri, 16 Feb 2007 07:54:01 +0200, janderson <askme at me.com> wrote:
> janderson wrote:
>> Kristian Kilpi wrote:
>>>
>>> String literals with mixins are a bit awkward sometimes (editor
>>> highlighting etc).
>>>
>>> Some special marks -- I use @{ }@ here -- could be used to mark a part
>>> of a source file as a string literal, just like /* */ marks a part of
>>> code as a comment. For example:
>>>
>>> mixin(
>>> @{
>>> //this is a string literal block
>>> if(..) {
>>> ...
>>> }
>>> }@
>>> );
>>>
>>> The @{ }@ marks have a close relation, of course, with quotation marks
>>> "". But because there is a starting mark and an ending mark, you can
>>> nest them. (And because they are used to mark a part of a file as a
>>> string literal, they are not actually the part of the 'working code'
>>> just like the "" literals are, if you get what I'm trying to say.)
>>>
>>> E.g.
>>>
>>> alias @{
>>> str = @{ foo }@ ~ @{ bar }@;
>>> str ~= "blah";
>>> if(...) {
>>> ...
>>> }
>>> }@ MyCode;
>>>
>>> mixin(MyCode);
>> Just a thought what about keeping this in the same spirit of D's other
>> string prefixes. ie
>> char[] string = l"
>> ";
>> I do like the label idea suggested before:
>> Perhaps:
>> char[] string = :something"
>> ":something;
>> Which would work with the other postfixes:
>> char[] string = r:something"
>> "d:something;
>> And you could also choose not to label it:
>> char[] string = :"
>> ":;
>> Best of all worlds.
>> -Joel
>
>
> Humm would be problomatic with ()?:
>
> Well @ or $ would be fine. I guess although it looks syntacticly ugly to
> me.
>
> char[] string = @label"
>
>
> "@label;
>
> -Joel
Well, one could use ::" ":: syntax which is not ambiguous. However, that's
a bit lengthy.
In addition, because the syntax contains quotation marks, editors will
treat the text between them as normal strings. Instead, it would be nice,
IMO, that (meta)code between the marks would be highlighted normally.
For example, if an editor highlights strings green, then in the following:
import(::"
//block A
a = 1;
s = "block B";
//block C
b = 2;
"::);
the blocks A and C will be green but the block B won't. (That's an
opposite to the normal code.)
More information about the Digitalmars-d
mailing list