Skip to content

Commit

Permalink
error: could not compile (lib) due to 22 previous errors; 1 warning e…
Browse files Browse the repository at this point in the history
…mitted
  • Loading branch information
jaytaph committed Sep 14, 2024
1 parent 51b3274 commit 7091c76
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 134 deletions.
20 changes: 10 additions & 10 deletions crates/gosub_html5/src/document/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -691,35 +691,35 @@ mod tests {

// div child
let div_child = doc_read.get_node_by_id(root_children[0]).unwrap();
assert_eq!(div_child.type_of(), NodeType::Element);
assert_eq!(div_child.type_of(), NodeType::ElementNode);
assert_eq!(div_child.name, "div");
let div_children = &div_child.children;

// p child
let p_child = doc_read.get_node_by_id(div_children[0]).unwrap();
assert_eq!(p_child.type_of(), NodeType::Element);
assert_eq!(p_child.type_of(), NodeType::ElementNode);
assert_eq!(p_child.name, "p");
let p_children = &p_child.children;

// comment inside p
let p_comment = doc_read.get_node_by_id(p_children[0]).unwrap();
assert_eq!(p_comment.type_of(), NodeType::Comment);
assert_eq!(p_comment.type_of(), NodeType::CommentNode);
let NodeData::Comment(p_comment_data) = &p_comment.data else {
panic!()
};
assert_eq!(p_comment_data.value, "comment inside p");

// body inside p
let p_body = doc_read.get_node_by_id(p_children[1]).unwrap();
assert_eq!(p_body.type_of(), NodeType::Text);
assert_eq!(p_body.type_of(), NodeType::TextNode);
let NodeData::Text(p_body_data) = &p_body.data else {
panic!()
};
assert_eq!(p_body_data.value, "hey");

// comment inside div
let div_comment = doc_read.get_node_by_id(div_children[1]).unwrap();
assert_eq!(div_comment.type_of(), NodeType::Comment);
assert_eq!(div_comment.type_of(), NodeType::CommentNode);
let NodeData::Comment(div_comment_data) = &div_comment.data else {
panic!()
};
Expand Down Expand Up @@ -852,35 +852,35 @@ mod tests {

// div child
let div_child = doc_read.get_node_by_id(root_children[0]).unwrap();
assert_eq!(div_child.type_of(), NodeType::Element);
assert_eq!(div_child.type_of(), NodeType::ElementNode);
assert_eq!(div_child.name, "div");
let div_children = &div_child.children;

// p child
let p_child = doc_read.get_node_by_id(div_children[0]).unwrap();
assert_eq!(p_child.type_of(), NodeType::Element);
assert_eq!(p_child.type_of(), NodeType::ElementNode);
assert_eq!(p_child.name, "p");
let p_children = &p_child.children;

// comment inside p
let p_comment = doc_read.get_node_by_id(p_children[0]).unwrap();
assert_eq!(p_comment.type_of(), NodeType::Comment);
assert_eq!(p_comment.type_of(), NodeType::CommentNode);
let NodeData::Comment(p_comment_data) = &p_comment.data else {
panic!()
};
assert_eq!(p_comment_data.value, "comment inside p");

// body inside p
let p_body = doc_read.get_node_by_id(p_children[1]).unwrap();
assert_eq!(p_body.type_of(), NodeType::Text);
assert_eq!(p_body.type_of(), NodeType::TextNode);
let NodeData::Text(p_body_data) = &p_body.data else {
panic!()
};
assert_eq!(p_body_data.value, "hey");

// comment inside div
let div_comment = doc_read.get_node_by_id(div_children[1]).unwrap();
assert_eq!(div_comment.type_of(), NodeType::Comment);
assert_eq!(div_comment.type_of(), NodeType::CommentNode);
let NodeData::Comment(div_comment_data) = &div_comment.data else {
panic!()
};
Expand Down
2 changes: 1 addition & 1 deletion crates/gosub_html5/src/document/task_queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ impl<D: Document> DocumentTaskQueue<D> {
element_id,
} => {
if let Some(node) = self.document.get_mut().get_node_by_id_mut(*element_id) {
if let Some(data) = node.get_element_data_mut() {
if let Some(mut data) = node.get_element_data_mut() {
data.attributes_mut().insert(key.clone(), value.clone());
// let mut attributes = node.get_element_data().unwrap().attributes().clone();
// attributes.insert(key.clone(), value.clone());
Expand Down
185 changes: 111 additions & 74 deletions crates/gosub_html5/src/node/node.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
use gosub_shared::traits::node::{Node, NodeDataType};
use gosub_shared::traits::node::{Node, NodeType};
use crate::node::data::comment::CommentData;
use crate::node::data::doctype::DocTypeData;
use crate::node::data::document::DocumentData;
use crate::node::data::text::TextData;
use core::fmt::Debug;
use std::cell::{Ref, RefCell, RefMut};
use gosub_shared::byte_stream::Location;
use gosub_shared::document::DocumentHandle;
use gosub_shared::node::NodeId;
Expand Down Expand Up @@ -31,18 +32,13 @@ pub struct NodeImpl {
pub id: NodeId,
/// parent of the node, if any
pub parent: Option<NodeId>,
/// children of the node
/// any children of the node
pub children: Vec<NodeId>,
// /// name of the node, or empty when it's not a tag
// pub name: String,
// /// namespace of the node
// pub namespace: Option<String>,
/// actual data of the node
pub data: NodeDataTypeInternal,
/// weak pointer to document this node is attached to
// pub document: Weak<RefCell<D>>,
pub data: RefCell<NodeDataTypeInternal>,
/// Handle to the document in which this node resides
pub document: DocumentHandle<DocumentImpl>,
// Returns true when the given node is registered into an arena
// Returns true when the given node is registered into the document arena
pub is_registered: bool,
// Location of the node in the source code
pub location: Location,
Expand Down Expand Up @@ -80,77 +76,118 @@ impl Node for NodeImpl {
self.parent_id().is_none()
}

// fn type_of_mut(&mut self) -> &mut NodeDataType<Self>
// where
// Self: Sized
// {
// match &mut self.data {
// NodeDataTypeInternal::Document(data) => &mut NodeDataType::Document(data),
// NodeDataTypeInternal::DocType(data) => &mut NodeDataType::DocType(data),
// NodeDataTypeInternal::Text(data) => &mut NodeDataType::Text(data),
// NodeDataTypeInternal::Comment(data) => &mut NodeDataType::Comment(data),
// NodeDataTypeInternal::Element(data) => &mut NodeDataType::Element(data),
// }
// }

fn children(&self) -> &[NodeId] {
self.children.as_slice()
}

/// Returns the token type of the given token
fn type_of(&self) -> NodeDataType<Self> {
match &self.data {
NodeDataTypeInternal::Document(data) => NodeDataType::Document(data),
NodeDataTypeInternal::DocType(data) => NodeDataType::DocType(data),
NodeDataTypeInternal::Text(data) => NodeDataType::Text(data),
NodeDataTypeInternal::Comment(data) => NodeDataType::Comment(data),
NodeDataTypeInternal::Element(data) => NodeDataType::Element(data),
fn type_of(&self) -> NodeType {
match *self.data.borrow() {
NodeDataTypeInternal::Document(_) => NodeType::DocumentNode,
NodeDataTypeInternal::DocType(_) => NodeType::DocTypeNode,
NodeDataTypeInternal::Text(_) => NodeType::TextNode,
NodeDataTypeInternal::Comment(_) => NodeType::CommentNode,
NodeDataTypeInternal::Element(_) => NodeType::ElementNode,
}
}

fn is_element_node(&self) -> bool {
match &self.data {
NodeDataTypeInternal::Element(_) => true,
_ => false,
}
self.type_of() == NodeType::ElementNode
}

fn get_element_data(&self) -> Option<&Self::ElementData> {
if let NodeDataTypeInternal::Element(data) = &self.data {
return Some(data);
}
fn get_element_data(&self) -> Option<Ref<Self::ElementData>> {
let borrowed_data = self.data.borrow();

if let NodeDataTypeInternal::Element(_) = *borrowed_data {
return Some(Ref::map(borrowed_data, |d|
if let NodeDataTypeInternal::Element(ref element_data) = d {
element_data
} else {
unreachable!()
}
));
}
None
}

fn get_element_data_mut(&mut self) -> Option<&mut Self::ElementData> {
if let NodeDataTypeInternal::Element(data) = &mut self.data {
return Some(data);
}
fn get_element_data_mut(&self) -> Option<RefMut<ElementData>> {
let borrowed_data = self.data.borrow_mut();

if let NodeDataTypeInternal::Element(_) = *borrowed_data {
return Some(RefMut::map(borrowed_data, |d| {
if let NodeDataTypeInternal::Element(ref mut element_data) = d {
element_data
} else {
unreachable!()
}
}));
}
None
}

fn is_text_node(&self) -> bool {
match &self.data {
match *self.data.borrow() {
NodeDataTypeInternal::Text(_) => true,
_ => false,
}
}

fn get_text_data(&self) -> Option<&Self::TextData> {
if let NodeDataTypeInternal::Text(data) = &self.data {
return Some(data);
fn get_text_data(&self) -> Option<Ref<Self::TextData>> {
let borrowed_data = self.data.borrow();

if let NodeDataTypeInternal::Text(_) = *borrowed_data {
return Some(Ref::map(borrowed_data, |d|
if let NodeDataTypeInternal::Text(ref text_data) = d {
text_data
} else {
unreachable!()
}
));
}
None
}

fn get_text_data_mut(&self) -> Option<RefMut<TextData>> {
let borrowed_data = self.data.borrow_mut();

if let NodeDataTypeInternal::Text(_) = *borrowed_data {
return Some(RefMut::map(borrowed_data, |d| {
if let NodeDataTypeInternal::Text(ref mut text_data) = d {
text_data
} else {
unreachable!()
}
}));
}
None
}

fn get_text_data_mut(&mut self) -> Option<&mut Self::TextData> {
if let NodeDataTypeInternal::Text(data) = &mut self.data {
return Some(data);
fn get_comment_data(&self) -> Option<Ref<Self::CommentData>> {
let borrowed_data = self.data.borrow();

if let NodeDataTypeInternal::Comment(_) = *borrowed_data {
return Some(Ref::map(borrowed_data, |d|
if let NodeDataTypeInternal::Comment(ref text_data) = d {
text_data
} else {
unreachable!()
}
));
}
None
}

fn get_doctype_data(&self) -> Option<Ref<Self::DocTypeData>> {
let borrowed_data = self.data.borrow();

if let NodeDataTypeInternal::DocType(_) = *borrowed_data {
return Some(Ref::map(borrowed_data, |d|
if let NodeDataTypeInternal::DocType(ref text_data) = d {
text_data
} else {
unreachable!()
}
));
}
None
}

Expand Down Expand Up @@ -211,7 +248,7 @@ impl NodeImpl {
id,
parent,
children,
data: data.clone(),
data: data.clone().into(),
document: document.clone(),
is_registered,
location,
Expand Down Expand Up @@ -286,21 +323,21 @@ impl NodeImpl {
self.is_registered
}

pub fn is_text(&self) -> bool {
if let NodeDataTypeInternal::Text(_) = &self.data {
return true;
}

false
}

pub fn as_text(&self) -> &TextData {
if let NodeDataTypeInternal::Text(text) = &self.data {
return text;
}

panic!("Node is not a text");
}
// pub fn is_text(&self) -> bool {
// if let NodeDataTypeInternal::Text(_) = *self.data.borrow() {
// return true;
// }
//
// false
// }
//
// pub fn as_text(&self) -> &TextData {
// if let NodeDataTypeInternal::Text(text) = &self.data {
// return text;
// }
//
// panic!("Node is not a text");
// }
}

#[cfg(test)]
Expand Down Expand Up @@ -397,11 +434,11 @@ mod tests {
fn type_of() {
let document = Document::shared(None);
let node = Node::new_document(&document, Location::default());
assert_eq!(node.type_of(), NodeType::Document);
assert_eq!(node.type_of(), NodeType::DocumentNode);
let node = Node::new_text(&document, Location::default(), "test");
assert_eq!(node.type_of(), NodeType::Text);
assert_eq!(node.type_of(), NodeType::TextNode);
let node = Node::new_comment(&document, Location::default(), "test");
assert_eq!(node.type_of(), NodeType::Comment);
assert_eq!(node.type_of(), NodeType::CommentNode);
let mut attributes = HashMap::new();
attributes.insert("id".to_string(), "test".to_string());
let node = Node::new_element(
Expand All @@ -411,7 +448,7 @@ mod tests {
HTML_NAMESPACE,
Location::default(),
);
assert_eq!(node.type_of(), NodeType::Element);
assert_eq!(node.type_of(), NodeType::ElementNode);
}

#[test]
Expand Down Expand Up @@ -470,11 +507,11 @@ mod tests {
fn type_of_node() {
let document = Document::shared(None);
let node = Node::new_document(&document, Location::default());
assert_eq!(node.type_of(), NodeType::Document);
assert_eq!(node.type_of(), NodeType::DocumentNode);
let node = Node::new_text(&document, Location::default(), "test");
assert_eq!(node.type_of(), NodeType::Text);
assert_eq!(node.type_of(), NodeType::TextNode);
let node = Node::new_comment(&document, Location::default(), "test");
assert_eq!(node.type_of(), NodeType::Comment);
assert_eq!(node.type_of(), NodeType::CommentNode);
let mut attributes = HashMap::new();
attributes.insert("id".to_string(), "test".to_string());
let node = Node::new_element(
Expand All @@ -484,6 +521,6 @@ mod tests {
HTML_NAMESPACE,
Location::default(),
);
assert_eq!(node.type_of(), NodeType::Element);
assert_eq!(node.type_of(), NodeType::ElementNode);
}
}
Loading

0 comments on commit 7091c76

Please sign in to comment.