added ansi_parse trait so things are more ergonomic
This commit is contained in:
@@ -205,7 +205,7 @@ named!(
|
||||
);
|
||||
|
||||
named!(
|
||||
parse_escape<&str, Output>,
|
||||
pub parse_escape<&str, Output>,
|
||||
do_parse!(
|
||||
tag_s!("\u{1b}[") >>
|
||||
seq: combined >>
|
||||
@@ -213,62 +213,3 @@ named!(
|
||||
)
|
||||
);
|
||||
|
||||
pub struct ParserIterator<'a> {
|
||||
dat: &'a str,
|
||||
}
|
||||
|
||||
impl<'a> Iterator for ParserIterator<'a> {
|
||||
type Item = Output<'a>;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.dat == "" {
|
||||
return None;
|
||||
}
|
||||
|
||||
let pos = self.dat.find('\u{1b}');
|
||||
if let Some(loc) = pos {
|
||||
if loc == 0 {
|
||||
let res = parse_escape(&self.dat[loc..]);
|
||||
|
||||
if let Ok(ret) = res {
|
||||
self.dat = &ret.0;
|
||||
Some(ret.1)
|
||||
}else{
|
||||
let pos = self.dat[(loc+1)..].find('\u{1b}');
|
||||
if let Some(loc) = pos {
|
||||
//Added to because it's based one character ahead
|
||||
let loc = loc+1;
|
||||
|
||||
let temp = &self.dat[..loc];
|
||||
self.dat = &self.dat[loc..];
|
||||
|
||||
Some(Output::TextBlock(temp))
|
||||
}else{
|
||||
let temp = self.dat;
|
||||
self.dat = "";
|
||||
|
||||
Some(Output::TextBlock(temp))
|
||||
}
|
||||
}
|
||||
|
||||
}else {
|
||||
let temp = &self.dat[..loc];
|
||||
self.dat = &self.dat[loc..];
|
||||
|
||||
Some(Output::TextBlock(&temp))
|
||||
}
|
||||
}else{
|
||||
let temp = self.dat;
|
||||
self.dat = "";
|
||||
Some(Output::TextBlock(temp))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> ParserIterator<'a> {
|
||||
pub fn new(string: &'a str) -> ParserIterator<'a> {
|
||||
ParserIterator {
|
||||
dat: string,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user