16e652d70Sopenharmony_ciuse crate::output::Output; 26e652d70Sopenharmony_ciuse crate::parse::Properties; 36e652d70Sopenharmony_ciuse crate::CHUNK; 46e652d70Sopenharmony_ci 56e652d70Sopenharmony_ciconst HEAD: &str = "\ 66e652d70Sopenharmony_ci// \x40generated by ../generate. To regenerate, run the following in the repo root: 76e652d70Sopenharmony_ci// 86e652d70Sopenharmony_ci// $ curl -LO https://www.unicode.org/Public/zipped/15.0.0/UCD.zip 96e652d70Sopenharmony_ci// $ unzip UCD.zip -d UCD 106e652d70Sopenharmony_ci// $ cargo run --manifest-path generate/Cargo.toml 116e652d70Sopenharmony_ci 126e652d70Sopenharmony_ciconst T: bool = true; 136e652d70Sopenharmony_ciconst F: bool = false; 146e652d70Sopenharmony_ci 156e652d70Sopenharmony_ci#[repr(C, align(8))] 166e652d70Sopenharmony_cipub(crate) struct Align8<T>(pub(crate) T); 176e652d70Sopenharmony_ci#[repr(C, align(64))] 186e652d70Sopenharmony_cipub(crate) struct Align64<T>(pub(crate) T); 196e652d70Sopenharmony_ci"; 206e652d70Sopenharmony_ci 216e652d70Sopenharmony_cipub fn output( 226e652d70Sopenharmony_ci properties: &Properties, 236e652d70Sopenharmony_ci index_start: &[u8], 246e652d70Sopenharmony_ci index_continue: &[u8], 256e652d70Sopenharmony_ci halfdense: &[u8], 266e652d70Sopenharmony_ci) -> Output { 276e652d70Sopenharmony_ci let mut out = Output::new(); 286e652d70Sopenharmony_ci writeln!(out, "{}", HEAD); 296e652d70Sopenharmony_ci 306e652d70Sopenharmony_ci writeln!( 316e652d70Sopenharmony_ci out, 326e652d70Sopenharmony_ci "pub(crate) static ASCII_START: Align64<[bool; 128]> = Align64([", 336e652d70Sopenharmony_ci ); 346e652d70Sopenharmony_ci for i in 0u8..4 { 356e652d70Sopenharmony_ci write!(out, " "); 366e652d70Sopenharmony_ci for j in 0..32 { 376e652d70Sopenharmony_ci let ch = (i * 32 + j) as char; 386e652d70Sopenharmony_ci let is_xid_start = properties.is_xid_start(ch); 396e652d70Sopenharmony_ci write!(out, " {},", if is_xid_start { 'T' } else { 'F' }); 406e652d70Sopenharmony_ci } 416e652d70Sopenharmony_ci writeln!(out); 426e652d70Sopenharmony_ci } 436e652d70Sopenharmony_ci writeln!(out, "]);"); 446e652d70Sopenharmony_ci writeln!(out); 456e652d70Sopenharmony_ci 466e652d70Sopenharmony_ci writeln!( 476e652d70Sopenharmony_ci out, 486e652d70Sopenharmony_ci "pub(crate) static ASCII_CONTINUE: Align64<[bool; 128]> = Align64([", 496e652d70Sopenharmony_ci ); 506e652d70Sopenharmony_ci for i in 0u8..4 { 516e652d70Sopenharmony_ci write!(out, " "); 526e652d70Sopenharmony_ci for j in 0..32 { 536e652d70Sopenharmony_ci let ch = (i * 32 + j) as char; 546e652d70Sopenharmony_ci let is_xid_continue = properties.is_xid_continue(ch); 556e652d70Sopenharmony_ci write!(out, " {},", if is_xid_continue { 'T' } else { 'F' }); 566e652d70Sopenharmony_ci } 576e652d70Sopenharmony_ci writeln!(out); 586e652d70Sopenharmony_ci } 596e652d70Sopenharmony_ci writeln!(out, "]);"); 606e652d70Sopenharmony_ci writeln!(out); 616e652d70Sopenharmony_ci 626e652d70Sopenharmony_ci writeln!(out, "pub(crate) const CHUNK: usize = {};", CHUNK); 636e652d70Sopenharmony_ci writeln!(out); 646e652d70Sopenharmony_ci 656e652d70Sopenharmony_ci writeln!( 666e652d70Sopenharmony_ci out, 676e652d70Sopenharmony_ci "pub(crate) static TRIE_START: Align8<[u8; {}]> = Align8([", 686e652d70Sopenharmony_ci index_start.len(), 696e652d70Sopenharmony_ci ); 706e652d70Sopenharmony_ci for line in index_start.chunks(16) { 716e652d70Sopenharmony_ci write!(out, " "); 726e652d70Sopenharmony_ci for byte in line { 736e652d70Sopenharmony_ci write!(out, " 0x{:02X},", byte); 746e652d70Sopenharmony_ci } 756e652d70Sopenharmony_ci writeln!(out); 766e652d70Sopenharmony_ci } 776e652d70Sopenharmony_ci writeln!(out, "]);"); 786e652d70Sopenharmony_ci writeln!(out); 796e652d70Sopenharmony_ci 806e652d70Sopenharmony_ci writeln!( 816e652d70Sopenharmony_ci out, 826e652d70Sopenharmony_ci "pub(crate) static TRIE_CONTINUE: Align8<[u8; {}]> = Align8([", 836e652d70Sopenharmony_ci index_continue.len(), 846e652d70Sopenharmony_ci ); 856e652d70Sopenharmony_ci for line in index_continue.chunks(16) { 866e652d70Sopenharmony_ci write!(out, " "); 876e652d70Sopenharmony_ci for byte in line { 886e652d70Sopenharmony_ci write!(out, " 0x{:02X},", byte); 896e652d70Sopenharmony_ci } 906e652d70Sopenharmony_ci writeln!(out); 916e652d70Sopenharmony_ci } 926e652d70Sopenharmony_ci writeln!(out, "]);"); 936e652d70Sopenharmony_ci writeln!(out); 946e652d70Sopenharmony_ci 956e652d70Sopenharmony_ci writeln!( 966e652d70Sopenharmony_ci out, 976e652d70Sopenharmony_ci "pub(crate) static LEAF: Align64<[u8; {}]> = Align64([", 986e652d70Sopenharmony_ci halfdense.len(), 996e652d70Sopenharmony_ci ); 1006e652d70Sopenharmony_ci for line in halfdense.chunks(16) { 1016e652d70Sopenharmony_ci write!(out, " "); 1026e652d70Sopenharmony_ci for byte in line { 1036e652d70Sopenharmony_ci write!(out, " 0x{:02X},", byte); 1046e652d70Sopenharmony_ci } 1056e652d70Sopenharmony_ci writeln!(out); 1066e652d70Sopenharmony_ci } 1076e652d70Sopenharmony_ci writeln!(out, "]);"); 1086e652d70Sopenharmony_ci 1096e652d70Sopenharmony_ci out 1106e652d70Sopenharmony_ci} 111