From 3a70ef02c9001cb8f5e815d40b2dcfaabb66130e Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Thu, 26 Sep 2019 13:40:02 +0300 Subject: [PATCH 1/8] Implement GlyphItemIter manually --- Gir.toml | 6 ++- src/auto/glyph_item_iter.rs | 56 ---------------------- src/auto/mod.rs | 3 -- src/glyph_item_iter.rs | 95 +++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 + 5 files changed, 102 insertions(+), 60 deletions(-) delete mode 100644 src/auto/glyph_item_iter.rs create mode 100644 src/glyph_item_iter.rs diff --git a/Gir.toml b/Gir.toml index 196b2aa..97d9593 100644 --- a/Gir.toml +++ b/Gir.toml @@ -45,7 +45,6 @@ generate = [ "Pango.FontsetSimple", "Pango.Glyph", "Pango.GlyphItem", - "Pango.GlyphItemIter", "Pango.GlyphString", "Pango.GlyphUnit", "Pango.Gravity", @@ -209,6 +208,11 @@ status = "generate" name = "language" const = true +[[object]] +name = "Pango.GlyphItemIter" +#need manual getters +status = "manual" + [[object]] name = "Pango.Layout" status = "generate" diff --git a/src/auto/glyph_item_iter.rs b/src/auto/glyph_item_iter.rs deleted file mode 100644 index c251bb4..0000000 --- a/src/auto/glyph_item_iter.rs +++ /dev/null @@ -1,56 +0,0 @@ -// This file was generated by gir (https://github.com/gtk-rs/gir) -// from gir-files (https://github.com/gtk-rs/gir-files) -// DO NOT EDIT - -use glib::translate::*; -use pango_sys; -use GlyphItem; - -glib_wrapper! { - #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] - pub struct GlyphItemIter(Boxed); - - match fn { - copy => |ptr| pango_sys::pango_glyph_item_iter_copy(mut_override(ptr)), - free => |ptr| pango_sys::pango_glyph_item_iter_free(ptr), - get_type => || pango_sys::pango_glyph_item_iter_get_type(), - } -} - -impl GlyphItemIter { - pub fn init_end(&mut self, glyph_item: &mut GlyphItem, text: &str) -> bool { - unsafe { - from_glib(pango_sys::pango_glyph_item_iter_init_end( - self.to_glib_none_mut().0, - glyph_item.to_glib_none_mut().0, - text.to_glib_none().0, - )) - } - } - - pub fn init_start(&mut self, glyph_item: &mut GlyphItem, text: &str) -> bool { - unsafe { - from_glib(pango_sys::pango_glyph_item_iter_init_start( - self.to_glib_none_mut().0, - glyph_item.to_glib_none_mut().0, - text.to_glib_none().0, - )) - } - } - - pub fn next_cluster(&mut self) -> bool { - unsafe { - from_glib(pango_sys::pango_glyph_item_iter_next_cluster( - self.to_glib_none_mut().0, - )) - } - } - - pub fn prev_cluster(&mut self) -> bool { - unsafe { - from_glib(pango_sys::pango_glyph_item_iter_prev_cluster( - self.to_glib_none_mut().0, - )) - } - } -} diff --git a/src/auto/mod.rs b/src/auto/mod.rs index d797690..442ae82 100644 --- a/src/auto/mod.rs +++ b/src/auto/mod.rs @@ -65,9 +65,6 @@ pub use self::font_metrics::FontMetrics; mod glyph_item; pub use self::glyph_item::GlyphItem; -mod glyph_item_iter; -pub use self::glyph_item_iter::GlyphItemIter; - mod glyph_string; pub use self::glyph_string::GlyphString; diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs new file mode 100644 index 0000000..1d07695 --- /dev/null +++ b/src/glyph_item_iter.rs @@ -0,0 +1,95 @@ +// Copyright 2019, The Gtk-rs Project Developers. +// See the COPYRIGHT file at the top-level directory of this distribution. +// Licensed under the MIT license, see the LICENSE file or + +use glib::translate::*; +use pango_sys; +use GlyphItem; + +glib_wrapper! { + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + pub struct GlyphItemIter(Boxed); + + match fn { + copy => |ptr| pango_sys::pango_glyph_item_iter_copy(mut_override(ptr)), + free => |ptr| pango_sys::pango_glyph_item_iter_free(ptr), + init => |_ptr| (), + clear => |_ptr| (), + get_type => || pango_sys::pango_glyph_item_iter_get_type(), + } +} + +impl GlyphItemIter { + pub fn init_end(glyph_item: &mut GlyphItem) -> Option { + unsafe { + let mut iter = GlyphItemIter::uninitialized(); + let ret = from_glib(pango_sys::pango_glyph_item_iter_init_end( + iter.to_glib_none_mut().0, + glyph_item.to_glib_none_mut().0, + //Text seems ignored and item's used + "".to_glib_none().0, + )); + if ret { + Some(iter) + } else { + None + } + } + } + + pub fn init_start(glyph_item: &mut GlyphItem) -> Option { + unsafe { + let mut iter = GlyphItemIter::uninitialized(); + let ret = from_glib(pango_sys::pango_glyph_item_iter_init_start( + iter.to_glib_none_mut().0, + glyph_item.to_glib_none_mut().0, + "".to_glib_none().0, + )); + if ret { + Some(iter) + } else { + None + } + } + } + + pub fn next_cluster(&mut self) -> bool { + unsafe { + from_glib(pango_sys::pango_glyph_item_iter_next_cluster( + self.to_glib_none_mut().0, + )) + } + } + + pub fn prev_cluster(&mut self) -> bool { + unsafe { + from_glib(pango_sys::pango_glyph_item_iter_prev_cluster( + self.to_glib_none_mut().0, + )) + } + } + + pub fn start_index(&self) -> i32 { + self.0.start_index + } + + pub fn start_char(&self) -> i32 { + self.0.start_char + } + + pub fn start_glyph(&self) -> i32 { + self.0.start_glyph + } + + pub fn end_index(&self) -> i32 { + self.0.end_index + } + + pub fn end_char(&self) -> i32 { + self.0.end_char + } + + pub fn end_glyph(&self) -> i32 { + self.0.end_glyph + } +} diff --git a/src/lib.rs b/src/lib.rs index 4bf8121..bd043d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,6 +38,8 @@ pub mod attr_list; pub mod attribute; pub mod font_description; mod functions; +mod glyph_item_iter; +pub use glyph_item_iter::GlyphItemIter; pub mod gravity; pub mod item; pub mod language; From 21ca84ef8a840b7e18a705b6460dadbcb6c8a2be Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 12:40:21 +0300 Subject: [PATCH 2/8] Implement functions, returning iterator, for GlyphItem instead of type GlyphItemIter --- Gir.toml | 4 +- src/glyph_item_iter.rs | 148 +++++++++++++++++++++++++++++++++++++++-- src/lib.rs | 1 - 3 files changed, 143 insertions(+), 10 deletions(-) diff --git a/Gir.toml b/Gir.toml index 97d9593..880d496 100644 --- a/Gir.toml +++ b/Gir.toml @@ -210,8 +210,8 @@ status = "generate" [[object]] name = "Pango.GlyphItemIter" -#need manual getters -status = "manual" +#need manual iterator implementation +status = "ignored" [[object]] name = "Pango.Layout" diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index 1d07695..f770413 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -6,6 +6,7 @@ use glib::translate::*; use pango_sys; use GlyphItem; +//Note: This type not exported glib_wrapper! { #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct GlyphItemIter(Boxed); @@ -20,14 +21,13 @@ glib_wrapper! { } impl GlyphItemIter { - pub fn init_end(glyph_item: &mut GlyphItem) -> Option { + pub fn init_end(glyph_item: &GlyphItem, text: &str) -> Option { unsafe { let mut iter = GlyphItemIter::uninitialized(); let ret = from_glib(pango_sys::pango_glyph_item_iter_init_end( iter.to_glib_none_mut().0, - glyph_item.to_glib_none_mut().0, - //Text seems ignored and item's used - "".to_glib_none().0, + mut_override(glyph_item.to_glib_none().0), + text.to_glib_none().0, )); if ret { Some(iter) @@ -37,13 +37,13 @@ impl GlyphItemIter { } } - pub fn init_start(glyph_item: &mut GlyphItem) -> Option { + pub fn init_start(glyph_item: &GlyphItem, text: &str) -> Option { unsafe { let mut iter = GlyphItemIter::uninitialized(); let ret = from_glib(pango_sys::pango_glyph_item_iter_init_start( iter.to_glib_none_mut().0, - glyph_item.to_glib_none_mut().0, - "".to_glib_none().0, + mut_override(glyph_item.to_glib_none().0), + text.to_glib_none().0, )); if ret { Some(iter) @@ -92,4 +92,138 @@ impl GlyphItemIter { pub fn end_glyph(&self) -> i32 { self.0.end_glyph } + + pub fn into_data(&self) -> GlyphItemIteratorData { + GlyphItemIteratorData { + start_glyph: self.0.start_glyph, + end_glyph: self.0.end_glyph, + start_index: self.0.start_index as usize, + end_index: self.0.end_index as usize, + start_char: self.0.start_char as usize, + end_char: self.0.end_char as usize, + } + } +} + +pub struct GlyphItemIteratorData { + pub start_glyph: i32, + pub start_index: usize, + pub start_char: usize, + + pub end_glyph: i32, + pub end_index: usize, + pub end_char: usize, +} + +pub struct GlyphItemIterator<'a> { + item: &'a GlyphItem, + text: &'a str, + is_reverse: bool, + iter: Option, +} + +impl<'a> GlyphItemIterator<'a> { + #[inline(always)] + fn new_start(item: &'a GlyphItem, text: &'a str) -> GlyphItemIterator<'a> { + GlyphItemIterator { + item, + text, + is_reverse: false, + iter: None, + } + } + + #[inline(always)] + fn new_end(item: &'a GlyphItem, text: &'a str) -> GlyphItemIterator<'a> { + GlyphItemIterator { + item, + text, + is_reverse: true, + iter: None, + } + } +} + +impl GlyphItem { + pub fn iter<'a>( + &'a self, + text: &'a str, + ) -> impl DoubleEndedIterator + 'a { + GlyphItemIterator::new_start(self, text) + } + + pub fn riter<'a>( + &'a self, + text: &'a str, + ) -> impl DoubleEndedIterator + 'a { + GlyphItemIterator::new_end(self, text) + } +} + +impl<'a> Iterator for GlyphItemIterator<'a> { + type Item = GlyphItemIteratorData; + + fn next(&mut self) -> Option { + if let Some(ref mut iter) = self.iter { + if self.is_reverse { + if iter.prev_cluster() { + Some(iter.into_data()) + } else { + None + } + } else { + if iter.next_cluster() { + Some(iter.into_data()) + } else { + None + } + } + } else { + let iter = if self.is_reverse { + GlyphItemIter::init_end(self.item, self.text) + } else { + GlyphItemIter::init_start(self.item, self.text) + }; + if let Some(iter) = iter { + let data = iter.into_data(); + self.iter = Some(iter); + Some(data) + } else { + None + } + } + } +} + +impl<'a> DoubleEndedIterator for GlyphItemIterator<'a> { + fn next_back(&mut self) -> Option { + if let Some(ref mut iter) = self.iter { + if self.is_reverse { + if iter.next_cluster() { + Some(iter.into_data()) + } else { + None + } + } else { + if iter.prev_cluster() { + Some(iter.into_data()) + } else { + None + } + } + } else { + let iter = if self.is_reverse { + GlyphItemIter::init_start(self.item, self.text) + } else { + GlyphItemIter::init_end(self.item, self.text) + }; + if let Some(iter) = iter { + let data = iter.into_data(); + self.iter = Some(iter); + Some(data) + } else { + None + } + } + } } diff --git a/src/lib.rs b/src/lib.rs index bd043d6..40c2477 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,7 +39,6 @@ pub mod attribute; pub mod font_description; mod functions; mod glyph_item_iter; -pub use glyph_item_iter::GlyphItemIter; pub mod gravity; pub mod item; pub mod language; From 73f8bf2e34ab4ad81dd7ba4f91d71e580ffdd375 Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 12:57:51 +0300 Subject: [PATCH 3/8] Remove unneeded functions --- src/glyph_item_iter.rs | 58 ++++++++---------------------------------- 1 file changed, 11 insertions(+), 47 deletions(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index f770413..9e1aa5e 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -69,30 +69,6 @@ impl GlyphItemIter { } } - pub fn start_index(&self) -> i32 { - self.0.start_index - } - - pub fn start_char(&self) -> i32 { - self.0.start_char - } - - pub fn start_glyph(&self) -> i32 { - self.0.start_glyph - } - - pub fn end_index(&self) -> i32 { - self.0.end_index - } - - pub fn end_char(&self) -> i32 { - self.0.end_char - } - - pub fn end_glyph(&self) -> i32 { - self.0.end_glyph - } - pub fn into_data(&self) -> GlyphItemIteratorData { GlyphItemIteratorData { start_glyph: self.0.start_glyph, @@ -122,21 +98,25 @@ pub struct GlyphItemIterator<'a> { iter: Option, } -impl<'a> GlyphItemIterator<'a> { - #[inline(always)] - fn new_start(item: &'a GlyphItem, text: &'a str) -> GlyphItemIterator<'a> { +impl GlyphItem { + pub fn iter<'a>( + &'a self, + text: &'a str, + ) -> impl DoubleEndedIterator + 'a { GlyphItemIterator { - item, + item: self, text, is_reverse: false, iter: None, } } - #[inline(always)] - fn new_end(item: &'a GlyphItem, text: &'a str) -> GlyphItemIterator<'a> { + pub fn riter<'a>( + &'a self, + text: &'a str, + ) -> impl DoubleEndedIterator + 'a { GlyphItemIterator { - item, + item: self, text, is_reverse: true, iter: None, @@ -144,22 +124,6 @@ impl<'a> GlyphItemIterator<'a> { } } -impl GlyphItem { - pub fn iter<'a>( - &'a self, - text: &'a str, - ) -> impl DoubleEndedIterator + 'a { - GlyphItemIterator::new_start(self, text) - } - - pub fn riter<'a>( - &'a self, - text: &'a str, - ) -> impl DoubleEndedIterator + 'a { - GlyphItemIterator::new_end(self, text) - } -} - impl<'a> Iterator for GlyphItemIterator<'a> { type Item = GlyphItemIteratorData; From aff3ba292b5ad857a6d29593a1472fbca175bf35 Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 13:32:20 +0300 Subject: [PATCH 4/8] Mark constructor unsafe and pub(crate) --- src/glyph_item_iter.rs | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index 9e1aa5e..ca81c52 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -21,35 +21,31 @@ glib_wrapper! { } impl GlyphItemIter { - pub fn init_end(glyph_item: &GlyphItem, text: &str) -> Option { - unsafe { - let mut iter = GlyphItemIter::uninitialized(); - let ret = from_glib(pango_sys::pango_glyph_item_iter_init_end( - iter.to_glib_none_mut().0, - mut_override(glyph_item.to_glib_none().0), - text.to_glib_none().0, - )); - if ret { - Some(iter) - } else { - None - } + pub(crate) unsafe fn init_end(glyph_item: &GlyphItem, text: &str) -> Option { + let mut iter = GlyphItemIter::uninitialized(); + let ret = from_glib(pango_sys::pango_glyph_item_iter_init_end( + iter.to_glib_none_mut().0, + mut_override(glyph_item.to_glib_none().0), + text.to_glib_none().0, + )); + if ret { + Some(iter) + } else { + None } } - pub fn init_start(glyph_item: &GlyphItem, text: &str) -> Option { - unsafe { - let mut iter = GlyphItemIter::uninitialized(); - let ret = from_glib(pango_sys::pango_glyph_item_iter_init_start( - iter.to_glib_none_mut().0, - mut_override(glyph_item.to_glib_none().0), - text.to_glib_none().0, - )); - if ret { - Some(iter) - } else { - None - } + pub(crate) unsafe fn init_start(glyph_item: &GlyphItem, text: &str) -> Option { + let mut iter = GlyphItemIter::uninitialized(); + let ret = from_glib(pango_sys::pango_glyph_item_iter_init_start( + iter.to_glib_none_mut().0, + mut_override(glyph_item.to_glib_none().0), + text.to_glib_none().0, + )); + if ret { + Some(iter) + } else { + None } } @@ -143,10 +139,12 @@ impl<'a> Iterator for GlyphItemIterator<'a> { } } } else { - let iter = if self.is_reverse { - GlyphItemIter::init_end(self.item, self.text) - } else { - GlyphItemIter::init_start(self.item, self.text) + let iter = unsafe { + if self.is_reverse { + GlyphItemIter::init_end(self.item, self.text) + } else { + GlyphItemIter::init_start(self.item, self.text) + } }; if let Some(iter) = iter { let data = iter.into_data(); @@ -176,10 +174,12 @@ impl<'a> DoubleEndedIterator for GlyphItemIterator<'a> { } } } else { - let iter = if self.is_reverse { - GlyphItemIter::init_start(self.item, self.text) - } else { - GlyphItemIter::init_end(self.item, self.text) + let iter = unsafe { + if self.is_reverse { + GlyphItemIter::init_start(self.item, self.text) + } else { + GlyphItemIter::init_end(self.item, self.text) + } }; if let Some(iter) = iter { let data = iter.into_data(); From d1cb61cbef0b350304627280d6b02b212bdc74c4 Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 13:37:46 +0300 Subject: [PATCH 5/8] Rename `riter` to `reverse_iter` --- src/glyph_item_iter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index ca81c52..d092b7f 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -107,7 +107,7 @@ impl GlyphItem { } } - pub fn riter<'a>( + pub fn reverse_iter<'a>( &'a self, text: &'a str, ) -> impl DoubleEndedIterator + 'a { From b2fb7d6461c6e89ffb2dada7dbe236647872a516 Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 13:58:11 +0300 Subject: [PATCH 6/8] Change iterator mode to type parameter --- src/glyph_item_iter.rs | 104 +++++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 45 deletions(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index d092b7f..3466cb7 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -4,6 +4,7 @@ use glib::translate::*; use pango_sys; +use std::marker::PhantomData; use GlyphItem; //Note: This type not exported @@ -87,11 +88,14 @@ pub struct GlyphItemIteratorData { pub end_char: usize, } -pub struct GlyphItemIterator<'a> { +enum NormalIterator {} +enum ReverseIterator {} + +struct GlyphItemIterator<'a, T> { item: &'a GlyphItem, text: &'a str, - is_reverse: bool, iter: Option, + _mode: PhantomData, } impl GlyphItem { @@ -99,11 +103,11 @@ impl GlyphItem { &'a self, text: &'a str, ) -> impl DoubleEndedIterator + 'a { - GlyphItemIterator { + GlyphItemIterator:: { item: self, text, - is_reverse: false, iter: None, + _mode: PhantomData, } } @@ -111,41 +115,27 @@ impl GlyphItem { &'a self, text: &'a str, ) -> impl DoubleEndedIterator + 'a { - GlyphItemIterator { + GlyphItemIterator:: { item: self, text, - is_reverse: true, iter: None, + _mode: PhantomData, } } } -impl<'a> Iterator for GlyphItemIterator<'a> { +impl<'a> Iterator for GlyphItemIterator<'a, NormalIterator> { type Item = GlyphItemIteratorData; fn next(&mut self) -> Option { if let Some(ref mut iter) = self.iter { - if self.is_reverse { - if iter.prev_cluster() { - Some(iter.into_data()) - } else { - None - } + if iter.next_cluster() { + Some(iter.into_data()) } else { - if iter.next_cluster() { - Some(iter.into_data()) - } else { - None - } + None } } else { - let iter = unsafe { - if self.is_reverse { - GlyphItemIter::init_end(self.item, self.text) - } else { - GlyphItemIter::init_start(self.item, self.text) - } - }; + let iter = unsafe { GlyphItemIter::init_start(self.item, self.text) }; if let Some(iter) = iter { let data = iter.into_data(); self.iter = Some(iter); @@ -157,30 +147,18 @@ impl<'a> Iterator for GlyphItemIterator<'a> { } } -impl<'a> DoubleEndedIterator for GlyphItemIterator<'a> { - fn next_back(&mut self) -> Option { +impl<'a> Iterator for GlyphItemIterator<'a, ReverseIterator> { + type Item = GlyphItemIteratorData; + + fn next(&mut self) -> Option { if let Some(ref mut iter) = self.iter { - if self.is_reverse { - if iter.next_cluster() { - Some(iter.into_data()) - } else { - None - } + if iter.prev_cluster() { + Some(iter.into_data()) } else { - if iter.prev_cluster() { - Some(iter.into_data()) - } else { - None - } + None } } else { - let iter = unsafe { - if self.is_reverse { - GlyphItemIter::init_start(self.item, self.text) - } else { - GlyphItemIter::init_end(self.item, self.text) - } - }; + let iter = unsafe { GlyphItemIter::init_end(self.item, self.text) }; if let Some(iter) = iter { let data = iter.into_data(); self.iter = Some(iter); @@ -191,3 +169,39 @@ impl<'a> DoubleEndedIterator for GlyphItemIterator<'a> { } } } + +impl<'a> DoubleEndedIterator for GlyphItemIterator<'a, NormalIterator> { + fn next_back(&mut self) -> Option { + if let Some(ref mut iter) = self.iter { + if iter.prev_cluster() { + Some(iter.into_data()) + } else { + None + } + } else if let Some(iter) = unsafe { GlyphItemIter::init_end(self.item, self.text) } { + let data = iter.into_data(); + self.iter = Some(iter); + Some(data) + } else { + None + } + } +} + +impl<'a> DoubleEndedIterator for GlyphItemIterator<'a, ReverseIterator> { + fn next_back(&mut self) -> Option { + if let Some(ref mut iter) = self.iter { + if iter.next_cluster() { + Some(iter.into_data()) + } else { + None + } + } else if let Some(iter) = unsafe { GlyphItemIter::init_start(self.item, self.text) } { + let data = iter.into_data(); + self.iter = Some(iter); + Some(data) + } else { + None + } + } +} From 8cbf41c7edaf576324d46e83efef9c72b294104a Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 13:59:35 +0300 Subject: [PATCH 7/8] Rename 'into_data` to 'to_data' --- src/glyph_item_iter.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index 3466cb7..cb55c8c 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -66,7 +66,7 @@ impl GlyphItemIter { } } - pub fn into_data(&self) -> GlyphItemIteratorData { + pub fn to_data(&self) -> GlyphItemIteratorData { GlyphItemIteratorData { start_glyph: self.0.start_glyph, end_glyph: self.0.end_glyph, @@ -130,14 +130,14 @@ impl<'a> Iterator for GlyphItemIterator<'a, NormalIterator> { fn next(&mut self) -> Option { if let Some(ref mut iter) = self.iter { if iter.next_cluster() { - Some(iter.into_data()) + Some(iter.to_data()) } else { None } } else { let iter = unsafe { GlyphItemIter::init_start(self.item, self.text) }; if let Some(iter) = iter { - let data = iter.into_data(); + let data = iter.to_data(); self.iter = Some(iter); Some(data) } else { @@ -153,14 +153,14 @@ impl<'a> Iterator for GlyphItemIterator<'a, ReverseIterator> { fn next(&mut self) -> Option { if let Some(ref mut iter) = self.iter { if iter.prev_cluster() { - Some(iter.into_data()) + Some(iter.to_data()) } else { None } } else { let iter = unsafe { GlyphItemIter::init_end(self.item, self.text) }; if let Some(iter) = iter { - let data = iter.into_data(); + let data = iter.to_data(); self.iter = Some(iter); Some(data) } else { @@ -174,12 +174,12 @@ impl<'a> DoubleEndedIterator for GlyphItemIterator<'a, NormalIterator> { fn next_back(&mut self) -> Option { if let Some(ref mut iter) = self.iter { if iter.prev_cluster() { - Some(iter.into_data()) + Some(iter.to_data()) } else { None } } else if let Some(iter) = unsafe { GlyphItemIter::init_end(self.item, self.text) } { - let data = iter.into_data(); + let data = iter.to_data(); self.iter = Some(iter); Some(data) } else { @@ -192,12 +192,12 @@ impl<'a> DoubleEndedIterator for GlyphItemIterator<'a, ReverseIterator> { fn next_back(&mut self) -> Option { if let Some(ref mut iter) = self.iter { if iter.next_cluster() { - Some(iter.into_data()) + Some(iter.to_data()) } else { None } } else if let Some(iter) = unsafe { GlyphItemIter::init_start(self.item, self.text) } { - let data = iter.into_data(); + let data = iter.to_data(); self.iter = Some(iter); Some(data) } else { From c2cfba3325d17dcb8549c38a608f3c4ef77de14d Mon Sep 17 00:00:00 2001 From: Evgenii Pashkin Date: Fri, 27 Sep 2019 16:12:47 +0300 Subject: [PATCH 8/8] Change type of xxx_glyph fields to usize --- src/glyph_item_iter.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/glyph_item_iter.rs b/src/glyph_item_iter.rs index cb55c8c..c348f20 100644 --- a/src/glyph_item_iter.rs +++ b/src/glyph_item_iter.rs @@ -68,8 +68,8 @@ impl GlyphItemIter { pub fn to_data(&self) -> GlyphItemIteratorData { GlyphItemIteratorData { - start_glyph: self.0.start_glyph, - end_glyph: self.0.end_glyph, + start_glyph: self.0.start_glyph as usize, + end_glyph: self.0.end_glyph as usize, start_index: self.0.start_index as usize, end_index: self.0.end_index as usize, start_char: self.0.start_char as usize, @@ -79,11 +79,11 @@ impl GlyphItemIter { } pub struct GlyphItemIteratorData { - pub start_glyph: i32, + pub start_glyph: usize, pub start_index: usize, pub start_char: usize, - pub end_glyph: i32, + pub end_glyph: usize, pub end_index: usize, pub end_char: usize, }