diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2007-09-06 06:46:42 +0000 |
|---|---|---|
| committer | joncruz <joncruz@users.sourceforge.net> | 2007-09-06 06:46:42 +0000 |
| commit | af6f36d317c9b63eaeea11a995fa82f26a6ce831 (patch) | |
| tree | 8f1492009f3f4ddf605ce03f5bc05a14fffa3219 /src/uri-references.cpp | |
| parent | make it even darker :) (diff) | |
| download | inkscape-af6f36d317c9b63eaeea11a995fa82f26a6ce831.tar.gz inkscape-af6f36d317c9b63eaeea11a995fa82f26a6ce831.zip | |
Preserve paint styles with multiple components
(bzr r3696)
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; } - |
