summaryrefslogtreecommitdiff
path: root/crates/typst-library
diff options
context:
space:
mode:
authorcAttte <26514199+cAttte@users.noreply.github.com>2025-06-11 11:42:57 -0300
committerGitHub <noreply@github.com>2025-06-11 14:42:57 +0000
commit46d57b00b58afefa8ed93e74655e43268571dcce (patch)
tree70dc1bb093202e5017e963de7163af8ff0059604 /crates/typst-library
parentada90fdd877f1bb9277684e2e459761ff3df9e78 (diff)
Warn when using variable fonts (#6425)
Diffstat (limited to 'crates/typst-library')
-rw-r--r--crates/typst-library/src/text/font/book.rs3
-rw-r--r--crates/typst-library/src/text/mod.rs18
2 files changed, 18 insertions, 3 deletions
diff --git a/crates/typst-library/src/text/font/book.rs b/crates/typst-library/src/text/font/book.rs
index cd90a08f..d0c821b3 100644
--- a/crates/typst-library/src/text/font/book.rs
+++ b/crates/typst-library/src/text/font/book.rs
@@ -196,6 +196,8 @@ bitflags::bitflags! {
const SERIF = 1 << 1;
/// Font face has a MATH table
const MATH = 1 << 2;
+ /// Font face has an fvar table
+ const VARIABLE = 1 << 3;
}
}
@@ -275,6 +277,7 @@ impl FontInfo {
let mut flags = FontFlags::empty();
flags.set(FontFlags::MONOSPACE, ttf.is_monospaced());
flags.set(FontFlags::MATH, ttf.tables().math.is_some());
+ flags.set(FontFlags::VARIABLE, ttf.is_variable());
// Determine whether this is a serif or sans-serif font.
if let Some(panose) = ttf
diff --git a/crates/typst-library/src/text/mod.rs b/crates/typst-library/src/text/mod.rs
index 1c0696d1..563adbbd 100644
--- a/crates/typst-library/src/text/mod.rs
+++ b/crates/typst-library/src/text/mod.rs
@@ -1412,12 +1412,24 @@ pub fn is_default_ignorable(c: char) -> bool {
fn check_font_list(engine: &mut Engine, list: &Spanned<FontList>) {
let book = engine.world.book();
for family in &list.v {
- if !book.contains_family(family.as_str()) {
- engine.sink.warn(warning!(
+ match book.select_family(family.as_str()).next() {
+ Some(index) => {
+ if book
+ .info(index)
+ .is_some_and(|x| x.flags.contains(FontFlags::VARIABLE))
+ {
+ engine.sink.warn(warning!(
+ list.span,
+ "variable fonts are not currently supported and may render incorrectly";
+ hint: "try installing a static version of \"{}\" instead", family.as_str()
+ ))
+ }
+ }
+ None => engine.sink.warn(warning!(
list.span,
"unknown font family: {}",
family.as_str(),
- ));
+ )),
}
}
}