luaur_vm/functions/
luaopen_utf_8.rs1use crate::functions::byteoffset::byteoffset;
2use crate::functions::codepoint::codepoint;
3use crate::functions::iter_codes::iter_codes;
4use crate::functions::lua_l_register::lua_l_register;
5use crate::functions::lua_pushlstring::lua_pushlstring;
6use crate::functions::lua_setfield::lua_setfield;
7use crate::functions::utfchar::utfchar;
8use crate::functions::utflen::utflen;
9use crate::records::lua_l_reg::LuaLReg;
10use crate::type_aliases::lua_state::lua_State;
11
12struct SyncLuaLReg([LuaLReg; 6]);
13unsafe impl Sync for SyncLuaLReg {}
14
15static FUNCS: SyncLuaLReg = SyncLuaLReg([
16 LuaLReg {
17 name: c"offset".as_ptr(),
18 func: Some(byteoffset),
19 },
20 LuaLReg {
21 name: c"codepoint".as_ptr(),
22 func: Some(codepoint),
23 },
24 LuaLReg {
25 name: c"char".as_ptr(),
26 func: Some(utfchar),
27 },
28 LuaLReg {
29 name: c"len".as_ptr(),
30 func: Some(utflen),
31 },
32 LuaLReg {
33 name: c"codes".as_ptr(),
34 func: Some(iter_codes),
35 },
36 LuaLReg {
37 name: core::ptr::null(),
38 func: None,
39 },
40]);
41
42pub unsafe fn luaopen_utf_8(L: *mut lua_State) -> core::ffi::c_int {
43 lua_l_register(L, c"utf8".as_ptr(), FUNCS.0.as_ptr());
44
45 const UTF8_PATT: [u8; 14] = [
48 0x5B, 0x00, 0x2D, 0x7F, 0xC2, 0x2D, 0xF4, 0x5D, 0x5B, 0x80, 0x2D, 0xBF, 0x5D, 0x2A,
49 ];
50 lua_pushlstring(
51 L,
52 UTF8_PATT.as_ptr() as *const core::ffi::c_char,
53 UTF8_PATT.len(),
54 );
55 lua_setfield(L, -2, c"charpattern".as_ptr());
56
57 1
58}