I did not suggest the single quote because it is commonly found in the English 
language and we would have to escape it.  

That is why I suggested a rare combination using the @" and "@ as the 
delimiters. Unless your text is Obj-C code it would be rare to find it. 


> On May 11, 2016, at 10:50 AM, Vladimir.S via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Did I miss the proposal for single quote?
> 
> Just found on 
> https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md
> >---------------------<
> Single-quotes '' for Character literals: Swift takes the approach of highly 
> valuing Unicode. However, there are multiple concepts of a character that 
> could make sense in Unicode, and none is so much more commonly used than the 
> others that it makes sense to privilege them. We'd rather save single quoted 
> literals for a greater purpose (e.g. non-escaped string literals).
> >---------------------<
> 
> So, what about using of single quote as "special" strings?
> 
> For example, I'd propose to use single quote quotation to say "this string 
> should be used as-is, no escapes processing"
> 
> 'some 1\total\\2\\\3 "sdfsdf" \(-: """ helllooo'
> 
> the only 'disallowed' symbol could be the single quote itself, but I propose 
> the solution used in other languages - duplicate it if we need it in string:
> 
> 'this '' is a single quote in string, and this is another'''
> 
> and also in multiline strings:
> 
> assert( xml == '<?xml version="1.0"?>
>    '<catalog>
>    '    <book id="bk101" empty="">
>    '        <author>\(author)</author>
>    // note '' here in string
>    '        <title>XML Developer''s Guide</title>
>    '        <genre>Computer</genre>
>    '        <price>44.95</price>
>    '        <publish_date>2000-10-01</publish_date>
>    '        <description>An in-depth look at XML.</description>
>    '    </book>
>    '</catalog>')
> 
> (also needs to duplicate single quote if in text. the compromise, yes.)
> 
>> On 10.05.2016 9:53, John Holdsworth via swift-evolution wrote:
>> I’ve assembled a gist to summarise the main proposals of this thread.
>> 
>> https://gist.github.com/johnno1962/5c325a16838ad3c73e0f109a514298bf
>> 
>> At the moment there seem to be four proposals for multi-line strings:
>> 
>> 1) Bent’s proposal for continuation quotes where if a conventional string
>> does not close, if the first non-whitespace character of the next line is “
>> (or perhaps |) the string is continued. This gives you precise control
>> over exactly what is in the string.
>> 
>> 2) Tyler's original proposal involving strings that can contain newlines
>> delimited “””like this“”” as they are in python or, _”like this“_. This works
>> well in external editors and on github. Indentation is catered for by
>> stripping
>> any whitespace before the closing quote from all lines in the string.
>> 
>> 3) HEREDOC syntax <<“TAG” or <<‘TAG’ taken from languages like Perl
>> subject to the same indentation removal rules as “””strings””” above. This
>> has the advantage that the literal is clearly separated from your code.
>> 
>> 4) Heck it all, why not all three syntaxes or some combination.
>> 
>> (There is a separate feature that all string literals can be prefixed by
>> e as in e”\w\d+” to turn of all escape processing for another day)
>> 
>> While the Swift Lexer could easily accommodate all these syntaxes there was
>> talk early on that Swift has more of a "one way, maximally elegant” ethos and
>> indeed I find it difficult imagine the Swift Book breathlessly describing
>> all three
>> formats so I’m wondering if push came to shove which format people would 
>> chose?
>> 
>> My vote having undergone a "road to damascus" moment now we know it is
>> available sooner rather than later is.. HEREDOC! It’s well understood and
>> while at first it would seem to not be a good fit for Swift produces clear
>> code.
>> 
>> Votes?
>> 
>> John
>> 
>> 
>>        // Multi-line string proposals
>>        // https://github.com/apple/swift/pull/2275
>> 
>>        // swift-evolution thread:
>>        //
>> http://thread.gmane.org/gmane.comp.lang.swift.evolution/904/focus=15133
>> 
>>        // These examples should load in the prototype toolchain available
>> here:
>>        // http://johnholdsworth.com/swift-LOCAL-2016-05-09-a-osx.tar.gz
>> 
>>        // The prototype currently parses three new forms of quoting
>>        // These new types are still string literals for the grammar.
>> 
>>        "the existing string literal format"
>>        _"a format that does not require you to escape " characters"_ //
>> possibly redundant
>>        """a python-style syntax that will accept "'s and newlines in the
>> string"""
>>        <<"HEREDOC"
>>        A full heredoc implementation (will always end in a newline)
>>        HEREDOC
>> 
>>        // These strings can be modified by prefixing the string by letters
>>        // There is currently only one, "e" to disable escape processing.
>>        // This is primarily used when specifying regular expressions.
>> 
>>        letstr = "print(\"Hello, world!\\n\")"
>> 
>>        assert( e"print(\"Hello, world!\n\")"== str )
>>        assert( e_"print("Hello, world!\n")"_ == str )
>>        assert( e"""print("Hello, world!\n")""" == str )
>> 
>>        // Continuation quotes allow you to extend a standard string literal
>>        // over multiple lines. If a string does not close on a line and the
>>        // first non-whitespace character on the next line is " that line
>>        // will be a contination of the string including the newline character
>>        // (unless it is escaped). Interpolation and escapes process as before
>>        // unless the first segment of the string is modified by the "e"
>> prefix.
>> 
>>        // The advantage of this format allows you to indent while giving
>>        // you precise control of exactly what is going into the literal.
>> 
>>        letauthor = "Gambardella, Matthew"
>> 
>>        letxml = "<?xml version=\"1.0\"?>
>>            "<catalog>
>>            "   <book id=\"bk101\" empty=\"\">
>>            "       <author>\(author)</author>
>>            "       <title>XML Developer's Guide</title>
>>            "       <genre>Computer</genre>
>>            "       <price>44.95</price>
>>            "       <publish_date>2000-10-01</publish_date>
>>            "       <description>An in-depth look at creating applications
>> with XML.</description>
>>            "   </book>
>>            "</catalog>
>>            ""
>>        print(xml)
>> 
>>        // Perhaps, to avoid the zera crossing effect in text editors due to
>>        // the unbalanced quotes, the continuation character could be "|".
>>        // (newlines escaped with \ and blank lines are discarded.)
>> 
>>        assert( xml == "\
>>            |<?xml version=\"1.0\"?>
>>            |<catalog>
>>            |   <book id=\"bk101\" empty=\"\">
>>            |       <author>\(author)</author>
>>            |       <title>XML Developer's Guide</title>
>>            |       <genre>Computer</genre>
>>            |       <price>44.95</price>
>>            |       <publish_date>2000-10-01</publish_date>
>>            |       <description>An in-depth look at creating \
>>                            |applications with XML.</description>
>> 
>>            |   </book>
>>            |</catalog>
>>            |")
>> 
>> 
>>        // _""_ quoted strings also suppport these behaviours but don't 
>> require
>>        // escaping of embedded " characters. Think of them as a being 
>> modifier
>>        // on conventional string literals. They support continuation quotes.
>> 
>>        assert( xml == _"<?xml version="1.0"?>
>>            "<catalog>
>>            "   <book id="bk101" empty="">
>>            "       <author>\(author)</author>
>>            "       <title>XML Developer's Guide</title>
>>            "       <genre>Computer</genre>
>>            "       <price>44.95</price>
>>            "       <publish_date>2000-10-01</publish_date>
>>            "       <description>An in-depth look at creating applications
>> with XML.</description>
>>            "   </book>
>>            "</catalog>\n"_ )
>> 
>>        // _"strings"_ could allow newlines and replace """strings"""
>> discussed next
>> 
>>        assert( xml == _"<?xml version="1.0"?>
>>            <catalog>
>>               <book id="bk101" empty="">
>>                   <author>\(author)</author>
>>                   <title>XML Developer's Guide</title>
>>                   <genre>Computer</genre>
>>                   <price>44.95</price>
>>                   <publish_date>2000-10-01</publish_date>
>>                   <description>An in-depth look at creating applications
>> with XML.</description>
>>               </book>
>>            </catalog>
>>            "_ )
>> 
>>        // The triple quoted strings can contain newlines and, unless
>> modified by "e"
>>        // will process interpolations and not require escaping of ". To
>> allow indenting,
>>        // any whitespace characters that preceed the closing """ will be
>> removed from
>>        // each line of the final literal. A warning is shown if lines do
>> not contain
>>        // the exact same indentation characters. Any intial linefeed is
>> also removed.
>> 
>>        // The advantage of this format is the """ introducer works well
>> when syntax
>>        // highlighting in external editors and github as quotes are always
>> balanced.
>> 
>>        assert( xml == """
>>            <?xml version="1.0"?>
>>            <catalog>
>>               <book id="bk101" empty="">
>>                   <author>\(author)</author>
>>                   <title>XML Developer's Guide</title>
>>                   <genre>Computer</genre>
>>                   <price>44.95</price>
>>                   <publish_date>2000-10-01</publish_date>
>>                   <description>An in-depth look at creating applications
>> with XML.</description>
>>               </book>
>>            </catalog>
>>            """ )
>> 
>>        assert( xml != e"""<?xml version="1.0"?>
>>            <catalog>
>>               <book id="bk101" empty="">
>>                   <author>\(author)</author>
>>                   <title>XML Developer's Guide</title>
>>                   <genre>Computer</genre>
>>                   <price>44.95</price>
>>                   <publish_date>2000-10-01</publish_date>
>>                   <description>An in-depth look at creating applications
>> with XML.</description>
>>               </book>
>>            </catalog>
>>            """ )
>> 
>>        // heredoc syntax comes in two variants <<"TAG" and <<'TAG'
>> (non-escaping, "e" prefix)
>>        // It applies the same indentation removal rules as does """. This
>> change has wider
>>        // ramifications for the toolchain as compiler tokens are no longer
>> in file order
>>        // and will take a while for a few problems to be ironed out. The
>> more consistent
>>        // <<e"TAG" is a rather clumsy alternative to <<'TAG' for
>> non-escaping strings.
>> 
>>        // HEREDOC's advantage is that the literal no longer interrupts the
>> flow of your code.
>> 
>>        assert( (<<"XML" + <<"XML") == xml + xml )
>>        <?xml version="1.0"?>
>>        <catalog>
>>           <book id="bk101" empty="">
>>               <author>\(author)</author>
>>               <title>XML Developer's Guide</title>
>>               <genre>Computer</genre>
>>               <price>44.95</price>
>>               <publish_date>2000-10-01</publish_date>
>>               <description>An in-depth look at creating applications with
>> XML.</description>
>>           </book>
>>        </catalog>
>>        XML
>>        <?xml version="1.0"?>
>>        <catalog>
>>           <book id="bk101" empty="">
>>               <author>\(author)</author>
>>               <title>XML Developer's Guide</title>
>>               <genre>Computer</genre>
>>               <price>44.95</price>
>>               <publish_date>2000-10-01</publish_date>
>>               <description>An in-depth look at creating applications with
>> XML.</description>
>>           </book>
>>        </catalog>
>>        XML
>> 
>>        // For text you do not want to contain newlines, escape them using \
>> 
>>        print( <<"LOREM" )
>>        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
>> eiusmod tempor incididunt \
>>        ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
>> nostrud exercitation ullamco \
>>        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
>> dolor in reprehenderit in \
>>        voluptate velit esse cillum dolore eu fugiat nulla pariatur.
>> Excepteur sint occaecat cupidatat \
>>        non proident, sunt in culpa qui officia deserunt mollit anim id est
>> laborum.\
>>        LOREM
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to