asciimath-unicode 0.1.2

Convert asciimath to unicode
Documentation
//! complex iterators

use std::iter::FusedIterator;
use std::vec;

#[derive(Debug, Clone)]
pub(crate) struct Interleave<I> {
    queue: vec::IntoIter<I>,
    iter: I,
    sep: char,
}

impl<I> Interleave<I> {
    pub fn new(iters: Vec<I>, sep: char) -> Self {
        let mut queue = iters.into_iter();
        Interleave {
            iter: queue.next().unwrap(),
            queue,
            sep,
        }
    }
}

impl<I> Iterator for Interleave<I>
where
    I: Iterator<Item = char>,
{
    type Item = char;

    fn next(&mut self) -> Option<Self::Item> {
        if let Some(res) = self.iter.next() {
            Some(res)
        } else if let Some(next) = self.queue.next() {
            self.iter = next;
            Some(self.sep)
        } else {
            None
        }
    }
}

impl<I> FusedIterator for Interleave<I> where I: Iterator<Item = char> {}

#[derive(Debug, Clone)]
pub(crate) struct Modified<I> {
    iter: I,
    modif: char,
    tog: bool,
}

impl<I> Modified<I> {
    pub fn new(iter: I, modif: char) -> Self {
        Modified {
            iter,
            modif,
            tog: false,
        }
    }
}

impl<I: Iterator<Item = char>> Iterator for Modified<I> {
    type Item = char;

    fn next(&mut self) -> Option<Self::Item> {
        if self.tog {
            self.tog = false;
            Some(self.modif)
        } else if let Some(res) = self.iter.next() {
            self.tog = true;
            Some(res)
        } else {
            None
        }
    }
}

impl<I: Iterator<Item = char>> FusedIterator for Modified<I> {}