use super::{tehta::Tehta, tema::Tema};
pub const ESC: char = '\\';
pub const ESC_NOP: char = ' ';
pub const CARRIER_LONG: char = TENGWA_ARA;
pub const CARRIER_SHORT: char = TENGWA_TELCO;
pub const CARRIER_SHORT_LIG: char = TENGWA_TELCO_LIG;
pub const fn carrier(long: bool) -> char {
if long { CARRIER_LONG } else { CARRIER_SHORT }
}
pub const DC_INNER_DOT_1: char = '';
pub const DC_OVER_ACUTE_1: char = '';
pub const DC_OVER_ACUTE_2: char = '';
pub const DC_OVER_DOT_1: char = '';
pub const DC_OVER_DOT_2: char = '';
pub const DC_OVER_DOT_3: char = '';
pub const DC_OVER_DOT_3_INV: char = '';
pub const DC_OVER_HOOK_L_1: char = '';
pub const DC_OVER_HOOK_L_2: char = '';
pub const DC_OVER_HOOK_R_1: char = '';
pub const DC_OVER_HOOK_R_2: char = '';
pub const DC_OVER_LINE: char = '';
pub const DC_OVER_WAVE: char = '';
pub const DC_OVER_BREVE: char = '';
pub const DC_OVER_GRAVE: char = '';
pub const DC_OVER_CIRCUMFLEX: char = '';
pub const DC_UNDER_ACUTE_1: char = '';
pub const DC_UNDER_ACUTE_2: char = '';
pub const DC_UNDER_DOT_1: char = '';
pub const DC_UNDER_DOT_2: char = '';
pub const DC_UNDER_DOT_3: char = '';
pub const DC_UNDER_HOOK_L_1: char = '';
pub const DC_UNDER_HOOK_R_1: char = '';
pub const DC_UNDER_LINE_H: char = '';
pub const DC_UNDER_LINE_V: char = '';
pub const DC_UNDER_RING: char = '';
pub const MOD_LABIAL: char = DC_OVER_WAVE;
pub const MOD_LONG_CONS: char = DC_UNDER_LINE_H;
pub const MOD_LONG_VOWEL: char = DC_UNDER_LINE_V;
pub const MOD_NASAL: char = DC_OVER_LINE;
pub const MOD_PALATAL: char = DC_UNDER_DOT_2;
pub const NUM_0: char = ''; pub const NUM_1: char = ''; pub const NUM_2: char = ''; pub const NUM_3: char = ''; pub const NUM_4: char = ''; pub const NUM_5: char = ''; pub const NUM_6: char = ''; pub const NUM_7: char = ''; pub const NUM_8: char = ''; pub const NUM_9: char = ''; pub const NUM_A: char = ''; pub const NUM_B: char = ''; pub const NUM_C: char = '';
pub const NUMERAL: [char; 13] = [
NUM_0,
NUM_1, NUM_2, NUM_3, NUM_4,
NUM_5, NUM_6, NUM_7, NUM_8,
NUM_9, NUM_A, NUM_B, NUM_C,
];
pub const SEQUENCE: [char; 24] = [
TEMA_TINCO.single_dn, TEMA_PARMA.single_dn, TEMA_CALMA.single_dn, TEMA_QESSE.single_dn,
TEMA_TINCO.double_dn, TEMA_PARMA.double_dn, TEMA_CALMA.double_dn, TEMA_QESSE.double_dn,
TEMA_TINCO.single_up, TEMA_PARMA.single_up, TEMA_CALMA.single_up, TEMA_QESSE.single_up,
TEMA_TINCO.double_up, TEMA_PARMA.double_up, TEMA_CALMA.double_up, TEMA_QESSE.double_up,
TEMA_TINCO.double_sh, TEMA_PARMA.double_sh, TEMA_CALMA.double_sh, TEMA_QESSE.double_sh,
TEMA_TINCO.single_sh, TEMA_PARMA.single_sh, TEMA_CALMA.single_sh, TEMA_QESSE.single_sh,
];
pub const PUNCT_DOT_0: char = DC_INNER_DOT_1;
cfg_if! (if #[cfg(feature = "dots-standard")] {
pub const PUNCT_DOT_1: char = '⸱';
pub const PUNCT_DOT_2: char = ':';
pub const PUNCT_DOT_3: char = '⁝';
pub const PUNCT_DOT_4: char = '⁘';
pub const PUNCT_DOT_5: char = '⸭';
} else {
pub const PUNCT_DOT_1: char = '';
pub const PUNCT_DOT_2: char = '';
pub const PUNCT_DOT_3: char = '';
pub const PUNCT_DOT_4: char = '';
pub const PUNCT_DOT_5: char = '';
});
pub const PUNCT_EXCLAM: char = '';
pub const PUNCT_THORIN: char = '';
pub const PUNCT_INTERR: char = '';
pub const PUNCT_LINE_1: char = '';
pub const PUNCT_LINE_2: char = '';
pub const PUNCT_PAREN: char = '';
pub const PUNCT_PAREN_L: char = '';
pub const PUNCT_PAREN_R: char = '';
pub const PUNCT_EOF: &str = "";
pub const SA_RINCE: char = '';
pub const SA_RINCE_FINAL: char = '';
pub const TEHTA_YANTA: Tehta = Tehta::single(DC_OVER_CIRCUMFLEX);
pub const TEHTA_A: Tehta = Tehta::single(DC_OVER_DOT_3);
pub const TEHTA_E: Tehta = Tehta::altern(DC_OVER_ACUTE_1, DC_OVER_ACUTE_2);
pub const TEHTA_I: Tehta = Tehta::single(DC_OVER_DOT_1);
pub const TEHTA_O: Tehta = Tehta::altern(DC_OVER_HOOK_R_1, DC_OVER_HOOK_R_2);
pub const TEHTA_U: Tehta = Tehta::altern(DC_OVER_HOOK_L_1, DC_OVER_HOOK_L_2);
pub const TEHTA_Y: Tehta = Tehta::single(DC_OVER_DOT_2);
pub const TEMA_TINCO: Tema = Tema {
left: false,
open: true,
single_dn: '', double_dn: '', single_up: '', double_up: '', double_sh: '', single_sh: '', single_ex: '',
double_ex: '',
};
pub const TEMA_PARMA: Tema = Tema {
left: false,
open: false,
single_dn: '', double_dn: '', single_up: '', double_up: '', double_sh: '', single_sh: '', single_ex: '',
double_ex: '',
};
pub const TEMA_CALMA: Tema = Tema {
left: true,
open: true,
single_dn: '', double_dn: '', single_up: '', double_up: '', double_sh: '', single_sh: '', single_ex: '',
double_ex: '',
};
pub const TEMA_QESSE: Tema = Tema {
left: true,
open: false,
single_dn: '', double_dn: '', single_up: '', double_up: '', double_sh: '', single_sh: '', single_ex: '',
double_ex: '',
};
impl Tema {
pub const TINCO: Self = TEMA_TINCO;
pub const PARMA: Self = TEMA_PARMA;
pub const CALMA: Self = TEMA_CALMA;
pub const QESSE: Self = TEMA_QESSE;
}
pub const TENGWA_TINCO: char = TEMA_TINCO.single_dn;
pub const TENGWA_ANDO: char = TEMA_TINCO.double_dn;
pub const TENGWA_THULE: char = TEMA_TINCO.single_up;
pub const TENGWA_ANTO: char = TEMA_TINCO.double_up;
pub const TENGWA_NUMEN: char = TEMA_TINCO.double_sh;
pub const TENGWA_ORE: char = TEMA_TINCO.single_sh;
pub const TENGWA_PARMA: char = TEMA_PARMA.single_dn;
pub const TENGWA_UMBAR: char = TEMA_PARMA.double_dn;
pub const TENGWA_FORMEN: char = TEMA_PARMA.single_up;
pub const TENGWA_AMPA: char = TEMA_PARMA.double_up;
pub const TENGWA_MALTA: char = TEMA_PARMA.double_sh;
pub const TENGWA_VALA: char = TEMA_PARMA.single_sh;
pub const TENGWA_CALMA: char = TEMA_CALMA.single_dn;
pub const TENGWA_ANGA: char = TEMA_CALMA.double_dn;
pub const TENGWA_AHA: char = TEMA_CALMA.single_up;
pub const TENGWA_ANCA: char = TEMA_CALMA.double_up;
pub const TENGWA_NOLDO: char = TEMA_CALMA.double_sh;
pub const TENGWA_ANNA: char = TEMA_CALMA.single_sh;
pub const TENGWA_QESSE: char = TEMA_QESSE.single_dn;
pub const TENGWA_UNGWE: char = TEMA_QESSE.double_dn;
pub const TENGWA_HWESTA: char = TEMA_QESSE.single_up;
pub const TENGWA_UNQUE: char = TEMA_QESSE.double_up;
pub const TENGWA_NWALME: char = TEMA_QESSE.double_sh;
pub const TENGWA_WILYA: char = TEMA_QESSE.single_sh;
pub const TENGWA_ROMEN: char = '';
pub const TENGWA_ARDA: char = '';
pub const TENGWA_LAMBE: char = '';
pub const TENGWA_ALDA: char = '';
pub const TENGWA_SILME: char = '';
pub const TENGWA_SILME_NUQ: char = '';
pub const TENGWA_ESSE: char = '';
pub const TENGWA_ESSE_NUQ: char = '';
pub const TENGWA_HYARMEN: char = '';
pub const TENGWA_HWESTA_SINDARINWA: char = '';
pub const TENGWA_YANTA: char = '';
pub const TENGWA_URE: char = '';
pub const TENGWA_TELCO: char = '';
pub const TENGWA_ARA: char = '';
pub const TENGWA_HALLA: char = '';
pub const TENGWA_OSSE: char = '';
pub const TENGWA_OSSE_REV: char = '';
pub const TENGWA_BOMBADIL_W: char = '';
pub const TENGWA_TELCO_LIG: char = '';
pub const TENGWA_ANNA_OPEN: char = '';
pub const TENGWA_CHRISTOPHER_QU: char = '';
pub const TENGWA_BOMBADIL_HW: char = '';
pub const TENGWA_MALTA_HOOKED: char = '';
pub const TENGWA_VALA_HOOKED: char = '';
pub const TENGWA_LOWDHAM_HW: char = '';
pub const TENGWA_WAIA: char = '';
pub const ZWJ: char = '';
pub const fn width(c: char) -> Option<usize> {
match c {
DC_OVER_DOT_3..=DC_UNDER_LINE_V
| SA_RINCE..=PUNCT_DOT_0
| DC_UNDER_RING
| ZWJ
=> Some(0),
TENGWA_TINCO..=TENGWA_TELCO
| TENGWA_OSSE_REV..=TENGWA_OSSE
| TENGWA_TELCO_LIG..=TENGWA_WAIA
| SA_RINCE_FINAL
| PUNCT_DOT_1..=PUNCT_THORIN
| NUM_0..=NUM_C
=> Some(1),
_ => None,
}
}