diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-08-22 01:12:57 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-08-22 06:11:55 +0200 |
commit | e5952e8966fd889c03f307396c170d73efa9b249 (patch) | |
tree | 069f8a9ccf7eb5dd9f40330f63a082de459c062e /scripts/xmi2qt.pl | |
parent | 343a9d4e9c4a98e8e2c72e4ee42b763d7491617a (diff) |
Add initial refactoring of xmi2qt templates files
Change-Id: I5cf1b9c74edc3563ad48e95ac9a5f0d66663329c
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'scripts/xmi2qt.pl')
-rwxr-xr-x | scripts/xmi2qt.pl | 78 |
1 files changed, 25 insertions, 53 deletions
diff --git a/scripts/xmi2qt.pl b/scripts/xmi2qt.pl index 23de785f..eea5f150 100755 --- a/scripts/xmi2qt.pl +++ b/scripts/xmi2qt.pl @@ -42,74 +42,46 @@ use strict; use warnings; -use XML::Simple; -use Data::Dumper; -use File::Slurp; + +use Getopt::Std; use File::Path qw(make_path); +use XML::XPath; use Template; -use Getopt::Std; -my %options=(); +my %options=(); getopt("oi",\%options); -my $xml = new XML::Simple(keyattr => { 'class' => '+name', 'attribute' => '+id', 'associationend' => '+id' }, forcearray => ['namespace', 'class', 'enumeration', 'attribute', 'associationend', 'operation', 'accessor', 'parameter', 'forwarddecl', 'superclass']); my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/'); -my $xmi = $xml->XMLin($options{i}); -#write_file 'dump.log', Dumper($xmi); - -my $namespaces = $xmi->{'namespace'}; - -foreach my $namespace (@$namespaces) { - -make_path($options{o}."/".$namespace->{path}); - -my $classes = $namespace->{'class'}; -my $enumerations = $namespace->{'enumeration'}; +my $xmi = XML::XPath->new(filename => $options{i}); +my $namespace = $xmi->findvalue('//uml:Package/@name'); +make_path($options{o}."/".$namespace); binmode STDOUT, ':utf8'; -foreach my $class (values %$classes) { - open STDOUT, '>', $options{o}."/".$namespace->{path}."/".lc($class->{name}).".h"; - if ($tt->process('class.h', { - namespace => $namespace->{path}, - class => $class, - classes => $classes - }) ne 1) { print $tt->error(); } - open STDOUT, '>', $options{o}."/".$namespace->{path}."/".lc($class->{name})."_p.h"; - if ($tt->process('class_p.h', { - namespace => $namespace->{path}, - class => $class, - classes => $classes - }) ne 1) { print $tt->error(); } - open STDOUT, '>', $options{o}."/".$namespace->{path}."/".lc($class->{name}).".cpp"; - if ($tt->process('class.cpp', { - namespace => $namespace->{path}, - class => $class, - classes => $classes - }) ne 1) { print $tt->error(); } -} - -open STDOUT, '>', $options{o}."/".$namespace->{path}."/".lc($namespace->{path})."namespace.h"; -if ($tt->process('namespace.h', { - namespace => $namespace->{path}, - enumerations => $enumerations +my $globalHeader = "qt".lc($namespace)."global.h"; +open STDOUT, '>', $options{o}."/".$namespace."/".$globalHeader; +if ($tt->process('global.h', { + namespace => $namespace, }) ne 1) { print $tt->error(); } -open STDOUT, '>', $options{o}."/".$namespace->{path}."/".lc($namespace->{path})."namespace.cpp"; -if ($tt->process('namespace.cpp', { - namespace => $namespace->{path}, - enumerations => $enumerations +close STDOUT; + +open STDOUT, '>', $options{o}."/".$namespace."/".lc($namespace).".pri"; +if ($tt->process('module.pri', { + xmi => $options{i}, + namespace => $namespace, }) ne 1) { print $tt->error(); } +close STDOUT; -my $priName = lc($namespace->{path} =~ s/\//-/gr); -open STDOUT, '>', $options{o}."/".$namespace->{path}."/".$priName.".pri"; -if ($tt->process('namespace.pri', { +open STDOUT, '>', $options{o}."/".$namespace."/".lc($namespace).".pro"; +if ($tt->process('module.pro', { namespace => $namespace, }) ne 1) { print $tt->error(); } +close STDOUT; +my $classset = $xmi->find('//packagedElement[@xmi:type=\'uml:Class\']'); +foreach my $class ($classset->get_nodelist) { + my $className = $class->findvalue('@name'); + system("./generate-class.pl -i " . $options{i} . " -o " . $options{o} . " -c " . $className); } -open STDOUT, '>', $options{o}."/project.pro"; -if ($tt->process('project.pro', { - namespaces => $namespaces, -}) ne 1) { print $tt->error(); } |