diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-05-24 21:48:01 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-05-27 18:44:21 +0200 |
commit | ce45afac0c61d624064e7777b8b02ea0f9e50bdf (patch) | |
tree | 52cf4d82a6e58759ed7fd1908634bb1f4ee4b122 /src/components/script/dom/htmlserializer.rs | |
parent | d1ca38048210ee214d6335156bd546069ee81fea (diff) | |
download | servo-ce45afac0c61d624064e7777b8b02ea0f9e50bdf.tar.gz servo-ce45afac0c61d624064e7777b8b02ea0f9e50bdf.zip |
Rewrite escape() in htmlserializer to push onto a StrBuf.
Diffstat (limited to 'src/components/script/dom/htmlserializer.rs')
-rw-r--r-- | src/components/script/dom/htmlserializer.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/components/script/dom/htmlserializer.rs b/src/components/script/dom/htmlserializer.rs index ebda79fe416..817f84f91a6 100644 --- a/src/components/script/dom/htmlserializer.rs +++ b/src/components/script/dom/htmlserializer.rs @@ -81,10 +81,10 @@ fn serialize_text(text: &JSRef<Text>, html: &mut StrBuf) { "noembed" | "noframes" | "plaintext" | "noscript" if elem.deref().namespace == namespace::HTML => html.push_str(text.deref().characterdata.data), - _ => html.push_str(escape(text.deref().characterdata.data, false)) + _ => escape(text.deref().characterdata.data, false, html) } } - _ => html.push_str(escape(text.deref().characterdata.data, false)) + _ => escape(text.deref().characterdata.data, false, html) } } @@ -151,18 +151,19 @@ fn serialize_attr(attr: &JSRef<Attr>, html: &mut StrBuf) { html.push_str(attr.deref().name); }; html.push_str("=\""); - html.push_str(escape(attr.deref().value, true)); + escape(attr.deref().value, true, html); html.push_char('"'); } -fn escape(string: &str, attr_mode: bool) -> ~str { - let replaced = string.replace("&", "&").replace("\xA0", " "); - match attr_mode { - true => { - replaced.replace("\"", """) - }, - false => { - replaced.replace("<", "<").replace(">", ">") +fn escape(string: &str, attr_mode: bool, html: &mut StrBuf) { + for c in string.chars() { + match c { + '&' => html.push_str("&"), + '\xA0' => html.push_str(" "), + '"' if attr_mode => html.push_str("""), + '<' if !attr_mode => html.push_str("<"), + '>' if !attr_mode => html.push_str(">"), + c => html.push_char(c), } } } |