pub struct BufferQueue { /* private fields */ }
Expand description
A queue of owned string buffers, which supports incrementally consuming characters.
Internally it uses VecDeque
and has the same complexity properties.
Implementations§
Source§impl BufferQueue
impl BufferQueue
Sourcepub fn pop_front(&self) -> Option<StrTendril>
pub fn pop_front(&self) -> Option<StrTendril>
Get the buffer at the beginning of the queue.
Sourcepub fn push_front(&self, buf: StrTendril)
pub fn push_front(&self, buf: StrTendril)
Add a buffer to the beginning of the queue.
If the buffer is empty, it will be skipped.
Sourcepub fn push_back(&self, buf: StrTendril)
pub fn push_back(&self, buf: StrTendril)
Add a buffer to the end of the queue.
If the buffer is empty, it will be skipped.
Sourcepub fn peek(&self) -> Option<char>
pub fn peek(&self) -> Option<char>
Look at the next available character without removing it, if the queue is not empty.
Sourcepub fn pop_except_from(&self, set: SmallCharSet) -> Option<SetResult>
pub fn pop_except_from(&self, set: SmallCharSet) -> Option<SetResult>
Pops and returns either a single character from the given set, or a buffer of characters none of which are in the set.
§Examples
use markup5ever::buffer_queue::{BufferQueue, SetResult};
let mut queue = BufferQueue::default();
queue.push_back(format_tendril!(r#"<some_tag attr="text">SomeText</some_tag>"#));
let set = small_char_set!(b'<' b'>' b' ' b'=' b'"' b'/');
let tag = format_tendril!("some_tag");
let attr = format_tendril!("attr");
let attr_val = format_tendril!("text");
assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('<')));
assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(tag)));
assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet(' ')));
assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(attr)));
assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('=')));
assert_eq!(queue.pop_except_from(set), Some(SetResult::FromSet('"')));
assert_eq!(queue.pop_except_from(set), Some(SetResult::NotFromSet(attr_val)));
// ...
Sourcepub fn eat<F: Fn(&u8, &u8) -> bool>(&self, pat: &str, eq: F) -> Option<bool>
pub fn eat<F: Fn(&u8, &u8) -> bool>(&self, pat: &str, eq: F) -> Option<bool>
Consume bytes matching the pattern, using a custom comparison function eq
.
Returns Some(true)
if there is a match, Some(false)
if there is no match, or None
if
it wasn’t possible to know (more data is needed).
The custom comparison function is used elsewhere to compare ascii-case-insensitively.
§Examples
use markup5ever::buffer_queue::BufferQueue;
let mut queue = BufferQueue::default();
queue.push_back(format_tendril!("testtext"));
let test_str = "test";
assert_eq!(queue.eat("test", |&a, &b| a == b), Some(true));
assert_eq!(queue.eat("text", |&a, &b| a == b), Some(true));
assert!(queue.is_empty());
Sourcepub fn next(&self) -> Option<char>
pub fn next(&self) -> Option<char>
Get the next character if one is available, removing it from the queue.
This function manages the buffers, removing them as they become empty.