diff options
author | Jan-Erik Rediger <janerik@fnordig.de> | 2020-07-20 11:44:40 +0200 |
---|---|---|
committer | Jan-Erik Rediger <janerik@fnordig.de> | 2020-07-20 11:44:40 +0200 |
commit | ea0c45aa0c6567a93cbd5359bc723e3af23d438e (patch) | |
tree | f808cc487e063ff70447acdf7b1c3a1640aebf72 | |
parent | dfe9e5ec2d8f16ab4db40cd3a8d789a3d62d04b5 (diff) |
Escpae HTML in mermaid output
-rw-r--r-- | src/lib.rs | 42 |
1 files changed, 41 insertions, 1 deletions
@@ -33,6 +33,20 @@ impl Preprocessor for Mermaid { } } +fn escape_html(s: &str) -> String { + let mut output = String::new(); + for c in s.chars() { + match c { + '<' => output.push_str("<"), + '>' => output.push_str(">"), + '"' => output.push_str("""), + '&' => output.push_str("&"), + _ => output.push(c), + } + } + output +} + fn add_mermaid(content: &str) -> Result<String> { let mut buf = String::with_capacity(content.len()); let mut mermaid_content = String::new(); @@ -67,6 +81,7 @@ fn add_mermaid(content: &str) -> Result<String> { ); in_mermaid_block = false; + let mermaid_content = escape_html(&mermaid_content); let mermaid_code = format!("<pre class=\"mermaid\">{}</pre>\n\n", mermaid_content); return Some(Event::Html(mermaid_code.into())); } @@ -113,7 +128,7 @@ Text let expected = r#"# Chapter <pre class="mermaid">graph TD -A --> B +A --> B </pre> @@ -196,4 +211,29 @@ Text"#; assert_eq!(expected, add_mermaid(content).unwrap()); } + + #[test] + fn escape_in_mermaid_block() { + let content = r#" +```mermaid +classDiagram + class PingUploader { + <<interface>> + +Upload() UploadResult + } +``` + +"#; + + let expected = r#"<pre class="mermaid">classDiagram + class PingUploader { + <<interface>> + +Upload() UploadResult + } +</pre> + +"#; + + assert_eq!(expected, add_mermaid(content).unwrap()); + } } |