|
|
|
package Subtitle::BASE;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use utf8;
|
|
|
|
|
|
|
|
sub log {
|
|
|
|
my ($self, $level, $msg) = @_;
|
|
|
|
|
|
|
|
if ($level eq 'error') {
|
|
|
|
push @{ $self->{log} }, "E: $msg";
|
|
|
|
} elsif ($level eq 'warn') {
|
|
|
|
push @{ $self->{log} }, "W: $msg";
|
|
|
|
} elsif ($level eq 'info') {
|
|
|
|
push @{ $self->{log} }, "I: $msg";
|
|
|
|
} elsif ($level eq 'debug') {
|
|
|
|
push @{ $self->{log} }, "D: $msg" if $self->{debug};
|
|
|
|
} else {
|
|
|
|
warn "Unknown loglevel $level of $msg\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub parse { return "Unimplemented by subclass"; }
|
|
|
|
sub build { return "Unimplemented by subclass"; }
|
|
|
|
|
|
|
|
sub from_string {
|
|
|
|
my ($self, $text) = @_;
|
|
|
|
my @lines = split /\r?\n/o, $text;
|
|
|
|
return $self->parse(\@lines);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub from_file {
|
|
|
|
my ($self, $path) = @_;
|
|
|
|
open my $FH, '<', $path
|
|
|
|
or return -1;
|
|
|
|
my @lines = <$FH>;
|
|
|
|
close $FH;
|
|
|
|
return $self->parse(\@lines);
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|
|
|
|
|
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
Subtitle::BASE -- base class of subtitle file
|
|
|
|
|
|
|
|
=head1 SYNOPSYS
|
|
|
|
|
|
|
|
use base 'Subtitle::BASE';
|
|
|
|
|
|
|
|
This module should not be used directly.
|
|
|
|
|
|
|
|
=head1 METHODS
|
|
|
|
|
|
|
|
=head2 C<log>
|
|
|
|
|
|
|
|
$obj->log(warn => "something happens");
|
|
|
|
|
|
|
|
Add some info to processing log.
|
|
|
|
Takes two args: message level (debug/info/warn/error) and message text
|
|
|
|
|
|
|
|
Collected messages can be accessed like this:
|
|
|
|
|
|
|
|
my @log = @{ $obj->{log} };
|
|
|
|
|
|
|
|
=head C<build>
|
|
|
|
=head C<parse>
|
|
|
|
|
|
|
|
Stubs for subclasses.
|
|
|
|
Should return -1 on error, >= 0 on success (parsed events count).
|
|
|
|
|
|
|
|
=head2 C<from_string>
|
|
|
|
|
|
|
|
my $cnt = $obj->from_string($text);
|
|
|
|
|
|
|
|
Parse subtitle from given string.
|
|
|
|
Return codes are the same as C<parse>
|
|
|
|
|
|
|
|
=head2 C<from_file>
|
|
|
|
|
|
|
|
my $cnt = $obj->from_file($path);
|
|
|
|
|
|
|
|
Parse subtitle from given file.
|
|
|
|
Return codes are the same as C<parse>
|
|
|
|
|
|
|
|
=cut
|