]> git.decadent.org.uk Git - videolink.git/blobdiff - xml_utils.cpp
Moved xml_escape into a separate file.
[videolink.git] / xml_utils.cpp
diff --git a/xml_utils.cpp b/xml_utils.cpp
new file mode 100644 (file)
index 0000000..981feba
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2005-6 Ben Hutchings <ben@decadentplace.org.uk>.
+// See the file "COPYING" for licence details.
+
+#include <cassert>
+#include <cstddef>
+
+#include "xml_utils.hpp"
+
+std::string xml_escape(const std::string & str)
+{
+    std::string result;
+    std::size_t begin = 0;
+
+    for (;;)
+    {
+       std::size_t end = str.find_first_of("\"&'<>", begin);
+       result.append(str, begin, end - begin);
+       if (end == std::string::npos)
+           return result;
+
+       const char * entity = NULL;
+       switch (str[end])
+       {
+       case '"':  entity = "&quot;"; break;
+       case '&':  entity = "&amp;";  break;
+       case '\'': entity = "&apos;"; break;
+       case '<':  entity = "&lt;";   break;
+       case '>':  entity = "&gt;";   break;
+       }
+       assert(entity);
+       result.append(entity);
+
+       begin = end + 1;
+    }
+}