Update truetype (#31313)

This commit is contained in:
Ivan Ukhov 2024-02-13 11:07:51 +01:00 committed by GitHub
parent 07c7096246
commit 81a543e41c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 22 deletions

8
Cargo.lock generated
View file

@ -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"

View file

@ -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"] }

View file

@ -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::<Vec<_>>();
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::<HashMap<_, _>>();
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)
},