Browse Source

* move parse_timing to Subtitle::BASE

master
Alex 'AdUser' Z 10 years ago
parent
commit
08e4f2aebd
  1. 36
      lib/Subtitle/BASE.pm
  2. 33
      lib/Subtitle/SRT.pm
  3. 33
      lib/Subtitle/SSA.pm

36
lib/Subtitle/BASE.pm

@ -25,6 +25,42 @@ sub chomp {
return $line =~ s/(^\xEF\xBB\xBF|[\r\n]+$)//ogr; return $line =~ s/(^\xEF\xBB\xBF|[\r\n]+$)//ogr;
} }
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 {
$self->log(error => "abnormal length of mseconds part");
return;
}
}
$time += $sec;
$time += $min * 60;
$time += $hrs * 60 * 60;
return $time;
}
sub trim { sub trim {
my ($self, $line) = @_; my ($self, $line) = @_;
return unless defined $line; return unless defined $line;

33
lib/Subtitle/SRT.pm

@ -20,39 +20,6 @@ sub new {
return bless($self, $class); 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, text => undef }; } sub new_event { return +{ id => undef, timing => undef, text => undef }; }
sub parse { sub parse {

33
lib/Subtitle/SSA.pm

@ -34,39 +34,6 @@ sub new {
return bless($self, $class); 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 parse_header { sub parse_header {
my ($self, $linenum, $line) = @_; my ($self, $linenum, $line) = @_;

Loading…
Cancel
Save