Crate toks

Source
Expand description

Efficient tokens for rcdom::RcDom Handle parsing aiming for O(1) HTML DOM walking.

This library aims to provide convenient and efficient handling of HTML DOM elements.

§Examples

 extern crate toks;
 #[macro_use]
 extern crate html5ever;

 use toks::prelude::*;
 use std::io::{self, Read};

 pub struct LinkTok {
     total: u32,
 }

 impl Tok for LinkTok {
     fn is_match(&self, qn: &QualName) -> bool {
         qn.local == local_name!("a")
     }

     fn process(&mut self, _: &mut Vec<Attribute>, _: &mut Vec<Handle>) {
         self.total += 1;
     }
 }

 // How to use
 // $ cargo build --example count_links
 // $ cat your.html | ./target/debug/examples/count_links
 // Link <a> count 9
 fn main() {
     let mut chunk = String::new();
     io::stdin().read_to_string(&mut chunk).unwrap();

     let dom = parse_document(RcDom::default(), Default::default()).one(chunk);

     let mut lt = LinkTok { total: 0 };

     // Dropping mut reference
     {
         recursion(&mut vec![&mut lt], dom.document);
     }

     println!("Link <a> count {}", lt.total);
 }

Modules§

prelude
Prelude module contains several important traits that provide many of the convenience imports in advance.

Traits§

Tok
Tok in short for token which is used to recursively walk through rcdom::Handle when QualName match is found process function is called.

Functions§

recursion
Helper function which walks through html5ever::rcdom::Handle NodeData::Element branch recursively and fires Tok``process function if QualName is found by is_match.

Type Aliases§

Toks
Toks convenience type alias to Vec of Tok’s.