[swift-evolution] multi-line string literals.
ted van gaalen
tedvgiosdev at gmail.com
Mon Apr 25 18:00:12 CDT 2016
possible improvement, one could allow
leading spaces before the "data line token"
thus enabling indentation, like so
{
let str =
\\dataaaaaaaaaahgdfhhfdxfg cvcsffggcfg
\\c jggjvhfh fhffhfgxfxgdgfhgj jvhhfhfhcgxgc
.
.
}
TedvG
> On 25 Apr 2016, at 20:47, Ted F.A. van Gaalen <tedvgiosdev at gmail.com> wrote:
>
> This could be a simple solution:
>
> Starting each line with a special token.
>
> In the example here it is the \\ double-backslash .
> when the \\ appears in the first two columns of a source line,
> this tells the compiler that it is a data line and that more might follow.
> the last line starting with \\ completes the data entry.
>
> Here is an example of a string declaration with some XML
> (no escape sequences needed for “)
> Of course it could be anything other kind of textual data as well.
>
> let str =
> \\<!DOCTYPE html>
> \\<html>
> \\<body>
> \\
> \\<h1>W3Schools Internal Note</h1>\n
> \\<div>
> \\<b>To:</b> <span id="to"></span><br>\n
> \\<b>From:</b> <span id="from"></span><br>\n
> \\<b>Message:</b> <span id="message"></span>
> \\</div>
> \\\n
> \\<script>
> \\var txt, parser, xmlDoc;
> \\txt = "<note>" +
> \\"<to>Tove</to>" +
> \\etc. this is the last data line.
>
>
> Conditions:
>
> - Every line starting with \\ in first and second column of the line
> is treated as a data line.
> - All characters behind the \\ are regarded as data, thus note that:
> - the “ is not regarded as a string delimiter
> - the // chars and whatever follows it are interpreted as data on such a line, not as comment.
> - \\ within the data itself are treated as data e.g. this line is valid:
> \\There \\ are three backslashes (as data) in this line \\\\ today.
> \\
> the above data line is empty but is allowed.
>
> - Leading and embedded spaces are respected.
> - Tabs, Linefeeds etc. can be inserted the usual way using \t \n etc.
> - trailing spaces and line terminators cr lf are ignored, filtered out.
>
> let dutchNumbers =
> \\ een twee drie vier vijf
>
> \\ zes zeven acht negen tien
> \\these two data lines are orphans,
>
> Blank lines or other Swift statement lines in-between
> breaks a set of \\ data lines
>
>
> All \\ lines together are treated as one single string literal
> and may occur everywhere where “normal” string literals are allowed.
>
> // E.g. this if statement would be correct:
> // Yes, this would be legal but doesn’t look so great: Indentation not possible here
> if cars ==
> \\Ford
> \\ Delorean
> \\ Chevrolet
> {
> doSomething()
> }
>
> An array with 2 string elements:
>
> var ar =
> [
> \\sdkdslkdslkdsldkshfkjdljfsdljkfdshjklfd dioioioioio \n\nsljkf sdflkf dsl;dfsk sdlfk dfsfkds
> \\ sdkdfkdfldkfd fdfldk fdlkfd jkfds hjklfd dsljkf sdflkf dsl;dfsk sdlfk dfsfkds
> ,
> \\There are many ships in the ha
> \\rbour that are soon sailing away.
> ]
>
>
> I also thought about using “” as token, but this would be interpreted as an empty string.
> or “”” but this is an empty string followed by an unclosed string literal.
>
> Should be relatively easy to implement? What y’all think?
>
>
> Kind Regards
> TedvG
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160426/3073c952/attachment-0001.html>
More information about the swift-evolution
mailing list