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.
Most segmentation methods live on GraphemeClusterSegmenterBorrowed
, which can be obtained via
GraphemeClusterSegmenter::new()
or GraphemeClusterSegmenter::as_borrowed()
.
§Examples
Segment a string:
use icu::segmenter::GraphemeClusterSegmenter;
let segmenter = GraphemeClusterSegmenter::new();
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::new();
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_provider_source
), 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::new();
// நி (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 const fn new() -> GraphemeClusterSegmenterBorrowed<'static>
pub const fn new() -> GraphemeClusterSegmenterBorrowed<'static>
Constructs a GraphemeClusterSegmenterBorrowed
with an invariant locale from compiled data.
✨ Enabled with the compiled_data
Cargo feature.
Sourcepub fn try_new_with_buffer_provider(
provider: &(impl BufferProvider + ?Sized),
) -> Result<GraphemeClusterSegmenter, DataError>
pub fn try_new_with_buffer_provider( provider: &(impl BufferProvider + ?Sized), ) -> Result<GraphemeClusterSegmenter, DataError>
A version of [Self :: new
] that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
Sourcepub fn try_new_unstable<D>(
provider: &D,
) -> Result<GraphemeClusterSegmenter, DataError>
pub fn try_new_unstable<D>( provider: &D, ) -> Result<GraphemeClusterSegmenter, DataError>
A version of Self::new
that uses custom data provided by a DataProvider
.
Sourcepub fn as_borrowed(&self) -> GraphemeClusterSegmenterBorrowed<'_>
pub fn as_borrowed(&self) -> GraphemeClusterSegmenterBorrowed<'_>
Constructs a borrowed version of this type for more efficient querying.
Most useful methods for segmentation are on this type.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GraphemeClusterSegmenter
impl RefUnwindSafe for GraphemeClusterSegmenter
impl !Send for GraphemeClusterSegmenter
impl !Sync for GraphemeClusterSegmenter
impl Unpin for GraphemeClusterSegmenter
impl UnwindSafe for GraphemeClusterSegmenter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more