<div dir="ltr"><div class="gmail_quote"><br><div dir="ltr"><span class="">&gt; <span style="font-size:14px">this much flexibility isn&#39;t required in practice</span><div><span style="font-size:14px"><br></span></div></span><div><span style="font-size:14px">I think the syntax may be improved in some way, but I don&#39;t agree with this.</span></div><div><span style="font-size:14px">The options is needed if you ever try to use swift as source code (or html) generator, take </span><span style="color:rgb(80,0,80)">skipLeadingIndent option for example, it will remove leading indent for each line in the text block, without it you have to put each line at line start, rather than indent nicely with your code. </span></div><div><span style="color:rgb(80,0,80)"><br></span></div><div><span style="color:rgb(80,0,80)">I am not sure about </span>tripe-quote multiline (is there any link to the proposal?), but I suppose you take hint from markdown, a short example may look like this:</div><div><br></div><div>class Test {</div><div>    func output(resp: HtmlResponse) {</div><div>        resp.write(```</div><div>&lt;HTML&gt;</div><div>&lt;BODY&gt;</div><div>    ooxx</div><div>&lt;/BODY&gt;</div><div>&lt;/HTML&gt;</div><div>```)</div><div>    }</div><div><span style="color:rgb(80,0,80)">}</span></div><div><span style="color:rgb(80,0,80)"><br></span></div><div><span style="color:rgb(80,0,80)">And in my proposal, :</span></div><div><span style="color:rgb(80,0,80)"><br></span></div><div><span style="color:rgb(80,0,80)">#let #html = #string(end:&quot;--&quot;, </span><span style="color:rgb(80,0,80)">skipLeadingIndent: true</span><span style="color:rgb(80,0,80)">)</span></div><div><span style="color:rgb(80,0,80)"><br></span></div><div><div>class Test {</div><div>    func output(resp: HtmlResponse) {</div><div>        resp.write(#html &quot;</div><div>            &lt;HTML&gt;<br></div><div>            &lt;BODY&gt;</div><div>                ooxx</div><div>            &lt;/BODY&gt;</div><div>            &lt;/HTML&gt;</div><div>            --&quot;)</div><div>    }</div><div><span style="color:rgb(80,0,80)">}</span></div></div><div><br></div><div>I don&#39;t think it look ugly in anyway.</div><div><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2016-03-24 5:13 GMT+08:00 Andrey Tarantsov <span dir="ltr">&lt;<a href="mailto:andrey@tarantsov.com" target="_blank">andrey@tarantsov.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Feels wrong to me. It&#39;s ugly (looks like line noise) and unnecessary (this much flexibility isn&#39;t required in practice). Making features more powerful doesn&#39;t always make them better.<br>
<br>
Some of the use cases you have in mind are probably better handled by macros, whenever they make it into Swift. Macros provide a general and elegant way to handle customizable special cases without introducing an unusual complicated syntax for each of them.<br>
<br>
So, nope, sorry, let&#39;s stick to making tripe-quote multiline strings as awesome as possible, but not awesomer. :D<br>
<br>
A.<br>
<div><div><br>
<br>
<br>
<br>
&gt; On Mar 23, 2016, at 10:49 AM, Steve K. Chiu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; I am new to swift-evolution list, here is my draft proposal for the multi-line string literal problem.<br>
&gt; The idea had been discussed in the list before, but it seems there are no real solution to many of the string literal problem.<br>
&gt; Let&#39;s first define what are the problem with string literal:<br>
&gt;<br>
&gt; 1. should be able to disable escape char<br>
&gt;<br>
&gt; 2. or better, able to replace escape char with user defined char<br>
&gt;<br>
&gt; 3. should be able to write multi-line string literal, and is copy-paste friendly<br>
&gt;<br>
&gt; 4. for multi-line string, should be  able to remove first and last newline char, so user can write string in block<br>
&gt;<br>
&gt; 5. for multi-line string, should be  able to remove leading indent, or remove all indent<br>
&gt;<br>
&gt; 6. for multi-line string, should be  able to replace newline with user defined string (&quot;\r\n&quot;, &quot;\r&quot;, &quot;\r&quot;, or simply &quot; &quot;)<br>
&gt;<br>
&gt; 7. should be able to add feature over time, without breaking existing code<br>
&gt;<br>
&gt; My proposal to the above problem is to introduce new &#39;process instruction&#39; (not sure how to call it), in the following form:<br>
&gt;<br>
&gt; #string(options) &quot;text&quot;<br>
&gt;<br>
&gt; for example:<br>
&gt;<br>
&gt; #string(escape: nil) &quot;^\d+&quot;<br>
&gt;<br>
&gt; #string(escape: &quot;$&quot;, end: &quot;&lt;EOF&gt;&quot;) &quot;<br>
&gt;    $(username),<br>
&gt;    Is it 1358 yet?<br>
&gt; &lt;EOF&gt;&quot;<br>
&gt;<br>
&gt; It is possible to add many options list above, and you can add more options over time without breaking code.<br>
&gt;<br>
&gt; #string(<br>
&gt;     escape: Character? = &quot;\\&quot;,<br>
&gt;     end: String? = nil,<br>
&gt;     skipEnclosureNewline: Bool = true,<br>
&gt;     skipLeadingIndent: Bool = true,<br>
&gt;     skipAllIndent: Bool = false,<br>
&gt;     newline: String? = nil<br>
&gt; )<br>
&gt;<br>
&gt; for 1. &amp; 2., escape option to replace escape char, pass nil will disable escape.<br>
&gt;<br>
&gt; for 3., end option for end-of-string mark, pass nil will disable multi-line processing.<br>
&gt;<br>
&gt; for 4., skipEnclosureNewline will skip newline if it is the first or last char of the string.<br>
&gt;<br>
&gt; for 5., skipLeadingIndent will skip leading indent, leading indent is the leading white-spaces of first line of multi-line string.<br>
&gt;<br>
&gt; for 5., skipAllIndent will skip all indent, this will override skipLeadingIndent.<br>
&gt;<br>
&gt; for 6., newline option to replace newline char in multi-line string, pass nil will disable the replacement (as-is in the source).<br>
&gt;<br>
&gt; But there are one problem remain, as you can see, the #string with options will become very long; I don&#39;t think it is a pleasure to use such expression except for one time literal. To fix the problem, I propose yet another process instruction:<br>
&gt;<br>
&gt; #let #rex = #string(escape: nil)<br>
&gt; #let #mail = #string(escape: &quot;$&quot;, end: &quot;&lt;EOF&gt;&quot;)<br>
&gt;<br>
&gt; Now you can write the string as:<br>
&gt;<br>
&gt; #rex &quot;^\d+&quot;<br>
&gt;<br>
&gt; #mail &quot;<br>
&gt;    $(username),<br>
&gt;    Is it 1358 yet?<br>
&gt; &lt;EOF&gt;&quot;<br>
&gt;<br>
&gt; #let should be able to be used with other # process instruction as well, for example, #available, among other things.<br>
&gt;<br>
&gt; What do you think?<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
</blockquote></div><br></div></div></div></div>
</div><br></div>