Skip to content

Commit 7bd5b4d

Browse files
authored
Merge pull request #16 from mbrubeck/as_str
Add as_str methods to iterator types
2 parents b61677d + b96840c commit 7bd5b4d

File tree

5 files changed

+93
-3
lines changed

5 files changed

+93
-3
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "unicode-segmentation"
4-
version = "1.0.3"
4+
version = "1.1.0"
55
authors = ["kwantam <kwantam@gmail.com>"]
66

77
homepage = "https://github.com/unicode-rs/unicode-segmentation"

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,23 @@ to your `Cargo.toml`:
4040

4141
```toml
4242
[dependencies]
43-
unicode-segmentation = "1.0.2"
43+
unicode-segmentation = "1.1.0"
4444
```
45+
46+
# Change Log
47+
48+
## 1.1.0
49+
50+
* Add `as_str` methods to the iterator types.
51+
52+
## 1.0.3
53+
54+
* Code cleanup and additional tests.
55+
56+
## 1.0.1
57+
58+
* Fix a bug affecting some grapheme clusters containing Prepend characters.
59+
60+
## 1.0.0
61+
62+
* Upgrade to Unicode 9.0.0.

src/grapheme.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@ pub struct GraphemeIndices<'a> {
1919
iter: Graphemes<'a>,
2020
}
2121

22+
impl<'a> GraphemeIndices<'a> {
23+
#[inline]
24+
/// View the underlying data (the part yet to be iterated) as a slice of the original string.
25+
///
26+
/// ```rust
27+
/// # use unicode_segmentation::UnicodeSegmentation;
28+
/// let mut iter = "abc".grapheme_indices(true);
29+
/// assert_eq!(iter.as_str(), "abc");
30+
/// iter.next();
31+
/// assert_eq!(iter.as_str(), "bc");
32+
/// iter.next();
33+
/// iter.next();
34+
/// assert_eq!(iter.as_str(), "");
35+
/// ```
36+
pub fn as_str(&self) -> &'a str {
37+
self.iter.as_str()
38+
}
39+
}
40+
2241
impl<'a> Iterator for GraphemeIndices<'a> {
2342
type Item = (usize, &'a str);
2443

@@ -51,6 +70,25 @@ pub struct Graphemes<'a> {
5170
regional_count_back: Option<usize>,
5271
}
5372

73+
impl<'a> Graphemes<'a> {
74+
#[inline]
75+
/// View the underlying data (the part yet to be iterated) as a slice of the original string.
76+
///
77+
/// ```rust
78+
/// # use unicode_segmentation::UnicodeSegmentation;
79+
/// let mut iter = "abc".graphemes(true);
80+
/// assert_eq!(iter.as_str(), "abc");
81+
/// iter.next();
82+
/// assert_eq!(iter.as_str(), "bc");
83+
/// iter.next();
84+
/// iter.next();
85+
/// assert_eq!(iter.as_str(), "");
86+
/// ```
87+
pub fn as_str(&self) -> &'a str {
88+
self.string
89+
}
90+
}
91+
5492
// state machine for cluster boundary rules
5593
#[derive(Copy,Clone,PartialEq,Eq)]
5694
enum GraphemeState {

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
//!
4747
//! ```toml
4848
//! [dependencies]
49-
//! unicode-segmentation = "1.0.2"
49+
//! unicode-segmentation = "1.1.0"
5050
//! ```
5151
5252
#![deny(missing_docs, unsafe_code)]

src/word.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,24 @@ pub struct UWordBoundIndices<'a> {
5050
iter: UWordBounds<'a>,
5151
}
5252

53+
impl<'a> UWordBoundIndices<'a> {
54+
#[inline]
55+
/// View the underlying data (the part yet to be iterated) as a slice of the original string.
56+
///
57+
/// ```rust
58+
/// # use unicode_segmentation::UnicodeSegmentation;
59+
/// let mut iter = "Hello world".split_word_bound_indices();
60+
/// assert_eq!(iter.as_str(), "Hello world");
61+
/// iter.next();
62+
/// assert_eq!(iter.as_str(), " world");
63+
/// iter.next();
64+
/// assert_eq!(iter.as_str(), "world");
65+
/// ```
66+
pub fn as_str(&self) -> &'a str {
67+
self.iter.as_str()
68+
}
69+
}
70+
5371
impl<'a> Iterator for UWordBoundIndices<'a> {
5472
type Item = (usize, &'a str);
5573

@@ -569,6 +587,22 @@ impl<'a> DoubleEndedIterator for UWordBounds<'a> {
569587
}
570588

571589
impl<'a> UWordBounds<'a> {
590+
#[inline]
591+
/// View the underlying data (the part yet to be iterated) as a slice of the original string.
592+
///
593+
/// ```rust
594+
/// # use unicode_segmentation::UnicodeSegmentation;
595+
/// let mut iter = "Hello world".split_word_bounds();
596+
/// assert_eq!(iter.as_str(), "Hello world");
597+
/// iter.next();
598+
/// assert_eq!(iter.as_str(), " world");
599+
/// iter.next();
600+
/// assert_eq!(iter.as_str(), "world");
601+
/// ```
602+
pub fn as_str(&self) -> &'a str {
603+
self.string
604+
}
605+
572606
#[inline]
573607
fn get_next_cat(&self, idx: usize) -> Option<WordCat> {
574608
use tables::word as wd;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy