diff options
Diffstat (limited to 'src/uri-references.cpp')
| -rw-r--r-- | src/uri-references.cpp | 52 |
1 files changed, 16 insertions, 36 deletions
diff --git a/src/uri-references.cpp b/src/uri-references.cpp index c9482839d..7fc1f4838 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -16,11 +16,10 @@ #include "sp-object.h" #include "uri.h" #include "uri-references.h" +#include "extract-uri.h" #include <sigc++/functors/mem_fun.h> -static gchar *uri_to_id(SPDocument *document, const gchar *uri); - namespace Inkscape { URIReference::URIReference(SPObject *owner) @@ -133,48 +132,29 @@ void URIReference::_release(SPObject *obj) { } /* namespace Inkscape */ -static gchar * -uri_to_id(SPDocument *document, const gchar *uri) +SPObject* sp_css_uri_reference_resolve( SPDocument *document, const gchar *uri ) { - const gchar *e; - gchar *id; - gint len; - - g_return_val_if_fail (document != NULL, NULL); - - if (!uri) return NULL; - /* fixme: xpointer, everything */ - if (strncmp (uri, "url(#", 5)) return NULL; - - e = uri + 5; - while (*e) { - if (*e == ')') break; - if (!isalnum (*e) && (*e != '_') && (*e != '-') && (*e != ':') && (*e != '.')) return NULL; - e += 1; - if (!*e) return NULL; - } - - len = e - uri - 5; - if (len < 1) return NULL; + SPObject* ref = 0; - id = (gchar*)g_new(gchar, len + 1); - memcpy (id, uri + 5, len); - id[len] = '\0'; + if ( document && uri && ( strncmp(uri, "url(", 4) == 0 )) { + gchar *trimmed = extract_uri( uri ); + if ( trimmed ) { + ref = sp_uri_reference_resolve( document, trimmed ); + g_free( trimmed ); + } + } - return id; + return ref; } SPObject * sp_uri_reference_resolve (SPDocument *document, const gchar *uri) { - gchar *id; + SPObject* ref = 0; - id = uri_to_id(document, uri); - if (!id) return NULL; + if ( uri && (*uri == '#') ) { + ref = document->getObjectById( uri + 1 ); + } - SPObject *ref; - ref = document->getObjectById(id); - g_free(id); - return ref; + return ref; } - |
