pub trait Emitter<O> {
Show 30 methods // Required methods fn report_error(&mut self, error: Error, span: Range<O>); fn emit_char(&mut self, char: char, span: Range<O>); fn emit_eof(&mut self, offset: O); fn init_start_tag(&mut self, tag_offset: O, name_offset: O); fn init_end_tag(&mut self, tag_offset: O, name_offset: O); fn push_tag_name(&mut self, s: &str); fn init_attribute_name(&mut self, offset: O); fn push_attribute_name(&mut self, s: &str); fn push_attribute_value(&mut self, s: &str); fn set_self_closing(&mut self, slash_span: Range<O>); fn emit_current_tag(&mut self, offset: O); fn init_comment(&mut self, data_start_offset: O); fn push_comment(&mut self, s: &str); fn emit_current_comment(&mut self, data_end_offset: O); fn init_doctype(&mut self, offset: O); fn push_doctype_name(&mut self, s: &str); fn init_doctype_public_id(&mut self, offset: O); fn push_doctype_public_id(&mut self, s: &str); fn init_doctype_system_id(&mut self, offset: O); fn push_doctype_system_id(&mut self, s: &str); fn set_force_quirks(&mut self); fn emit_current_doctype(&mut self, offset: O); // Provided methods fn terminate_tag_name(&mut self, offset: O) { ... } fn terminate_attribute_name(&mut self, offset: O) { ... } fn init_attribute_value(&mut self, syntax: AttrValueSyntax, offset: O) { ... } fn terminate_attribute_value(&mut self, offset: O) { ... } fn init_doctype_name(&mut self, offset: O) { ... } fn terminate_doctype_name(&mut self, offset: O) { ... } fn terminate_doctype_public_id(&mut self, offset: O) { ... } fn terminate_doctype_system_id(&mut self, offset: O) { ... }
}
Expand description

An emitter is an object providing methods to the tokenizer to produce (“emit”) tokens.

Domain-specific applications of the HTML tokenizer can manually implement this trait to customize per-token allocations, or avoid them altogether.

An emitter is assumed to have these internal states:

  • current token: Can be a tag, doctype or comment token. There’s only one current token.
  • current attribute: The currently processed HTML attribute, consisting of two strings for name and value.

The following methods are describing what kind of behavior the WHATWG spec expects, but that doesn’t mean you need to follow it. For example:

  • If your usage of the tokenizer will ignore all errors, none of the error handling and validation requirements apply to you. You can implement report_error as noop and omit all checks that would emit errors.

  • If you don’t care about attributes at all, you can make all related methods a noop.

Required Methods§

source

fn report_error(&mut self, error: Error, span: Range<O>)

Reports a parse error.

source

fn emit_char(&mut self, char: char, span: Range<O>)

Emits the given character as a character token.

source

fn emit_eof(&mut self, offset: O)

The state machine has reached the end of the file.

source

fn init_start_tag(&mut self, tag_offset: O, name_offset: O)

Set the current token to a start tag.

source

fn init_end_tag(&mut self, tag_offset: O, name_offset: O)

Set the current token to an end tag.

source

fn push_tag_name(&mut self, s: &str)

Assuming the current token is a start/end tag, append a string to the current tag’s name.

If the current token is not a start or end tag, this method may panic.

source

fn init_attribute_name(&mut self, offset: O)

Set the current attribute to a new one, starting with empty name and value strings.

The old attribute, if any, should be put on the current token. If an attribute with that name already exists, WHATWG says the new one should be ignored and a Error::DuplicateAttribute error should be emitted.

If the current token is no tag at all, this method may panic.

source

fn push_attribute_name(&mut self, s: &str)

Append a string to the current attribute’s name.

If there is no current attribute, this method may panic.

source

fn push_attribute_value(&mut self, s: &str)

Append a string to the current attribute’s value.

If there is no current attribute, this method may panic.

source

fn set_self_closing(&mut self, slash_span: Range<O>)

Assuming the current token is a start tag, set the self-closing flag.

If the current token is not a start or end tag, this method may panic.

If the current token is an end tag, the emitter should emit the Error::EndTagWithTrailingSolidus error.

source

fn emit_current_tag(&mut self, offset: O)

Emit the current token, assuming it is a tag.

Also get the current attribute and append it to the to-be-emitted tag. See docstring for Emitter::init_attribute_name for how duplicates should be handled.

If an end tag is emitted with attributes, an Error::EndTagWithAttributes error should be emitted.

If the current token is not a start/end tag, this method may panic.

source

fn init_comment(&mut self, data_start_offset: O)

Set the current token to a comment.

source

fn push_comment(&mut self, s: &str)

Assuming the current token is a comment, append a string to the comment’s contents.

If the current token is not a comment, this method may panic.

source

fn emit_current_comment(&mut self, data_end_offset: O)

Emit the current token, assuming it is a comment.

If the current token is not a comment, this method may panic.

source

fn init_doctype(&mut self, offset: O)

Set the current token to a new doctype token:

  • the name should be empty
  • the “public identifier” should be null (different from empty)
  • the “system identifier” should be null (different from empty)
  • the “force quirks” flag should be false
source

fn push_doctype_name(&mut self, s: &str)

Assuming the current token is a doctype, append a string to the doctype’s name.

If the current token is not a doctype, this method may panic.

source

fn init_doctype_public_id(&mut self, offset: O)

Assuming the current token is a doctype, set its “public identifier” to the empty string.

If the current token is not a doctype, this method may panic.

source

fn push_doctype_public_id(&mut self, s: &str)

Assuming the current token is a doctype, append a string to its “public identifier” to the given string.

If the current token is not a doctype, this method may panic.

source

fn init_doctype_system_id(&mut self, offset: O)

Assuming the current token is a doctype, set its “system identifier” to the empty string.

If the current token is not a doctype, this method may panic.

source

fn push_doctype_system_id(&mut self, s: &str)

Assuming the current token is a doctype, append a string to its “system identifier” to the given string.

If the current token is not a doctype, this method may panic.

source

fn set_force_quirks(&mut self)

Assuming the current token is a doctype, set its “force quirks” flag to true.

If the current token is not a doctype, this method pay panic.

source

fn emit_current_doctype(&mut self, offset: O)

Emit the current token, assuming it is a doctype.

If the current token is not a doctype, this method may panic.

Provided Methods§

source

fn terminate_tag_name(&mut self, offset: O)

Called after the last push_tag_name call for a tag name.

source

fn terminate_attribute_name(&mut self, offset: O)

Called after the last push_attribute_name call for an attribute name.

source

fn init_attribute_value(&mut self, syntax: AttrValueSyntax, offset: O)

Called before the first push_attribute_value call.

If there is no current attribute, this method may panic.

source

fn terminate_attribute_value(&mut self, offset: O)

Called after the last push_attribute_value call for an attribute value.

source

fn init_doctype_name(&mut self, offset: O)

Assuming the current token is a doctype, set its name to the empty string.

If the current token is not a doctype, this method may panic.

source

fn terminate_doctype_name(&mut self, offset: O)

Called after the last push_doctype_name call for a DOCTYPE name.

source

fn terminate_doctype_public_id(&mut self, offset: O)

Called after the last push_doctype_public_id call for a DOCTYPE public identifier.

source

fn terminate_doctype_system_id(&mut self, offset: O)

Called after the last push_doctype_system_id call for a DOCTYPE system identifier.

Implementors§