X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Furi-references.cpp;h=8041fbf520f46fafbe098569f117aabd21a1c858;hb=f2c65c84b2e5016ef16907bf15d51ded9c25411e;hp=8e14c9336522197fb9a63fa2b1992f9655b0838c;hpb=3a8e479f331858946168c32bfc7622c9010b6680;p=inkscape.git diff --git a/src/uri-references.cpp b/src/uri-references.cpp index 8e14c9336..8041fbf52 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -12,15 +12,17 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include +#include + #include "document.h" #include "sp-object.h" #include "uri.h" #include "uri-references.h" +#include "extract-uri.h" #include -static gchar *uri_to_id(SPDocument *document, const gchar *uri); - namespace Inkscape { URIReference::URIReference(SPObject *owner) @@ -31,7 +33,7 @@ URIReference::URIReference(SPObject *owner) } URIReference::URIReference(SPDocument *owner_document) - : _owner_document(owner_document), _owner(NULL), _obj(NULL), _uri(NULL) + : _owner(NULL), _owner_document(owner_document), _obj(NULL), _uri(NULL) { g_assert(_owner_document != NULL); } @@ -133,48 +135,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; + SPObject* ref = 0; - 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; - } + 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 ); + } + } - len = e - uri - 5; - if (len < 1) return NULL; - - id = (gchar*)g_new(gchar, len + 1); - memcpy (id, uri + 5, len); - id[len] = '\0'; - - 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; } -