Struct icu_segmenter::GraphemeClusterSegmenter
source · pub struct GraphemeClusterSegmenter { /* private fields */ }
Expand description
Segments a string into grapheme clusters.
Supports loading grapheme cluster break data, and creating grapheme cluster break iterators for different string encodings.
Examples
Segment a string:
use icu_segmenter::GraphemeClusterSegmenter;
let segmenter =
GraphemeClusterSegmenter::try_new_unstable(&icu_testdata::unstable())
.expect("Data exists");
let breakpoints: Vec<usize> = segmenter.segment_str("Hello 🗺").collect();
// World Map (U+1F5FA) is encoded in four bytes in UTF-8.
assert_eq!(&breakpoints, &[0, 1, 2, 3, 4, 5, 6, 10]);
Segment a Latin1 byte string:
use icu_segmenter::GraphemeClusterSegmenter;
let segmenter =
GraphemeClusterSegmenter::try_new_unstable(&icu_testdata::unstable())
.expect("Data exists");
let breakpoints: Vec<usize> =
segmenter.segment_latin1(b"Hello World").collect();
assert_eq!(&breakpoints, &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
Successive boundaries can be used to retrieve the grapheme clusters. In particular, the first boundary is always 0, and the last one is the length of the segmented text in code units.
use itertools::Itertools;
let text = "मांजर";
let grapheme_clusters: Vec<&str> = segmenter
.segment_str(text)
.tuple_windows()
.map(|(i, j)| &text[i..j])
.collect();
assert_eq!(&grapheme_clusters, &["मां", "ज", "र"]);
This segmenter applies all rules provided to the constructor.
Thus, if the data supplied by the provider comprises all
grapheme cluster boundary rules from Unicode Standard Annex #29,
Unicode Text Segmentation, which is the case of default data
(both test data and data produced by icu_datagen
), the segment_*
functions return extended grapheme cluster boundaries, as opposed to
legacy grapheme cluster boundaries. See Section 3, Grapheme Cluster
Boundaries, and Table 1a, Sample Grapheme Clusters,
in Unicode Standard Annex #29, Unicode Text Segmentation.
use icu_segmenter::GraphemeClusterSegmenter;
let segmenter =
GraphemeClusterSegmenter::try_new_unstable(&icu_testdata::unstable())
.expect("Data exists");
// நி (TAMIL LETTER NA, TAMIL VOWEL SIGN I) is an extended grapheme cluster,
// but not a legacy grapheme cluster.
let ni = "நி";
let egc_boundaries: Vec<usize> = segmenter.segment_str(ni).collect();
assert_eq!(&egc_boundaries, &[0, ni.len()]);
Implementations§
source§impl GraphemeClusterSegmenter
impl GraphemeClusterSegmenter
sourcepub fn try_new_unstable<D>(provider: &D) -> Result<Self, SegmenterError>where
D: DataProvider<GraphemeClusterBreakDataV1Marker> + ?Sized,
pub fn try_new_unstable<D>(provider: &D) -> Result<Self, SegmenterError>where D: DataProvider<GraphemeClusterBreakDataV1Marker> + ?Sized,
Constructs a GraphemeClusterSegmenter
with an invariant locale.
sourcepub fn try_new_with_any_provider(
provider: &impl AnyProvider + ?Sized
) -> Result<Self, SegmenterError>
pub fn try_new_with_any_provider( provider: &impl AnyProvider + ?Sized ) -> Result<Self, SegmenterError>
Creates a new instance using an AnyProvider
.
For details on the behavior of this function, see: Self::try_new_unstable
sourcepub fn try_new_with_buffer_provider(
provider: &impl BufferProvider + ?Sized
) -> Result<Self, SegmenterError>
pub fn try_new_with_buffer_provider( provider: &impl BufferProvider + ?Sized ) -> Result<Self, SegmenterError>
✨ Enabled with the "serde"
feature.
Creates a new instance using a BufferProvider
.
For details on the behavior of this function, see: Self::try_new_unstable
sourcepub fn segment_str<'l, 's>(
&'l self,
input: &'s str
) -> GraphemeClusterBreakIteratorUtf8<'l, 's>
pub fn segment_str<'l, 's>( &'l self, input: &'s str ) -> GraphemeClusterBreakIteratorUtf8<'l, 's>
Creates a grapheme cluster break iterator for an str
(a UTF-8 string).
sourcepub fn segment_utf8<'l, 's>(
&'l self,
input: &'s [u8]
) -> GraphemeClusterBreakIteratorPotentiallyIllFormedUtf8<'l, 's>
pub fn segment_utf8<'l, 's>( &'l self, input: &'s [u8] ) -> GraphemeClusterBreakIteratorPotentiallyIllFormedUtf8<'l, 's>
Creates a grapheme cluster break iterator for a potentially ill-formed UTF8 string
Invalid characters are treated as REPLACEMENT CHARACTER
There are always breakpoints at 0 and the string length, or only at 0 for the empty string.
sourcepub fn segment_latin1<'l, 's>(
&'l self,
input: &'s [u8]
) -> GraphemeClusterBreakIteratorLatin1<'l, 's>
pub fn segment_latin1<'l, 's>( &'l self, input: &'s [u8] ) -> GraphemeClusterBreakIteratorLatin1<'l, 's>
Creates a grapheme cluster break iterator for a Latin-1 (8-bit) string.
There are always breakpoints at 0 and the string length, or only at 0 for the empty string.
sourcepub fn segment_utf16<'l, 's>(
&'l self,
input: &'s [u16]
) -> GraphemeClusterBreakIteratorUtf16<'l, 's>
pub fn segment_utf16<'l, 's>( &'l self, input: &'s [u16] ) -> GraphemeClusterBreakIteratorUtf16<'l, 's>
Creates a grapheme cluster break iterator for a UTF-16 string.
There are always breakpoints at 0 and the string length, or only at 0 for the empty string.