diff options
author | kwolekr <kwolekr@minetest.net> | 2013-02-24 16:00:35 -0500 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-03-05 23:25:02 -0500 |
commit | ba78194636a9a498f6979cc21cd39399f23d658a (patch) | |
tree | 7cad8f0234fe4f7ff45807364b4c275296982805 /src/strfnd.h | |
parent | bdbdeab0053d9ebbaffea17effeba777b710d390 (diff) | |
download | minetest-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.h | 37 |
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; |