#!/usr/bin/perl
# Última versão do gerador de stylesheets por jcr
# Funciona com modes
# Adicionei o suporte para expressões LET
# Última revisão: 2001.05.22
use XML::DT ;
my $filename = shift;
my @ccvars = ();
my $modecounter = 0;
my $constcounter = 1;
%modehandler=(
'-default' => sub{""},
'CONSTRAINT' => sub{++$modecounter; "";});
%handler=(
'-outputenc' => 'ISO-8859-1',
'-default' => sub{"<$q>$c$q>"},
'SELECTOR' => sub{$predicates = $v{SELEXP}; ""},
'CONSTRAINT' => sub{@ccvars=();
$predicates="";
$lets="";
$mode = "const$constcounter"; $constcounter++;
"\n\n".
"\n"."\n\n".
"\n";},
'MESSAGE' => sub{"$c"},
'VALUE' => sub{""},
'CS' => sub{"$c"},
'ACTION' => sub{"$c\n"},
'CC' => sub{$c =~ s/>/>/;
$c =~ s/</;
foreach $ccvar (@ccvars)
{ $predicates .= "[$ccvar]"; }
$predicates."\">\n".$lets.
" ";},
'VARIABLE' => sub{push(@ccvars,$v{SELEXP});
"$v{SELEXP}";},
'LET' => sub{$lets="\n".
" \n".
"\n"; ""},
);
print <<'HEADER-END';
HEADER-END
dt($filename,%modehandler);
for($i=1; $i<=$modecounter; $i++)
{ print "\n";
}
print " \n";
print dt($filename,%handler);
print <<'FOOTER-END';
FOOTER-END