Skip to content

Commit 19c89ff

Browse files
committed
Move interfaces into markup5ever
- Moves `TreeSink` into markup5ever, and applies to xhtml5ever. - Renames `QName` from xml5ever to `QualName`. - Adds `prefix` field to `QualName`. - Moves `Attributes` into markup5ever
1 parent a3e0f64 commit 19c89ff

File tree

25 files changed

+631
-526
lines changed

25 files changed

+631
-526
lines changed

html5ever/src/driver.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@
99

1010
//! High-level interface to the parser.
1111
12-
use tokenizer::{Attribute, Tokenizer, TokenizerOpts, TokenizerResult};
1312
use tokenizer::buffer_queue::BufferQueue;
13+
use tokenizer::{Tokenizer, TokenizerOpts, TokenizerResult};
1414
use tree_builder::{TreeBuilderOpts, TreeBuilder, TreeSink};
1515

1616
use std::borrow::Cow;
1717
use std::mem;
1818

1919
use encoding::{self, EncodingRef};
20-
use QualName;
2120
use tendril;
2221
use tendril::{StrTendril, ByteTendril};
2322
use tendril::stream::{TendrilSink, Utf8LossyDecoder, LossyDecoder};
23+
use markup5ever::{Attribute, QualName};
2424

2525
/// All-encompassing options struct for the parser.
2626
#[derive(Clone, Default)]

html5ever/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
extern crate phf;
2525

2626
pub use markup5ever::*;
27-
pub use tokenizer::Attribute;
2827
pub use driver::{ParseOpts, parse_document, parse_fragment, Parser};
2928

3029
pub use serialize::serialize;

html5ever/src/rcdom.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use std::rc::{Rc, Weak};
2525
use tendril::StrTendril;
2626

2727
use QualName;
28-
use tokenizer::Attribute;
28+
use markup5ever::Attribute;
2929
use tree_builder::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText};
3030
use tree_builder;
3131
use serialize::{Serializable, Serializer};
@@ -193,6 +193,10 @@ impl TreeSink for RcDom {
193193
same_node(&x, &y)
194194
}
195195

