mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
26 lines
1.3 KiB
Rust
26 lines
1.3 KiB
Rust
/// Decode mac roman encoded bytes into a string.
|
||
pub fn decode_mac_roman(coded: &[u8]) -> String {
|
||
coded.iter().copied().map(char_from_mac_roman).collect()
|
||
}
|
||
|
||
/// Convert a mac roman coded character to a unicode char.
|
||
fn char_from_mac_roman(code: u8) -> char {
|
||
#[rustfmt::skip]
|
||
const TABLE: [char; 128] = [
|
||
'Ä', 'Å', 'Ç', 'É', 'Ñ', 'Ö', 'Ü', 'á', 'à', 'â', 'ä', 'ã', 'å', 'ç', 'é', 'è',
|
||
'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ñ', 'ó', 'ò', 'ô', 'ö', 'õ', 'ú', 'ù', 'û', 'ü',
|
||
'†', '°', '¢', '£', '§', '•', '¶', 'ß', '®', '©', '™', '´', '¨', '≠', 'Æ', 'Ø',
|
||
'∞', '±', '≤', '≥', '¥', 'µ', '∂', '∑', '∏', 'π', '∫', 'ª', 'º', 'Ω', 'æ', 'ø',
|
||
'¿', '¡', '¬', '√', 'ƒ', '≈', '∆', '«', '»', '…', '\u{a0}', 'À', 'Ã', 'Õ', 'Œ', 'œ',
|
||
'–', '—', '“', '”', '‘', '’', '÷', '◊', 'ÿ', 'Ÿ', '⁄', '€', '‹', '›', 'fi', 'fl',
|
||
'‡', '·', '‚', '„', '‰', 'Â', 'Ê', 'Á', 'Ë', 'È', 'Í', 'Î', 'Ï', 'Ì', 'Ó', 'Ô',
|
||
'\u{f8ff}', 'Ò', 'Ú', 'Û', 'Ù', 'ı', 'ˆ', '˜', '¯', '˘', '˙', '˚', '¸', '˝', '˛', 'ˇ',
|
||
];
|
||
|
||
if code < 128 {
|
||
code as char
|
||
} else {
|
||
TABLE[(code - 128) as usize]
|
||
}
|
||
}
|