package Subtitle::SSA; use strict; use warnings; use feature qw(switch); use utf8; use base 'Subtitle::BASE'; sub new { my ($class, %args) = @_; my $self = { debug => 0, eol => "\n", %args, events => [], log => [], }; return bless($self, $class); } sub parse_timing { my ($self, $str) = @_; ... my $time = 0.0; return unless $str =~ m/(\d+):(\d+):(\d+)([.,])(\d+)/oi; my ($hrs, $min, $sec, $delim, $msec) = ($1, $2, $3, $4, $5); if ($msec < 0 or $msec > 999) { $self->log(warn => "wrong mseconds part of timing: $msec"); return; } if ($sec < 0 or $sec > 59) { $self->log(warn => "wrong seconds part of timing: $sec"); return; } if ($min < 0 or $min > 59) { $self->log(warn => "wrong minutes part of timing: $sec"); return; } if ($hrs < 0) { $self->log(warn => "wrong minutes part of timing: $sec"); return; } given (length("$msec")) { when ("3") { $time += $msec * 0.001; } when ("2") { $time += $msec * 0.01; } when ("1") { $time += $msec * 0.1; } default { die("abnormal length of mseconds part"); } } $time += $sec; $time += $min * 60; $time += $hrs * 60 * 60; return $time; } sub new_event { return +{ id => undef, timing => undef, style => undef, text => undef }; } sub parse { my ($self, $lines) = @_; my $linenum = 0; my $event; foreach my $line (@$lines) { } return scalar @{ $self->{events} }; } 1;