String reboot - (1a) incidental whitespace

James Laskey james.laskey at oracle.com
Thu Apr 18 16:20:30 UTC 2019


I’ll update the comments in String::align when we settle. 

Sent from my iPhone

> On Apr 18, 2019, at 1:14 PM, Jim Laskey <james.laskey at oracle.com> wrote:
> 
> I've updated the repo with an updated String::align and switched the compiler to use the String::align method instead of it's own version. I also updated the sample.
> 
> 
>> On Apr 17, 2019, at 4:58 PM, Jim Laskey <james.laskey at oracle.com> wrote:
>> 
>> I pushed changes to http://hg.openjdk.java.net/amber/amber string-tapas branch to reflect the incidental whitespace discussion. What is implemented is what Brian described as 
>> 
>> Version 2 of the algorithm — the “significant closing delimiter” version — is:
>>  - Strip leading and trailing blanks (perhaps limited to one each only)
>>  - Compute the maximal common whitespace prefix of the remaining lines, _including the stripped trailing blank line from above, if any_, and trim that off
>>  - If a blank last line was trimmed, add back a newline
>> 
>> With strip leading and trailing blanks limited to one each.
>> 
>> I also added a "super escape" \~ to opt out of auto align.
>> 
>> 
>> Example:
>> 
>>         String l = """\~
>>                        +--------+
>>                        |  text  |
>>                        +--------+
>>                    """; // what opt out might look like
>> 
>> Actual:
>> 
>> \n
>> .......................+--------+\n
>> .......................|  text  |\n
>> .......................+--------+\n
>> ...................
>> 
>> 
>> Note that the String#align needs tweaking to reflect the algorithm (needs to add closing delimiter influence).
>> 
>> There is a sampler at http://cr.openjdk.java.net/~jlaskey/Strings/AutoAlign.java (included below as well) that shows the examples from my original (1a) incidental whitespace e-mail.
>> 
>> Cheers,
>> 
>> -- Jim
>> 
>> _____________________________________________________________________________________________________________
>> 
>> public class AutoAlign {
>>     public static void report(String label, String result) {
>>         System.out.format("Result of variable %s%n", label);
>>         String formatted = result.replaceAll(" ", ".")
>>                                  .replaceAll("\n", "\\\\n\n");
>>         System.out.format("%s%n%n", formatted);
>>     }
>> 
>>     public static void main(String... args) throws Exception {
>>         String a = """
>>                    +--------+
>>                    |  text  |
>>                    +--------+
>>                    """; // first characters in first column?
>> 
>>         String b = """
>>                        +--------+
>>                        |  text  |
>>                        +--------+
>>                    """; // first characters in first column or indented four spaces?
>> 
>>         String c = """
>>                        +--------+
>>                        |  text  |
>>                        +--------+
>>         """; // first characters in first column or indented several?
>> 
>>         String d = """
>>             +--------+
>>             |  text  |
>>             +--------+
>>         """; // first characters in first column or indented four?
>> 
>>         String e =
>>         """
>>         +--------+
>>         |  text  |
>>         +--------+
>>         """; // heredoc?
>> 
>>         String f = """
>> 
>> 
>>                        +--------+
>>                        |  text  |
>>                        +--------+
>> 
>> 
>>                    """; // one or all leading or trailing blank lines stripped?
>> 
>>         String g = """
>>                       +--------+
>>                       |  text  |
>>                       +--------+"""; // Last \n dropped
>> 
>>         String h = """+--------+
>>                       |  text  |
>>                       +--------+"""; // determine indent of first line using scanner knowledge?
>> 
>>         String i = """  "nested"  """; // strip leading/trailing space?
>> 
>>         String name = " methodName";
>>         String j = ("""
>>                          public static void """ + name + """(String... args) {
>>                              System.out.println(String.join(args));
>>                          }
>>                    """).align(); // how do we handle expressions with multi-line strings?
>> 
>>         String k = String.format("""
>>                          public static void %s(String... args) {
>>                              System.out.println(String.join(args));
>>                          }
>>                    """, name); // is this the answer to  multi-line string expressions?
>> 
>>         String l = """\~
>>                        +--------+
>>                        |  text  |
>>                        +--------+
>>                    """; // what opt out might look like
>> 
>>         report("a", a);
>>         report("b", b);
>>         report("c", c);
>>         report("d", d);
>>         report("e", e);
>>         report("f", f);
>>         report("g", g);
>>         report("h", h);
>>         report("i", i);
>>         report("j", j);
>>         report("k", k);
>>         report("l", l);
>>     }
>> }
>> 
>> _____________________________________________________________________________________________________________
>> 
>> Result of variable a
>> +--------+\n
>> |..text..|\n
>> +--------+\n
>> 
>> 
>> Result of variable b
>> ....+--------+\n
>> ....|..text..|\n
>> ....+--------+\n
>> 
>> 
>> Result of variable c
>> ...............+--------+\n
>> ...............|..text..|\n
>> ...............+--------+\n
>> 
>> 
>> Result of variable d
>> ....+--------+\n
>> ....|..text..|\n
>> ....+--------+\n
>> 
>> 
>> Result of variable e
>> +--------+\n
>> |..text..|\n
>> +--------+\n
>> 
>> 
>> Result of variable f
>> \n
>> \n
>> ....+--------+\n
>> ....|..text..|\n
>> ....+--------+\n
>> \n
>> \n
>> 
>> 
>> Result of variable g
>> +--------+\n
>> |..text..|\n
>> +--------+
>> 
>> Result of variable h
>> +--------+\n
>> |..text..|\n
>> +--------+
>> 
>> Result of variable i
>> "nested"
>> 
>> Result of variable j
>> public.static.void.methodName(String....args).{\n
>> ..........System.out.println(String.join(args));\n
>> ......}\n
>> 
>> 
>> Result of variable k
>> ......public.static.void..methodName(String....args).{\n
>> ..........System.out.println(String.join(args));\n
>> ......}\n
>> 
>> 
>> Result of variable l
>> \n
>> .......................+--------+\n
>> .......................|..text..|\n
>> .......................+--------+\n
>> ...................
>> 
>> 
>> 
>> 
>> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20190418/8a5e895e/attachment-0001.html>


More information about the amber-spec-experts mailing list