about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/html_escape_pass.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/rustdoc/html_escape_pass.rs b/src/rustdoc/html_escape_pass.rs
index b3c1c5d5fc8..f1a32d5a019 100644
--- a/src/rustdoc/html_escape_pass.rs
+++ b/src/rustdoc/html_escape_pass.rs
@@ -7,6 +7,20 @@ fn mk_pass() -> pass {
 }
 
 fn escape(s: str) -> str {
+    let parts = str::split_char(s, '`');
+    let i = 0;
+    let parts = vec::map(parts) {|part|
+        i += 1;
+        if i % 2 != 0 {
+            escape_(part)
+        } else {
+            part
+        }
+    };
+    ret str::connect(parts, "`");
+}
+
+fn escape_(s: str) -> str {
     let s = str::replace(s, "&", "&");
     let s = str::replace(s, "<", "&lt;");
     let s = str::replace(s, ">", "&gt;");
@@ -22,3 +36,9 @@ fn test() {
     assert escape("\"") == "&quot;";
     assert escape("<>&\"") == "&lt;&gt;&amp;&quot;";
 }
+
+#[test]
+fn should_not_escape_characters_in_backticks() {
+    // Markdown will quote things in backticks itself
+    assert escape("<`<`<`<`<") == "&lt;`<`&lt;`<`&lt;";
+}