use ::situation::Situation;
use ::situation::Transition;
use ::situation::WhatNow;
use ::situation::flush;
use ::situation::ParseResult;
use ::microparsers::predlen;
pub struct SitUntilByte {
pub until: u8,
pub color: u32,
pub end_replace :Option<&'static [u8]>,
}
impl Situation for SitUntilByte {
fn whatnow(&mut self, horizon: &[u8], _is_horizon_lengthenable: bool) -> ParseResult {
let len = predlen(&|x| x != self.until, &horizon);
return Ok(if len < horizon.len() {
WhatNow{tri: Transition::Pop, pre: len, len: 1, alt: self.end_replace}
} else {
flush(len)
});
}
fn get_color(&self) -> u32{
self.color
}
}