diff --git a/Cargo.lock b/Cargo.lock index d4a1a057..6de21fe5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1099,6 +1099,24 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pulldown-cmark" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14" +dependencies = [ + "bitflags", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + [[package]] name = "quick-error" version = "1.2.3" @@ -1172,6 +1190,7 @@ dependencies = [ "once_cell", "percent-encoding", "pretty_env_logger", + "pulldown-cmark", "regex", "rinja", "route-recognizer", diff --git a/Cargo.toml b/Cargo.toml index 2fe14563..c161c28d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,6 +48,7 @@ rss = "2.0.7" arc-swap = "1.7.1" serde_json_path = "0.6.7" async-recursion = "1.1.1" +pulldown-cmark = { version = "0.12.0", features = ["simd", "html"], default-features = false } [dev-dependencies] diff --git a/src/utils.rs b/src/utils.rs index 170f53db..46095b29 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -720,7 +720,15 @@ pub async fn parse_post(post: &Value) -> Post { get_setting("REDLIB_PUSHSHIFT_FRONTEND").unwrap_or_else(|| String::from(crate::config::DEFAULT_PUSHSHIFT_FRONTEND)), ) } else { - rewrite_urls(&val(post, "selftext_html")) + let selftext = val(post, "selftext"); + if selftext.contains("```") { + let mut html_output = String::new(); + let parser = pulldown_cmark::Parser::new(&selftext); + pulldown_cmark::html::push_html(&mut html_output, parser); + rewrite_urls(&html_output) + } else { + rewrite_urls(&val(post, "selftext_html")) + } }; // Build a post using data parsed from Reddit post API diff --git a/static/style.css b/static/style.css index a9d893a3..76b55ddb 100644 --- a/static/style.css +++ b/static/style.css @@ -1199,6 +1199,13 @@ a.search_subreddit:hover { overflow-wrap: anywhere; } +.post_body pre { + background: var(--background); + overflow-x: auto; + margin: 10px 0; + padding: 10px; +} + .post_body img { max-width: 100%; display: block;