www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - WYSIWYG string still limited

reply "Swer" <swer yoyocowo.com.nb> writes:
r"abc\s*$"  ok
r"abc"s*$"  fail

 `abc"s*$`  ok
 `abc`s*$`  fail

as a improvement from C/C++, D use [`] as WYSIWYG string delimiter easy to 
use, but still not enough. why dont perfect solution to WYSIWYG string. perl 
has one, but not fit for D. My poposal below.

pargam(delimiter, "[[WYSIWYG]]");

const char [] somestr = [[WYSIWYG]]
You can use write any some here.
const char [] code_demo1 = `demo1`;
const char [] code_demo2 = r"demo2";
[[WYSIWYG]]

ofcause you can replace the delimiter from "[[WYSIWYG]]" to any string you 
like. 
Dec 15 2007
next sibling parent reply Kirk McDonald <kirklin.mcdonald gmail.com> writes:
Swer wrote:
 r"abc\s*$"  ok
 r"abc"s*$"  fail
 
  `abc"s*$`  ok
  `abc`s*$`  fail
 
 as a improvement from C/C++, D use [`] as WYSIWYG string delimiter easy to 
 use, but still not enough. why dont perfect solution to WYSIWYG string. perl 
 has one, but not fit for D. My poposal below.
 
 pargam(delimiter, "[[WYSIWYG]]");
 
 const char [] somestr = [[WYSIWYG]]
 You can use write any some here.
 const char [] code_demo1 = `demo1`;
 const char [] code_demo2 = r"demo2";
 [[WYSIWYG]]
 
 ofcause you can replace the delimiter from "[[WYSIWYG]]" to any string you 
 like. 
 
 

The D 2.x series has already added a few new forms of string literals, including delimited strings. They look like this: q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar" They are documented here: http://digitalmars.com/d/lex.html#StringLiteral -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org
Dec 15 2007
parent reply "Swer" <swer yoyocowo.com.nb> writes:
"Kirk McDonald" <kirklin.mcdonald gmail.com> Swer wrote:
 The D 2.x series has already added a few new forms of string literals,

q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar"

hmm thats still not enough, and complex for compiler to implement. I modified my poposal as below: const char [] code_demo = {{anystr{ q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar" }anystr}} or const char [] code_demo = {{{ q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar" }}} if there is no }}} in text. 'anystr' can be replaced to any string you like. '{{' '}}' '{{{' '}}}' are easier for compiler to detect.
Dec 15 2007
parent reply Kirk McDonald <kirklin.mcdonald gmail.com> writes:
Swer wrote:
 "Kirk McDonald" <kirklin.mcdonald gmail.com> Swer wrote:
 
The D 2.x series has already added a few new forms of string literals,

including delimited strings. They look like this: q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar"

hmm thats still not enough, and complex for compiler to implement. I modified my poposal as below:

The compiler already has implemented them. Also, I've written the D lexer in Pygments (which supports them) and implemented highlighting for these new string literals in vim. They are not particularly hard to implement.
 const char [] code_demo = {{anystr{
  q"(foo(xxx))"   // "foo(xxx)"
  q"[foo{]"       // "foo{"
  q"/foo"bar/"    // "foo\"bar"
 }anystr}}
 
 or
 
 const char [] code_demo = {{{
  q"(foo(xxx))"   // "foo(xxx)"
  q"[foo{]"       // "foo{"
  q"/foo"bar/"    // "foo\"bar"
 }}}
 
 if there is no }}} in text.
 
 'anystr' can be replaced to any string you like. '{{'  '}}'  '{{{'  '}}}' 
 are easier for compiler to detect.
 
 

If you'd bothered looking at the docs, you'd have seen that there are other forms of string literals which I did not mention. There are token strings: q{ q"(foo(xxx))" // "foo(xxx)" q"[foo{]" // "foo{" q"/foo"bar/" // "foo\"bar" } These have the caveat that they can only contain valid D tokens. There are also heredoc strings, which are really just a kind of delimited string: q"IDENT This is a string. It can contain anything. IDENT" IDENT may be any identifier. The newlines after the opening identifier and before the closing one are required. -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org
Dec 15 2007
parent "Swer" <swer yoyocowo.com.nb> writes:
"Kirk McDonald" <kirklin.mcdonald gmail.com>  Swer wrote:
 These have the caveat that they can only contain valid D tokens.

 There are also heredoc strings, which are really just a kind of delimited 
 string:

 q"IDENT
 This is a string. It can contain anything.
 IDENT"

 IDENT may be any identifier. The newlines after the opening identifier and 
 before the closing one are required.

That's I want, D 2.0 is great! Thanks!
Dec 16 2007
prev sibling parent Robert DaSilva <sp.unit.262+digitalmars gmail.com> writes:
Swer wrote:
 r"abc\s*$"  ok
 r"abc"s*$"  fail
 
  `abc"s*$`  ok
  `abc`s*$`  fail
 
 as a improvement from C/C++, D use [`] as WYSIWYG string delimiter easy to 
 use, but still not enough. why dont perfect solution to WYSIWYG string. perl 
 has one, but not fit for D. My poposal below.
 
 pargam(delimiter, "[[WYSIWYG]]");
 
 const char [] somestr = [[WYSIWYG]]
 You can use write any some here.
 const char [] code_demo1 = `demo1`;
 const char [] code_demo2 = r"demo2";
 [[WYSIWYG]]
 
 ofcause you can replace the delimiter from "[[WYSIWYG]]" to any string you 
 like. 
 
 

We do. q"[do"too]" http://www.digitalmars.com/d/lex.html#StringLiteral
Dec 15 2007