String reboot - (1a) incidental whitespace

Jim Laskey james.laskey at oracle.com
Thu Apr 18 16:14:03 UTC 2019


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 <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 <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/4ac51dc7/attachment-0001.html>


More information about the amber-spec-experts mailing list