unobtanium_segmenter/
sentence_grouped_iterator.rs1use crate::SegmentedToken;
6
7pub struct SentenceGroupedIterator<'a, I: Iterator<Item = SegmentedToken<'a>>> {
13 inner: I,
14 next_is_break: bool,
15 is_at_end: bool,
16}
17
18impl<'a, I: Iterator<Item = SegmentedToken<'a>>> SentenceGroupedIterator<'a, I> {
19 pub fn new(inner: I) -> Self {
21 Self {
22 inner,
23 next_is_break: false,
24 is_at_end: false,
25 }
26 }
27
28 pub fn is_at_end(&self) -> bool {
31 self.is_at_end
32 }
33}
34
35impl<'a, I: Iterator<Item = SegmentedToken<'a>>> Iterator for SentenceGroupedIterator<'a, I> {
36 type Item = SegmentedToken<'a>;
37
38 fn next(&mut self) -> Option<Self::Item> {
39 if self.next_is_break {
40 self.next_is_break = false;
41 None
42 } else if let Some(token) = self.inner.next() {
43 self.is_at_end = false;
44 if token.is_end_of_sentence {
45 if token.text.is_empty() {
46 None
48 } else {
49 self.next_is_break = true;
51 Some(token)
52 }
53 } else {
54 Some(token)
56 }
57 } else {
58 self.is_at_end = true;
59 None
60 }
61 }
62}