diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/LuaRegex.cc | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/lib/LuaRegex.cc b/lib/LuaRegex.cc new file mode 100644 index 0000000..a3cf265 --- /dev/null +++ b/lib/LuaRegex.cc @@ -0,0 +1,123 @@ +/* + * Baltisot + * Copyright (C) 1999-2005 Nicolas "Pixel" Noble + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: LuaRegex.cc,v 1.1 2005-03-31 16:23:05 pixel Exp $ */ + +#include "LuaRegex.h" + +LuaRegex::LuaRegex(Regex * _r) : r(_r) { } + +enum Regex_methods_t { + REGEX_MATCH = 0, +}; + +enum Regex_functions_t { + REGEX_NEWREGEX = 0, +}; + +struct lua_functypes_t Regex_methods[] = { + { REGEX_MATCH, "Match", 1, 1, {LUA_STRING} }, + { -1, 0, 0, 0, 0 } +}; + +struct lua_functypes_t Regex_functions[] = { + { REGEX_NEWREGEX, "Regex" , 1, 3, {LUA_STRING, LUA_NUMBER, LUA_NUMBER} }, + { -1, 0, 0, 0, 0 } +}; + +class sLua_Regex : public Base { + public: + DECLARE_METHOD(Regex, REGEX_MATCH); + + DECLARE_FUNCTION(Regex, REGEX_NEWREGEX); + private: + static int Regex_proceed(Lua * L, int n, Regex * obj, int caller); + static int Regex_proceed_statics(Lua * L, int n, int caller); +}; + +void LuaRegex::pushmembers(Lua * L) { + pushme(L, r); + + PUSH_METHOD(Regex, REGEX_MATCH); +} + +void LuaRegex::pushstatics(Lua * L) throw (GeneralException) { + CHECK_METHODS(Regex); + CHECK_FUNCTIONS(Regex); + + PUSH_FUNCTION(Regex, REGEX_NEWREGEX); + + L->push("REG_EXTENDED"); + L->push((lua_Number) REG_EXTENDED); + L->settable(LUA_GLOBALSINDEX); + + L->push("REG_ICASE"); + L->push((lua_Number) REG_ICASE); + L->settable(LUA_GLOBALSINDEX); + + L->push("REG_NOSUB"); + L->push((lua_Number) REG_NOSUB); + L->settable(LUA_GLOBALSINDEX); + + L->push("REG_NEWLINE"); + L->push((lua_Number) REG_NEWLINE); + L->settable(LUA_GLOBALSINDEX); + + L->push("REG_NOTBOL"); + L->push((lua_Number) REG_NOTBOL); + L->settable(LUA_GLOBALSINDEX); + + L->push("REG_NOTEOL"); + L->push((lua_Number) REG_NOTEOL); + L->settable(LUA_GLOBALSINDEX); +} + +int sLua_Regex::Regex_proceed(Lua * L, int n, Regex * r, int caller) { + String s; + + switch (caller) { + case REGEX_MATCH: + s = L->tostring(2); + L->push(r->Match(s)); + break; + } + + return 1; +} + +int sLua_Regex::Regex_proceed_statics(Lua * L, int n, int caller) { + String s; + int cflags = REG_EXTENDED, eflags = 0; + + switch (caller) { + case REGEX_NEWREGEX: + s = L->tostring(1); + if (n >= 2) + cflags = L->tonumber(2); + if (n >= 3) + eflags = L->tonumber(3); + { + LuaRegex c(new Regex(s, cflags, eflags)); + c.pushdestruct(L); + } + break; + } + + return 1; +} |