1 /**
2 * Inkscape Scripting container
3 *
4 * Authors:
5 * Bob Jamison <rjamison@titan.com>
6 *
7 * Copyright (C) 2004-2008 Authors
8 *
9 * Released under GNU GPL, read the file 'COPYING' for more information
10 */
13 #include "InkscapeScript.h"
15 #include <bind/javabind.h>
19 namespace Inkscape
20 {
21 namespace Extension
22 {
23 namespace Script
24 {
27 typedef Inkscape::Bind::Value Value;
30 /**
31 *
32 */
33 InkscapeScript::InkscapeScript()
34 {
35 }
40 /**
41 *
42 */
43 InkscapeScript::~InkscapeScript()
44 {
45 }
50 /**
51 * Interprets the script in the 'script' buffer,
52 * storing the stdout output in 'output', and any
53 * error messages in 'error.' Language is one of the
54 * enumerated types in ScriptLanguage above.
55 */
56 bool InkscapeScript::interpretScript(const Glib::ustring &script,
57 Glib::ustring &output,
58 Glib::ustring &error,
59 ScriptLanguage language)
60 {
61 const char *langname=NULL;
62 //if() instead of switch() lets us scope vars
63 if (language == InkscapeScript::JAVASCRIPT)
64 {
65 langname="Javascript";
66 }
67 else if (language == InkscapeScript::PYTHON)
68 {
69 langname="Python";
70 }
71 else if (language == InkscapeScript::RUBY)
72 {
73 langname="Ruby";
74 }
75 else
76 {
77 g_warning("interpretScript: Unknown Script Language type: %d\n",
78 language);
79 return false;
80 }
82 Inkscape::Bind::JavaBindery *binder =
83 Inkscape::Bind::JavaBindery::getInstance();
84 if (!binder->loadJVM()) //idempotent
85 {
86 g_warning("interpretScript: unable to start JVM\n");
87 return false;
88 }
89 std::vector<Value> parms;
90 Value retval;
91 Value parm;
92 parm.setString(langname);
93 parms.push_back(parm);
94 parm.setString(script);
95 parms.push_back(parm);
96 bool ret = binder->callStatic(Value::BIND_BOOLEAN,
97 "org/inkscape/cmn/ScriptRunner",
98 "run",
99 "(Ljava/lang/String;Ljava/lang/String;)Z",
100 parms,
101 retval);
102 if (!ret)
103 {
104 g_warning("interpretScript: failed\n");
105 return false;
106 }
108 return true;
109 }
112 /**
113 * Interprets the script in the named file,
114 * storing the stdout output in 'output', and any
115 * error messages in 'error.' Language is one of the
116 * enumerated types in ScriptLanguage above.
117 */
118 bool InkscapeScript::interpretFile(const Glib::ustring &fname,
119 Glib::ustring &output,
120 Glib::ustring &error,
121 ScriptLanguage language)
122 {
123 const char *langname=NULL;
124 //if() instead of switch() lets us scope vars
125 if (language == InkscapeScript::JAVASCRIPT)
126 {
127 langname="Javascript";
128 }
129 else if (language == InkscapeScript::PYTHON)
130 {
131 langname="Python";
132 }
133 else if (language == InkscapeScript::RUBY)
134 {
135 langname="Ruby";
136 }
137 else
138 {
139 g_warning("interpretFile: Unknown Script Language type: %d\n",
140 language);
141 return false;
142 }
144 Inkscape::Bind::JavaBindery *binder =
145 Inkscape::Bind::JavaBindery::getInstance();
146 if (!binder->loadJVM()) //idempotent
147 {
148 g_warning("interpretFile: unable to start JVM\n");
149 return false;
150 }
151 std::vector<Value> parms;
152 Value retval;
153 Value parm;
154 parm.setString(langname);
155 parms.push_back(parm);
156 parm.setString(fname);
157 parms.push_back(parm);
158 bool ret = binder->callStatic(Value::BIND_BOOLEAN,
159 "org/inkscape/cmn/ScriptRunner",
160 "runFile",
161 "(Ljava/lang/String;Ljava/lang/String;)Z",
162 parms,
163 retval);
164 if (!ret)
165 {
166 g_warning("interpretFile: failed\n");
167 return false;
168 }
170 return true;
171 }
181 } // namespace Script
182 } // namespace Extension
183 } // namespace Inkscape
185 //#########################################################################
186 //# E N D O F F I L E
187 //#########################################################################
189 /*
190 Local Variables:
191 mode:c++
192 c-file-style:"stroustrup"
193 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
194 indent-tabs-mode:nil
195 fill-column:99
196 End:
197 */
198 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :