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
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
|
|
|