diff --git a/crates/mdbook-html/src/html/hide_lines.rs b/crates/mdbook-html/src/html/hide_lines.rs index 6852b6c4c5..8dbe7b12c5 100644 --- a/crates/mdbook-html/src/html/hide_lines.rs +++ b/crates/mdbook-html/src/html/hide_lines.rs @@ -141,7 +141,14 @@ fn partition_rust_source(s: &str) -> (&str, &str) { let split_idx = match HEADER_RE.captures(s) { Some(caps) => { let attributes = &caps[1]; - attributes.len() + if attributes.trim().is_empty() { + // Don't include pure whitespace as an attribute. The + // whitespace in the regex is intended to handle multiple + // attributes *separated* by potential whitespace. + 0 + } else { + attributes.len() + } } None => 0, }; @@ -179,4 +186,8 @@ fn it_partitions_rust_source() { ), ("\n#![allow(foo)]\n\n#![allow(bar)]\n\n", "let x = 1;") ); + assert_eq!( + partition_rust_source(" // Example"), + ("", " // Example") + ); } diff --git a/tests/testsuite/rendering.rs b/tests/testsuite/rendering.rs index d9ceb854f4..1f8590ad33 100644 --- a/tests/testsuite/rendering.rs +++ b/tests/testsuite/rendering.rs @@ -223,3 +223,9 @@ Html text was: fn html_blocks() { BookTest::from_dir("rendering/html_blocks").check_all_main_files(); } + +// Test for a fenced code block that is also indented. +#[test] +fn code_block_fenced_with_indent() { + BookTest::from_dir("rendering/code_blocks_fenced_with_indent").check_all_main_files(); +} diff --git a/tests/testsuite/rendering/code_blocks_fenced_with_indent/book.toml b/tests/testsuite/rendering/code_blocks_fenced_with_indent/book.toml new file mode 100644 index 0000000000..7ed7ab96c1 --- /dev/null +++ b/tests/testsuite/rendering/code_blocks_fenced_with_indent/book.toml @@ -0,0 +1,2 @@ +[book] +title = "code_blocks_fenced_with_indent" diff --git a/tests/testsuite/rendering/code_blocks_fenced_with_indent/expected/code-blocks-fenced-with-indent.html b/tests/testsuite/rendering/code_blocks_fenced_with_indent/expected/code-blocks-fenced-with-indent.html new file mode 100644 index 0000000000..b4ed1ef491 --- /dev/null +++ b/tests/testsuite/rendering/code_blocks_fenced_with_indent/expected/code-blocks-fenced-with-indent.html @@ -0,0 +1,6 @@ +

Code blocks fenced with indent

+
#![allow(unused)]
+fn main() {
+    // This has a first line that is indented.
+    println!("hello");
+}
\ No newline at end of file diff --git a/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/SUMMARY.md b/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/SUMMARY.md new file mode 100644 index 0000000000..46b1673b02 --- /dev/null +++ b/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/SUMMARY.md @@ -0,0 +1,3 @@ +# Summary + +- [Code blocks fenced with indent](./code-blocks-fenced-with-indent.md) diff --git a/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/code-blocks-fenced-with-indent.md b/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/code-blocks-fenced-with-indent.md new file mode 100644 index 0000000000..e8722979d0 --- /dev/null +++ b/tests/testsuite/rendering/code_blocks_fenced_with_indent/src/code-blocks-fenced-with-indent.md @@ -0,0 +1,6 @@ +# Code blocks fenced with indent + +```rust + // This has a first line that is indented. + println!("hello"); +```