return full:find(part, 1, true) == #full - #part + 1\r
end\r
\r
+local description_cache = nil\r
+\r
-- normalizes node "description" `nodename`, returning a string (or nil)\r
worldedit.normalize_nodename = function(nodename)\r
nodename = nodename:gsub("^%s*(.-)%s*$", "%1") -- strip spaces\r
return fullname\r
end\r
nodename = nodename:lower()\r
- for key, value in pairs(minetest.registered_nodes) do\r
- if string_endswith(key, ":" .. nodename) then -- matches name (w/o mod part)\r
+\r
+ for key, _ in pairs(minetest.registered_nodes) do\r
+ if string_endswith(key:lower(), ":" .. nodename) then -- matches name (w/o mod part)\r
return key\r
end\r
end\r
- for key, value in pairs(minetest.registered_nodes) do\r
- local desc = strip_escapes(value.description):gsub("\n.*", "", 1):lower()\r
+\r
+ if description_cache == nil then\r
+ -- cache stripped descriptions\r
+ description_cache = {}\r
+ for key, value in pairs(minetest.registered_nodes) do\r
+ local desc = strip_escapes(value.description):gsub("\n.*", "", 1):lower()\r
+ if desc ~= "" then\r
+ description_cache[key] = desc\r
+ end\r
+ end\r
+ end\r
+\r
+ for key, desc in pairs(description_cache) do\r
if desc == nodename then -- matches description\r
return key\r
end\r
+ end\r
+ for key, desc in pairs(description_cache) do\r
if desc == nodename .. " block" then\r
-- fuzzy description match (e.g. "Steel" == "Steel Block")\r
return key\r
end\r
\r
local match = nil\r
- for key, value in pairs(minetest.registered_nodes) do\r
- if value.description:lower():find(nodename, 1, true) ~= nil then\r
+ for key, value in pairs(description_cache) do\r
+ if value:find(nodename, 1, true) ~= nil then\r
if match ~= nil then\r
return nil\r
end\r