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 module contains several important traits that provide many of the convenience imports in advance.

Traits

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

Functions

  • 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.