summaryrefslogtreecommitdiffstats
path: root/scripts/xmi2qt.pl
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-08-22 01:12:57 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-08-22 06:11:55 +0200
commite5952e8966fd889c03f307396c170d73efa9b249 (patch)
tree069f8a9ccf7eb5dd9f40330f63a082de459c062e /scripts/xmi2qt.pl
parent343a9d4e9c4a98e8e2c72e4ee42b763d7491617a (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-xscripts/xmi2qt.pl78
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(); }