mirror of
https://github.com/servo/servo.git
synced 2025-08-26 23:58:20 +01:00
Use built-in conversion function from unicode_script to convert script for harfbuzz (#38704)
Replaces a big match statement with a call to `unicode_script`'s `Script::short_name` method which has the same big match statement. We special case `Script::Unknown` because the `short_name` method returns empty string for that variant, but harfbuzz represents it with `Zzzz`. EDIT: `Zzzz` seems to be in the spec so I've sent a PR to `unicode_script` to use it: https://github.com/unicode-rs/unicode-script/pull/23 EDIT: And https://github.com/unicode-rs/unicode-script/pull/24 which would allow us to remove this method entirely. Signed-off-by: Nico Burns <nico@nicoburns.com>
This commit is contained in:
parent
788d6db94d
commit
7dcd89a6f9
1 changed files with 14 additions and 165 deletions
|
@ -23,7 +23,7 @@ use harfbuzz_sys::{
|
||||||
hb_font_destroy, hb_font_funcs_create, hb_font_funcs_set_glyph_h_advance_func,
|
hb_font_destroy, hb_font_funcs_create, hb_font_funcs_set_glyph_h_advance_func,
|
||||||
hb_font_funcs_set_nominal_glyph_func, hb_font_funcs_t, hb_font_set_funcs, hb_font_set_ppem,
|
hb_font_funcs_set_nominal_glyph_func, hb_font_funcs_t, hb_font_set_funcs, hb_font_set_ppem,
|
||||||
hb_font_set_scale, hb_font_t, hb_glyph_info_t, hb_glyph_position_t, hb_ot_layout_get_baseline,
|
hb_font_set_scale, hb_font_t, hb_glyph_info_t, hb_glyph_position_t, hb_ot_layout_get_baseline,
|
||||||
hb_position_t, hb_shape, hb_tag_t,
|
hb_position_t, hb_script_from_iso15924_tag, hb_shape, hb_tag_t,
|
||||||
};
|
};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use num_traits::Zero;
|
use num_traits::Zero;
|
||||||
|
@ -201,169 +201,16 @@ impl Shaper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn unicode_to_hb_script(script: unicode_script::Script) -> harfbuzz_sys::hb_script_t {
|
pub fn unicode_script_to_iso15924_tag(script: unicode_script::Script) -> u32 {
|
||||||
use harfbuzz_sys::*;
|
let bytes: [u8; 4] = match script {
|
||||||
use unicode_script::Script::*;
|
unicode_script::Script::Unknown => *b"Zzzz",
|
||||||
match script {
|
_ => {
|
||||||
Adlam => HB_SCRIPT_ADLAM,
|
let short_name = script.short_name();
|
||||||
Ahom => HB_SCRIPT_AHOM,
|
short_name.as_bytes().try_into().unwrap()
|
||||||
Anatolian_Hieroglyphs => HB_SCRIPT_ANATOLIAN_HIEROGLYPHS,
|
},
|
||||||
Arabic => HB_SCRIPT_ARABIC,
|
};
|
||||||
Armenian => HB_SCRIPT_ARMENIAN,
|
|
||||||
Avestan => HB_SCRIPT_AVESTAN,
|
u32::from_be_bytes(bytes)
|
||||||
Balinese => HB_SCRIPT_BALINESE,
|
|
||||||
Bamum => HB_SCRIPT_BAMUM,
|
|
||||||
Bassa_Vah => HB_SCRIPT_BASSA_VAH,
|
|
||||||
Batak => HB_SCRIPT_BATAK,
|
|
||||||
Bengali => HB_SCRIPT_BENGALI,
|
|
||||||
Bhaiksuki => HB_SCRIPT_BHAIKSUKI,
|
|
||||||
Bopomofo => HB_SCRIPT_BOPOMOFO,
|
|
||||||
Brahmi => HB_SCRIPT_BRAHMI,
|
|
||||||
Braille => HB_SCRIPT_BRAILLE,
|
|
||||||
Buginese => HB_SCRIPT_BUGINESE,
|
|
||||||
Buhid => HB_SCRIPT_BUHID,
|
|
||||||
Canadian_Aboriginal => HB_SCRIPT_CANADIAN_SYLLABICS,
|
|
||||||
Carian => HB_SCRIPT_CARIAN,
|
|
||||||
Caucasian_Albanian => HB_SCRIPT_CAUCASIAN_ALBANIAN,
|
|
||||||
Chakma => HB_SCRIPT_CHAKMA,
|
|
||||||
Cham => HB_SCRIPT_CHAM,
|
|
||||||
Cherokee => HB_SCRIPT_CHEROKEE,
|
|
||||||
Chorasmian => HB_SCRIPT_CHORASMIAN,
|
|
||||||
Common => HB_SCRIPT_COMMON,
|
|
||||||
Coptic => HB_SCRIPT_COPTIC,
|
|
||||||
Cuneiform => HB_SCRIPT_CUNEIFORM,
|
|
||||||
Cypriot => HB_SCRIPT_CYPRIOT,
|
|
||||||
Cyrillic => HB_SCRIPT_CYRILLIC,
|
|
||||||
Deseret => HB_SCRIPT_DESERET,
|
|
||||||
Devanagari => HB_SCRIPT_DEVANAGARI,
|
|
||||||
Dives_Akuru => HB_SCRIPT_DIVES_AKURU,
|
|
||||||
Dogra => HB_SCRIPT_DOGRA,
|
|
||||||
Duployan => HB_SCRIPT_DUPLOYAN,
|
|
||||||
Egyptian_Hieroglyphs => HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,
|
|
||||||
Elbasan => HB_SCRIPT_ELBASAN,
|
|
||||||
Elymaic => HB_SCRIPT_ELYMAIC,
|
|
||||||
Ethiopic => HB_SCRIPT_ETHIOPIC,
|
|
||||||
Georgian => HB_SCRIPT_GEORGIAN,
|
|
||||||
Glagolitic => HB_SCRIPT_GLAGOLITIC,
|
|
||||||
Gothic => HB_SCRIPT_GOTHIC,
|
|
||||||
Grantha => HB_SCRIPT_GRANTHA,
|
|
||||||
Greek => HB_SCRIPT_GREEK,
|
|
||||||
Gujarati => HB_SCRIPT_GUJARATI,
|
|
||||||
Gunjala_Gondi => HB_SCRIPT_GUNJALA_GONDI,
|
|
||||||
Gurmukhi => HB_SCRIPT_GURMUKHI,
|
|
||||||
Han => HB_SCRIPT_HAN,
|
|
||||||
Hangul => HB_SCRIPT_HANGUL,
|
|
||||||
Hanifi_Rohingya => HB_SCRIPT_HANIFI_ROHINGYA,
|
|
||||||
Hanunoo => HB_SCRIPT_HANUNOO,
|
|
||||||
Hatran => HB_SCRIPT_HATRAN,
|
|
||||||
Hebrew => HB_SCRIPT_HEBREW,
|
|
||||||
Hiragana => HB_SCRIPT_HIRAGANA,
|
|
||||||
Imperial_Aramaic => HB_SCRIPT_IMPERIAL_ARAMAIC,
|
|
||||||
Inherited => HB_SCRIPT_INHERITED,
|
|
||||||
Inscriptional_Pahlavi => HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,
|
|
||||||
Inscriptional_Parthian => HB_SCRIPT_INSCRIPTIONAL_PARTHIAN,
|
|
||||||
Javanese => HB_SCRIPT_JAVANESE,
|
|
||||||
Kaithi => HB_SCRIPT_KAITHI,
|
|
||||||
Kannada => HB_SCRIPT_KANNADA,
|
|
||||||
Katakana => HB_SCRIPT_KATAKANA,
|
|
||||||
Kayah_Li => HB_SCRIPT_KAYAH_LI,
|
|
||||||
Kharoshthi => HB_SCRIPT_KHAROSHTHI,
|
|
||||||
Khitan_Small_Script => HB_SCRIPT_KHITAN_SMALL_SCRIPT,
|
|
||||||
Khmer => HB_SCRIPT_KHMER,
|
|
||||||
Khojki => HB_SCRIPT_KHOJKI,
|
|
||||||
Khudawadi => HB_SCRIPT_KHUDAWADI,
|
|
||||||
Lao => HB_SCRIPT_LAO,
|
|
||||||
Latin => HB_SCRIPT_LATIN,
|
|
||||||
Lepcha => HB_SCRIPT_LEPCHA,
|
|
||||||
Limbu => HB_SCRIPT_LIMBU,
|
|
||||||
Linear_A => HB_SCRIPT_LINEAR_A,
|
|
||||||
Linear_B => HB_SCRIPT_LINEAR_B,
|
|
||||||
Lisu => HB_SCRIPT_LISU,
|
|
||||||
Lycian => HB_SCRIPT_LYCIAN,
|
|
||||||
Lydian => HB_SCRIPT_LYDIAN,
|
|
||||||
Mahajani => HB_SCRIPT_MAHAJANI,
|
|
||||||
Makasar => HB_SCRIPT_MAKASAR,
|
|
||||||
Malayalam => HB_SCRIPT_MALAYALAM,
|
|
||||||
Mandaic => HB_SCRIPT_MANDAIC,
|
|
||||||
Manichaean => HB_SCRIPT_MANICHAEAN,
|
|
||||||
Marchen => HB_SCRIPT_MARCHEN,
|
|
||||||
Masaram_Gondi => HB_SCRIPT_MASARAM_GONDI,
|
|
||||||
Medefaidrin => HB_SCRIPT_MEDEFAIDRIN,
|
|
||||||
Meetei_Mayek => HB_SCRIPT_MEETEI_MAYEK,
|
|
||||||
Mende_Kikakui => HB_SCRIPT_MENDE_KIKAKUI,
|
|
||||||
Meroitic_Cursive => HB_SCRIPT_MEROITIC_CURSIVE,
|
|
||||||
Meroitic_Hieroglyphs => HB_SCRIPT_MEROITIC_HIEROGLYPHS,
|
|
||||||
Miao => HB_SCRIPT_MIAO,
|
|
||||||
Modi => HB_SCRIPT_MODI,
|
|
||||||
Mongolian => HB_SCRIPT_MONGOLIAN,
|
|
||||||
Mro => HB_SCRIPT_MRO,
|
|
||||||
Multani => HB_SCRIPT_MULTANI,
|
|
||||||
Myanmar => HB_SCRIPT_MYANMAR,
|
|
||||||
Nabataean => HB_SCRIPT_NABATAEAN,
|
|
||||||
Nandinagari => HB_SCRIPT_NANDINAGARI,
|
|
||||||
New_Tai_Lue => HB_SCRIPT_NEW_TAI_LUE,
|
|
||||||
Newa => HB_SCRIPT_NEWA,
|
|
||||||
Nko => HB_SCRIPT_NKO,
|
|
||||||
Nushu => HB_SCRIPT_NUSHU,
|
|
||||||
Nyiakeng_Puachue_Hmong => HB_SCRIPT_NYIAKENG_PUACHUE_HMONG,
|
|
||||||
Ogham => HB_SCRIPT_OGHAM,
|
|
||||||
Ol_Chiki => HB_SCRIPT_OL_CHIKI,
|
|
||||||
Old_Hungarian => HB_SCRIPT_OLD_HUNGARIAN,
|
|
||||||
Old_Italic => HB_SCRIPT_OLD_ITALIC,
|
|
||||||
Old_North_Arabian => HB_SCRIPT_OLD_NORTH_ARABIAN,
|
|
||||||
Old_Permic => HB_SCRIPT_OLD_PERMIC,
|
|
||||||
Old_Persian => HB_SCRIPT_OLD_PERSIAN,
|
|
||||||
Old_Sogdian => HB_SCRIPT_OLD_SOGDIAN,
|
|
||||||
Old_South_Arabian => HB_SCRIPT_OLD_SOUTH_ARABIAN,
|
|
||||||
Old_Turkic => HB_SCRIPT_OLD_TURKIC,
|
|
||||||
Oriya => HB_SCRIPT_ORIYA,
|
|
||||||
Osage => HB_SCRIPT_OSAGE,
|
|
||||||
Osmanya => HB_SCRIPT_OSMANYA,
|
|
||||||
Pahawh_Hmong => HB_SCRIPT_PAHAWH_HMONG,
|
|
||||||
Palmyrene => HB_SCRIPT_PALMYRENE,
|
|
||||||
Pau_Cin_Hau => HB_SCRIPT_PAU_CIN_HAU,
|
|
||||||
Phags_Pa => HB_SCRIPT_PHAGS_PA,
|
|
||||||
Phoenician => HB_SCRIPT_PHOENICIAN,
|
|
||||||
Psalter_Pahlavi => HB_SCRIPT_PSALTER_PAHLAVI,
|
|
||||||
Rejang => HB_SCRIPT_REJANG,
|
|
||||||
Runic => HB_SCRIPT_RUNIC,
|
|
||||||
Samaritan => HB_SCRIPT_SAMARITAN,
|
|
||||||
Saurashtra => HB_SCRIPT_SAURASHTRA,
|
|
||||||
Sharada => HB_SCRIPT_SHARADA,
|
|
||||||
Shavian => HB_SCRIPT_SHAVIAN,
|
|
||||||
Siddham => HB_SCRIPT_SIDDHAM,
|
|
||||||
SignWriting => HB_SCRIPT_SIGNWRITING,
|
|
||||||
Sinhala => HB_SCRIPT_SINHALA,
|
|
||||||
Sogdian => HB_SCRIPT_SOGDIAN,
|
|
||||||
Sora_Sompeng => HB_SCRIPT_SORA_SOMPENG,
|
|
||||||
Soyombo => HB_SCRIPT_SOYOMBO,
|
|
||||||
Sundanese => HB_SCRIPT_SUNDANESE,
|
|
||||||
Syloti_Nagri => HB_SCRIPT_SYLOTI_NAGRI,
|
|
||||||
Syriac => HB_SCRIPT_SYRIAC,
|
|
||||||
Tagalog => HB_SCRIPT_TAGALOG,
|
|
||||||
Tagbanwa => HB_SCRIPT_TAGBANWA,
|
|
||||||
Tai_Le => HB_SCRIPT_TAI_LE,
|
|
||||||
Tai_Tham => HB_SCRIPT_TAI_THAM,
|
|
||||||
Tai_Viet => HB_SCRIPT_TAI_VIET,
|
|
||||||
Takri => HB_SCRIPT_TAKRI,
|
|
||||||
Tamil => HB_SCRIPT_TAMIL,
|
|
||||||
Tangut => HB_SCRIPT_TANGUT,
|
|
||||||
Telugu => HB_SCRIPT_TELUGU,
|
|
||||||
Thaana => HB_SCRIPT_THAANA,
|
|
||||||
Thai => HB_SCRIPT_THAI,
|
|
||||||
Tibetan => HB_SCRIPT_TIBETAN,
|
|
||||||
Tifinagh => HB_SCRIPT_TIFINAGH,
|
|
||||||
Tirhuta => HB_SCRIPT_TIRHUTA,
|
|
||||||
Ugaritic => HB_SCRIPT_UGARITIC,
|
|
||||||
Unknown => HB_SCRIPT_UNKNOWN,
|
|
||||||
Vai => HB_SCRIPT_VAI,
|
|
||||||
Warang_Citi => HB_SCRIPT_WARANG_CITI,
|
|
||||||
Wancho => HB_SCRIPT_WANCHO,
|
|
||||||
Yezidi => HB_SCRIPT_YEZIDI,
|
|
||||||
Yi => HB_SCRIPT_YI,
|
|
||||||
Zanabazar_Square => HB_SCRIPT_ZANABAZAR_SQUARE,
|
|
||||||
_ => HB_SCRIPT_UNKNOWN,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Shaper {
|
impl Shaper {
|
||||||
|
@ -381,7 +228,9 @@ impl Shaper {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
hb_buffer_set_script(hb_buffer, unicode_to_hb_script(options.script));
|
let script =
|
||||||
|
hb_script_from_iso15924_tag(unicode_script_to_iso15924_tag(options.script));
|
||||||
|
hb_buffer_set_script(hb_buffer, script);
|
||||||
|
|
||||||
hb_buffer_add_utf8(
|
hb_buffer_add_utf8(
|
||||||
hb_buffer,
|
hb_buffer,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue