aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/StringHelpers.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/StringHelpers.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/StringHelpers.cpp')
-rw-r--r--Minecraft.World/StringHelpers.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/Minecraft.World/StringHelpers.cpp b/Minecraft.World/StringHelpers.cpp
new file mode 100644
index 00000000..f305c185
--- /dev/null
+++ b/Minecraft.World/StringHelpers.cpp
@@ -0,0 +1,133 @@
+#include "stdafx.h"
+
+wstring toLower(const wstring& a)
+{
+ wstring out = wstring(a);
+ std::transform(out.begin(), out.end(), out.begin(), ::tolower);
+ return out;
+}
+
+wstring trimString(const wstring& a)
+{
+ wstring b;
+ int start = (int)a.find_first_not_of(L" \t\n\r");
+ int end = (int)a.find_last_not_of(L" \t\n\r");
+ if( start == wstring::npos ) start = 0;
+ if( end == wstring::npos ) end = (int)a.size()-1;
+ b = a.substr(start,(end-start)+1);
+ return b;
+}
+
+wstring replaceAll(const wstring& in, const wstring& replace, const wstring& with)
+{
+ wstring out = in;
+ size_t pos = 0;
+ while( ( pos = out.find(replace, pos) ) != wstring::npos )
+ {
+ out.replace( pos, replace.length(), with );
+ pos++;
+ }
+ return out;
+}
+
+bool equalsIgnoreCase(const wstring& a, const wstring& b)
+{
+ bool out;
+ wstring c = toLower(a);
+ wstring d = toLower(b);
+ out = c.compare(d) == 0;
+ return out;
+}
+
+wstring convStringToWstring(const string& converting)
+{
+ wstring converted(converting.length(), L' ');
+ copy(converting.begin(), converting.end(), converted.begin());
+ return converted;
+}
+
+// Convert for filename wstrings to a straight character pointer for Xbox APIs. The returned string is only valid until
+// this function is called again, and it isn't thread-safe etc. as I'm just storing the returned name in a local static
+// to save having to clear it up everywhere this is used.
+const char *wstringtofilename(const wstring& name)
+{
+ static char buf[256];
+ assert(name.length()<256);
+ for(unsigned int i = 0; i < name.length(); i++ )
+ {
+ wchar_t c = name[i];
+#if defined __PS3__ || defined __ORBIS__
+ if(c=='\\') c='/';
+#else
+ if(c=='/') c='\\';
+#endif
+ assert(c<128); // Will we have to do any conversion of non-ASCII characters in filenames?
+ buf[i] = (char)c;
+ }
+ buf[name.length()] = 0;
+ return buf;
+}
+
+wstring filenametowstring(const char *name)
+{
+ return convStringToWstring(name);
+}
+
+std::vector<std::wstring> &stringSplit(const std::wstring &s, wchar_t delim, std::vector<std::wstring> &elems)
+{
+ std::wstringstream ss(s);
+ std::wstring item;
+ while(std::getline(ss, item, delim))
+ {
+ elems.push_back(item);
+ }
+ return elems;
+}
+
+
+std::vector<std::wstring> stringSplit(const std::wstring &s, wchar_t delim)
+{
+ std::vector<std::wstring> elems;
+ return stringSplit(s, delim, elems);
+}
+
+bool BothAreSpaces(wchar_t lhs, wchar_t rhs) { return (lhs == rhs) && (lhs == L' '); }
+
+void stripWhitespaceForHtml(wstring &string, bool bRemoveNewline)
+{
+ // Strip newline chars
+ if(bRemoveNewline)
+ {
+ string.erase(std::remove(string.begin(), string.end(), '\n'), string.end());
+ string.erase(std::remove(string.begin(), string.end(), '\r'), string.end());
+ }
+
+ string.erase(std::remove(string.begin(), string.end(), '\t'), string.end());
+
+ // Strip duplicate spaces
+ string.erase(std::unique(string.begin(), string.end(), BothAreSpaces), string.end());
+
+ string = trimString(string);
+}
+
+wstring escapeXML(const wstring &in)
+{
+ wstring out = in;
+ out = replaceAll(out, L"&", L"&amp;");
+ //out = replaceAll(out, L"\"", L"&quot;");
+ //out = replaceAll(out, L"'", L"&apos;");
+ out = replaceAll(out, L"<", L"&lt;");
+ out = replaceAll(out, L">", L"&gt;");
+ return out;
+}
+
+wstring parseXMLSpecials(const wstring &in)
+{
+ wstring out = in;
+ out = replaceAll(out, L"&amp;", L"&");
+ //out = replaceAll(out, L"\"", L"&quot;");
+ //out = replaceAll(out, L"'", L"&apos;");
+ out = replaceAll(out, L"&lt;", L"<");
+ out = replaceAll(out, L"&gt;", L">");
+ return out;
+} \ No newline at end of file