You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.6 KiB

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