From d255126b02595ddd2d86d2c1cf19c99bb6810bd9 Mon Sep 17 00:00:00 2001 From: "aydin.kim" Date: Tue, 16 Apr 2013 15:23:55 +0900 Subject: [PATCH] fix image element to work --- src/servo/html/hubbub_html_parser.rs | 95 +++++++++++++--------------- 1 file changed, 43 insertions(+), 52 deletions(-) diff --git a/src/servo/html/hubbub_html_parser.rs b/src/servo/html/hubbub_html_parser.rs index 9b9660caf3b..2829f8ebab7 100644 --- a/src/servo/html/hubbub_html_parser.rs +++ b/src/servo/html/hubbub_html_parser.rs @@ -20,24 +20,13 @@ use std::net::url::Url; use std::net::url; macro_rules! handle_element( - ($tag:expr, $string:expr, $ctor:ident, $type_id:expr) => ( + ($tag:expr, $string:expr, $type_id:expr, $ctor:ident, [ $(($field:ident : $field_init:expr)),* ]) => ( if eq_slice($tag, $string) { let _element = ~$ctor { - parent: Element::new($type_id, ($tag).to_str()) - }; - unsafe { - return Node::as_abstract_node(_element); - } - } - ) -) - -macro_rules! handle_heading_element( - ($tag:expr, $string:expr, $ctor:ident, $type_id:expr, $level:expr) => ( - if eq_slice($tag, $string) { - let _element = ~HTMLHeadingElement { parent: Element::new($type_id, ($tag).to_str()), - level: $level + $( + $field: $field_init, + )* }; unsafe { return Node::as_abstract_node(_element); @@ -165,44 +154,46 @@ fn js_script_listener(to_parent: Chan<~[~[u8]]>, fn build_element_from_tag(tag: &str) -> AbstractNode { // TODO (Issue #85): use atoms - handle_element!(tag, "a", HTMLAnchorElement, HTMLAnchorElementTypeId); - handle_element!(tag, "aside", HTMLAsideElement, HTMLAsideElementTypeId); - handle_element!(tag, "br", HTMLBRElement, HTMLBRElementTypeId); - handle_element!(tag, "body", HTMLBodyElement, HTMLBodyElementTypeId); - handle_element!(tag, "bold", HTMLBoldElement, HTMLBoldElementTypeId); - handle_element!(tag, "div", HTMLDivElement, HTMLDivElementTypeId); - handle_element!(tag, "font", HTMLFontElement, HTMLFontElementTypeId); - handle_element!(tag, "form", HTMLFormElement, HTMLFormElementTypeId); - handle_element!(tag, "hr", HTMLHRElement, HTMLHRElementTypeId); - handle_element!(tag, "head", HTMLHeadElement, HTMLHeadElementTypeId); - handle_element!(tag, "html", HTMLHtmlElement, HTMLHtmlElementTypeId); - handle_element!(tag, "input", HTMLInputElement, HTMLInputElementTypeId); - handle_element!(tag, "i", HTMLItalicElement, HTMLItalicElementTypeId); - handle_element!(tag, "link", HTMLLinkElement, HTMLLinkElementTypeId); - handle_element!(tag, "li", HTMLListItemElement, HTMLListItemElementTypeId); - handle_element!(tag, "meta", HTMLMetaElement, HTMLMetaElementTypeId); - handle_element!(tag, "ol", HTMLOListElement, HTMLOListElementTypeId); - handle_element!(tag, "option", HTMLOptionElement, HTMLOptionElementTypeId); - handle_element!(tag, "p", HTMLParagraphElement, HTMLParagraphElementTypeId); - handle_element!(tag, "script", HTMLScriptElement, HTMLScriptElementTypeId); - handle_element!(tag, "section", HTMLSectionElement, HTMLSectionElementTypeId); - handle_element!(tag, "select", HTMLSelectElement, HTMLSelectElementTypeId); - handle_element!(tag, "small", HTMLSmallElement, HTMLSmallElementTypeId); - handle_element!(tag, "span", HTMLSpanElement, HTMLSpanElementTypeId); - handle_element!(tag, "style", HTMLStyleElement, HTMLStyleElementTypeId); - handle_element!(tag, "tbody", HTMLTableBodyElement, HTMLTableBodyElementTypeId); - handle_element!(tag, "td", HTMLTableCellElement, HTMLTableCellElementTypeId); - handle_element!(tag, "table", HTMLTableElement, HTMLTableElementTypeId); - handle_element!(tag, "tr", HTMLTableRowElement, HTMLTableRowElementTypeId); - handle_element!(tag, "title", HTMLTitleElement, HTMLTitleElementTypeId); - handle_element!(tag, "ul", HTMLUListElement, HTMLUListElementTypeId); + handle_element!(tag, "a", HTMLAnchorElementTypeId, HTMLAnchorElement, []); + handle_element!(tag, "aside", HTMLAsideElementTypeId, HTMLAsideElement, []); + handle_element!(tag, "br", HTMLBRElementTypeId, HTMLBRElement, []); + handle_element!(tag, "body", HTMLBodyElementTypeId, HTMLBodyElement, []); + handle_element!(tag, "bold", HTMLBoldElementTypeId, HTMLBoldElement, []); + handle_element!(tag, "div", HTMLDivElementTypeId, HTMLDivElement, []); + handle_element!(tag, "font", HTMLFontElementTypeId, HTMLFontElement, []); + handle_element!(tag, "form", HTMLFormElementTypeId, HTMLFormElement, []); + handle_element!(tag, "hr", HTMLHRElementTypeId, HTMLHRElement, []); + handle_element!(tag, "head", HTMLHeadElementTypeId, HTMLHeadElement, []); + handle_element!(tag, "html", HTMLHtmlElementTypeId, HTMLHtmlElement, []); + handle_element!(tag, "input", HTMLInputElementTypeId, HTMLInputElement, []); + handle_element!(tag, "i", HTMLItalicElementTypeId, HTMLItalicElement, []); + handle_element!(tag, "link", HTMLLinkElementTypeId, HTMLLinkElement, []); + handle_element!(tag, "li", HTMLListItemElementTypeId, HTMLListItemElement, []); + handle_element!(tag, "meta", HTMLMetaElementTypeId, HTMLMetaElement, []); + handle_element!(tag, "ol", HTMLOListElementTypeId, HTMLOListElement, []); + handle_element!(tag, "option", HTMLOptionElementTypeId, HTMLOptionElement, []); + handle_element!(tag, "p", HTMLParagraphElementTypeId, HTMLParagraphElement, []); + handle_element!(tag, "script", HTMLScriptElementTypeId, HTMLScriptElement, []); + handle_element!(tag, "section", HTMLSectionElementTypeId, HTMLSectionElement, []); + handle_element!(tag, "select", HTMLSelectElementTypeId, HTMLSelectElement, []); + handle_element!(tag, "small", HTMLSmallElementTypeId, HTMLSmallElement, []); + handle_element!(tag, "span", HTMLSpanElementTypeId, HTMLSpanElement, []); + handle_element!(tag, "style", HTMLStyleElementTypeId, HTMLStyleElement, []); + handle_element!(tag, "tbody", HTMLTableBodyElementTypeId, HTMLTableBodyElement, []); + handle_element!(tag, "td", HTMLTableCellElementTypeId, HTMLTableCellElement, []); + handle_element!(tag, "table", HTMLTableElementTypeId, HTMLTableElement, []); + handle_element!(tag, "tr", HTMLTableRowElementTypeId, HTMLTableRowElement, []); + handle_element!(tag, "title", HTMLTitleElementTypeId, HTMLTitleElement, []); + handle_element!(tag, "ul", HTMLUListElementTypeId, HTMLUListElement, []); - handle_heading_element!(tag, "h1", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading1); - handle_heading_element!(tag, "h2", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading2); - handle_heading_element!(tag, "h3", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading3); - handle_heading_element!(tag, "h4", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading4); - handle_heading_element!(tag, "h5", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading5); - handle_heading_element!(tag, "h6", HTMLHeadingElement, HTMLHeadingElementTypeId, Heading6); + handle_element!(tag, "img", HTMLImageElementTypeId, HTMLImageElement, [(image: None)]); + + handle_element!(tag, "h1", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading1)]); + handle_element!(tag, "h2", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading2)]); + handle_element!(tag, "h3", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading3)]); + handle_element!(tag, "h4", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading4)]); + handle_element!(tag, "h5", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading5)]); + handle_element!(tag, "h6", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading6)]); unsafe { Node::as_abstract_node(~Element::new(UnknownElementTypeId, tag.to_str()))