local text = ""
if spec.name ~= nil then
- text = text .. fs_escape_string(spec.name:trim())
+ text = text .. engine.formspec_escape(spec.name:trim())
-- if spec.description ~= nil and
--- fs_escape_string(spec.description):trim() ~= "" then
--- text = text .. " (" .. fs_escape_string(spec.description) .. ")"
+-- engine.formspec_escape(spec.description):trim() ~= "" then
+-- text = text .. " (" .. engine.formspec_escape(spec.description) .. ")"
-- end
else
if spec.address ~= nil then
string.format("%03d",spec.clients_max) .. " "
end
- return playercount .. fs_escape_string(details) .. text
+ return playercount .. engine.formspec_escape(details) .. text
end
--------------------------------------------------------------------------------
if menu.fav_selected ~= nil and
menu.favorites[menu.fav_selected].description ~= nil then
retval = retval ..
- fs_escape_string(menu.favorites[menu.fav_selected].description,true)
+ engine.formspec_escape(menu.favorites[menu.fav_selected].description,true)
end
retval = retval ..
menu.render_TP_list(TPlist) ..
";" .. index .. "]" ..
"image[0.65,0.25;4.0,3.7;"..(menu.TPscreen or no_screenshot).."]"..
- "textarea[1.0,3.25;3.7,1.5;;"..(menu.TPinfo or "")..";]"
+ "textarea[1.0,3.25;3.7,1.5;;"..engine.formspec_escape(menu.TPinfo or "")..";]"
end
--------------------------------------------------------------------------------
return minetest.string_to_pos(value)
end
-function minetest.formspec_escape(str)
- str = string.gsub(str, "\\", "\\\\")
- str = string.gsub(str, "%[", "\\[")
- str = string.gsub(str, "%]", "\\]")
- return str
-end
-
return temppath
end
+local tbl = engine or minetest
+function tbl.formspec_escape(text)
+ if text ~= nil then
+ text = string.gsub(text,"\\","\\\\")
+ text = string.gsub(text,"%]","\\]")
+ text = string.gsub(text,"%[","\\[")
+ text = string.gsub(text,";","\\;")
+ text = string.gsub(text,",","\\,")
+ end
+ return text
+end
+
--------------------------------------------------------------------------------
-- mainmenu only functions
--------------------------------------------------------------------------------
return nil
end
-
- --------------------------------------------------------------------------------
- function fs_escape_string(text)
- if text ~= nil then
- while (text:find("\r\n") ~= nil) do
- local newtext = text:sub(1,text:find("\r\n")-1)
- newtext = newtext .. " " .. text:sub(text:find("\r\n")+3)
-
- text = newtext
- end
-
- while (text:find("\n") ~= nil) do
- local newtext = text:sub(1,text:find("\n")-1)
- newtext = newtext .. " " .. text:sub(text:find("\n")+1)
-
- text = newtext
- end
-
- while (text:find("\r") ~= nil) do
- local newtext = text:sub(1,text:find("\r")-1)
- newtext = newtext .. " " .. text:sub(text:find("\r")+1)
-
- text = newtext
- end
-
- text = string.gsub(text,"\\","\\\\")
- text = string.gsub(text,"%]","\\]")
- text = string.gsub(text,"%[","\\[")
- text = string.gsub(text,";","\\;")
- text = string.gsub(text,",","\\,")
- end
- return text
- end
end
-
--------------------------------------------------------------------------------
-- core only fct
--------------------------------------------------------------------------------
return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
end
end
+
--title + author
retval = retval .."label[2.75," .. screenshot_ypos .. ";" ..
- fs_escape_string(details.title) .. " (" .. details.author .. ")]"
+ engine.formspec_escape(details.title) .. " (" .. details.author .. ")]"
--description
local descriptiony = screenshot_ypos + 0.5
retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" ..
- fs_escape_string(details.description) .. ";]"
+ engine.formspec_escape(details.description) .. ";]"
--rating
local ratingy = screenshot_ypos + 0.6
retval = retval .."label[10.1," .. ratingy .. ";Rating: " .. details.rating .."]"
return -1;
}
-std::vector<std::string> split(const std::string &s, char delim, bool escape=false) {
+std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> tokens;
- if (!escape) {
- int startpos = 0;
- size_t nextpos = s.find(delim);
-
- while(nextpos != std::string::npos) {
- std::string toadd = s.substr(startpos,nextpos-startpos);
- tokens.push_back(toadd);
- startpos = nextpos+1;
- nextpos = s.find(delim,nextpos+1);
+ std::string current = "";
+ bool last_was_escape = false;
+ for(unsigned int i=0; i < s.size(); i++) {
+ if (last_was_escape) {
+ current += '\\';
+ current += s.c_str()[i];
+ last_was_escape = false;
}
-
- //push last element
- tokens.push_back(s.substr(startpos));
- }
- else {
- std::string current = "";
- current += s.c_str()[0];
- bool last_was_escape = false;
- for(unsigned int i=1; i < s.size(); i++) {
- if (last_was_escape) {
- current += '\\';
- current += s.c_str()[i];
+ else {
+ if (s.c_str()[i] == delim) {
+ tokens.push_back(current);
+ current = "";
last_was_escape = false;
}
+ else if (s.c_str()[i] == '\\'){
+ last_was_escape = true;
+ }
else {
- if (s.c_str()[i] == delim) {
- tokens.push_back(current);
- current = "";
- last_was_escape = false;
- }
- else if (s.c_str()[i] == '\\'){
- last_was_escape = true;
- }
- else {
- current += s.c_str()[i];
- last_was_escape = false;
- }
+ current += s.c_str()[i];
+ last_was_escape = false;
}
}
- //push last element
- tokens.push_back(current);
}
+ //push last element
+ tokens.push_back(current);
return tokens;
}
std::vector<std::string> v_pos = split(parts[0],',');
std::vector<std::string> v_geom = split(parts[1],',');
std::string name = parts[2];
- std::vector<std::string> items = split(parts[3],',',true);
+ std::vector<std::string> items = split(parts[3],',');
std::string str_initial_selection = "";
std::string str_transparent = "false";
}
void GUIFormSpecMenu::parseField(parserData* data,std::string element,std::string type) {
- std::vector<std::string> parts = split(element,';',true);
+ std::vector<std::string> parts = split(element,';');
if (parts.size() == 3) {
parseSimpleField(data,parts);
if (element == "")
return;
- std::vector<std::string> parts = split(element,'[', true);
+ std::vector<std::string> parts = split(element,'[');
// ugly workaround to keep compatibility
if (parts.size() > 2) {
m_boxes.clear();
- std::vector<std::string> elements = split(m_formspec_string,']',true);
+ std::vector<std::string> elements = split(m_formspec_string,']');
for (unsigned int i=0;i< elements.size();i++) {
parseElement(&mydata,elements[i]);