String reboot - (1a) incidental whitespace

Guy Steele guy.steele at oracle.com
Wed Apr 10 21:48:05 UTC 2019


> On Apr 10, 2019, at 5:36 PM, Guy Steele <guy.steele at oracle.com> wrote:
> 
> 
>> On Apr 10, 2019, at 4:54 PM, Brian Goetz <brian.goetz at oracle.com <mailto:brian.goetz at oracle.com>> wrote:
>> 
>> This is a plateful! 
>> 
>> Stripping "incidental" whitespace is an attractive target of opportunity; the real question is, can we do it right enough of the time, and when we get it wrong, is there an easy way for the user to recover and get what they want?  
>> 
>> Kevin described this as: "find the magic rectangle"; that there should be a rectangle enclosing the snippet that sets apart the incidental whitespace from the essential.  In your examples, most of the time, the magic rectangle is, well, the actual rectangle in your text.  
>> 
>> 
>>> 
>>> Examples;
>>> 
>>> String a = """
>>>            +--------+
>>>            |  text  |
>>>            +--------+
>>>            """; // first characters in first column?
> 
> Which suggests yet another approach to multiline string literals:
> 
> String a = “””””””””””””””””””””””””””””””””””””””
> 	   “A rectangle of double quotes         "
>            “   can enclose any arbitrary text    “
>            “   with any desired indentation,     “
>            “   and you can assume any trailing   “
>            “   whitespace on each line will be   “
>            “   removed and that each line will   “
>            “   end with a \\n <smb://n>.                   “
>            “                                     “
>            “So all you need is IDE support for   “
>            “   making nice rectangles.           “
>            “””””””””””””””””””””””””””””””””””””””;
> 
> String result = “”””””””””””””””””””””””””””””””””””””””””””””””
>                 “public class Main {                           “
>                 “    public static void main(String... args) { “
>                 “        System.out.println("Hello World!”);   “
>                 “    }                                         “
>                 “}                                             “
>                 “”””””””””””””””””””””””””””””””””””””””””””””””;
> 
> String html = “””””””””””””””””””””””””””””””””””””””””””””””
>               “<html>                                       “
>               “  <body style=\"width: 100vw\”>              “
>               “        <p>Hello World.</p>                  “
>               “  </body>                                    “
>               “  <script>console.log(\"\\nloaded\")</script>”
>               “</html>                                      “
>               “””””””””””””””””””””””””””””””””””””””””””””””;
> 

Note that I was inconsistent with my use of escapes.  I reckon you should be able to use escapes, but perhaps one need not escape included double quotes because you can tell from the length of the initial line of double-quotes how much text to skip before you expect see the double quote that marks the right-hand edge of the rectangle.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20190410/4b4c3c3b/attachment-0001.html>


More information about the amber-spec-experts mailing list