summaryrefslogtreecommitdiff
path: root/src/strfnd.h
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2013-02-24 16:00:35 -0500
committerkwolekr <kwolekr@minetest.net>2013-03-05 23:25:02 -0500
commitba78194636a9a498f6979cc21cd39399f23d658a (patch)
tree7cad8f0234fe4f7ff45807364b4c275296982805 /src/strfnd.h
parentbdbdeab0053d9ebbaffea17effeba777b710d390 (diff)
downloadminetest-ba78194636a9a498f6979cc21cd39399f23d658a.tar.gz
minetest-ba78194636a9a498f6979cc21cd39399f23d658a.tar.bz2
minetest-ba78194636a9a498f6979cc21cd39399f23d658a.zip
Allow any character in formspec strings with escape char
Diffstat (limited to 'src/strfnd.h')
-rw-r--r--src/strfnd.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/strfnd.h b/src/strfnd.h
index d28aa73b2..4a72edf3c 100644
--- a/src/strfnd.h
+++ b/src/strfnd.h
@@ -65,6 +65,25 @@ public:
//std::cout<<"palautus=\""<<palautus<<"\""<<std::endl;
return palautus;
}
+
+ // Returns substr of tek up to the next occurence of plop that isn't escaped with '\'
+ std::string next_esc(std::string plop) {
+ size_t n, realp;
+
+ if (p >= tek.size())
+ return "";
+
+ realp = p;
+ do {
+ n = tek.find(plop, p);
+ if (n == std::string::npos || plop == "")
+ n = tek.length();
+ p = n + plop.length();
+ } while (n > 0 && tek[n - 1] == '\\');
+
+ return tek.substr(realp, n - realp);
+ }
+
void skip_over(std::string chars){
while(p < tek.size()){
bool is = false;
@@ -128,6 +147,24 @@ public:
//std::cout<<"palautus=\""<<palautus<<"\""<<std::endl;
return palautus;
}
+
+ std::wstring next_esc(std::wstring plop) {
+ size_t n, realp;
+
+ if (p >= tek.size())
+ return L"";
+
+ realp = p;
+ do {
+ n = tek.find(plop, p);
+ if (n == std::wstring::npos || plop == L"")
+ n = tek.length();
+ p = n + plop.length();
+ } while (n > 0 && tek[n - 1] == '\\');
+
+ return tek.substr(realp, n - realp);
+ }
+
bool atend(){
if(p>=tek.size()) return true;
return false;