From 14bc6f2cceed0fa578d6a1195266885bf57a5d4c Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Tue, 12 Sep 2023 09:03:56 +0200 Subject: chore: add BasicEmitter stub --- src/basic_emitter.rs | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 + src/naive_parser.rs | 13 +++--- 3 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 src/basic_emitter.rs (limited to 'src') diff --git a/src/basic_emitter.rs b/src/basic_emitter.rs new file mode 100644 index 0000000..046b645 --- /dev/null +++ b/src/basic_emitter.rs @@ -0,0 +1,126 @@ +use std::collections::VecDeque; +use std::ops::Range; + +use crate::offset::Offset; +use crate::Emitter; +use crate::Error; +use crate::Token; + +/// An [`Emitter`] implementation that yields [`Token`]. +pub struct BasicEmitter { + errors: VecDeque<(Error, Range)>, +} + +impl Default for BasicEmitter { + fn default() -> Self { + BasicEmitter { + errors: VecDeque::new(), + } + } +} + +impl BasicEmitter { + /// Removes all encountered tokenizer errors and returns them as an iterator. + pub fn drain_errors(&mut self) -> impl Iterator)> + '_ { + self.errors.drain(0..) + } +} + +impl Iterator for BasicEmitter { + type Item = Token; + + fn next(&mut self) -> Option { + todo!() + } +} + +#[allow(unused_variables)] +impl Emitter for BasicEmitter { + fn report_error(&mut self, error: Error, span: Range) { + todo!() + } + + fn emit_char(&mut self, c: char) { + todo!() + } + + fn emit_eof(&mut self) { + todo!() + } + + fn init_start_tag(&mut self, tag_offset: O, name_offset: O) { + todo!() + } + + fn init_end_tag(&mut self, tag_offset: O, name_offset: O) { + todo!() + } + + fn push_tag_name(&mut self, s: &str) { + todo!() + } + + fn init_attribute_name(&mut self, offset: O) { + todo!() + } + + fn push_attribute_name(&mut self, s: &str) { + todo!() + } + + fn push_attribute_value(&mut self, s: &str) { + todo!() + } + + fn set_self_closing(&mut self, slash_span: Range) { + todo!() + } + + fn emit_current_tag(&mut self, offset: O) { + todo!() + } + + fn init_comment(&mut self, data_start_offset: O) { + todo!() + } + + fn push_comment(&mut self, s: &str) { + todo!() + } + + fn emit_current_comment(&mut self, data_end_offset: O) { + todo!() + } + + fn init_doctype(&mut self, offset: O) { + todo!() + } + + fn push_doctype_name(&mut self, s: &str) { + todo!() + } + + fn init_doctype_public_id(&mut self, offset: O) { + todo!() + } + + fn push_doctype_public_id(&mut self, s: &str) { + todo!() + } + + fn init_doctype_system_id(&mut self, offset: O) { + todo!() + } + + fn push_doctype_system_id(&mut self, s: &str) { + todo!() + } + + fn set_force_quirks(&mut self) { + todo!() + } + + fn emit_current_doctype(&mut self, offset: O) { + todo!() + } +} diff --git a/src/lib.rs b/src/lib.rs index aecbef3..16728ad 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,7 @@ #![doc = concat!("[the LICENSE file]: ", file_url!("LICENSE"))] #![doc = include_str!("../README.md")] +mod basic_emitter; mod emitter; mod entities; mod error; @@ -25,6 +26,7 @@ pub mod offset; pub mod reader; pub mod token; +pub use basic_emitter::BasicEmitter; pub use emitter::Emitter; pub use error::Error; pub use naive_parser::NaiveParser; diff --git a/src/naive_parser.rs b/src/naive_parser.rs index 91edbc0..4f8dc0d 100644 --- a/src/naive_parser.rs +++ b/src/naive_parser.rs @@ -1,8 +1,7 @@ use crate::offset::{Offset, Position}; use crate::reader::{IntoReader, Reader}; use crate::tokenizer::CdataAction; -use crate::tracing_emitter::TracingEmitter; -use crate::{Emitter, Event, State, Tokenizer}; +use crate::{BasicEmitter, Emitter, Event, State, Tokenizer}; /// A naive HTML parser (**not** spec-compliant since it doesn't do tree construction). /// @@ -13,7 +12,7 @@ use crate::{Emitter, Event, State, Tokenizer}; /// /// * it naively emits any CDATA sections as bogus comments, for example: /// -/// ``` +/// ```no_run TODO: run again once BasicEmitter has been implemented /// # use html5tokenizer::{NaiveParser, Token}; /// let html = "I love SVG"; /// let mut tokens = NaiveParser::new(html).flatten(); @@ -30,18 +29,18 @@ pub struct NaiveParser> { tokenizer: Tokenizer, } -impl NaiveParser> +impl NaiveParser> where R: Reader + Position, O: Offset, { - /// Constructs a new naive parser. + /// Constructs a new naive parser using the [`BasicEmitter`]. // TODO: add example for NaiveParser::new - pub fn new<'a, IR>(reader: IR) -> NaiveParser> + pub fn new<'a, IR>(reader: IR) -> NaiveParser> where IR: IntoReader<'a, Reader = R>, { - NaiveParser::new_with_emitter(reader, TracingEmitter::default()) + NaiveParser::new_with_emitter(reader, BasicEmitter::default()) } } -- cgit v1.2.3