85 lines
2.3 KiB
C
85 lines
2.3 KiB
C
// harfbuzz.Feature
|
|
#include "luaharfbuzz.h"
|
|
|
|
static int direction_new(lua_State *L) {
|
|
Direction *d;
|
|
const char *dir = luaL_checkstring(L, 1);
|
|
|
|
d = (Direction *)lua_newuserdata(L, sizeof(*d));
|
|
luaL_getmetatable(L, "harfbuzz.Direction");
|
|
lua_setmetatable(L, -2);
|
|
|
|
*d = hb_direction_from_string(dir, -1);
|
|
return 1;
|
|
}
|
|
|
|
static int direction_to_string(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushstring(L, hb_direction_to_string(*d));
|
|
return 1;
|
|
}
|
|
|
|
static int direction_equals(lua_State *L) {
|
|
Direction* lhs = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
Direction* rhs = (Direction *)luaL_checkudata(L, 2, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, *lhs == *rhs);
|
|
return 1;
|
|
}
|
|
|
|
static int direction_is_valid(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, HB_DIRECTION_IS_VALID(*d));
|
|
return 1;
|
|
}
|
|
|
|
static int direction_is_horizontal(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, HB_DIRECTION_IS_HORIZONTAL(*d));
|
|
return 1;
|
|
}
|
|
|
|
static int direction_is_vertical(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, HB_DIRECTION_IS_VERTICAL(*d));
|
|
return 1;
|
|
}
|
|
|
|
static int direction_is_forward(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, HB_DIRECTION_IS_FORWARD(*d));
|
|
return 1;
|
|
}
|
|
|
|
static int direction_is_backward(lua_State *L) {
|
|
Direction* d = (Direction *)luaL_checkudata(L, 1, "harfbuzz.Direction");
|
|
|
|
lua_pushboolean(L, HB_DIRECTION_IS_BACKWARD(*d));
|
|
return 1;
|
|
}
|
|
|
|
static const struct luaL_Reg direction_methods[] = {
|
|
{ "__tostring", direction_to_string },
|
|
{ "__eq", direction_equals },
|
|
{ "is_valid", direction_is_valid },
|
|
{ "is_horizontal", direction_is_horizontal },
|
|
{ "is_vertical", direction_is_vertical },
|
|
{ "is_forward", direction_is_forward },
|
|
{ "is_backward", direction_is_backward },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
static const struct luaL_Reg direction_functions[] = {
|
|
{ "new", direction_new },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
int register_direction(lua_State *L) {
|
|
return register_class(L, "harfbuzz.Direction", direction_methods, direction_functions, NULL);
|
|
}
|