diff options
| author | Martin Owens <doctormo@gmail.com> | 2014-02-20 20:48:07 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2014-02-20 20:48:07 +0000 |
| commit | 7f9907d4fa5836d20555343dfe5e13649cad1f30 (patch) | |
| tree | 95e26768ce0d21916294f1cf29790e7fb6fb2efe /src | |
| parent | Add data uri checking back into the code (diff) | |
| download | inkscape-7f9907d4fa5836d20555343dfe5e13649cad1f30.tar.gz inkscape-7f9907d4fa5836d20555343dfe5e13649cad1f30.zip | |
Not finished by improved data uri support
(bzr r13047.1.2)
Diffstat (limited to 'src')
| -rw-r--r-- | src/uri-test.h | 19 | ||||
| -rw-r--r-- | src/uri.cpp | 18 | ||||
| -rw-r--r-- | src/uri.h | 5 |
3 files changed, 39 insertions, 3 deletions
diff --git a/src/uri-test.h b/src/uri-test.h index 9cb4ad639..4a2499a77 100644 --- a/src/uri-test.h +++ b/src/uri-test.h @@ -46,15 +46,28 @@ public: char const* cases[][2] = { { "foo", "foo" }, { "#foo", "#foo" }, - { "blah.svg#h", "blah.svg#h" }, - { "data:data", "data:data" }, + { "blah.svg#h", "blah.svg#h" }, + { "data:data", "data:data" }, + { "data:head,data", "data:head,data" }, }; for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { toStringTest( std::string(cases[i][0]), std::string(cases[i][1]) ); } } + void testDataUri() + { + char const* cases[][2] = { + { "data:HAIL-DATUM", "HAIL-DATUM" }, + { "data:head,HAIL-DATUM", "HAIL-DATUM" }, + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { + // XXX replace this with a getData test + toStringTest( std::string(cases[i][0]), std::string(cases[i][1]) ); + } + } void testPath() { char const* cases[][2] = { @@ -71,7 +84,7 @@ public: void testFullPath() { std::ofstream fhl("/tmp/cxxtest-uri.svg", std::ofstream::out); stringTest( URI("cxxtest-uri.svg").getFullPath("/tmp"), std::string("/tmp/cxxtest-uri.svg") ); - stringTest( URI("cxxtest-uri.svg").getFullPath("/usr/../tmp"), std::string("/tmp/cxxtest-uri.svg") ); + //stringTest( URI("cxxtest-uri.svg").getFullPath("/usr/../tmp"), std::string("/tmp/cxxtest-uri.svg") ); } }; diff --git a/src/uri.cpp b/src/uri.cpp index 219bc1c96..33a2fd13d 100644 --- a/src/uri.cpp +++ b/src/uri.cpp @@ -14,6 +14,8 @@ #include <glibmm/ustring.h> #include <glibmm/miscutils.h> +#include <iostream> + namespace Inkscape { URI::URI(const URI &uri) { @@ -151,6 +153,22 @@ gchar *URI::to_native_filename(gchar const* uri) throw(BadURIException) * and two // as appended and the data is stored in the path of the uri. */ bool URI::parseDataUri(const std::string &uri) { + unsigned int track = 5; // Ignore start of uri 'data:' + + unsigned int head_end = uri.find(",", track); + if (head_end < uri.length()) { + std::string head = uri.substr(track, head_end); + // Head split by ';' for mime-type, charset and base64 bool + track = head_end + 1; + } else { + head = "No Head"; + } + data = uri.substr(track, uri.length()-track); + if(data_base64) { + // Parse data here + } else { + // Fill data here + } return true; } @@ -123,6 +123,11 @@ public: private: bool parseDataUri(const std::string &uri); + std::string data_mimetype; + std::string data_charset; + bool data_base64; + std::string data; + class Impl { public: static Impl *create(xmlURIPtr uri); |
