1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/*
* SVG <script> implementation
*
* Authors:
* Felipe CorrĂȘa da Silva Sanches <juca@members.fsf.org>
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
*
* Copyright (C) 2008 authors
*
* Released under GNU GPL version 2 or later, read the file 'COPYING' for more information
*/
#include "sp-script.h"
#include "attributes.h"
#include <cstring>
#include "document.h"
#include "sp-factory.h"
namespace {
SPObject* createScript() {
return new SPScript();
}
bool scriptRegistered = SPFactory::instance().registerObject("svg:script", createScript);
}
SPScript::SPScript() : SPObject() {
this->xlinkhref = NULL;
}
SPScript::~SPScript() {
}
void SPScript::build(SPDocument* doc, Inkscape::XML::Node* repr) {
SPObject::build(doc, repr);
//Read values of key attributes from XML nodes into object.
this->readAttr( "xlink:href" );
doc->addResource("script", this);
}
/**
* Reads the Inkscape::XML::Node, and initializes SPScript variables. For this to get called,
* our name must be associated with a repr via "sp_object_type_register". Best done through
* sp-object-repr.cpp's repr_name_entries array.
*/
void SPScript::release() {
if (this->document) {
// Unregister ourselves
this->document->removeResource("script", this);
}
SPObject::release();
}
void SPScript::update(SPCtx* /*ctx*/, unsigned int /*flags*/) {
}
void SPScript::modified(unsigned int /*flags*/) {
}
void SPScript::set(unsigned int key, const gchar* value) {
switch (key) {
case SP_ATTR_XLINK_HREF:
if (this->xlinkhref) {
g_free(this->xlinkhref);
}
this->xlinkhref = g_strdup(value);
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
break;
default:
SPObject::set(key, value);
break;
}
}
Inkscape::XML::Node* SPScript::write(Inkscape::XML::Document* /*doc*/, Inkscape::XML::Node* repr, guint /*flags*/) {
return repr;
}
//static Inkscape::XML::Node *sp_script_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
//{
/*
TODO:
code copied from sp-defs
decide what to do here!
if (flags & SP_OBJECT_WRITE_BUILD) {
if (!repr) {
repr = xml_doc->createElement("svg:script");
}
GSList *l = NULL;
for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
}
}
while (l) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
Inkscape::GC::release((Inkscape::XML::Node *) l->data);
l = g_slist_remove(l, l->data);
}
} else {
for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
child->updateRepr(flags);
}
}
if (((SPObjectClass *) (parent_class))->write) {
(* ((SPObjectClass *) (parent_class))->write)(object, xml_doc, repr, flags);
}
*/
//
// return ((SPScript*)object)->cscript->onWrite(xml_doc, repr, flags);
//}
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
|