void ParseLuaTable(lua_State *L)
{
if (!lua_istable(L, -1))
{
return;
}
lua_pushnil(L);
while (lua_next(L, -2))
{
fprintf(stdout, "%s : %s ", luaL_typename(L,-2), luaL_typename(L,-1));
int nKeyType = lua_type(L, -2);
int nValueType = lua_type(L, -1);
if (nKeyType == LUA_TNUMBER)
{
fprintf(stdout, "%g,", lua_tonumber(L, -2));
}
else if (nKeyType == LUA_TSTRING)
{
fprintf(stdout, "\"%s\",", lua_tostring(L, -2));
}
fprintf(stdout, " ");
if (nValueType == LUA_TNUMBER)
{
fprintf(stdout, "%g", lua_tonumber(L, -1));
}
else if (nValueType == LUA_TSTRING)
{
fprintf(stdout, "\"%s\"", lua_tostring(L, -1));
}
else if (nValueType == LUA_TTABLE)
{
fprintf(stdout, "\n");
ParseLuaTable(L);
}
lua_pop(L, 1);
fprintf(stdout, "\n");
}
}
int test()
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
int error = 0;
// test.lua
//s = {
//g = "g",
//b = "b",
//r = 2,
//t = {
// width = 100,
// height = 200,
// path = "path",
// te = { a = 1, b = 2}
//},
//
//3,
//4,
//5,
//"test"
//}
//
luaL_loadfile(L, "test.lua");
error = lua_pcall(L, 0, 0, 0);
if (error) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
lua_getglobal(L, "s");
ParseLuaTable(L);
if (error) {
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
return 0;
}