[][src]Crate toks

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.


 extern crate toks;
 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);



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



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



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 Definitions


Toks convenience type alias to Vec of Tok's.