From 6d9f49cbc53027925e80ff296f50929d917deb0f Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Thu, 30 Oct 2025 19:24:49 -0700 Subject: [PATCH 1/3] Update fontawesome test to make it clear the intent This example was intended to demonstrate that it only translates if there are no child elements. --- tests/testsuite/rendering/fontawesome/expected/fa.html | 2 +- tests/testsuite/rendering/fontawesome/src/fa.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testsuite/rendering/fontawesome/expected/fa.html b/tests/testsuite/rendering/fontawesome/expected/fa.html index a5cf5bf5ad..d4d137d6b6 100644 --- a/tests/testsuite/rendering/fontawesome/expected/fa.html +++ b/tests/testsuite/rendering/fontawesome/expected/fa.html @@ -2,4 +2,4 @@

Chapter 1

-

Some text here.

\ No newline at end of file +

Text prevents translation.

\ No newline at end of file diff --git a/tests/testsuite/rendering/fontawesome/src/fa.md b/tests/testsuite/rendering/fontawesome/src/fa.md index 7605f9465c..c3db728701 100644 --- a/tests/testsuite/rendering/fontawesome/src/fa.md +++ b/tests/testsuite/rendering/fontawesome/src/fa.md @@ -6,4 +6,4 @@ -Some text here. +Text prevents translation. From 7e5fa3565b3943950a4607663b9f599c73f19816 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Thu, 30 Oct 2025 19:27:40 -0700 Subject: [PATCH 2/3] Add a fontawesome test for a missing icon This is a test for when an icon is missing. --- tests/testsuite/rendering.rs | 11 ++++++++++- .../testsuite/rendering/fontawesome/expected/fa.html | 3 ++- tests/testsuite/rendering/fontawesome/src/fa.md | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/testsuite/rendering.rs b/tests/testsuite/rendering.rs index 1f8590ad33..b2281eae24 100644 --- a/tests/testsuite/rendering.rs +++ b/tests/testsuite/rendering.rs @@ -47,7 +47,16 @@ fn first_chapter_is_copied_as_index_even_if_not_first_elem() { // Fontawesome `` tag support. #[test] fn fontawesome() { - BookTest::from_dir("rendering/fontawesome").check_all_main_files(); + BookTest::from_dir("rendering/fontawesome") + .run("build", |cmd| { + cmd.expect_stderr(str![[r#" + INFO Book building has started + INFO Running the html backend + INFO HTML book written to `[ROOT]/book` + +"#]]); + }) + .check_all_main_files(); } // Tests the rendering when setting the default rust edition. diff --git a/tests/testsuite/rendering/fontawesome/expected/fa.html b/tests/testsuite/rendering/fontawesome/expected/fa.html index d4d137d6b6..a2f9d4236e 100644 --- a/tests/testsuite/rendering/fontawesome/expected/fa.html +++ b/tests/testsuite/rendering/fontawesome/expected/fa.html @@ -2,4 +2,5 @@

Chapter 1

-

Text prevents translation.

\ No newline at end of file +

Text prevents translation.

+

\ No newline at end of file diff --git a/tests/testsuite/rendering/fontawesome/src/fa.md b/tests/testsuite/rendering/fontawesome/src/fa.md index c3db728701..2f934da18d 100644 --- a/tests/testsuite/rendering/fontawesome/src/fa.md +++ b/tests/testsuite/rendering/fontawesome/src/fa.md @@ -7,3 +7,5 @@ Text prevents translation. + + From b3bd103742498156b506ec1c07d04e1fb0e37d50 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Thu, 30 Oct 2025 19:30:01 -0700 Subject: [PATCH 3/3] Add a warning when a Font Awesome font is missing With the migration to Font Awesome 6, I'm running into books where the icon names are missing or have changed. This adds a warning to help identify those situations. --- crates/mdbook-html/src/html/tree.rs | 30 +++++++++++++++++++---------- tests/testsuite/rendering.rs | 1 + 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/crates/mdbook-html/src/html/tree.rs b/crates/mdbook-html/src/html/tree.rs index 5a0786ea38..4184740d09 100644 --- a/crates/mdbook-html/src/html/tree.rs +++ b/crates/mdbook-html/src/html/tree.rs @@ -977,19 +977,29 @@ where new_classes += class; } } + if icon.is_empty() { + continue; + } - if !icon.is_empty() - && let Ok(svg) = fa::svg(type_, &icon) - { - let mut span = Element::new("span"); - span.insert_attr("class", new_classes.into()); - for (name, value) in &i_el.attrs { - if *name != attr_qual_name!("class") { - span.attrs.insert(name.clone(), value.clone()); + match fa::svg(type_, &icon) { + Ok(svg) => { + let mut span = Element::new("span"); + span.insert_attr("class", new_classes.into()); + for (name, value) in &i_el.attrs { + if *name != attr_qual_name!("class") { + span.attrs.insert(name.clone(), value.clone()); + } } + *node.value() = Node::Element(span); + node.append(Node::RawData(svg.into())); + } + Err(e) => { + warn!( + "failed to find Font Awesome icon for icon `{icon}` \ + with type `{type_}` in `{}`: {e}", + self.options.path.display() + ); } - *node.value() = Node::Element(span); - node.append(Node::RawData(svg.into())); } } } diff --git a/tests/testsuite/rendering.rs b/tests/testsuite/rendering.rs index b2281eae24..7f2fffa92a 100644 --- a/tests/testsuite/rendering.rs +++ b/tests/testsuite/rendering.rs @@ -52,6 +52,7 @@ fn fontawesome() { cmd.expect_stderr(str![[r#" INFO Book building has started INFO Running the html backend + WARN failed to find Font Awesome icon for icon `does-not-exist` with type `regular` in `fa.md`: Invalid Font Awesome icon name: visit https://fontawesome.com/icons?d=gallery&m=free to see valid names INFO HTML book written to `[ROOT]/book` "#]]);