@@ -3,6 +3,8 @@ use ropey::{iter::Chunks, str_utils::byte_to_char_idx, RopeSlice};
3use unicode_segmentation::{GraphemeCursor, GraphemeIncomplete};
3use unicode_segmentation::{GraphemeCursor, GraphemeIncomplete};
4use unicode_width::UnicodeWidthStr;
4use unicode_width::UnicodeWidthStr;
7pub fn grapheme_width(g: &str) -> usize {
9pub fn grapheme_width(g: &str) -> usize {
8 if g.as_bytes()[0] <= 127 {
10 if g.as_bytes()[0] <= 127 {
@@ -147,7 +149,7 @@ pub fn is_grapheme_boundary(slice: RopeSlice, char_idx: usize) -> bool {
149/// An iterator over the graphemes of a `RopeSlice`.
151/// An iterator over the graphemes of a `RopeSlice`.
150−#[derive(Debug, Clone)]
152+#[derive(Clone)]
151pub struct RopeGraphemes<'a> {
153pub struct RopeGraphemes<'a> {
152 text: RopeSlice<'a>,
154 text: RopeSlice<'a>,
153 chunks: Chunks<'a>,
155 chunks: Chunks<'a>,
@@ -156,6 +158,18 @@ pub struct RopeGraphemes<'a> {
156 cursor: GraphemeCursor,
158 cursor: GraphemeCursor,
161+impl<'a> fmt::Debug for RopeGraphemes<'a> {
162+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
163+ f.debug_struct("RopeGraphemes")
164+ .field("text", &self.text)
165+ .field("chunks", &self.chunks)
166+ .field("cur_chunk", &self.cur_chunk)
167+ .field("cur_chunk_start", &self.cur_chunk_start)
168+ // .field("cursor", &self.cursor)
159impl<'a> RopeGraphemes<'a> {
173impl<'a> RopeGraphemes<'a> {
160 #[must_use]
174 #[must_use]
161 pub fn new(slice: RopeSlice) -> RopeGraphemes {
175 pub fn new(slice: RopeSlice) -> RopeGraphemes {