Bug #15337
closedString#each_grapheme_cluster wrongly splits "\r\n"
Description
The method each_grapheme_cluster
on the String
class wrongly splits CRLF into two clusters, as follows:
[duerst@stazersee ruby2]$ ./ruby -e 'puts "\r\n".each_grapheme_cluster.to_a.inspect'
["\r", "\n"]
[duerst@stazersee ruby2]$ ./ruby -v
ruby 2.6.0dev (2018-11-24 trunk 65950) [x86_64-linux]
The expected result in the above case is:
["\r\n"]
Except for the test cases that contain (unpaired) surrogates, which don't apply for us, this is the only test case that fails when testing with the data at http://www.unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakTest.txt. I have a test script using all that data that I plan to commit as soon as this bug is dealt with.
I would like to make sure that this is correct for Unicode 10.0.0 before moving to Unicode 11.0.0. In both specifications, the CRLF case is listed explicitly first in the specification.
I will try to find out how to fix this by myself, but would definitely appreciate help.
Updated by duerst (Martin Dürst) about 6 years ago
- Blocks Feature #14802: Update Unicode data to Unicode Version 11.0.0 added
Updated by naruse (Yui NARUSE) about 6 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r65954.
Don't use single byte optimization on grapheme clusters
Unicode Text Segmentation considers CRLF as a character. [Bug #15337]
Updated by duerst (Martin Dürst) about 6 years ago
Once we have a fix for this bug, it should be backported to all the versions that implement \X and that we still support.
Updated by naruse (Yui NARUSE) about 6 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: REQUIRED, 2.5: REQUIRED
Updated by nagachika (Tomoyuki Chikanaga) about 6 years ago
- Backport changed from 2.3: DONTNEED, 2.4: REQUIRED, 2.5: REQUIRED to 2.3: DONTNEED, 2.4: REQUIRED, 2.5: DONE
ruby_2_5 r66073 merged revision(s) 65954,65955,65958.