From 2a5b4686951de9e59df510759b476ccea570fc80 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Sat, 11 Jun 2016 17:08:22 +0000 Subject: [PATCH] * Subtitle::MSub : update --- lib/Subtitle/MSub.pm | 48 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/lib/Subtitle/MSub.pm b/lib/Subtitle/MSub.pm index 2582050..b382164 100644 --- a/lib/Subtitle/MSub.pm +++ b/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 + + 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 + + my $events_count = $msub->parse(\@lines); + +Parse subtitle from array of lines. +Returns parsed events count on success, -1 on error + +=cut