diff --git a/Cargo.lock b/Cargo.lock index 305dc594cc2..769e79b3c0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6270,9 +6270,9 @@ checksum = "ce607aae8ab0ab3abf3a2723a9ab6f09bb8639ed83fdd888d857b8e556c868d8" [[package]] name = "truetype" -version = "0.40.1" +version = "0.47.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded349527e54edfdbfb6db194f6da69b15a5fa811dd3fdfd691882290cb45d17" +checksum = "cef21dc120b50cec529152c8862800f7f5fa13a2ec8d174cc643aed7af4d2417" dependencies = [ "typeface", ] @@ -6317,9 +6317,9 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typeface" -version = "0.2.7" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf610e8cc23b65075cc984c5b3dd40ea77849189f395b2604e059c00558b719b" +checksum = "3a51fd676d85b67be6a48da89094f5d8e24939c05694976379935517ba958c16" [[package]] name = "typenum" diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml index b184e6b9fa0..9538ce11960 100644 --- a/components/gfx/Cargo.toml +++ b/components/gfx/Cargo.toml @@ -59,4 +59,4 @@ xml-rs = "0.8" [target.'cfg(target_os = "windows")'.dependencies] dwrote = "0.11" -truetype = { version = "0.40.0", features = ["ignore-invalid-language-ids"] } +truetype = { version = "0.47.3", features = ["ignore-invalid-language-ids"] } diff --git a/components/gfx/platform/windows/font.rs b/components/gfx/platform/windows/font.rs index 164111ff1e0..4e57d00c187 100644 --- a/components/gfx/platform/windows/font.rs +++ b/components/gfx/platform/windows/font.rs @@ -89,27 +89,29 @@ impl FontInfo { use std::collections::HashMap; use std::io::Cursor; - use truetype::naming_table::{NameID, NamingTable}; - use truetype::{Value, WindowsMetrics}; + use truetype::tables::names::{NameID, Names}; + use truetype::tables::WindowsMetrics; + use truetype::value::Read; - let name_table_bytes = face.get_font_table(make_tag(b"name")); - let os2_table_bytes = face.get_font_table(make_tag(b"OS/2")); - if name_table_bytes.is_none() || os2_table_bytes.is_none() { + let names_bytes = face.get_font_table(make_tag(b"name")); + let windows_metrics_bytes = face.get_font_table(make_tag(b"OS/2")); + if names_bytes.is_none() || windows_metrics_bytes.is_none() { return Err(()); } - let mut name_table_cursor = Cursor::new(name_table_bytes.as_ref().unwrap()); - let names = try_lossy!(NamingTable::read(&mut name_table_cursor)); - let mut names: HashMap<_, _> = names + let mut cursor = Cursor::new(names_bytes.as_ref().unwrap()); + let table = try_lossy!(Names::read(&mut cursor)); + let language_tags = table.language_tags().collect::>(); + let mut names = table .iter() - .filter(|((_, language_tag), value)| { + .filter(|((_, _, language_id, _), value)| { value.is_some() && - language_tag - .as_deref() - .map_or(false, |language_tag| language_tag.starts_with("en")) + language_id + .tag(&language_tags) + .map_or(false, |tag| tag.starts_with("en")) }) - .map(|((name_id, _), value)| (name_id, value.unwrap())) - .collect(); + .map(|((_, _, _, name_id), value)| (name_id, value.unwrap())) + .collect::>(); let family = match names.remove(&NameID::FontFamilyName) { Some(family) => family, _ => return Err(()), @@ -119,9 +121,9 @@ impl FontInfo { _ => return Err(()), }; - let mut os2_table_cursor = Cursor::new(os2_table_bytes.as_ref().unwrap()); - let metrics = try_lossy!(WindowsMetrics::read(&mut os2_table_cursor)); - let (weight_val, width_val, italic_bool) = match metrics { + let mut cursor = Cursor::new(windows_metrics_bytes.as_ref().unwrap()); + let table = try_lossy!(WindowsMetrics::read(&mut cursor)); + let (weight_val, width_val, italic_bool) = match table { WindowsMetrics::Version0(ref m) => { (m.weight_class, m.width_class, m.selection_flags.0 & 1 == 1) },