From b454a1b1a5d0374b36a877a9aebf3e02f2da1a4c Mon Sep 17 00:00:00 2001 From: "hieda_kyuko@hpr" <ugo58956@protonmail.com> Date: Thu, 24 Apr 2025 15:06:15 +0200 Subject: [PATCH] PoC: train information --- lib/App/Ts.pm | 44 ++++++++++++++++++++++++++++++++++++++++++++ lib/ts.pm | 12 ++++++++++++ src/oud2_parser.pl | 45 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 lib/App/Ts.pm create mode 100644 lib/ts.pm diff --git a/lib/App/Ts.pm b/lib/App/Ts.pm new file mode 100644 index 0000000..6ce2f33 --- /dev/null +++ b/lib/App/Ts.pm @@ -0,0 +1,44 @@ +package Ts; + +use strict; +use warnings; + +use Data::Dumper; + +sub dummy +{ + return "yay!"; +} + +sub ts_time_to_string +{ + my %timestamp = %{ $_[0] }; + my $option = $_[1]; + $option eq 'd' ? return $timestamp{'hatsu'} + : $option eq 'a' ? return $timestamp{'chaku'} + : die "Time format must be d or a." +} + +sub debug_train_info +{ + my @timestamps = @{ $_[0] }; + my @consumed = @timestamps; + my $start = 0; + while (!defined $consumed[0]) + { + shift @consumed; + $start++; + } + my $end = $start; + while (defined $consumed[0]) + { + shift @consumed; + $end++; + } + $end--; + + print "Station ($start) @ " . (ts_time_to_string $timestamps[$start], 'd'); + print " > Station ($end) @ " . (ts_time_to_string $timestamps[$end], 'a') . "\n"; +} + +1; diff --git a/lib/ts.pm b/lib/ts.pm new file mode 100644 index 0000000..e450369 --- /dev/null +++ b/lib/ts.pm @@ -0,0 +1,12 @@ +package Ts; + +use strict; +use warnings; + +sub dummy +{ + return "yay!"; +} + + +1; diff --git a/src/oud2_parser.pl b/src/oud2_parser.pl index 6ace2dd..231ccc8 100644 --- a/src/oud2_parser.pl +++ b/src/oud2_parser.pl @@ -1,11 +1,25 @@ #!/usr/bin/perl +use Module::Load; + use autodie 'open'; use strict; use warnings; use feature 'unicode_strings'; -use Perl::Critic; +BEGIN +{ + unshift @INC, './lib'; +} + +# load App::Ts; +use FindBin; +use File::Spec; +use lib File::Spec -> catdir ($FindBin::Bin, '..', 'lib'); + +use App::Ts; + +use Perl::Critic; use Nice::Try; use Marpa::R2; @@ -51,10 +65,12 @@ ROSEN_NAME ::= 'Rosenmei=' NAME action => Dia::print_line EKI_ALL ::= EKI_STRUCT+ + action => Dia::list_of_eki EKI_STRUCT ::= EKI_BEGIN EKI_NAME GARBAGE_LINES + action => Dia::second EKI_BEGIN ::= 'Eki.' EKI_NAME ::= 'Ekimei=' NAME - action => Dia::print_sta + action => Dia::second DIA_BEGIN ::= 'Dia.' action => Dia::begin_dia_section @@ -159,6 +175,7 @@ GARBAGE_LINE ~ [^\n]* endrule ; + package Dia; use Data::Dumper; @@ -196,21 +213,22 @@ sub Dia::hash_of_ts_ad { shift; my $q = {"mode" => $_[0], "hatsu" => $_[4],}; return $q; } sub Dia::list_of_ts { - #print "a" . Dumper(\@_); shift; - # while (defined $_[0]) - # { - # print Dumper $_[0]; - # shift; - # } - print "Making list of ts..."; + print "Making list of ts...\n"; + return \@_; +} + +sub Dia::list_of_eki +{ + # TODO use Eki objects + shift; + print Dumper \@_; return \@_; } sub Dia::ts_combine { shift; - # print Dumper $_[1]; my @ts = @{$_[0]}; my @res = (); @@ -227,12 +245,16 @@ sub Dia::print_sta { shift; print "Found station: "; print $_[1]; print "\n"; } sub Dia::print_line { shift; print "Working on line: "; print $_[1]; print "\n"; } sub Dia::format_ressya { + shift; print Dumper(\@_); - shift; print "Found (" . $_[2] . ") train "; + print "Found (" . $_[2] . ") train "; defined $_[3] ? print $_[3] : print "[no number]"; print ", " . $_[4] if defined $_[4]; print "\n"; + Ts::debug_train_info $_[5]; + print "\n"; } + sub Dia::format_mei { shift; @@ -243,6 +265,7 @@ sub Dia::format_mei sub Dia::return_name { shift; return $_[1]; } + package main; my $diag = Marpa::R2::Scanless::G->new( -- GitLab