various commands: Upgrade to use wea.split_shell

This commit is contained in:
Starbeamrainbowlabs 2021-07-31 16:03:04 +01:00
parent e16fa0f5c8
commit 45def53294
Signed by: sbrl
GPG key ID: 1BE5172E637709C2
11 changed files with 18 additions and 12 deletions

View file

@ -1,3 +1,4 @@
-- worldeditadditions = { modpath="/home/sbrl/.minetest/worlds/Mod-Sandbox/worldmods/WorldEditAdditions/worldeditadditions/" }
local table_map = dofile(worldeditadditions.modpath.."/utils/tables/table_map.lua") local table_map = dofile(worldeditadditions.modpath.."/utils/tables/table_map.lua")
local function is_whitespace(char) local function is_whitespace(char)
@ -21,6 +22,8 @@ local function split_shell(text)
if i < text_length then nextchar = text:sub(i+1, i+1) end if i < text_length then nextchar = text:sub(i+1, i+1) end
if i+1 < text_length then nextnextchar = text:sub(i+2, i+2) end if i+1 < text_length then nextnextchar = text:sub(i+2, i+2) end
print("mode", mode, "prevchar", "curchar", curchar, "nextchar", nextchar)
if mode == "NORMAL" then if mode == "NORMAL" then
if is_whitespace(curchar) and #acc > 0 then if is_whitespace(curchar) and #acc > 0 then
table.insert(result, table.concat(acc, "")) table.insert(result, table.concat(acc, ""))
@ -35,9 +38,10 @@ local function split_shell(text)
table.insert(acc, curchar) table.insert(acc, curchar)
end end
elseif mode == "INSIDE_QUOTES_DOUBLE" then elseif mode == "INSIDE_QUOTES_DOUBLE" then
if curchar == "\"" and prevchar ~= "\\" and is_whitespace(nextchar) then if curchar == "\"" and prevchar ~= "\\" and (is_whitespace(nextchar) or #nextchar == 0) then
-- It's the end of a quote! -- It's the end of a quote!
mode = "NORMAL" mode = "NORMAL"
elseif (curchar == "\\" and ( elseif (curchar == "\\" and (
nextchar ~= "\"" nextchar ~= "\""
or (nextchar == "\"" and not is_whitespace(nextnextchar)) or (nextchar == "\"" and not is_whitespace(nextnextchar))
@ -71,7 +75,7 @@ end
return split_shell return split_shell
-- function test(text) -- local function test(text)
-- print("Source", text) -- print("Source", text)
-- for i,value in ipairs(split_shell(text)) do -- for i,value in ipairs(split_shell(text)) do
-- print("i", i, "→", value) -- print("i", i, "→", value)
@ -80,6 +84,7 @@ return split_shell
-- end -- end
-- --
-- test("yay yay yay") -- test("yay yay yay")
-- test("dirt \"snow block\"")
-- test("yay \"yay yay\" yay") -- test("yay \"yay yay\" yay")
-- test("yay \"yay\\\" yay\" yay") -- test("yay \"yay\\\" yay\" yay")
-- test("yay \"yay 'inside quotes' yay\\\"\" yay") -- test("yay \"yay 'inside quotes' yay\\\"\" yay")

View file

@ -15,7 +15,7 @@ worldedit.register_command("bonemeal", {
params_text = "1" params_text = "1"
end end
local parts = worldeditadditions.split(params_text, "%s+", false) local parts = worldeditadditions.split_shell(params_text, "%s+", false)
local strength = 1 local strength = 1
local chance = 1 local chance = 1

View file

@ -11,7 +11,8 @@ worldedit.register_command("convolve", {
parse = function(params_text) parse = function(params_text)
if not params_text then params_text = "" end if not params_text then params_text = "" end
local parts = worldeditadditions.split(params_text, "%s+", false) -- local parts = worldeditadditions.split(params_text, "%s+", false)
local parts = worldeditadditions.split_shell(params_text)
local kernel_name = "gaussian" local kernel_name = "gaussian"
local width = 5 local width = 5

View file

@ -5,7 +5,7 @@
-- ███████ ███████ ███████ ██ ██ ███████ ██████ ██ ██████ -- ███████ ███████ ███████ ██ ██ ███████ ██████ ██ ██████
local wea = worldeditadditions local wea = worldeditadditions
local function parse_params_ellipsoid(params_text) local function parse_params_ellipsoid(params_text)
local parts = wea.split(params_text, "%s+", false) local parts = wea.split_shell(params_text)
if #parts < 4 then if #parts < 4 then
return false, "Error: Not enough arguments. Expected \"<rx> <ry> <rz> <replace_node> [h[ollow]]\"." return false, "Error: Not enough arguments. Expected \"<rx> <ry> <rz> <replace_node> [h[ollow]]\"."

View file

@ -18,7 +18,7 @@ worldedit.register_command("forest", {
end end
local success, sapling_list = worldeditadditions.parse.weighted_nodes( local success, sapling_list = worldeditadditions.parse.weighted_nodes(
worldeditadditions.split(params_text, "%s+", false), worldeditadditions.split_shell(params_text),
false, false,
function(name) function(name)
return worldedit.normalize_nodename( return worldedit.normalize_nodename(

View file

@ -14,7 +14,7 @@ worldedit.register_command("layers", {
end end
local success, node_list = worldeditadditions.parse.weighted_nodes( local success, node_list = worldeditadditions.parse.weighted_nodes(
worldeditadditions.split(params_text, "%s+", false), worldeditadditions.split_shell(params_text),
true true
) )
return success, node_list return success, node_list

View file

@ -5,7 +5,7 @@ local function parse_params_maze(params_text, is_3d)
return false, "No arguments specified" return false, "No arguments specified"
end end
local parts = worldeditadditions.split(params_text, "%s+", false) local parts = worldeditadditions.split_shell(params_text)
local replace_node = parts[1] local replace_node = parts[1]
local seed = os.time() local seed = os.time()

View file

@ -10,7 +10,7 @@ worldedit.register_command("overlay", {
require_pos = 2, require_pos = 2,
parse = function(params_text) parse = function(params_text)
local success, node_list = worldeditadditions.parse.weighted_nodes( local success, node_list = worldeditadditions.parse.weighted_nodes(
worldeditadditions.split(params_text, "%s+", false) worldeditadditions.split_shell(params_text)
) )
return success, node_list return success, node_list
end, end,

View file

@ -15,7 +15,7 @@ worldedit.register_command("replacemix", {
return false, "Error: No arguments specified" return false, "Error: No arguments specified"
end end
local parts = wea.split(params_text, "%s+", false) local parts = wea.split_shell(params_text)
local target_node = nil local target_node = nil
local target_node_chance = 1 local target_node_chance = 1

View file

@ -30,7 +30,7 @@ worldedit.register_command("scale", {
parse = function(params_text) parse = function(params_text)
if not params_text then params_text = "" end if not params_text then params_text = "" end
local parts = worldeditadditions.split(params_text, "%s+", false) local parts = worldeditadditions.split_shell(params_text)
local scale = vector.new(1, 1, 1) local scale = vector.new(1, 1, 1)
local anchor = vector.new(1, 1, 1) local anchor = vector.new(1, 1, 1)

View file

@ -4,7 +4,7 @@
-- ██ ██ ██ ██ ██ ██ ██ ██ -- ██ ██ ██ ██ ██ ██ ██ ██
-- ██ ██████ ██ ██ ██████ ███████ -- ██ ██████ ██ ██ ██████ ███████
local function parse_params_torus(params_text) local function parse_params_torus(params_text)
local parts = worldeditadditions.split(params_text, "%s+", false) local parts = worldeditadditions.split_shell(params_text)
if #parts < 1 then if #parts < 1 then
return false, "Error: No replace_node specified." return false, "Error: No replace_node specified."