r26657: pidl: Add basics for generating Python modules.
[samba.git] / source4 / pidl / lib / Parse / Pidl / Samba4 / Python.pm
1 ###################################################
2 # Python function wrapper generator
3 # Copyright jelmer@samba.org 2007
4 # released under the GNU GPL
5
6 package Parse::Pidl::Samba4::Python;
7
8 use Exporter;
9 @ISA = qw(Exporter);
10
11 use strict;
12 use Parse::Pidl::Typelist;
13 use Parse::Pidl::Util qw(has_property ParseExpr);
14
15 use vars qw($VERSION);
16 $VERSION = '0.01';
17
18 sub new($) {
19         my ($class) = @_;
20         my $self = { res => "", res_hdr => "", tabs => "", constants => {}};
21         bless($self, $class);
22 }
23
24 sub pidl_hdr ($$)
25 {
26         my $self = shift;
27         $self->{res_hdr} .= shift;
28 }
29
30 sub pidl($$)
31 {
32         my ($self, $d) = @_;
33         if ($d) {
34                 $self->{res} .= $self->{tabs};
35                 $self->{res} .= $d;
36         }
37         $self->{res} .= "\n";
38 }
39
40 sub indent($)
41 {
42         my ($self) = @_;
43         $self->{tabs} .= "\t";
44 }
45
46 sub deindent($)
47 {
48         my ($self) = @_;
49         $self->{tabs} = substr($self->{tabs}, 0, -1);
50 }
51
52 sub Parse($$$$)
53 {
54     my($self,$basename,$ndr,$hdr) = @_;
55     
56     my $py_hdr = $hdr;
57     $py_hdr =~ s/^/py_/g;
58
59     $self->pidl_hdr("/* header auto-generated by pidl */\n\n");
60         
61     $self->pidl("
62 /* Python wrapper functions auto-generated by pidl */
63 #include \"includes.h\"
64 #include <Python.h>
65 #include \"$hdr\"
66 #include \"$py_hdr\"
67
68 ");
69
70         $self->pidl("void init$basename(void)");
71         $self->pidl("{");
72         $self->indent;
73         # FIXME
74         $self->deindent;
75         $self->pidl("}");
76     return ($self->{res_hdr}, $self->{res});
77 }
78
79 1;