feat(*): skip_container and event functions
This commit is contained in:
parent
9357ac6278
commit
ecf0d7e67d
|
@ -1,6 +1,6 @@
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
use crate::{elements::*, headline::Headline, objects::*, Parser};
|
use crate::{elements::*, headline::Headline, objects::*, Event, Parser};
|
||||||
use jetscii::bytes;
|
use jetscii::bytes;
|
||||||
use std::{
|
use std::{
|
||||||
convert::From,
|
convert::From,
|
||||||
|
@ -29,6 +29,10 @@ pub trait HtmlHandler<W: Write, E: From<Error>> {
|
||||||
|
|
||||||
Ok(w.write_all(&bytes[pos..])?)
|
Ok(w.write_all(&bytes[pos..])?)
|
||||||
}
|
}
|
||||||
|
fn event(&mut self, w: &mut W, event: Event) -> Result<(), E> {
|
||||||
|
handle_event!(event, self, w);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
fn headline_beg(&mut self, w: &mut W, hdl: Headline) -> Result<(), E> {
|
fn headline_beg(&mut self, w: &mut W, hdl: Headline) -> Result<(), E> {
|
||||||
let level = if hdl.level <= 6 { hdl.level } else { 6 };
|
let level = if hdl.level <= 6 { hdl.level } else { 6 };
|
||||||
write!(w, "<h{}>", level)?;
|
write!(w, "<h{}>", level)?;
|
||||||
|
@ -277,7 +281,7 @@ impl<'a, W: Write, E: From<Error>, H: HtmlHandler<W, E>> HtmlRender<'a, W, E, H>
|
||||||
|
|
||||||
pub fn render(&mut self) -> Result<(), E> {
|
pub fn render(&mut self) -> Result<(), E> {
|
||||||
for event in &mut self.parser {
|
for event in &mut self.parser {
|
||||||
handle_event!(event, &mut self.handler, self.writer);
|
self.handler.event(self.writer, event)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -197,6 +197,28 @@ impl<'a> Parser<'a> {
|
||||||
self.text = text;
|
self.text = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// skip the current container if exists and return its Event
|
||||||
|
pub fn skip_container(&mut self) -> Option<Event<'a>> {
|
||||||
|
let (container, _, end) = self.stack.pop()?;
|
||||||
|
self.off = end;
|
||||||
|
Some(match container {
|
||||||
|
Container::Bold => Event::BoldEnd,
|
||||||
|
Container::Drawer => Event::DrawerEnd,
|
||||||
|
Container::CtrBlock => Event::CtrBlockEnd,
|
||||||
|
Container::DynBlock => Event::DynBlockEnd,
|
||||||
|
Container::Headline(_) => Event::HeadlineEnd,
|
||||||
|
Container::Italic => Event::ItalicEnd,
|
||||||
|
Container::List(_, ordered) => Event::ListEnd { ordered },
|
||||||
|
Container::ListItem => Event::ListItemEnd,
|
||||||
|
Container::Paragraph => Event::ParagraphEnd,
|
||||||
|
Container::QteBlock => Event::QteBlockEnd,
|
||||||
|
Container::Section(_) => Event::SectionEnd,
|
||||||
|
Container::SplBlock => Event::SplBlockEnd,
|
||||||
|
Container::Strike => Event::StrikeEnd,
|
||||||
|
Container::Underline => Event::UnderlineEnd,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn next_section_or_headline(&mut self, text: &'a str) -> Event<'a> {
|
fn next_section_or_headline(&mut self, text: &'a str) -> Event<'a> {
|
||||||
let end = Headline::find_level(text, std::usize::MAX);
|
let end = Headline::find_level(text, std::usize::MAX);
|
||||||
if end != 0 {
|
if end != 0 {
|
||||||
|
|
Loading…
Reference in a new issue