blob: f93564c6a66470b498fadfee29c35806323be357 [file] [log] [blame]
#![allow(unknown_lints)]
extern crate stb_truetype;
use stb_truetype::FontInfo;
use std::borrow::Cow;
#[allow(cast_ptr_alignment)] // FIXME seems a bit dodgy
fn main() {
let file = &include_bytes!("../fonts/Gudea-Regular.ttf")[..];
let font = FontInfo::new(Cow::Borrowed(file), 0).unwrap();
for info in font.get_font_name_strings() {
let (name, pl_en_la, na) = info;
let name = (match pl_en_la {
Some(stb_truetype::PlatformEncodingLanguageId::Mac(
Some(Ok(stb_truetype::MacEid::Roman)),
_,
)) => ::std::str::from_utf8(name).ok().map(Cow::Borrowed),
Some(stb_truetype::PlatformEncodingLanguageId::Microsoft(
Some(Ok(stb_truetype::MicrosoftEid::UnicodeBMP)),
_,
)) => {
let name16be = unsafe {
::std::slice::from_raw_parts(name.as_ptr() as *const u16, name.len() / 2)
};
let name16 = name16be
.iter()
.map(|&v| u16::from_be(v))
.collect::<Vec<_>>();
String::from_utf16(&name16).ok().map(Cow::Owned)
}
Some(stb_truetype::PlatformEncodingLanguageId::Microsoft(
Some(Ok(stb_truetype::MicrosoftEid::UnicodeFull)),
_,
)) => {
let name16be = unsafe {
::std::slice::from_raw_parts(name.as_ptr() as *const u16, name.len() / 2)
};
let name16 = name16be
.iter()
.map(|&v| u16::from_be(v))
.collect::<Vec<_>>();
String::from_utf16(&name16).ok().map(Cow::Owned)
}
Some(_) => Some(Cow::Borrowed("(Unknown encoding)")),
None => Some(Cow::Borrowed("(Unknown Platform ID)")),
}).unwrap_or(Cow::Borrowed("(Encoding error)"));
println!("{:?}, {:?}, {:?}", name, pl_en_la, na);
}
}