diff --git a/Cargo.toml b/Cargo.toml index 6fb85ef8..ad0c633b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,9 @@ rustc-serialize = "0" [dev-dependencies.test_util] path = "test_util" +[dev-dependencies.html5ever_dom_sink] +path = "dom_sink" + [profile.dev] debug = false diff --git a/dom_sink/Cargo.toml b/dom_sink/Cargo.toml new file mode 100644 index 00000000..10749c51 --- /dev/null +++ b/dom_sink/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "html5ever_dom_sink" +version = "0.0.0" +authors = [ "The html5ever Project Developers" ] + +[lib] +name = "html5ever_dom_sink" + +[dependencies.html5ever] +path = "../" + +[dependencies.mac] +git = "https://github.com/reem/rust-mac" + +[dependencies.string_cache] +git = "https://github.com/servo/string-cache" diff --git a/src/sink/common.rs b/dom_sink/src/common.rs similarity index 96% rename from src/sink/common.rs rename to dom_sink/src/common.rs index b6e14b61..7fb1c6fe 100644 --- a/src/sink/common.rs +++ b/dom_sink/src/common.rs @@ -7,7 +7,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use tokenizer::Attribute; +use html5ever::tokenizer::Attribute; use string_cache::QualName; diff --git a/dom_sink/src/lib.rs b/dom_sink/src/lib.rs new file mode 100644 index 00000000..8194715f --- /dev/null +++ b/dom_sink/src/lib.rs @@ -0,0 +1,25 @@ +// Copyright 2014 The html5ever Project Developers. See the +// COPYRIGHT file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name="html5ever_dom_sink"] +#![crate_type="dylib"] + +#![feature(alloc, box_syntax, collections)] + +extern crate html5ever; + +#[macro_use] +extern crate string_cache; + +#[macro_use] +extern crate mac; + +pub mod common; +pub mod rcdom; +pub mod owned_dom; diff --git a/src/sink/owned_dom.rs b/dom_sink/src/owned_dom.rs similarity index 96% rename from src/sink/owned_dom.rs rename to dom_sink/src/owned_dom.rs index b4ff49d4..9b478165 100644 --- a/src/sink/owned_dom.rs +++ b/dom_sink/src/owned_dom.rs @@ -18,15 +18,15 @@ //! been thoroughly audited, and the performance gains vs. RcDom //! have not been demonstrated. -use sink::common::{NodeEnum, Document, Doctype, Text, Comment, Element}; - -use tokenizer::Attribute; -use tree_builder::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText}; -use tree_builder; -use serialize::{Serializable, Serializer}; -use serialize::TraversalScope; -use serialize::TraversalScope::{IncludeNode, ChildrenOnly}; -use driver::ParseResult; +use common::{NodeEnum, Document, Doctype, Text, Comment, Element}; + +use html5ever::tokenizer::Attribute; +use html5ever::tree_builder::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText}; +use html5ever::tree_builder; +use html5ever::serialize::{Serializable, Serializer}; +use html5ever::serialize::TraversalScope; +use html5ever::serialize::TraversalScope::{IncludeNode, ChildrenOnly}; +use html5ever::driver::ParseResult; use std::{mem, ptr}; use std::cell::UnsafeCell; diff --git a/src/sink/rcdom.rs b/dom_sink/src/rcdom.rs similarity index 92% rename from src/sink/rcdom.rs rename to dom_sink/src/rcdom.rs index 67f4296e..a09b2a88 100644 --- a/src/sink/rcdom.rs +++ b/dom_sink/src/rcdom.rs @@ -12,22 +12,22 @@ //! This is sufficient as a static parse tree, but don't build a //! web browser using it. :) -use sink::common::{NodeEnum, Document, Doctype, Text, Comment, Element}; +use common::{NodeEnum, Document, Doctype, Text, Comment, Element}; -use tokenizer::Attribute; -use tree_builder::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText}; -use tree_builder; -use serialize::{Serializable, Serializer}; -use serialize::TraversalScope; -use serialize::TraversalScope::{IncludeNode, ChildrenOnly}; -use driver::ParseResult; +use html5ever::tokenizer::Attribute; +use html5ever::tree_builder::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText}; +use html5ever::tree_builder; +use html5ever::serialize::{Serializable, Serializer}; +use html5ever::serialize::TraversalScope; +use html5ever::serialize::TraversalScope::{IncludeNode, ChildrenOnly}; +use html5ever::driver::ParseResult; use std::cell::RefCell; use std::default::Default; use std::rc::{Rc, Weak}; use std::borrow::Cow; use std::io::{self, Write}; -use std::ops::DerefMut; +use std::ops::{Deref, DerefMut}; use string_cache::QualName; @@ -55,7 +55,13 @@ impl Node { } /// Reference to a DOM node. -pub type Handle = Rc>; +#[derive(Clone)] +pub struct Handle(Rc>); + +impl Deref for Handle { + type Target = Rc>; + fn deref(&self) -> &Rc> { &self.0 } +} /// Weak reference to a DOM node, used for parent pointers. pub type WeakHandle = Weak>; @@ -67,7 +73,7 @@ fn same_node(x: &Handle, y: &Handle) -> bool { } fn new_node(node: NodeEnum) -> Handle { - Rc::new(RefCell::new(Node::new(node))) + Handle(Rc::new(RefCell::new(Node::new(node)))) } fn append(new_parent: &Handle, child: Handle) { @@ -87,7 +93,7 @@ fn get_parent_and_index(target: &Handle) -> Option<(Handle, usize)> { Some((i, _)) => i, None => panic!("have parent but couldn't find in parent's children!"), }; - Some((parent, i)) + Some((Handle(parent), i)) } fn append_to_existing_text(prev: &Handle, text: &str) -> bool { diff --git a/examples/html2html.rs b/examples/html2html.rs index 5c821d23..2620ec46 100644 --- a/examples/html2html.rs +++ b/examples/html2html.rs @@ -16,12 +16,13 @@ //! where htmlparser-1.4.jar comes from http://about.validator.nu/htmlparser/ extern crate html5ever; +extern crate html5ever_dom_sink; use std::io::{self, Read, Write}; use std::default::Default; -use html5ever::sink::rcdom::RcDom; use html5ever::driver::ParseOpts; +use html5ever_dom_sink::rcdom::RcDom; use html5ever::tree_builder::TreeBuilderOpts; use html5ever::{parse, one_input, serialize}; diff --git a/examples/print-rcdom.rs b/examples/print-rcdom.rs index 25ea51ad..afd3952b 100644 --- a/examples/print-rcdom.rs +++ b/examples/print-rcdom.rs @@ -11,6 +11,7 @@ #![plugin(string_cache_plugin)] extern crate html5ever; +extern crate html5ever_dom_sink; #[macro_use] extern crate string_cache; @@ -20,9 +21,9 @@ use std::iter::repeat; use std::default::Default; use std::string::String; -use html5ever::sink::common::{Document, Doctype, Text, Comment, Element}; -use html5ever::sink::rcdom::{RcDom, Handle}; use html5ever::{parse, one_input}; +use html5ever_dom_sink::common::{Document, Doctype, Text, Comment, Element}; +use html5ever_dom_sink::rcdom::{RcDom, Handle}; // This is not proper HTML serialization, of course. diff --git a/src/lib.rs b/src/lib.rs index ec94ce6b..a7ac0f21 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,7 +10,7 @@ #![crate_name="html5ever"] #![crate_type="dylib"] -#![feature(plugin, box_syntax, core, collections, alloc, str_char, slice_patterns)] +#![feature(plugin, box_syntax, core, collections, str_char, slice_patterns)] #![deny(warnings)] #![allow(unused_parens)] @@ -50,11 +50,4 @@ pub mod tree_builder; pub mod serialize; -/// Consumers of the parser API. -pub mod sink { - pub mod common; - pub mod rcdom; - pub mod owned_dom; -} - pub mod driver; diff --git a/tests/serializer.rs b/tests/serializer.rs index 3e880a04..3e7b9ea9 100644 --- a/tests/serializer.rs +++ b/tests/serializer.rs @@ -12,13 +12,14 @@ extern crate string_cache; extern crate html5ever; +extern crate html5ever_dom_sink; use std::default::Default; use std::borrow::ToOwned; -use html5ever::sink::rcdom::RcDom; use html5ever::driver::ParseOpts; use html5ever::{parse_fragment, one_input, serialize}; +use html5ever_dom_sink::rcdom::RcDom; fn parse_and_serialize(input: String) -> String { let dom: RcDom = parse_fragment(one_input(input), atom!(body), ParseOpts::default()); diff --git a/tests/tree_builder.rs b/tests/tree_builder.rs index 6285a961..ddff71f9 100644 --- a/tests/tree_builder.rs +++ b/tests/tree_builder.rs @@ -15,6 +15,7 @@ extern crate test; extern crate string_cache; extern crate html5ever; +extern crate html5ever_dom_sink; extern crate test_util; use test_util::foreach_html5lib_test; @@ -30,9 +31,9 @@ use std::collections::{HashSet, HashMap}; use test::{TestDesc, TestDescAndFn, DynTestName, DynTestFn}; use test::ShouldPanic::No; -use html5ever::sink::common::{Document, Doctype, Text, Comment, Element}; -use html5ever::sink::rcdom::{RcDom, Handle}; use html5ever::{parse, parse_fragment, one_input}; +use html5ever_dom_sink::common::{Document, Doctype, Text, Comment, Element}; +use html5ever_dom_sink::rcdom::{RcDom, Handle}; use string_cache::Atom;