50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
// harfbuzz.Feature
|
|
#include "luaharfbuzz.h"
|
|
|
|
static int language_new(lua_State *L) {
|
|
Language *l;
|
|
|
|
l = (Language *)lua_newuserdata(L, sizeof(*l));
|
|
luaL_getmetatable(L, "harfbuzz.Language");
|
|
lua_setmetatable(L, -2);
|
|
|
|
if (lua_gettop(L) == 1 || lua_isnil(L, -2))
|
|
*l = HB_LANGUAGE_INVALID;
|
|
else
|
|
*l = hb_language_from_string(luaL_checkstring(L, -2), -1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static int language_to_string(lua_State *L) {
|
|
Language* l = (Language *)luaL_checkudata(L, 1, "harfbuzz.Language");
|
|
const char *s = hb_language_to_string(*l);
|
|
|
|
lua_pushstring(L, s ? s : "");
|
|
return 1;
|
|
}
|
|
|
|
static int language_equals(lua_State *L) {
|
|
Language* lhs = (Language *)luaL_checkudata(L, 1, "harfbuzz.Language");
|
|
Language* rhs = (Language *)luaL_checkudata(L, 2, "harfbuzz.Language");
|
|
|
|
lua_pushboolean(L, *lhs == *rhs);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static const struct luaL_Reg language_methods[] = {
|
|
{ "__tostring", language_to_string },
|
|
{ "__eq", language_equals },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
static const struct luaL_Reg language_functions[] = {
|
|
{ "new", language_new },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
int register_language(lua_State *L) {
|
|
return register_class(L, "harfbuzz.Language", language_methods, language_functions, NULL);
|
|
}
|