Skip to content
Extraits de code Groupes Projets
Valider dfd8a9a1 rédigé par hieda_kyuko@hpr's avatar hieda_kyuko@hpr
Parcourir les fichiers

Multi-line timetables

parent 76c9e0f5
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -2,7 +2,7 @@ package FrameUtils;
use strict;
use warnings;
use Data::Dumper;
use Data::Printer;
BEGIN
{
......@@ -10,35 +10,33 @@ BEGIN
}
use App::Utils;
use App::MasterUtils;
sub get_syubetsu
{
my %frame = %{ $_[0] };
my $index = $_[1];
my $rosen_id = $_[1];
my $index = $_[2];
if ($index >= scalar @{ $frame{'syubetsu'} }) { die "Index error"; }
return %{ @{ $frame{'syubetsu'} }[$index] }{'name'};
}
sub get_ekimei
{
my %frame = %{ $_[0] };
my $eki = $_[1];
if ($eki >= $frame{'eki_num'}) { die "Index error" };
return @{ $frame{'eki'} }[$eki];
my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
my @syubetsus = @{ $rosen->{'syubetsu'} };
if ($index >= scalar @syubetsus) { die "Index error"; }
return %{ $syubetsus[$index] }{'name'};
}
sub get_destination
{
my %frame = %{ $_[0] };
my @jikoku = @{ $_[1] };
my $offset = $_[2];
my $is_down = $_[3];
my $rosen_id = $_[1];
my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
my @jikoku = @{ $_[2] };
my $offset = $_[3];
my $is_down = $_[4];
return get_ekimei \%frame, $is_down
return (MasterUtils::sta_from_index \%frame, $rosen_id, $is_down
? scalar $offset + @jikoku - 1
: $frame{'eki_num'} - $offset - @jikoku;
: $rosen->{'eki_num'} - $offset - @jikoku)
->{'ekimei'};
}
sub hassya_hyou
......@@ -46,17 +44,20 @@ sub hassya_hyou
my %frame = %{ $_[0] };
my $eki = $_[1];
if ($eki >= $frame{'eki_num'}) { die "Index error" };
print "Timetable for station @{ $frame{'eki'} }[$eki]\n";
my @rosens = MasterUtils::get_routes \%frame, $eki;
my %sta_info = %{ MasterUtils::sta_from_id \%frame, $eki };
sub process_ressya_list
{
my @ressyas = @{ $_[0] };
my $is_down = $_[2];
my $target_absolute = $_[1];
my $rosen_id = $_[0];
my $rosen = MasterUtils::get_rosen_frame \%frame, $rosen_id;
my @ressyas = @{ $_[1] };
my $is_down = $_[3];
my $target_absolute = MasterUtils::get_eki_position \%frame, $rosen_id, $_[2];
my $target_relative = $is_down
? $target_absolute
: $frame{'eki_num'} - $target_absolute - 1;
: $rosen->{'eki_num'} - $target_absolute - 1;
foreach my $ressya (@ressyas)
{
......@@ -68,13 +69,16 @@ sub hassya_hyou
my %ts = %{ $jikoku[0] };
my $time = $ts{'hatsu'};
# Timestamp has no dep time (only arrival time for ex)
if (!defined $time) { next; }
# This service does not stop here
if (%ts{'mode'} != 1) { next; }
# Format: time (tab) destination (tab) type (with eventual name)
my $syubetsu = get_syubetsu \%frame, $data{'syubetsu'};
print Utils::format_time $time
my $syubetsu = get_syubetsu \%frame, $rosen_id, $data{'syubetsu'};
print ((Utils::format_time $time)
. "\tfor "
. (get_destination \%frame, \@jikoku, $target_relative, $is_down)
. "\t$syubetsu"
. (get_destination \%frame, $rosen_id, \@jikoku, $target_relative, $is_down)
. "\t$syubetsu")
;
if (defined $data{'meisyo'})
{
......@@ -85,10 +89,19 @@ sub hassya_hyou
print "\n";
}
foreach my $rosen_id (@rosens)
{
my $rosenmei = MasterUtils::get_rosenmei \%frame, $rosen_id;
print "$rosenmei timetable for station $sta_info{'ekimei'}\n";
my $dia = $frame{'rosen'}->{$rosen_id}->{'dia'};
print "=================== Down ===================\n";
process_ressya_list \@{ $frame{'dia'}{'kudari'} }, $eki, 1;
process_ressya_list $rosen_id, $dia->{'kudari'}, $eki, 1;
print "==================== Up ====================\n";
process_ressya_list \@{ $frame{'dia'}{'nobori'} }, $eki, 0;
process_ressya_list $rosen_id, $dia->{'nobori'}, $eki, 0;
}
}
1;
......@@ -9,6 +9,8 @@ BEGIN
}
use App::Log;
use List::Util qw(first);
use Data::Printer;
sub sta_from_id
......@@ -24,6 +26,51 @@ sub sta_from_id
Log::e "Station id $id not found.";
}
sub get_ekimei
{
return (sta_from_id $_[0], $_[1])->{'ekimei'};
}
sub get_rosen_frame
{
my %master = %{ $_[0] };
my $rosen_id = $_[1];
if (!defined $rosen_id) { Log::e 'Please specify a route id.'; }
foreach my $rosen (keys %{ $master{'rosen'} })
{
if ($rosen eq $rosen_id) { return $master{'rosen'}->{$rosen}; }
}
Log::e "Route id $rosen_id not found.";
}
sub get_rosenmei
{
return (get_rosen_frame $_[0], $_[1])->{'rosenmei'};
}
sub get_eki_position
{
my %master = %{ $_[0] };
my $rosen_id = $_[1];
my $id = $_[2];
my $rosen = get_rosen_frame \%master, $rosen_id;
my @ekis = @{ $rosen->{'eki'} };
return first { $ekis[$_] eq $id } 0..$#ekis;
}
sub sta_from_index
{
my %master = %{ $_[0] };
my $rosen_id = $_[1];
my $index = $_[2];
if (!defined $rosen_id) { Log::e 'Please specify a route id.'; }
if (!defined $index) { Log::e 'Please specify a station index.'; }
my $rosen = get_rosen_frame \%master, $rosen_id;
return sta_from_id \%master, @{ $rosen->{'eki'} }[$index];
}
sub get_routes
{
my %master = %{ $_[0] };
......
......@@ -326,4 +326,5 @@ foreach my $frame (values %{ $master{'rosen'} })
$frame->{'eki'} = \@new_ekis;
}
MasterUtils::get_routes \%master, 'konpoku_10';
# MasterUtils::get_routes \%master, 'konpoku_9';
FrameUtils::hassya_hyou \%master, 'konpoku_9';
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter