about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-03-06 17:46:52 -0800
committerBrian Anderson <banderson@mozilla.com>2012-03-06 17:46:52 -0800
commitcf8f5b7606b87c26901abc0f6e271f48828bcf5b (patch)
treec64f039c56c2c8f26fb93e4d7c30f739e55ff55b /src/rustdoc
parent29ac3c811d0235b51e17519d7b212287ca27e626 (diff)
downloadrust-cf8f5b7606b87c26901abc0f6e271f48828bcf5b.tar.gz
rust-cf8f5b7606b87c26901abc0f6e271f48828bcf5b.zip
rustdoc: Escape HTML special characters
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/html_escape_pass.rs24
-rw-r--r--src/rustdoc/rustdoc.rc1
-rwxr-xr-xsrc/rustdoc/rustdoc.rs1
3 files changed, 26 insertions, 0 deletions
diff --git a/src/rustdoc/html_escape_pass.rs b/src/rustdoc/html_escape_pass.rs
new file mode 100644
index 00000000000..b3c1c5d5fc8
--- /dev/null
+++ b/src/rustdoc/html_escape_pass.rs
@@ -0,0 +1,24 @@
+#[doc = "Escapes characters that are not valid in HTML"];
+
+export mk_pass;
+
+fn mk_pass() -> pass {
+    desc_pass::mk_pass("html_escape", escape)
+}
+
+fn escape(s: str) -> str {
+    let s = str::replace(s, "&", "&amp;");
+    let s = str::replace(s, "<", "&lt;");
+    let s = str::replace(s, ">", "&gt;");
+    let s = str::replace(s, "\"", "&quot;");
+    ret s;
+}
+
+#[test]
+fn test() {
+    assert escape("<") == "&lt;";
+    assert escape(">") == "&gt;";
+    assert escape("&") == "&amp;";
+    assert escape("\"") == "&quot;";
+    assert escape("<>&\"") == "&lt;&gt;&amp;&quot;";
+}
diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc
index c53b11fa021..489bbf29fcc 100644
--- a/src/rustdoc/rustdoc.rc
+++ b/src/rustdoc/rustdoc.rc
@@ -39,3 +39,4 @@ mod sort_item_type_pass;
 mod reexport_pass;
 mod par;
 mod page_pass;
+mod html_escape_pass;
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index 3f480940e16..d165900df5d 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -149,6 +149,7 @@ fn run(config: config::config) {
             desc_to_brief_pass::mk_pass(),
             trim_pass::mk_pass(),
             unindent_pass::mk_pass(),
+            html_escape_pass::mk_pass(),
             sort_item_name_pass::mk_pass(),
             sort_item_type_pass::mk_pass(),
             markdown_index_pass::mk_pass(config),