On 4/22/2019 11:26 AM, Jim Laskey wrote:
Current "strip incidentals" algorithm as captured in String::align
(string-tapas branch)
public String align(int n) {
if (isEmpty()) {
return "";
}
long count = lines().count();
if (count == 1) {
return strip();
}
int outdent = lines().skip(1)
.filter(not(String::isBlank))
.mapToInt(String::indexOfNonWhitespace)
.min()
.orElse(0);
String last = lines().skip(count - 1).findFirst().orElse("");
boolean lastIsBlank = last.isBlank();
if (lastIsBlank) {
outdent = Integer.min(outdent, last.length());
}
return indentStream(lines(1, 1), n - outdent).map(s ->
s.stripTrailing())
.collect(Collectors.joining("\n", "", lastIsBlank ? "\n" : ""));
}
2. long count = lines().count();
if (count == 1) {
return strip();
}
Single line strings (no line terminators) are simply stripped.
""" single line """ ==> "single line"
I think we should reconsider this one. The interpretation we settled on
is: we're willing to treat a multi-line string as being a sequence of
lines, not just of characters, and we're willing to strip incidental
whitespace that arises from accidents of how the string is embedded in
the program. But a single-line string doesn't have any of that; I think
it should be left alone, regardless of quotes.
3. int outdent = lines().skip(1) ...
Ignoring first line, determine least number of leading whitespaces for all
non-blank lines.
String s = """
................line 1..
....................line 2.
"""; ==> 16
I think we should reconsider whether a non-blank first line means that
we should consider any indentation on the first line too. This has the
likely-beneficial side-effect that having a non-blank character
immediately following the """ effectively means "no stripping."
Considering the indentation of the _last_ blank line gives the user more
control while not requiring the user to distort indentation for common
cases. So +1 to "CDI".
Options;
2. a) Single line strings would be just stripLeading, but should
beconsistent
with multi-line and stripTrailing.
""" single line """ ==> "single line "
b) We could do nothing for single line.
""" single line """ ==> " single line "
I vote (b).
5. a) If we omit close delimiter influence, only the content
influences the
indentation. Loss of control by the user.
I think CDI is fine.
6. a) Could strip all leading/trailing blank lines, but awkward to
recover the
LOI. Not recommending.
Agreed.
9. a) Always add a last \n. Loss of control by the user.
The current behavior pairs nicely with CDI.