X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=webdvd.cpp;h=26e426062bd6aaa1bca1924cf443dc5f7a88a4ad;hb=72534f81da76c6c731c5d688d8485e6d9c9e2c9a;hp=d0f2e05f3e8dd2f9718f4f47e9636f119828ee3d;hpb=51e4ad8512a2b11da8737f345676b03d94e0fa2a;p=videolink.git
diff --git a/webdvd.cpp b/webdvd.cpp
index d0f2e05..26e4260 100644
--- a/webdvd.cpp
+++ b/webdvd.cpp
@@ -142,6 +142,36 @@ namespace
return result;
}
+
+ 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 = """; break;
+ case '&': entity = "&"; break;
+ case '\'': entity = "'"; break;
+ case '<': entity = "<"; break;
+ case '>': entity = ">"; break;
+ }
+ assert(entity);
+ result.append(entity);
+
+ begin = end + 1;
+ }
+ }
+
+
struct dvd_contents
{
enum pgc_type { menu_pgc, title_pgc };
@@ -171,7 +201,7 @@ namespace
std::vector