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