You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
5.5 KiB
200 lines
5.5 KiB
|
|
# HG changeset patch
|
|
# User Tom?s Guisasola Gorham <tomas@tecgraf.puc-rio.br>
|
|
# Date 1343430908 -3600
|
|
# Node ID e981a82571cf5c54d5e84f73fbcad7214f699c03
|
|
# Parent 5dfed844930e6ccd981d44290fe51d20255388bc
|
|
Add compatibility with Lua 5.2
|
|
|
|
diff -r 5dfed844930e -r e981a82571cf src/lxp/lom.lua
|
|
--- a/src/lxp/lom.lua Fri Jul 27 22:03:24 2012 +0100
|
|
+++ b/src/lxp/lom.lua Sat Jul 28 00:15:08 2012 +0100
|
|
@@ -1,13 +1,11 @@
|
|
-- See Copyright Notice in license.html
|
|
-- $Id: lom.lua,v 1.6 2005/06/09 19:18:40 tuler Exp $
|
|
|
|
-require "lxp"
|
|
+local lxp = require "lxp"
|
|
|
|
-local tinsert, tremove, getn = table.insert, table.remove, table.getn
|
|
+local tinsert, tremove = table.insert, table.remove
|
|
local assert, type, print = assert, type, print
|
|
-local lxp = lxp
|
|
|
|
-module ("lxp.lom")
|
|
|
|
local function starttag (p, tag, attr)
|
|
local stack = p:getcallbacks().stack
|
|
@@ -19,14 +17,14 @@
|
|
local stack = p:getcallbacks().stack
|
|
local element = tremove(stack)
|
|
assert(element.tag == tag)
|
|
- local level = getn(stack)
|
|
+ local level = #stack
|
|
tinsert(stack[level], element)
|
|
end
|
|
|
|
local function text (p, txt)
|
|
local stack = p:getcallbacks().stack
|
|
- local element = stack[getn(stack)]
|
|
- local n = getn(element)
|
|
+ local element = stack[#stack]
|
|
+ local n = #element
|
|
if type(element[n]) == "string" then
|
|
element[n] = element[n] .. txt
|
|
else
|
|
@@ -34,7 +32,7 @@
|
|
end
|
|
end
|
|
|
|
-function parse (o)
|
|
+local function parse (o)
|
|
local c = { StartElement = starttag,
|
|
EndElement = endtag,
|
|
CharacterData = text,
|
|
@@ -47,7 +45,7 @@
|
|
status, err = p:parse(o)
|
|
if not status then return nil, err end
|
|
else
|
|
- for l in o do
|
|
+ for l in pairs(o) do
|
|
status, err = p:parse(l)
|
|
if not status then return nil, err end
|
|
end
|
|
@@ -58,3 +56,4 @@
|
|
return c.stack[1][1]
|
|
end
|
|
|
|
+return { parse = parse }
|
|
diff -r 5dfed844930e -r e981a82571cf src/lxplib.c
|
|
--- a/src/lxplib.c Fri Jul 27 22:03:24 2012 +0100
|
|
+++ b/src/lxplib.c Sat Jul 28 00:15:08 2012 +0100
|
|
@@ -13,14 +13,16 @@
|
|
|
|
#include "lua.h"
|
|
#include "lauxlib.h"
|
|
-#if ! defined (LUA_VERSION_NUM) || LUA_VERSION_NUM < 501
|
|
-#include "compat-5.1.h"
|
|
-#endif
|
|
|
|
|
|
#include "lxplib.h"
|
|
|
|
|
|
+#if !defined(lua_pushliteral)
|
|
+#define lua_pushliteral(L, s) \
|
|
+ lua_pushstring(L, "" s, (sizeof(s)/sizeof(char))-1)
|
|
+#endif
|
|
+
|
|
|
|
enum XPState {
|
|
XPSpre, /* parser just initialized */
|
|
@@ -66,7 +68,7 @@
|
|
|
|
|
|
static void lxpclose (lua_State *L, lxp_userdata *xpu) {
|
|
- lua_unref(L, xpu->tableref);
|
|
+ luaL_unref(L, LUA_REGISTRYINDEX, xpu->tableref);
|
|
xpu->tableref = LUA_REFNIL;
|
|
if (xpu->parser)
|
|
XML_ParserFree(xpu->parser);
|
|
@@ -225,7 +227,7 @@
|
|
child->parser = XML_ExternalEntityParserCreate(p, context, NULL);
|
|
if (!child->parser)
|
|
luaL_error(L, "XML_ParserCreate failed");
|
|
- lua_getref(L, xpu->tableref); /* child uses the same table of its father */
|
|
+ lua_rawgeti(L, LUA_REGISTRYINDEX, xpu->tableref); /*lua_getref(L, xpu->tableref); */ /* child uses the same table of its father */
|
|
child->tableref = luaL_ref(L, LUA_REGISTRYINDEX);
|
|
lua_pushstring(L, base);
|
|
lua_pushstring(L, systemId);
|
|
@@ -449,7 +451,7 @@
|
|
xpu->state = XPSok;
|
|
xpu->b = &b;
|
|
lua_settop(L, 2);
|
|
- lua_getref(L, xpu->tableref); /* to be used by handlers */
|
|
+ lua_rawgeti(L, LUA_REGISTRYINDEX, xpu->tableref); /*lua_getref(L, xpu->tableref);*/ /* to be used by handlers */
|
|
status = XML_Parse(xpu->parser, s, (int)len, s == NULL);
|
|
if (xpu->state == XPSstring) dischargestring(xpu);
|
|
if (xpu->state == XPSerror) { /* callback error? */
|
|
@@ -517,7 +519,12 @@
|
|
return 1;
|
|
}
|
|
|
|
-static const struct luaL_reg lxp_meths[] = {
|
|
+#if !defined LUA_VERSION_NUM
|
|
+/* Lua 5.0 */
|
|
+#define luaL_Reg luaL_reg
|
|
+#endif
|
|
+
|
|
+static const struct luaL_Reg lxp_meths[] = {
|
|
{"parse", lxp_parse},
|
|
{"close", lxp_close},
|
|
{"__gc", parser_gc},
|
|
@@ -530,7 +537,7 @@
|
|
{NULL, NULL}
|
|
};
|
|
|
|
-static const struct luaL_reg lxp_funcs[] = {
|
|
+static const struct luaL_Reg lxp_funcs[] = {
|
|
{"new", lxp_make_parser},
|
|
{NULL, NULL}
|
|
};
|
|
@@ -541,25 +548,48 @@
|
|
*/
|
|
static void set_info (lua_State *L) {
|
|
lua_pushliteral (L, "_COPYRIGHT");
|
|
- lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
|
|
+ lua_pushliteral (L, "Copyright (C) 2003-2012 Kepler Project");
|
|
lua_settable (L, -3);
|
|
lua_pushliteral (L, "_DESCRIPTION");
|
|
lua_pushliteral (L, "LuaExpat is a SAX XML parser based on the Expat library");
|
|
lua_settable (L, -3);
|
|
lua_pushliteral (L, "_VERSION");
|
|
- lua_pushliteral (L, "LuaExpat 1.2.0");
|
|
+ lua_pushliteral (L, "LuaExpat 1.3.0");
|
|
lua_settable (L, -3);
|
|
}
|
|
|
|
|
|
+#if !defined LUA_VERSION_NUM || LUA_VERSION_NUM==501
|
|
+/*
|
|
+** Adapted from Lua 5.2.0
|
|
+*/
|
|
+static void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
|
|
+ luaL_checkstack(L, nup, "too many upvalues");
|
|
+ for (; l->name != NULL; l++) { /* fill the table with given functions */
|
|
+ int i;
|
|
+ for (i = 0; i < nup; i++) /* copy upvalues to the top */
|
|
+ lua_pushvalue(L, -nup);
|
|
+ lua_pushstring(L, l->name);
|
|
+ lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */
|
|
+ lua_settable(L, -(nup + 3));
|
|
+ }
|
|
+ lua_pop(L, nup); /* remove upvalues */
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
int luaopen_lxp (lua_State *L) {
|
|
- luaL_newmetatable(L, ParserType);
|
|
- lua_pushliteral(L, "__index");
|
|
- lua_pushvalue(L, -2);
|
|
- lua_rawset(L, -3);
|
|
- luaL_openlib (L, NULL, lxp_meths, 0);
|
|
- luaL_openlib (L, "lxp", lxp_funcs, 0);
|
|
- set_info (L);
|
|
+ luaL_newmetatable(L, ParserType);
|
|
|
|
- return 1;
|
|
+ lua_pushliteral(L, "__index");
|
|
+ lua_pushvalue(L, -2);
|
|
+ lua_rawset(L, -3);
|
|
+
|
|
+ luaL_setfuncs (L, lxp_meths, 0);
|
|
+ lua_pop (L, 1); /* remove metatable */
|
|
+
|
|
+ lua_newtable (L);
|
|
+ luaL_setfuncs (L, lxp_funcs, 0);
|
|
+ set_info (L);
|
|
+ return 1;
|
|
}
|
|
|