diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2012-09-23 18:41:26 +0000 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2012-09-23 20:44:36 +0200 |
commit | ee5cfd0baa5b524d24e8d36dba58f473005dff63 (patch) | |
tree | d095db13e9effa2c66c2b4d51cc516d9855eb420 /scripts/xmi2qt.pl | |
parent | 0c581dfc19ad6eea752f1851759350709bd99a5e (diff) |
Provide simplified version of generation scripts
- XQuery used to generate a new xml (qtxmi) closer to a Qt implementation
- Generation of a different .pri file for each namespace
- Enumerations are generated as members of QEnumerations namespace scope
Change-Id: I02e8fc14e33525fb60a4a027be4361b6b502cd07
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'scripts/xmi2qt.pl')
-rwxr-xr-x | scripts/xmi2qt.pl | 68 |
1 files changed, 37 insertions, 31 deletions
diff --git a/scripts/xmi2qt.pl b/scripts/xmi2qt.pl index a2ec9951..c382bd6d 100755 --- a/scripts/xmi2qt.pl +++ b/scripts/xmi2qt.pl @@ -5,49 +5,55 @@ use warnings; use XML::Simple; use Data::Dumper; use File::Slurp; +use File::Path qw(make_path); use Template; -my $xml = new XML::Simple(keyattr => ['name'], ForceArray => ['generalization', 'ownedAttribute', 'ownedOperation', 'ownedParameter']); +my $xml = new XML::Simple(keyattr => [], forcearray => ['namespace', 'attribute', 'associationend', 'operation', 'accessor']); +my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/'); my $xmi = $xml->XMLin($ARGV[0]); write_file 'dump.log', Dumper($xmi); -my $classesKernel = $xmi->{'uml:Package'}->{'packagedElement'}->{'Classes'}->{'packagedElement'}->{'Kernel'}->{'packagedElement'}; +my $namespaces = $xmi->{'namespace'}; -my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/'); +foreach my $namespace (@$namespaces) { -open STDOUT, '>', "./uml.pro"; -if ($tt->process('template.pro', { -currentPackage => 'Classes::Kernel', -classes => $classesKernel -}) ne 1) { print $tt->error(); } +make_path($namespace->{path}); + +my $classes = $namespace->{'class'}; +my $enumerations = $namespace->{'enumeration'}; -open STDOUT, '>', "./Classes/Kernel/qtenumeration.h"; -if ($tt->process('qtenumeration.h', { -currentPackage => 'Classes::Kernel', -package => $classesKernel +foreach my $class (@$classes) { + open STDOUT, '>', "./".$namespace->{path}."/".lc($class->{name}).".h"; + if ($tt->process('class.h', { + class => $class + }) ne 1) { print $tt->error(); } + open STDOUT, '>', "./".$namespace->{path}."/".lc($class->{name}).".cpp"; + if ($tt->process('class.cpp', { + class => $class + }) ne 1) { print $tt->error(); } +} + +open STDOUT, '>', "./".$namespace->{path}."/qenumerations.h"; +if ($tt->process('qenumerations.h', { + namespace => $namespace->{path}, + enumerations => $enumerations +}) ne 1) { print $tt->error(); } +open STDOUT, '>', "./".$namespace->{path}."/qenumerations.cpp"; +if ($tt->process('qenumerations.cpp', { + namespace => $namespace->{path}, + enumerations => $enumerations }) ne 1) { print $tt->error(); } -open STDOUT, '>', "./Classes/Kernel/qtenumeration.cpp"; -if ($tt->process('qtenumeration.cpp', { -currentPackage => 'Classes::Kernel', -package => $classesKernel +my $priName = lc($namespace->{path} =~ s/\//-/gr); +open STDOUT, '>', "./".$namespace->{path}."/".$priName.".pri"; +if ($tt->process('namespace.pri', { + namespace => $namespace, }) ne 1) { print $tt->error(); } -foreach my $key (keys $classesKernel) { - if ($classesKernel->{$key}->{'xmi:type'} eq 'uml:Class' ) { - open STDOUT, '>', "./Classes/Kernel/q".lc($key).".h"; - if ($tt->process('class.h', { - currentPackage => 'Classes::Kernel', - className => $key, - classData => $classesKernel->{$key}, - }) ne 1) { print $tt->error(); } - open STDOUT, '>', "./Classes/Kernel/q".lc($key).".cpp"; - if ($tt->process('class.cpp', { - currentPackage => 'Classes::Kernel', - className => $key, - classData => $classesKernel->{$key}, - }) ne 1) { print $tt->error(); } - } } +open STDOUT, '>', "./uml.pro"; +if ($tt->process('project.pro', { + namespaces => $namespaces, +}) ne 1) { print $tt->error(); } |