<html><head><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}

h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}

h1 {
        color: #000000;
        font-size: 28pt;
}

h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}

h3 {
        font-size: 18px;
}

h4 {
        font-size: 16px;
}

h5 {
        font-size: 14px;
}

h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}

hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
    display: inherit;
}

p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}

a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}

#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}

button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}

code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}

code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}

pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}

pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}

#ws { background-color: #f8f8f8; }


.bloop_markdown table {
border-collapse: collapse;  
font-family: Helvetica, arial, freesans, clean, sans-serif;  
color: rgb(51, 51, 51);  
font-size: 15px; line-height: 25px;
padding: 0; }

.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
     
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }

.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }

.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }

.bloop_markdown blockquote{
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

code, pre, #ws, #message {
    word-break: normal;
    word-wrap: normal;
}

hr {
    display: inherit;
}

.bloop_markdown :first-child {
    -webkit-margin-before: 0;
}

code, pre, #ws, #message {
    font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}


.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="bloop_markdown"><p>Thank you for the toolchain, I’m currently downloading it to test.</p>

<p>As already mentioned a couple times the rules can be simplified by disallowing text after and before the starting/leading delimiters.</p>

<ol>
<li><p>Allow single line tripled string <code>"""text"""</code></p></li>
<li><p>Multi-lined text should always be between the delimiter lines. Therefore there is no need for an implicit leading new line or something like <code>"""\</code>. The trailing new line is the artifact of the rule #3.</p></li>
<li><p>Each line in between the delimiter lines produces an implicit new line if not disabled with an explicit backslash at the end of that line. (Last line produces the mentioned artifact in #2.)</p></li>
<li><p>The backslash is also used for trailing precision if needed, however the cost is that the implicit new line is disabled and one would need to write <code>\n\</code>.</p></li>
<li><p>The closing delimiter determines the indent for the current multi-line string literal, by calculating its indent-prefix from the start of that line to the delimiter itself.</p></li>
<li><p>Each line in between the delimiters is stripped exactly like the calculated indent-prefix in #5. If it’s not possible, because of a mismatch of the spacing characters or a non-spacing character was found before the algorithm finished stripping the current line, a warning is emitted to fix the indent. (This rule covers literally everyones indent preferences, because it should not care if the ident is using spaces only, tabs only or a mix of them.)</p></li>
<li><p>#5 and #7 also allows easy leading spacing precision, which was a tedious approach with continuation quotes.</p></li>
</ol>

<p>I think I pretty much covered everything here now. </p>

<p>Let me know if I missed something.</p>

<p></p></div><div class="bloop_original_html"><style>body{font-family:Helvetica,Arial;font-size:13px}</style><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <br> <div id="bloop_sign_1492024452254792960" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 12. April 2017 um 21:08:19, John Holdsworth via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>



<title></title>


<div class="">Finally.. a&nbsp;<a href="http://johnholdsworth.com/swift-LOCAL-2017-04-12-a-osx.tar.gz" class="">new Xcode toolchain</a>&nbsp;is available largely in sync
with the proposal as is.</div>
<div class="">(You need to restart Xcode after selecting the
toolchain to restart SourceKit)</div>
<div class=""><br class=""></div>
<div class="">I personally am undecided whether to remove the first
line if it is empty. The new</div>
<div class="">rules are more consistent but somehow less practical.
A blank initial line is almost</div>
<div class="">never what a user would want and I would tend towards
removing it automatically.</div>
<div class="">This is almost what a user would it expect it to
do.</div>
<div class=""><br class=""></div>
<div class="">I’m less sure the same applies to the trailing
newline. If this is a syntax for</div>
<div class="">multi-line strings, I'd argue that they should
normally be complete lines -</div>
<div class="">particularly since the final newline can so easily be
escaped.</div>
<div class=""><br class=""></div>
<div class=""><span style="font-family: Menlo; font-size: 11px; font-variant-ligatures: no-common-ligatures;" class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-family: Menlo; font-size: 11px; font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);" class="">let</span> <span style="font-family: Menlo; font-size: 11px; font-variant-ligatures: no-common-ligatures;" class="">longstring = ""</span><span style="font-family: Menlo; font-size: 11px; font-variant-ligatures: no-common-ligatures; color: rgb(209, 47, 27);" class="">"\</span></div>
<div class="">
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lorem ipsum
dolor sit amet, consectetur adipiscing elit, sed do eiusmod
\</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, \</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.\</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
"</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">""</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><br class=""></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp;</span> <span style="font-variant-ligatures: no-common-ligatures; color: #3e1e81" class="">print</span><span style="font-variant-ligatures: no-common-ligatures" class="">(
""</span><span style="font-variant-ligatures: no-common-ligatures; color: #d12f1b" class="">"\</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Usage: myapp
&lt;options&gt;</span></div>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27); min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;</span><br class="webkit-block-placeholder"></p>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Run myapp to do
mything</span></div>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27); min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;</span><br class="webkit-block-placeholder"></p>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Options:</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -myoption - an
option</span></div>
<div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(209, 47, 27);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
"</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">"" )</span></div>
</div>
<div class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""><br class=""></span></div>
<div class="">(An explicit “\n" in the string should never be
stripped btw)</div>
<div class=""><br class=""></div>
<div class="">Can we have a straw poll for the three
alternatives:</div>
<div class=""><br class=""></div>
<div class="">1) Proposal as it stands &nbsp;- no magic removal of
leading/training blank lines.</div>
<div class="">2) Removal of a leading blank line when indent
stripping is being applied.</div>
<div class="">3) Removal of leading blank line and trailing newline
when indent stripping is being applied.</div>
<div class=""><br class=""></div>
<div class="">My vote is for the pragmatic path: 2)</div>
<div class=""><br class=""></div>
<div class="">(The main intent of this revision was actually
removing the link between how the</div>
<div class="">string started and whether indent stripping was
applied which was unnecessary.)</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On 12 Apr 2017, at 17:48, Xiaodi Wu via
swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Agree. I prefer the new rules over the old, but
considering common use cases, stripping the leading and trailing
newline makes for a more pleasant experience than not stripping
either of them.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">I think that is generally worth prioritizing over a
simpler algorithm or even accommodating more styles. Moreover, a
user who wants a trailing or leading newline merely types an extra
one if there is newline stripping, so no use cases are made
difficult, only a very common one is made more
ergonomic.</span></div>
</blockquote>
</div>
<br class="">


_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>