196+
fn same_node_ref(&self, x: &Handle, y: &Handle) -> bool {
197+
same_node(x, y)
198+
}
199+
196200
fn elem_name(&self, target: Handle) -> QualName {
197201
// FIXME: rust-lang/rust#22252
198202
if let Element(ref name, _, _) = target.borrow().node {
@@ -202,6 +206,14 @@ impl TreeSink for RcDom {
202206
}
203207
}
204208

209+
fn elem_name_ref(&self, target: &Handle) -> QualName {
210+
return match target.borrow().node {
211+
Element(ref name, _, _) => name.clone(),
212+
_ => panic!("not an element!"),
213+
};
214+
}
215+
216+
205217
fn create_element(&mut self, name: QualName, attrs: Vec<Attribute>) -> Handle {
206218
let info = match name {
207219
qualname!(html, "script") => Script(false),
@@ -223,6 +235,11 @@ impl TreeSink for RcDom {
223235
new_node(Comment(text))
224236
}
225237

238+
#[allow(unused_variables)]
239+
fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Handle{
240+
panic!(" HTML files, can't create PI")
241+
}
242+
226243
fn has_parent_node(&self, node: Handle) -> bool {
227244
let node = node.borrow();
228245
node.parent.is_some()

html5ever/src/tokenizer/interface.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ use tokenizer::states;
1111

1212
use std::borrow::Cow;
1313

14-
use {LocalName, QualName};
14+
use {LocalName};
1515
use tendril::StrTendril;
16+
use markup5ever::interface::Attribute;
1617

1718
pub use self::TagKind::{StartTag, EndTag};
1819
pub use self::Token::{DoctypeToken, TagToken, CommentToken, CharacterTokens};
@@ -39,18 +40,6 @@ impl Doctype {
3940
}
4041
}
4142

42-
/// A tag attribute.
43-
///
44-
/// The namespace on the attribute name is almost always ns!("").
45-
/// The tokenizer creates all attributes this way, but the tree
46-
/// builder will adjust certain attribute names inside foreign
47-
/// content (MathML, SVG).
48-
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)]
49-
pub struct Attribute {
50-
pub name: QualName,
51-
pub value: StrTendril,
52-
}
53-
5443
#[derive(PartialEq, Eq, Hash, Copy, Clone, Debug)]
5544
pub enum TagKind {
5645
StartTag,

html5ever/src/tokenizer/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
//! The HTML5 tokenizer.
1111
12-
pub use self::interface::{Doctype, Attribute, TagKind, StartTag, EndTag, Tag};
12+
pub use self::interface::{Doctype, TagKind, StartTag, EndTag, Tag};
1313
pub use self::interface::{Token, DoctypeToken, TagToken, CommentToken};
1414
pub use self::interface::{CharacterTokens, NullCharacterToken, EOFToken, ParseError};
1515
pub use self::interface::{TokenSink, TokenSinkResult};
@@ -34,6 +34,8 @@ use std::collections::BTreeMap;
3434
use {LocalName, QualName};
3535
use tendril::StrTendril;
3636
use markup5ever::SmallCharSet;
37+
use markup5ever::interface::{Attribute};
38+
pub use markup5ever::util::buffer_queue::{BufferQueue, SetResult, FromSet, NotFromSet};
3739

3840
pub mod buffer_queue;
3941
pub mod states;

html5ever/src/tree_builder/actions.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
1515
use tree_builder::types::*;
1616
use tree_builder::tag_sets::*;
17-
use tree_builder::interface::{TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText};
17+
use markup5ever::interface::{Attribute, TreeSink, QuirksMode, NodeOrText, AppendNode, AppendText};
1818
use tree_builder::rules::TreeBuilderStep;
1919

20-
use tokenizer::{Attribute, Tag, StartTag, EndTag};
20+
use tokenizer::{Tag, StartTag, EndTag};
2121
use tokenizer::states::{RawData, RawKind};
2222

2323
use util::str::to_escaped_string;
@@ -568,7 +568,7 @@ impl<Handle, Sink> TreeBuilderActions<Handle>
568568

569569
fn generate_implied_end_except(&mut self, except: LocalName) {
570570
self.generate_implied_end(|p| match p {
571-
QualName { ns: ns!(html), ref local } if *local == except => false,
571+
QualName { ns: ns!(html), ref local, .. } if *local == except => false,
572572
_ => cursory_implied_end(p),
573573
});
574574
}
@@ -667,7 +667,7 @@ impl<Handle, Sink> TreeBuilderActions<Handle>
667667
node = ctx;
668668
}
669669
let name = match self.sink.elem_name(node.clone()) {
670-
QualName { ns: ns!(html), local } => local,
670+
QualName { ns: ns!(html), local, .. } => local,
671671
_ => continue,
672672
};
673673
match name {

html5ever/src/tree_builder/data.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// except according to those terms.
99

1010
use tokenizer::Doctype;
11-
use tree_builder::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
11+
use markup5ever::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
1212

1313
use std::ascii::AsciiExt;
1414
use tendril::StrTendril;

html5ever/src/tree_builder/mod.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
//! The HTML5 tree builder.
1313
14-
pub use self::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
15-
pub use self::interface::{NodeOrText, AppendNode, AppendText};
16-
pub use self::interface::{TreeSink, Tracer};
14+
pub use markup5ever::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
15+
pub use markup5ever::interface::{NodeOrText, AppendNode, AppendText};
16+
pub use markup5ever::interface::{TreeSink, Tracer};
1717

1818
use self::types::*;
1919
use self::actions::TreeBuilderActions;
@@ -34,8 +34,7 @@ use std::borrow::Cow::Borrowed;
3434
use std::collections::VecDeque;
3535

3636
#[macro_use] mod tag_sets;
37-
// "pub" is a workaround for rust#18241 (?)
38-
pub mod interface;
37+
3938
mod data;
4039
mod types;
4140
mod actions;
@@ -222,7 +221,7 @@ impl<Handle, Sink> TreeBuilder<Handle, Sink>
222221
pub fn tokenizer_state_for_context_elem(&self) -> tok_state::State {
223222
let elem = self.context_elem.clone().expect("no context element");
224223
let name = match self.sink.elem_name(elem) {
225-
QualName { ns: ns!(html), local } => local,
224+
QualName { ns: ns!(html), local, .. } => local,
226225
_ => return tok_state::Data
227226
};
228227
match name {
@@ -280,7 +279,7 @@ impl<Handle, Sink> TreeBuilder<Handle, Sink>
280279
println!("dump_state on {}", label);
281280
print!(" open_elems:");
282281
for node in self.open_elems.iter() {
283-
let QualName { ns, local } = self.sink.elem_name(node.clone());
282+
let QualName { ns, local, .. } = self.sink.elem_name(node.clone());
284283
match ns {
285284
ns!(html) => print!(" {}", &local[..]),
286285
_ => panic!(),
@@ -292,7 +291,7 @@ impl<Handle, Sink> TreeBuilder<Handle, Sink>
292291
match entry {
293292
&Marker => print!(" Marker"),
294293
&Element(ref h, _) => {
295-
let QualName { ns, local } = self.sink.elem_name(h.clone());
294+
let QualName { ns, local, .. } = self.sink.elem_name(h.clone());
296295
match ns {
297296
ns!(html) => print!(" {}", &local[..]),
298297
_ => panic!(),
@@ -501,9 +500,9 @@ impl<Handle, Sink> TokenSink
501500
#[cfg(test)]
502501
#[allow(non_snake_case)]
503502
mod test {
504-
use super::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
505-
use super::interface::{NodeOrText, AppendNode, AppendText};
506-
use super::interface::{TreeSink, Tracer};
503+
use markup5ever::interface::{QuirksMode, Quirks, LimitedQuirks, NoQuirks};
504+
use markup5ever::interface::{NodeOrText, AppendNode, AppendText};
505+
use markup5ever::interface::{TreeSink, Tracer};
507506

508507
use super::types::*;
509508
use super::actions::TreeBuilderActions;
@@ -528,7 +527,7 @@ mod test {
528527

529528
use driver::*;
530529
use super::{TreeBuilderOpts, TreeBuilder};
531-
use tokenizer::Attribute;
530+
use markup5ever::Attribute;
532531
use rcdom::{Node, Handle, RcDom, NodeEnum, ElementEnum};
533532

534533
pub struct LineCountingDOM {
@@ -564,10 +563,18 @@ mod test {
564563
self.rcdom.same_node(x, y)
565564
}
566565

566+
fn same_node_ref(&self, x: &Handle, y: &Handle) -> bool {
567+
self.rcdom.same_node_ref(x, y)
568+
}
569+
567570
fn elem_name(&self, target: Handle) -> QualName {
568571
self.rcdom.elem_name(target)
569572
}
570573

574+
fn elem_name_ref(&self, target: &Handle) -> QualName {
575+
self.rcdom.elem_name_ref(target)
576+
}
577+
571578
fn create_element(&mut self, name: QualName, attrs: Vec<Attribute>) -> Handle {
572579
self.line_vec.push((name.clone(), self.current_line));
573580
self.rcdom.create_element(name, attrs)
@@ -577,6 +584,10 @@ mod test {
577584
self.rcdom.create_comment(text)
578585
}
579586

587+
fn create_pi(&mut self, target: StrTendril, content: StrTendril) -> Handle {
588+
self.rcdom.create_pi(target, content)
589+
}
590+
580591
fn has_parent_node(&self, node: Handle) -> bool {
581592
let node = node.borrow();
582593
node.parent.is_some()

html5ever/src/tree_builder/rules.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
use tree_builder::types::*;
1313
use tree_builder::tag_sets::*;
1414
use tree_builder::actions::{NoPush, Push, TreeBuilderActions};
15-
use tree_builder::interface::{TreeSink, Quirks, AppendNode};
16-
17-
use tokenizer::{Attribute, EndTag, StartTag, Tag};
15+
use tokenizer::{EndTag, StartTag, Tag};
1816
use tokenizer::states::{Rcdata, Rawtext, ScriptData, Plaintext};
1917

2018
use QualName;
@@ -26,6 +24,7 @@ use std::borrow::Cow::Borrowed;
2624
use std::borrow::ToOwned;
2725

2826
use tendril::{StrTendril, SliceExt};
27+
use markup5ever::interface::{Attribute, TreeSink, Quirks, AppendNode};
2928

3029
fn any_not_whitespace(x: &StrTendril) -> bool {
3130
// FIXME: this might be much faster as a byte scan

markup5ever/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ heap_size = ["heapsize", "heapsize_derive", "string_cache/heapsize"]
1717
[dependencies]
1818
string_cache = "0.5"
1919
phf = "0.7"
20+
tendril = "0.2"
2021
heapsize = { version = "0.3", optional = true }
2122
heapsize_derive = { version = "0.1", optional = true }
2223

0 commit comments

Comments
 (0)