diff --git a/crates/mdbook-html/src/html/tree.rs b/crates/mdbook-html/src/html/tree.rs index 9c94a5b1f2..5a0786ea38 100644 --- a/crates/mdbook-html/src/html/tree.rs +++ b/crates/mdbook-html/src/html/tree.rs @@ -77,6 +77,8 @@ pub(crate) struct Element { pub(crate) attrs: Attributes, /// True if this tag ends with `/>`. pub(crate) self_closing: bool, + /// True if this was raw HTML written in the markdown. + pub(crate) was_raw: bool, } impl Element { @@ -87,6 +89,7 @@ impl Element { name, attrs: Attributes::new(), self_closing: false, + was_raw: false, } } @@ -618,6 +621,7 @@ where name, attrs, self_closing: tag.self_closing, + was_raw: true, }; fix_html_link(&mut el); self.push(Node::Element(el)); @@ -842,6 +846,11 @@ where for heading in headings { let node = self.tree.get(heading).unwrap(); let el = node.value().as_element().unwrap(); + // Don't modify tags if they were manually written HTML. The + // user probably had some intent, and we don't want to mess it up. + if el.was_raw { + continue; + } let href = if let Some(id) = el.attr("id") { format!("#{id}") } else { diff --git a/tests/testsuite/markdown.rs b/tests/testsuite/markdown.rs index 98fde906ce..7e46ffa228 100644 --- a/tests/testsuite/markdown.rs +++ b/tests/testsuite/markdown.rs @@ -157,6 +157,10 @@ fn definition_lists() { .check_main_file( "book/definition_lists.html", file!["markdown/definition_lists/expected_disabled/definition_lists.html"], + ) + .check_main_file( + "book/html_definition_lists.html", + file!["markdown/definition_lists/expected_disabled/html_definition_lists.html"], ); } diff --git a/tests/testsuite/markdown/basic_markdown/expected/html.html b/tests/testsuite/markdown/basic_markdown/expected/html.html index 7213939f8b..609fb3c717 100644 --- a/tests/testsuite/markdown/basic_markdown/expected/html.html +++ b/tests/testsuite/markdown/basic_markdown/expected/html.html @@ -62,4 +62,8 @@

Style

\ No newline at end of file + +

Manual headers

+

My Header

+ +

Another header

\ No newline at end of file diff --git a/tests/testsuite/markdown/basic_markdown/src/html.md b/tests/testsuite/markdown/basic_markdown/src/html.md index b2383cb452..7e33aaca0b 100644 --- a/tests/testsuite/markdown/basic_markdown/src/html.md +++ b/tests/testsuite/markdown/basic_markdown/src/html.md @@ -92,3 +92,9 @@ const x = 'some *text* inside'; + +## Manual headers + +

My Header

+ +

Another header

diff --git a/tests/testsuite/markdown/definition_lists/expected/html_definition_lists.html b/tests/testsuite/markdown/definition_lists/expected/html_definition_lists.html new file mode 100644 index 0000000000..50263db92c --- /dev/null +++ b/tests/testsuite/markdown/definition_lists/expected/html_definition_lists.html @@ -0,0 +1,16 @@ +

HTML definition lists

+

Test for definition lists manually written in HTML.

+
+ +
Some tag
+ + +
Some defintion
+ + +
Another definition
+ + +
A definition.
+ +
\ No newline at end of file diff --git a/tests/testsuite/markdown/definition_lists/expected_disabled/html_definition_lists.html b/tests/testsuite/markdown/definition_lists/expected_disabled/html_definition_lists.html new file mode 100644 index 0000000000..50263db92c --- /dev/null +++ b/tests/testsuite/markdown/definition_lists/expected_disabled/html_definition_lists.html @@ -0,0 +1,16 @@ +

HTML definition lists

+

Test for definition lists manually written in HTML.

+
+ +
Some tag
+ + +
Some defintion
+ + +
Another definition
+ + +
A definition.
+ +
\ No newline at end of file diff --git a/tests/testsuite/markdown/definition_lists/src/SUMMARY.md b/tests/testsuite/markdown/definition_lists/src/SUMMARY.md index 941e800019..0a93961daf 100644 --- a/tests/testsuite/markdown/definition_lists/src/SUMMARY.md +++ b/tests/testsuite/markdown/definition_lists/src/SUMMARY.md @@ -1,3 +1,4 @@ # Summary - [Definition lists](./definition_lists.md) +- [HTML definition lists](./html_definition_lists.md) diff --git a/tests/testsuite/markdown/definition_lists/src/html_definition_lists.md b/tests/testsuite/markdown/definition_lists/src/html_definition_lists.md new file mode 100644 index 0000000000..84de694c89 --- /dev/null +++ b/tests/testsuite/markdown/definition_lists/src/html_definition_lists.md @@ -0,0 +1,10 @@ +# HTML definition lists + +Test for definition lists manually written in HTML. + +
+
Some tag
+
Some defintion
+
Another definition
+
A definition.
+