diff options
Diffstat (limited to 'server/src/luaformatmapperutils.cc')
-rw-r--r-- | server/src/luaformatmapperutils.cc | 230 |
1 files changed, 0 insertions, 230 deletions
diff --git a/server/src/luaformatmapperutils.cc b/server/src/luaformatmapperutils.cc deleted file mode 100644 index b163477..0000000 --- a/server/src/luaformatmapperutils.cc +++ /dev/null @@ -1,230 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * luaformatmapperutils.cc - * - * Mon Nov 3 08:46:51 CET 2008 - * Copyright 2008 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of Pracro. - * - * Pracro 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. - * - * Pracro 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 Pracro; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "luaformatmapperutils.h" -#include "luaformatmapper.h" -#include "mltokenizer.h" - -#include <string> -#include <vector> - -std::vector< void * > pointers; - -#define GLOBAL_PREFIX "magic_global_" - -void *getGlobal(lua_State *L, const char *name) -{ - unsigned int top; - unsigned int index; - - std::string var = std::string(GLOBAL_PREFIX) + name; - - lua_getfield(L, LUA_GLOBALSINDEX, var.c_str()); - top = lua_gettop(L); - index = lua_tointeger(L, top); - - return pointers.at(index); -} - -void setGlobal(lua_State *L, const char *name, void *p) -{ - // Put the value of this in the globals - char value_of_this[256]; - - std::string val = std::string(GLOBAL_PREFIX) + name; - - pointers.push_back(p); - unsigned int index = pointers.size() - 1; - - sprintf(value_of_this, "%s = %u\n", val.c_str(), index); - int s = luaL_loadstring(L, value_of_this); - switch(s) { - case 0: //no errors; - break; - case LUA_ERRSYNTAX: //syntax error during pre-compilation; - case LUA_ERRMEM: //memory allocation error. - fprintf(stderr, "Error: %s\n", lua_tostring(L, lua_gettop(L))); - default: - fprintf(stderr, "Unknown return value of luaL_loadstring.\n"); - } - - // Run program (init) - s = lua_pcall(L, 0, LUA_MULTRET, 0); - // Check for errors - switch(s) { - case 0: // Success - break; - case LUA_ERRRUN:// a runtime error. - case LUA_ERRMEM:// memory allocation error. - // For such errors, Lua does not call the error handler function. - case LUA_ERRERR:// error while running the error handler function. - fprintf(stderr, "Error: %s\n", lua_tostring(L, lua_gettop(L))); - break; - default: - fprintf(stderr, "Error: Unknown return value of lua_pcall.\n"); - break; - } -} - -typedef struct { - std::string prefix; - std::string postfix; -} transform_params_t; - -std::map< std::string, transform_params_t > transforms; - -/** - * Args: mlvalue, bullet, usetext, name1, prefix1, postfix1, name2, prefix2, postfix2, ... - * Iterates list items, prepends bullet, and replaces all name/value pairs with - * corresponding prefix/value/postfix. - */ -int printfmlval(lua_State *L) -{ - int n = lua_gettop(L); // number of arguments - if(n < 3 || (n - 3) % 3 != 0) { - char errstr[512]; - sprintf(errstr, "Minimum number of args expected 3, got %d", n); - fprintf(stderr, errstr); - lua_pushstring(L, errstr); - lua_error(L); - return 0; - } - - std::string mlvalue = lua_tostring(L, lua_gettop(L) - (n - 1)); - std::string bullet = lua_tostring(L, lua_gettop(L) - (n - 2)); - bool usetext = lua_toboolean(L, lua_gettop(L) - (n - 3)); - - // printf("[%s], [%s], [%d]\n", mlvalue.c_str(), bullet.c_str(), usetext); fflush(stdout); - - // Read in the (prefix, name, postfix) 3-tuples - int m = 4; - while(m < lua_gettop(L)) { - - transform_params_t p; - p.prefix = lua_tostring(L, lua_gettop(L) - (n - m)); - std::string name = lua_tostring(L, lua_gettop(L) - (n - (m + 1))); - p.postfix = lua_tostring(L, lua_gettop(L) - (n - (m + 2))); - - // printf("[%s], [%s], [%s]\n", p.prefix.c_str(), name.c_str(), p.postfix.c_str()); fflush(stdout); - - transforms[name] = p; - - m += 3; - } - - LUAFormatMapper *lfm = (LUAFormatMapper*)getGlobal(L, "LUAFormatMapper"); - - mltokentype_t lasttype = MLTT_ENDOFITEM; - std::vector< mltoken_t > tokens = mltokenize(mlvalue); - std::vector< mltoken_t >::iterator i = tokens.begin(); - while(i != tokens.end()) { - if(lasttype == MLTT_ENDOFITEM) lfm->bufferoutput(bullet); - - switch(i->type) { - case MLTT_VALUE: - lfm->bufferoutput(transforms[i->name].prefix); - lfm->bufferoutput(i->value); - lfm->bufferoutput(transforms[i->name].postfix); - break; - - case MLTT_TEXT: - if(usetext) lfm->bufferoutput(i->value); - break; - - case MLTT_ENDOFITEM: - if(usetext) lfm->bufferoutput(i->value); - break; - - case MLTT_UNDEFINED: - // Undefined - break; - } - - lasttype = i->type; - i++; - } - - return 0; -} - - -int printval(lua_State *L) -{ - int n = lua_gettop(L); // number of arguments - if(n != 1) { - char errstr[512]; - sprintf(errstr, "Number of args expected 1, got %d", n); - fprintf(stderr, errstr); - lua_pushstring(L, errstr); - lua_error(L); - return 0; - } - - std::string value = lua_tostring(L, lua_gettop(L)); - - LUAFormatMapper *lfm = (LUAFormatMapper*)getGlobal(L, "LUAFormatMapper"); - - lfm->bufferoutput(value); - - return 0; -} - -/* -int pg_query(lua_State *L) -{ - int n = lua_gettop(L); // number of arguments - if(n != 2) { - char errstr[512]; - sprintf(errstr, "Number of args expected 2, got %d", n); - fprintf(stderr, errstr); - lua_pushstring(L, errstr); - lua_error(L); - return 0; - } - - std::string query = lua_tostring(L, lua_gettop(L)); - unsigned int pg = lua_tointeger(L, lua_gettop(L) - 1); - - printf("query [%s]\n", query.c_str()); - - // lua_createtable(L, 0, 1); - // lua_pushinteger(L, 41); - // lua_rawseti(L, -2, 1); - // lua_setfenv(L, -2); - - lua_pushinteger(L, 42); - lua_pushinteger(L, 41); - lua_rawset(L, -3); - - return 1; -} -*/ - -void preload_formatutils(lua_State *L) -{ - lua_register(L, "printval", printval); - lua_register(L, "printfmlval", printfmlval); -} |