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