X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=webdvd.cpp;h=31ad122776a154586a14ea9baf4e7642331dcd5a;hb=86602dfc3c0f036cc061277b70607e2631b50229;hp=d0f2e05f3e8dd2f9718f4f47e9636f119828ee3d;hpb=51e4ad8512a2b11da8737f345676b03d94e0fa2a;p=videolink.git
diff --git a/webdvd.cpp b/webdvd.cpp
index d0f2e05..31ad122 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