72 lines
1.8 KiB
C
72 lines
1.8 KiB
C
#include "luaharfbuzz.h"
|
|
|
|
static int new_script_from_string(lua_State *L) {
|
|
Script *sp = (Script *)lua_newuserdata(L, sizeof(*sp));
|
|
luaL_getmetatable(L, "harfbuzz.Script");
|
|
lua_setmetatable(L, -2);
|
|
|
|
if (lua_gettop(L) == 1 || lua_isnil(L, -2))
|
|
*sp = HB_SCRIPT_INVALID;
|
|
else
|
|
*sp = hb_script_from_string(luaL_checkstring(L, -2), -1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static int new_script_from_tag(lua_State *L) {
|
|
Tag* tp = (Tag *)luaL_checkudata(L, 1, "harfbuzz.Tag");
|
|
|
|
Script *sp = (Script *)lua_newuserdata(L, sizeof(*sp));
|
|
luaL_getmetatable(L, "harfbuzz.Script");
|
|
lua_setmetatable(L, -2);
|
|
|
|
*sp = hb_script_from_iso15924_tag(*tp);
|
|
return 1;
|
|
}
|
|
|
|
static int script_to_string(lua_State *L) {
|
|
Script *script = (Script *)luaL_checkudata(L, 1, "harfbuzz.Script");
|
|
char s[5];
|
|
|
|
hb_tag_to_string(hb_script_to_iso15924_tag(*script), s);
|
|
s[4] = '\0';
|
|
lua_pushstring(L, s);
|
|
return 1;
|
|
}
|
|
|
|
static int script_to_tag(lua_State *L) {
|
|
Script *script = (Script *)luaL_checkudata(L, 1, "harfbuzz.Script");
|
|
|
|
Tag *tp = (Tag *)lua_newuserdata(L, sizeof(*tp));
|
|
luaL_getmetatable(L, "harfbuzz.Tag");
|
|
lua_setmetatable(L, -2);
|
|
|
|
*tp = hb_script_to_iso15924_tag(*script);
|
|
return 1;
|
|
}
|
|
|
|
static int script_equals(lua_State *L) {
|
|
Script* lhs = (Script *)luaL_checkudata(L, 1, "harfbuzz.Script");
|
|
Script* rhs = (Script *)luaL_checkudata(L, 2, "harfbuzz.Script");
|
|
|
|
lua_pushboolean(L, *lhs == *rhs);
|
|
return 1;
|
|
}
|
|
|
|
static const struct luaL_Reg script_methods[] = {
|
|
{ "__tostring", script_to_string },
|
|
{ "__eq", script_equals },
|
|
{ "to_iso15924_tag", script_to_tag },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
static const struct luaL_Reg script_functions[] = {
|
|
{ "new", new_script_from_string },
|
|
{ "from_iso15924_tag", new_script_from_tag },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
int register_script(lua_State *L) {
|
|
return register_class(L, "harfbuzz.Script", script_methods, script_functions, NULL);
|
|
}
|