use crate::tables::*;
use crate::width_info::WidthInfo;
#[inline]
pub(crate) fn lookup_width(c: char) -> (u8, WidthInfo) {
let cp = c as usize;
let t1_offset = WIDTH_ROOT.0[cp >> 13];
let t2_offset = WIDTH_MIDDLE.0[usize::from(t1_offset)][cp >> 7 & 0x3F];
let packed_widths = WIDTH_LEAVES.0[usize::from(t2_offset)][cp >> 2 & 0x1F];
let width = packed_widths >> (2 * (cp & 0b11)) & 0b11;
if width < 3 {
(width, WidthInfo::DEFAULT)
} else {
match c {
'\u{A}' => (1, WidthInfo::LINE_FEED),
'\u{5DC}' => (1, WidthInfo::HEBREW_LETTER_LAMED),
'\u{622}'..='\u{882}' => (1, WidthInfo::JOINING_GROUP_ALEF),
'\u{1780}'..='\u{17AF}' => (1, WidthInfo::KHMER_COENG_ELIGIBLE_LETTER),
'\u{17D8}' => (3, WidthInfo::DEFAULT),
'\u{1A10}' => (1, WidthInfo::BUGINESE_LETTER_YA),
'\u{2D31}'..='\u{2D6F}' => (1, WidthInfo::TIFINAGH_CONSONANT),
'\u{A4FC}'..='\u{A4FD}' => (1, WidthInfo::LISU_TONE_LETTER_MYA_NA_JEU),
'\u{FE01}' => (0, WidthInfo::VARIATION_SELECTOR_1_2_OR_3),
'\u{FE0E}' => (0, WidthInfo::VARIATION_SELECTOR_15),
'\u{FE0F}' => (0, WidthInfo::VARIATION_SELECTOR_16),
'\u{10C03}' => (1, WidthInfo::OLD_TURKIC_LETTER_ORKHON_I),
'\u{16D67}' => (1, WidthInfo::KIRAT_RAI_VOWEL_SIGN_E),
'\u{16D68}' => (1, WidthInfo::KIRAT_RAI_VOWEL_SIGN_AI),
'\u{1F1E6}'..='\u{1F1FF}' => (1, WidthInfo::REGIONAL_INDICATOR),
'\u{1F3FB}'..='\u{1F3FF}' => (2, WidthInfo::EMOJI_MODIFIER),
_ => (2, WidthInfo::EMOJI_PRESENTATION),
}
}
}
#[cfg(feature = "cjk")]
#[inline]
pub(crate) fn lookup_width_cjk(c: char) -> (u8, WidthInfo) {
let cp = c as usize;
let t1_offset = WIDTH_ROOT_CJK.0[cp >> 13];
let t2_offset = WIDTH_MIDDLE.0[usize::from(t1_offset)][cp >> 7 & 0x3F];
let packed_widths = WIDTH_LEAVES.0[usize::from(t2_offset)][cp >> 2 & 0x1F];
let width = packed_widths >> (2 * (cp & 0b11)) & 0b11;
if width < 3 {
(width, WidthInfo::DEFAULT)
} else {
match c {
'\u{A}' => (1, WidthInfo::LINE_FEED),
'\u{338}' => (0, WidthInfo::COMBINING_LONG_SOLIDUS_OVERLAY),
'\u{5DC}' => (1, WidthInfo::HEBREW_LETTER_LAMED),
'\u{622}'..='\u{882}' => (1, WidthInfo::JOINING_GROUP_ALEF),
'\u{1780}'..='\u{17AF}' => (1, WidthInfo::KHMER_COENG_ELIGIBLE_LETTER),
'\u{17D8}' => (3, WidthInfo::DEFAULT),
'\u{1A10}' => (1, WidthInfo::BUGINESE_LETTER_YA),
'\u{2D31}'..='\u{2D6F}' => (1, WidthInfo::TIFINAGH_CONSONANT),
'\u{A4FC}'..='\u{A4FD}' => (1, WidthInfo::LISU_TONE_LETTER_MYA_NA_JEU),
'\u{FE00}'..='\u{FE02}' => (0, WidthInfo::VARIATION_SELECTOR_1_2_OR_3),
'\u{FE0F}' => (0, WidthInfo::VARIATION_SELECTOR_16),
'\u{10C03}' => (1, WidthInfo::OLD_TURKIC_LETTER_ORKHON_I),
'\u{16D67}' => (1, WidthInfo::KIRAT_RAI_VOWEL_SIGN_E),
'\u{16D68}' => (1, WidthInfo::KIRAT_RAI_VOWEL_SIGN_AI),
'\u{1F1E6}'..='\u{1F1FF}' => (1, WidthInfo::REGIONAL_INDICATOR),
'\u{1F3FB}'..='\u{1F3FF}' => (2, WidthInfo::EMOJI_MODIFIER),
_ => (2, WidthInfo::EMOJI_PRESENTATION),
}
}
}