]> git.mxchange.org Git - flightgear.git/blob - scripts/perl/traffic/xml2conf.pl
Allow using the system version of flite and the HTS engine
[flightgear.git] / scripts / perl / traffic / xml2conf.pl
1 #!/usr/bin/perl -w
2
3 #use strict;
4 #use warnings;
5
6 # DEBUG
7 #  use Data::Dumper;
8 #  print Dumper($data) . "\n";
9 # END
10
11 if (scalar (@ARGV) == 1) {
12     @files = glob("$ARGV[0]");
13     print "Processing : ", @files, "\n";
14 } else {
15     die "Usage : conf2xml.pl <inputfile> [ > outputfile ]\n";
16 }
17 $file = shift(@files);
18
19 use Switch;
20 use XML::LibXML;
21 my $parser = XML::LibXML->new();
22 my $doc = $parser->load_xml(location => $file);
23 my $data;
24
25 # reformatting days
26 # According to http://wiki.flightgear.org/index.php/Interactive_Traffic
27 # 0 = Sunday and 6 = saturday
28 # For convenience we switch here to "classical" numbering
29 # where 0 = Monday and 6 = sunday
30 sub parseDay {
31   my $day;
32   $day = substr($_[0],0,1);
33   switch ($day) {
34     case 0 {$day="......6"} # Sunday
35     case 1 {$day="0......"} # Monday
36     case 2 {$day=".1....."} # Tuesday
37     case 3 {$day="..2...."} # Wednesday
38     case 4 {$day="...3..."} # Thrusday
39     case 5 {$day="....4.."} # Friday
40     case 6 {$day=".....5."} # Saturday
41     else   {$day="0123456"} # Daily
42   };
43   return $day;
44 }
45
46 # reformatting times
47 sub parseTime {
48   return substr($_[0],2,5);
49 }
50
51 print "# AC Homeport Registration RequiredAC AcTyp Airline Livery Offset Radius Flighttype PerfClass Heavy Model\n";
52 # get aircraft data
53 foreach $data ($doc->findnodes('/trafficlist/aircraft')) {
54   my $AcMdl = $data->findnodes('./model');
55   my $AcLvy = $data->findnodes('./livery');
56   my $AcAln = $data->findnodes('./airline');
57   my $AcHp = $data->findnodes('./home-port');
58   my $AcReq = $data->findnodes('./required-aircraft');
59   my $AcTyp = $data->findnodes('./actype');
60   my $AcO = $data->findnodes('./offset');
61   my $AcRad = $data->findnodes('./radius');
62   my $AcFt = $data->findnodes('./flighttype');
63   my $AcPrf = $data->findnodes('./performance-class');
64   my $AcReg = $data->findnodes('./registration');
65   my $AcHvy = $data->findnodes('./heavy');
66   print "AC $AcHp $AcReg $AcReq $AcTyp $AcAln $AcLvy $AcO $AcRad $AcFt $AcPrf $AcHvy $AcMdl\n";
67 }
68 print "\n# FLIGHT Callsign Flightrule Days DeparTime DepartPort ArrivalTime ArrivalPort Altitude RequiredAc\n# 0 = Monday, 6 = Sunday\n";
69 # get flight data
70 foreach $data ($doc->findnodes('/trafficlist/flight')) {
71   my $FlRep = $data->findnodes('repeat');
72   my $FlDepPrt = $data->findnodes('departure/port');
73   my $FlArrPrt = $data->findnodes('arrival/port');
74   my $FlCs = $data->findnodes('callsign');
75   my $FlFr = $data->findnodes('fltrules');
76   my $FlCa = $data->findnodes('cruise-alt');
77   my $FlReq = $data->findnodes('required-aircraft');
78   my $FlDepDay = $data->findnodes('departure/time');
79   my $FlDepTime = $data->findnodes('departure/time');
80   my $FlArrDay = $data->findnodes('arrival/time');
81   my $FlArrTime = $data->findnodes('arrival/time');
82   my $FlDays = ".......";
83 # handle flights depending on weekly or daily schedule
84   if (lc($FlRep) eq "week") {
85     $FlDays = parseDay($FlDepTime);
86     $FlDepTime = parseTime($FlDepTime);
87     $FlArrTime = parseTime($FlArrTime);
88   } elsif (lc($FlRep) eq "24hr") {
89     $FlDepDay = $data->findnodes('departure/time');
90     $FlDepTime = substr($data->findnodes('departure/time'),0,5);
91     $FlArrDay = $data->findnodes('arrival/time');
92     $FlArrTime = substr($data->findnodes('arrival/time'),0,5);
93     $FlDays = "0123456";
94   } else {
95     die "Error! No proper repetition found in XML!\n";
96   }
97 # output data
98   print "FLIGHT $FlCs $FlFr $FlDays $FlDepTime $FlDepPrt $FlArrTime $FlArrPrt $FlCa $FlReq\n";
99 }