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 @@ +
#![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");
+```