package Iotta::Copp::Template; use strict; require Iotta::Elem; our @ISA = ("Iotta::Elem"); my $ws = "[ \t\n]"; sub add_sect { my $self = shift; my $sect = shift; my $descr = shift; my $app = ""; if (${$self -> meta}{$sect}) { $app .= "/* {{{ $descr */\n"; $app .= ${$self -> meta}{$sect}; $app .= "/* }}} */\n"; } $self -> {data} .= $app; } sub run { my $self = shift; my $meta = shift; my $data; $self -> {data} = ""; $self -> {meta} = $meta; my $fn = $$meta{input}; $fn =~ s/.*?\///g; $fn =~ s/\.|-/_/g; $self -> {data} .= "#include \n"; $self -> {data} .= "#include \n"; # FIXME $self -> {data} .= "#include \n"; $self -> {data} .= $$meta{o_includes}; $self -> add_sect ("o_id_decls", "ID declarations"); $self -> add_sect ("o_meth_decls", "method prototypes"); $self -> add_sect ("o_meth_ini_defs", "method initialization #define's"); $self -> add_sect ("o_meth_attr", "attribute method implementation"); $self -> add_sect ("o_meth_ar_init", "method table initialization funcs"); $self -> add_sect ("o_obj_construct", "object constructors"); if ($$meta{o_id_defs}) { $data .= "/* {{{ file intitalization function */\n"; my $sum; $sum = "_".$$meta{checksum} if $$meta{checksum}; $data .= "void __co_file_init_${fn}$sum (co_o_minimal super);\n"; $data .= "void __co_file_init_${fn}$sum (co_o_minimal super)\n{\n"; $data .= "co_super superd = super -> data;\n"; $data .= $$meta{o_id_defs}; $data .= "}\n"; $data .= "/* }}} */\n"; } $self->{data} .= $data; $self->next->run ($meta, $self->data) if ($self->next); } 1;