Code

still WIP. added tree-descending code
[inkscape.git] / src / extension / script / inkscape_perl.i
1 %module inkscape_perl
2 %{
3 #include "InkscapeBinding.h"
6 static void xs_init _((pTHX));
7 static PerlInterpreter *my_perl;
9 int perl_eval(char *string) {
10   char *argv[2];
11   argv[0] = string;
12   argv[1] = (char *) 0;
13   return perl_call_argv("eval",0,argv);
14 }
16 extern "C" int
17 InkscapePerlParseBuf(char *startupCodeBuf, char *codeBuf)
18 {
19     STRLEN n_a;
20     int  exitstatus;
21     char *embedding[] = { "", "-e", "0" };
22         
23     my_perl = perl_alloc();
24     if (!my_perl)
25        return 0;
26     perl_construct( my_perl );
28     exitstatus = perl_parse( my_perl, xs_init, 3,
29                            embedding, (char **) NULL );
30     if (exitstatus)
31         return 0;
33     /* Initialize all of the module variables */
35     exitstatus = perl_run( my_perl );
37     SV *retSV = eval_pv(startupCodeBuf, TRUE);
38     char *ret = SvPV(retSV, n_a);
39     //printf("## module ret:%s\n", ret);
41     retSV = eval_pv("$inkscape = inkscape_perlc::getInkscape();\n", TRUE);
42     ret = SvPV(retSV, n_a);
43     //printf("## inkscape ret:%s\n", ret);
45     retSV = eval_pv(codeBuf, TRUE);
46     ret = SvPV(retSV, n_a);
47     //printf("## code ret:%s\n", ret);
49     perl_destruct( my_perl );
50     perl_free( my_perl );
52     return 1;
53 }
55 /* Register any extra external extensions */
57 /* Do not delete this line--writemain depends on it */
58 /* EXTERN_C void boot_DynaLoader _((CV* cv)); */
60 static void
61 xs_init(pTHX)
62 {
63 /*  dXSUB_SYS; */
64     char *file = __FILE__;
65     {
66       /*        newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); */
67         newXS(SWIG_name, SWIG_init, file);
68 #ifdef SWIGMODINIT
69         SWIGMODINIT
70 #endif
71     }
72 }
75 %}
77 %include "InkscapeBinding.h"