249 lines
6.5 KiB
ObjectPascal
249 lines
6.5 KiB
ObjectPascal
unit LuaStrings;
|
|
|
|
{$mode delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,lua, lualib, lauxlib;
|
|
|
|
procedure initializeLuaStrings;
|
|
procedure strings_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
|
|
|
|
implementation
|
|
|
|
uses luahandler, luaobject, luaclass, pluginexports;
|
|
|
|
function strings_add(L: Plua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
strings.Add(lua_tostring(L, -1));
|
|
end;
|
|
|
|
function strings_clear(L: Plua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
strings.Clear;
|
|
end;
|
|
|
|
function strings_remove(L: Plua_State): integer; cdecl; //compat with ce 6
|
|
var
|
|
strings: TStrings;
|
|
s: string;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
s:=lua_tostring(L, -1);
|
|
strings.Delete(strings.IndexOf(s));
|
|
end;
|
|
end;
|
|
|
|
function strings_getString(L: PLua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
index: integer;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
index:=lua_toInteger(L,-1);
|
|
lua_pushstring(L, strings[index]);
|
|
result:=1;
|
|
end;
|
|
end;
|
|
|
|
function strings_setString(L: PLua_State): integer; cdecl;
|
|
var
|
|
parameters: integer;
|
|
strings: TStrings;
|
|
index: integer;
|
|
s: string;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=2 then
|
|
begin
|
|
index:=lua_toInteger(L,-2);
|
|
s:=lua_tostring(l,-1);
|
|
|
|
strings[index]:=s;
|
|
end;
|
|
end;
|
|
|
|
function strings_delete(L: Plua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
index: integer;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
index:=lua_toInteger(L,-1);
|
|
strings.Delete(index);
|
|
end;
|
|
end;
|
|
|
|
|
|
function strings_getText(L: PLua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
strings:=luaclass_getClassObject(L);
|
|
lua_pushstring(L, strings.Text);
|
|
result:=1;
|
|
end;
|
|
|
|
function strings_setText(L: PLua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
text: string;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
text:=Lua_ToString(L, -1);
|
|
strings.Text:=text;
|
|
end;
|
|
end;
|
|
|
|
function strings_indexOf(L: PLua_State): integer; cdecl;
|
|
var
|
|
parameters: integer;
|
|
strings: TStrings;
|
|
s: string;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
s:=Lua_ToString(L,-1);
|
|
lua_pushinteger(L, strings.IndexOf(s));
|
|
result:=1;
|
|
end;
|
|
end;
|
|
|
|
function strings_insert(L: PLua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
index: integer;
|
|
s: string;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
|
|
if lua_gettop(L)>=2 then
|
|
begin
|
|
index:=lua_tointeger(L,-2);
|
|
s:=Lua_ToString(L,-1);
|
|
|
|
strings.Insert(index,s);
|
|
end;
|
|
end;
|
|
|
|
|
|
function strings_getCount(L: PLua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
strings:=luaclass_getClassObject(L);
|
|
lua_pushinteger(L, strings.Count);
|
|
result:=1;
|
|
end;
|
|
|
|
function strings_loadFromFile(L: Plua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
try
|
|
strings.LoadFromFile(lua_tostring(L, -1));
|
|
lua_pushboolean(L, true);
|
|
except
|
|
lua_pushboolean(L, false);
|
|
end;
|
|
result:=1;
|
|
end;
|
|
end;
|
|
|
|
function strings_saveToFile(L: Plua_State): integer; cdecl;
|
|
var
|
|
strings: TStrings;
|
|
begin
|
|
result:=0;
|
|
strings:=luaclass_getClassObject(L);
|
|
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
try
|
|
strings.SaveToFile(lua_tostring(L, -1));
|
|
lua_pushboolean(L, true);
|
|
except
|
|
lua_pushboolean(L, false);
|
|
end;
|
|
result:=1;
|
|
end;
|
|
end;
|
|
|
|
procedure strings_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
|
|
begin
|
|
object_addMetaData(L, metatable, userdata);
|
|
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'add', strings_add);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'clear', strings_clear);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'delete', strings_delete);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getText', strings_getText);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setText', strings_getText);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'indexOf', strings_indexOf);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'insert', strings_insert);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getCount', strings_getCount);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'remove', strings_remove);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getString', strings_getString);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setString', strings_setString);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'loadFromFile', strings_loadFromFile);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'saveToFile', strings_saveToFile);
|
|
|
|
luaclass_addPropertyToTable(L, metatable, userdata, 'Count', strings_getCount, nil);
|
|
luaclass_addPropertyToTable(L, metatable, userdata, 'Text', strings_getText, strings_setText);
|
|
luaclass_addArrayPropertyToTable(L, metatable, userdata, 'String', strings_getString, strings_setString);
|
|
luaclass_setDefaultArrayProperty(L, metatable, userdata, strings_getString, strings_setString); //so strings[12] will call strings.getString(12)
|
|
end;
|
|
|
|
procedure initializeLuaStrings;
|
|
begin
|
|
lua_register(LuaVM, 'strings_add', strings_add);
|
|
lua_register(LuaVM, 'strings_clear', strings_clear);
|
|
lua_register(LuaVM, 'strings_delete', strings_delete);
|
|
lua_register(LuaVM, 'strings_getText', strings_getText);
|
|
lua_register(LuaVM, 'strings_setText', strings_getText);
|
|
lua_register(LuaVM, 'strings_indexOf', strings_indexOf);
|
|
lua_register(LuaVM, 'strings_insert', strings_insert);
|
|
lua_register(LuaVM, 'strings_getCount', strings_getCount);
|
|
lua_register(LuaVM, 'strings_remove', strings_remove);
|
|
lua_register(LuaVM, 'strings_getString', strings_getString);
|
|
lua_register(LuaVM, 'strings_setString', strings_setString);
|
|
lua_register(LuaVM, 'strings_loadFromFile', strings_loadFromFile);
|
|
lua_register(LuaVM, 'strings_saveToFile', strings_saveToFile);
|
|
end;
|
|
|
|
initialization
|
|
luaclass_register(TStrings, strings_addMetaData);
|
|
|
|
end.
|
|
|