diff --git a/Cargo.lock b/Cargo.lock index 3e3aca4..de56600 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,6 +41,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "delegate" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e018fccbeeb50ff26562ece792ed06659b9c2dae79ece77c4456bb10d9bf79b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + [[package]] name = "errno" version = "0.3.1" @@ -111,6 +122,7 @@ checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" name = "html-build" version = "0.0.0" dependencies = [ + "delegate", "html5ever", "markup5ever_rcdom", "regex", diff --git a/Cargo.toml b/Cargo.toml index ba47202..b298fe8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ tokio = { version = "1", features = ["full"] } html5ever = "0.26.0" markup5ever_rcdom = "0.2.0" regex = "1" +delegate = "0.12.0" [dev-dependencies] tempfile = "3" diff --git a/src/rcdom_with_line_numbers.rs b/src/rcdom_with_line_numbers.rs index a5a864a..3f5e6c2 100644 --- a/src/rcdom_with_line_numbers.rs +++ b/src/rcdom_with_line_numbers.rs @@ -1,5 +1,6 @@ // This provides a wrapper around RcDom which tracks line numbers in the errors. +use delegate::delegate; use html5ever::interface::TreeSink; use html5ever::{ tendril::StrTendril, @@ -69,111 +70,72 @@ impl TreeSink for RcDomWithLineNumbers { self } - // Forward all other methods to RcDom. + // Delegate all other methods to RcDom. + delegate! { + to self.dom { + fn get_document(&mut self) -> Self::Handle; - fn get_document(&mut self) -> Self::Handle { - self.dom.get_document() - } + fn elem_name<'a>(&'a self, target: &'a Self::Handle) -> ExpandedName<'a>; - fn elem_name<'a>(&'a self, target: &'a Self::Handle) -> ExpandedName<'a> { - self.dom.elem_name(target) - } + fn create_element( + &mut self, + name: QualName, + attrs: Vec, + flags: ElementFlags, + ) -> Self::Handle; - fn create_element( - &mut self, - name: QualName, - attrs: Vec, - flags: ElementFlags, - ) -> Self::Handle { - self.dom.create_element(name, attrs, flags) - } + fn create_comment(&mut self, text: StrTendril) -> Self::Handle; - fn create_comment(&mut self, text: StrTendril) -> Self::Handle { - self.dom.create_comment(text) - } + fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Self::Handle; - fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Self::Handle { - self.dom.create_pi(target, data) - } + fn append(&mut self, parent: &Self::Handle, child: NodeOrText); - fn append(&mut self, parent: &Self::Handle, child: NodeOrText) { - self.dom.append(parent, child) - } + fn append_based_on_parent_node( + &mut self, + element: &Self::Handle, + prev_element: &Self::Handle, + child: NodeOrText, + ); - fn append_based_on_parent_node( - &mut self, - element: &Self::Handle, - prev_element: &Self::Handle, - child: NodeOrText, - ) { - self.dom - .append_based_on_parent_node(element, prev_element, child) - } + fn append_doctype_to_document( + &mut self, + name: StrTendril, + public_id: StrTendril, + system_id: StrTendril, + ); - fn append_doctype_to_document( - &mut self, - name: StrTendril, - public_id: StrTendril, - system_id: StrTendril, - ) { - self.dom - .append_doctype_to_document(name, public_id, system_id) - } + fn mark_script_already_started(&mut self, node: &Self::Handle); - fn mark_script_already_started(&mut self, node: &Self::Handle) { - self.dom.mark_script_already_started(node) - } + fn pop(&mut self, node: &Self::Handle); - fn pop(&mut self, node: &Self::Handle) { - self.dom.pop(node) - } + fn get_template_contents(&mut self, target: &Self::Handle) -> Self::Handle; - fn get_template_contents(&mut self, target: &Self::Handle) -> Self::Handle { - self.dom.get_template_contents(target) - } + fn same_node(&self, x: &Self::Handle, y: &Self::Handle) -> bool; - fn same_node(&self, x: &Self::Handle, y: &Self::Handle) -> bool { - self.dom.same_node(x, y) - } + fn set_quirks_mode(&mut self, mode: QuirksMode); - fn set_quirks_mode(&mut self, mode: QuirksMode) { - self.dom.set_quirks_mode(mode) - } + fn append_before_sibling( + &mut self, + sibling: &Self::Handle, + new_node: NodeOrText, + ); - fn append_before_sibling( - &mut self, - sibling: &Self::Handle, - new_node: NodeOrText, - ) { - self.dom.append_before_sibling(sibling, new_node) - } - - fn add_attrs_if_missing(&mut self, target: &Self::Handle, attrs: Vec) { - self.dom.add_attrs_if_missing(target, attrs) - } + fn add_attrs_if_missing(&mut self, target: &Self::Handle, attrs: Vec); - fn associate_with_form( - &mut self, - target: &Self::Handle, - form: &Self::Handle, - nodes: (&Self::Handle, Option<&Self::Handle>), - ) { - self.dom.associate_with_form(target, form, nodes) - } + fn associate_with_form( + &mut self, + target: &Self::Handle, + form: &Self::Handle, + nodes: (&Self::Handle, Option<&Self::Handle>), + ); - fn remove_from_parent(&mut self, target: &Self::Handle) { - self.dom.remove_from_parent(target) - } + fn remove_from_parent(&mut self, target: &Self::Handle); - fn reparent_children(&mut self, node: &Self::Handle, new_parent: &Self::Handle) { - self.dom.reparent_children(node, new_parent) - } + fn reparent_children(&mut self, node: &Self::Handle, new_parent: &Self::Handle); - fn is_mathml_annotation_xml_integration_point(&self, handle: &Self::Handle) -> bool { - self.dom.is_mathml_annotation_xml_integration_point(handle) - } + fn is_mathml_annotation_xml_integration_point(&self, handle: &Self::Handle) -> bool; - fn complete_script(&mut self, node: &Self::Handle) -> NextParserState { - self.dom.complete_script(node) + fn complete_script(&mut self, node: &Self::Handle) -> NextParserState; + } } }