Browse Source

* Subtitle::MSub : update

master
Alex 'AdUser' Z 8 years ago
parent
commit
2a5b468695
  1. 48
      lib/Subtitle/MSub.pm

48
lib/Subtitle/MSub.pm

@ -2,9 +2,10 @@ package Subtitle::MSub;
use strict;
use warnings;
use feature qw(switch);
use utf8;
use Subtitle::Utils qw(:string);
use base 'Subtitle::BASE';
sub new {
@ -30,11 +31,11 @@ sub parse {
my $linenum = 0;
my $event;
foreach my $line (@$lines) {
foreach my $line (@{ $lines }) {
$linenum++;
$line = $self->chomp($line);
$line = $self->trim($line);
next unless ($line);
chomp_all($line);
trim($line);
next unless $line;
my ($start, $end, $rest) = ($line =~ m/{(\d+)}\s*{(\d+)}\s*(.+)/o);
# expected: garbage
unless ($start and $end and $rest) {
@ -42,7 +43,7 @@ sub parse {
next;
}
# expected: valid line
# special case - set fps
# special case - '{1}{1}XX.YY' line sets fps
if ($start == 1 and $end == 1) {
my ($fps) = ($rest =~ m/(\d+(?:\.\d+))/o);
unless ($fps) {
@ -50,17 +51,18 @@ sub parse {
next;
}
if ($fps and $self->{fps}) {
$self->log(warn => "Found fps line at $linenum, but fps already set before");
$self->log(warn => "Found fps line at $linenum, but fps already set by user");
next;
}
$self->log(debug => "Set fps to $fps and line $linenum");
$self->{fps} = $fps;
next;
}
trim($rest);
$rest =~ s/\|/$self->{eol}/og;
my $event = $self->new_event;
$event->{timing} = [$start, $end];
$event->{text} = $self->trim($rest);
$event->{text} = $rest;
push @{ $self->{events} }, $event;
undef $event;
}
@ -79,3 +81,33 @@ sub parse {
}
1;
=pod
=head1 NAME
Subtitle::MSub -- micsrosub subtitle format
=head1 METHODS
=head2 C<new>
my $msub = Subtitle::MSub->new(%opts);
Creates new object, takes list of options as argument.
Recognized keys are:
* debug -- write debug messages to log (default: 0)
* eol -- replace "|" symbol within subtitle text with this chars (default: "\n")
* fps -- sets FPS for subtitle (default: not set, try detect from file, then use default)
* default_fps -- FPS for subtitle, if not found in file, and not set by user (default: 25.0)
* convert_timing -- convert frame numbers to seconds (default: 1)
=head2 C<parse>
my $events_count = $msub->parse(\@lines);
Parse subtitle from array of lines.
Returns parsed events count on success, -1 on error
=cut

Loading…
Cancel
Save