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 @@
\ No newline at end of file
+
+
+
+
+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
+
+
+
+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 @@
+
+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 @@
+
+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.
+