luametalatex-c/luaharfbuzz/src/luaharfbuzz/tag.c

51 lines
1.1 KiB
C

// harfbuzz.Feature
#include "luaharfbuzz.h"
static int tag_new(lua_State *L) {
Tag *t;
t = (Tag *)lua_newuserdata(L, sizeof(*t));
luaL_getmetatable(L, "harfbuzz.Tag");
lua_setmetatable(L, -2);
if (lua_gettop(L) == 1 || lua_isnil(L, -2))
*t = HB_TAG_NONE;
else
*t = hb_tag_from_string(luaL_checkstring(L, -2), -1);
return 1;
}
static int tag_to_string(lua_State *L) {
Tag* t = (Tag *)luaL_checkudata(L, 1, "harfbuzz.Tag");
char tag[5];
hb_tag_to_string(*t, tag);
tag[4] = '\0';
lua_pushstring(L, tag);
return 1;
}
static int tag_equals(lua_State *L) {
Tag* lhs = (Tag *)luaL_checkudata(L, 1, "harfbuzz.Tag");
Tag* rhs = (Tag *)luaL_checkudata(L, 2, "harfbuzz.Tag");
lua_pushboolean(L, *lhs == *rhs);
return 1;
}
static const struct luaL_Reg tag_methods[] = {
{ "__tostring", tag_to_string },
{ "__eq", tag_equals },
{ NULL, NULL }
};
static const struct luaL_Reg tag_functions[] = {
{ "new", tag_new },
{ NULL, NULL }
};
int register_tag(lua_State *L) {
return register_class(L, "harfbuzz.Tag", tag_methods, tag_functions, NULL);
}