RFR: 8180276: JTextPane getText return extra when mixed with methods of Document [v2]
Alexey Ivanov
aivanov at openjdk.java.net
Mon Apr 11 10:13:42 UTC 2022
On Mon, 11 Apr 2022 09:51:12 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
> > > I guess in that case "else" part in l359 will be executed...I was talking about requirement of "else" part in l345
> >
> >
> > I did a sample test for this case, it did entered l345, I added \n manually at the end of string, since it passes `if (array[counter] == '\n') {` (l340) condition and fails `if (array[counter - 1] == '\r')` (l342), it executes the else part in l345.....
>
> If you manually add \n to end of string, then as per your previous statements, this code block should have `\n\r\n` and then `\n` , right? Then, I guess user would expect one new line because he manually added \n, but as per your observation, the "else" part is executed so wouldn't `out.write(array, last, counter - last);` write the full \n\r\n\n again, ie 3 new lines?
I admit I got lost in the discussion.
If I understand correctly, the text model removes `\r` from `\r\n` when reading text files. In the `Document` model, `\n` represents the end of the line.
The user explicitly added a text with Windows line end into the text model. When such a text is written out on Windows, an extra `\r` gets added. Then when this text is read in, the `\r` which is not followed by `\n` gets converted to `\n` which results in a new line break.
The `else` block is needed, and it's the most common branch. The text model doesn't contain `\r` (should not contain). When the text is written out on Windows, line ends of `\n` are converted to `\r\n`.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8122
More information about the client-libs-dev
mailing list