aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/htmlserializer.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-05-24 21:48:01 +0200
committerMs2ger <ms2ger@gmail.com>2014-05-27 18:44:21 +0200
commitce45afac0c61d624064e7777b8b02ea0f9e50bdf (patch)
tree52cf4d82a6e58759ed7fd1908634bb1f4ee4b122 /src/components/script/dom/htmlserializer.rs
parentd1ca38048210ee214d6335156bd546069ee81fea (diff)
downloadservo-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.rs23
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("&", "&amp;").replace("\xA0", "&nbsp;");
- match attr_mode {
- true => {
- replaced.replace("\"", "&quot;")
- },
- false => {
- replaced.replace("<", "&lt;").replace(">", "&gt;")
+fn escape(string: &str, attr_mode: bool, html: &mut StrBuf) {
+ for c in string.chars() {
+ match c {
+ '&' => html.push_str("&amp;"),
+ '\xA0' => html.push_str("&nbsp;"),
+ '"' if attr_mode => html.push_str("&quot;"),
+ '<' if !attr_mode => html.push_str("&lt;"),
+ '>' if !attr_mode => html.push_str("&gt;"),
+ c => html.push_char(c),
}
}
}