Skip to content

Commit

Permalink
Make EscapeSequenceOffsetsIterator pub, add fns to get indices
Browse files Browse the repository at this point in the history
  • Loading branch information
eth-p committed Jun 11, 2024
1 parent b7e44c7 commit b4fe182
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/vscreen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ fn join(

/// A range of indices for a raw ANSI escape sequence.
#[derive(Debug, PartialEq)]
enum EscapeSequenceOffsets {
pub enum EscapeSequenceOffsets {
Text {
start: usize,
end: usize,
Expand Down Expand Up @@ -320,14 +320,40 @@ enum EscapeSequenceOffsets {
},
}

impl EscapeSequenceOffsets {
/// Returns the byte-index of the first character in the escape sequence.
pub fn index_of_start(&self) -> usize {
use EscapeSequenceOffsets::*;
match self {
Text { start, .. } => *start,
Unknown { start, .. } => *start,
NF { start_sequence, .. } => *start_sequence,
OSC { start_sequence, .. } => *start_sequence,
CSI { start_sequence, .. } => *start_sequence,
}
}

/// Returns the byte-index past the last character in the escape sequence.
pub fn index_past_end(&self) -> usize {
use EscapeSequenceOffsets::*;
match self {
Text { end, .. } => *end,
Unknown { end, .. } => *end,
NF { end, .. } => *end,
OSC { end, .. } => *end,
CSI { end, .. } => *end,
}
}
}

/// An iterator over the offests of ANSI/VT escape sequences within a string.
///
/// ## Example
///
/// ```ignore
/// let iter = EscapeSequenceOffsetsIterator::new("\x1B[33mThis is yellow text.\x1B[m");
/// ```
struct EscapeSequenceOffsetsIterator<'a> {
pub struct EscapeSequenceOffsetsIterator<'a> {
text: &'a str,
chars: Peekable<CharIndices<'a>>,
}
Expand Down

0 comments on commit b4fe182

Please sign in to comment.