Пример #1
0
int luaopen_icu_ufile(lua_State *L) {
	int IDX_UFILE_META, IDX_UFILE_LIB, IDX_USTRING_META, IDX_USTRING_POOL;
	const luaL_Reg* lib_entry;
	static const luaL_Reg null_entry = {NULL,NULL};

	icu4lua_requireustringlib(L);

	icu4lua_pushustringmetatable(L);
	IDX_USTRING_META = lua_gettop(L);

	icu4lua_pushustringpool(L);
	IDX_USTRING_POOL = lua_gettop(L);
	
	luaL_newmetatable(L, "UFILE*");
	luaL_register(L, NULL, icu_ufile_meta);
	IDX_UFILE_META = lua_gettop(L);

	luaL_register(L, "icu.ufile", &null_entry);
	IDX_UFILE_LIB = lua_gettop(L);

	for (lib_entry = icu_ufile_lib; lib_entry->name; lib_entry++) {
		lua_pushvalue(L, IDX_UFILE_META);
		lua_pushvalue(L, IDX_USTRING_META);
		lua_pushvalue(L, IDX_USTRING_POOL);
		lua_pushnil(L);
		lua_pushcclosure(L, lib_entry->func, 4);
		lua_setfield(L, IDX_UFILE_LIB, lib_entry->name);
	}

	lua_pushvalue(L, IDX_UFILE_LIB);
	lua_setfield(L, IDX_UFILE_META, "__index");

	lua_settop(L, IDX_UFILE_LIB);
	return 1;
}
Пример #2
0
int luaopen_icu_collator(lua_State *L) {
	int IDX_COLLATOR_META, IDX_COLLATOR_LIB, IDX_USTRING_META, IDX_USTRING_POOL;
	const luaL_Reg* lib_entry;
	const luaL_Reg null_entry = {NULL,NULL};
	const collatorConstant* lib_constant;

	icu4lua_requireustringlib(L);

	luaL_newmetatable(L, "icu.collator");
#if LUA_VERSION_NUM >= 502
	luaL_setfuncs(L, icu_collator_meta, 0);
#else
	luaL_register(L, NULL, icu_collator_meta);
#endif
	IDX_COLLATOR_META = lua_gettop(L);

	icu4lua_pushustringmetatable(L);
	IDX_USTRING_META = lua_gettop(L);

	icu4lua_pushustringpool(L);
	IDX_USTRING_POOL = lua_gettop(L);

#if LUA_VERSION_NUM >= 502
	lua_newtable(L);
	IDX_COLLATOR_LIB = lua_gettop(L);
	lua_pushvalue(L, IDX_COLLATOR_META);
	lua_pushvalue(L, IDX_USTRING_META);
	lua_pushvalue(L, IDX_USTRING_POOL);
	luaL_setfuncs(L, icu_collator_lib, 3);
#else
	luaL_register(L, "icu.collator", &null_entry);
	IDX_COLLATOR_LIB = lua_gettop(L);
	for (lib_entry = icu_collator_lib; lib_entry->name; lib_entry++) {
		lua_pushstring(L, lib_entry->name);
		lua_pushvalue(L, IDX_COLLATOR_META);
		lua_pushvalue(L, IDX_USTRING_META);
		lua_pushvalue(L, IDX_USTRING_POOL);
		lua_pushcclosure(L, lib_entry->func, 3);
		lua_rawset(L, IDX_COLLATOR_LIB);
	}
#endif
	for (lib_constant = icu_collator_lib_constants; lib_constant->name; lib_constant++) {
		lua_pushstring(L, lib_constant->name);
		lua_pushnumber(L, lib_constant->value);
		lua_rawset(L, IDX_COLLATOR_LIB);
	}
	
	lua_pushvalue(L, IDX_COLLATOR_LIB);
	lua_setfield(L, IDX_COLLATOR_META, "__index");

	lua_settop(L, IDX_COLLATOR_LIB);
	return 1;
}
Пример #3
0
int luaopen_icu_normalizer(lua_State *L) {
	int IDX_NORMALIZER_LIB, IDX_USTRING_META, IDX_USTRING_POOL;
	static const luaL_Reg null_entry = {NULL,NULL};
	const luaL_Reg* lib_entry;
	const normalizer_constant* lib_constant;

	icu4lua_requireustringlib(L);

	icu4lua_pushustringmetatable(L);
	IDX_USTRING_META = lua_gettop(L);

	icu4lua_pushustringpool(L);
	IDX_USTRING_POOL = lua_gettop(L);

#if LUA_VERSION_NUM >= 502
	lua_newtable(L);
	IDX_NORMALIZER_LIB = lua_gettop(L);
	lua_pushvalue(L, IDX_USTRING_META);
	lua_pushvalue(L, IDX_USTRING_POOL);
	luaL_setfuncs(L, icu_normalizer_lib, 2);
#else
	luaL_register(L, "icu.normalizer", &null_entry);
	IDX_NORMALIZER_LIB = lua_gettop(L);
	for (lib_entry = icu_normalizer_lib; lib_entry->name; lib_entry++) {
		lua_pushvalue(L, IDX_USTRING_META);
		lua_pushvalue(L, IDX_USTRING_POOL);
		lua_pushcclosure(L, lib_entry->func, 2);
		lua_setfield(L, IDX_NORMALIZER_LIB, lib_entry->name);
	}
#endif
	for (lib_constant = normalizer_constants; lib_constant->name; lib_constant++) {
		lua_pushnumber(L, lib_constant->value);
		lua_setfield(L, IDX_NORMALIZER_LIB, lib_constant->name);
	}

	lua_settop(L, IDX_NORMALIZER_LIB);
	return 1;
}