Make lua selection filter_mapchar create a new selection

This commit is contained in:
Pasi Kallinen
2020-02-22 17:51:08 +02:00
parent 50eaf95c27
commit fe3dae85d5
2 changed files with 32 additions and 7 deletions

View File

@@ -538,24 +538,32 @@ static int
l_selection_filter_mapchar(L) l_selection_filter_mapchar(L)
lua_State *L; lua_State *L;
{ {
int argc = lua_gettop(L);
struct selectionvar *sel = l_selection_check(L, 1); struct selectionvar *sel = l_selection_check(L, 1);
char *mapchr = dupstr(luaL_checkstring(L, 2)); char *mapchr = dupstr(luaL_checkstring(L, 2));
xchar typ = check_mapchr(mapchr); xchar typ = check_mapchr(mapchr);
int lit = (int) luaL_optinteger(L, 3, -2); /* TODO: special lit values */ int lit = (int) luaL_optinteger(L, 3, -2); /* TODO: special lit values */
struct selectionvar *tmp = selection_filter_mapchar(sel, typ, lit); struct selectionvar *tmp, *tmp2;
if (typ == INVALID_TYPE) if (typ == INVALID_TYPE)
nhl_error(L, "Erroneous map char"); nhl_error(L, "Erroneous map char");
if (sel->map) if (argc > 1)
free(sel->map); lua_pop(L, argc - 1);
sel->map = tmp->map;
if (tmp) tmp = l_selection_push(L);
free(tmp); tmp2 = selection_filter_mapchar(sel, typ, lit);
free(tmp->map);
tmp->map = tmp2->map;
tmp2->map = NULL;
selection_free(tmp2, TRUE);
lua_remove(L, 1);
if (mapchr) if (mapchr)
free(mapchr); free(mapchr);
lua_settop(L, 1);
return 1; return 1;
} }

View File

@@ -322,6 +322,22 @@ function test_sel_grow()
sel_pt_ne(seld, 6,4, 1, __func__); sel_pt_ne(seld, 6,4, 1, __func__);
end -- test_sel_grow end -- test_sel_grow
function test_sel_filter_mapchar()
local __func__ = "test_sel_filter_mapchar";
local sela = selection.negate();
local sela_clone = sela:clone();
des.terrain(sela, ".");
des.terrain(5,5, "L");
des.terrain(15,10, "L");
local selb = sela:filter_mapchar("L");
sel_are_equal(sela, sela_clone, __func__);
sel_has_n_points(selb, 2, __func__);
sel_pt_ne(selb, 5,5, 1, __func__);
sel_pt_ne(selb, 15,10, 1, __func__);
end -- test_sel_filter_mapchar
test_selection_params(); test_selection_params();
test_sel_negate(); test_sel_negate();
test_sel_logical_and(); test_sel_logical_and();
@@ -333,3 +349,4 @@ test_sel_rect();
test_sel_fillrect(); test_sel_fillrect();
test_sel_randline(); test_sel_randline();
test_sel_grow(); test_sel_grow();
test_sel_filter_mapchar();