diff options
author | Andreas Mair <amair.sob@googlemail.com> | 2006-10-27 12:00:31 +0200 |
---|---|---|
committer | Andreas Mair <amair.sob@googlemail.com> | 2006-10-27 12:00:31 +0200 |
commit | 24b39843b935f8a37b2d9dc909a530b771a61c1f (patch) | |
tree | 73869bd46144e37f32bdc6bff4f93453425f4951 | |
parent | 86c56591df441fad78ac69d2f77196df05305758 (diff) | |
download | vdradmin-am-3.5.0beta.tar.gz vdradmin-am-3.5.0beta.tar.bz2 |
2006-10-27: 3.5.0betav3.5.0beta
- Added: script to convert existing AutoTimers to epgsearch (autotimer2searchtimer.pl).
- Added: Hack for MSIE to always show vertical scroller to prevent horizontal scroller (Submitted by Udo Richter).
- Added: Support for epgsearch plugin; AutoTimer now considered deprecated and unsupported.
- Minor bugfixes
55 files changed, 7795 insertions, 7841 deletions
@@ -1,3 +1,91 @@ +2006-10-27 amair + + * HISTORY, autotimer2searchtimer.pl, make.sh, vdradmind.pl, + lib/Template/Plugin/HTML.pm, lib/Template/Plugin/JavaScript.pm, + po/cs.po, po/de.po, po/es.po, po/fi.po, po/fr.po, po/nl.po, + po/ru.po, po/vdradmin.pot, template/default/about.html, + template/default/at_timer_list.html, + template/default/epgsearch_list.html, + template/default/epgsearch_new.html, template/default/library.js, + template/default/navigation.html, template/default/rec_list.html, + template/default/style.css, template/default/timer_list.html: + + Added epgsearch plugin support. + Release v3.5.0beta. + +2006-10-27 amair + + * vdradmind.pl: + + Fixed crash if a timer's length is 0 + buffer start + buffer stop. + +2006-10-26 amair + + * template/default/style.css, template/default/prog_list2.html: + + Some layout fixes. + +2006-10-26 amair + + * vdradmind.pl: + + Remove trailing "\n" from "hostname" output. + +2006-10-20 amair + + * template/default/error.html, + template/default/default/sauerei.gif: + + Removed "sauerei.gif" on error page. + +2006-10-20 amair + + * template/default/about.html, template/default/at_timer_list.html, + template/default/at_timer_new.html, template/default/config.html, + template/default/help_at_timer_list.html, + template/default/help_at_timer_new.html, + template/default/help_config.html, + template/default/help_rec_list.html, + template/default/help_timer_list.html, + template/default/help_timer_new.html, + template/default/index.html, template/default/prog_list.html, + template/default/prog_list2.html, + template/default/prog_summary.html, + template/default/prog_summary2.html, + template/default/prog_timeline.html, + template/default/rec_edit.html, template/default/rec_list.html, + template/default/style.css, template/default/timer_list.html, + template/default/timer_new.html, template/default/tv.html, + template/default/vdr_cmds.html: + + * MSIE6 fix for too wide lists having a scrollbar at the left. + * Fixed some (X)HTML bugs. + +2006-10-02 amair + + * template/default/about.html: + + Added Karel Borkovec to translation team (Reported by Jörg Bornkessel) + Sort languages by date they were added. + +2006-10-02 amair + + * vdradmind.pl: + + Log error for Net::SMTP only if module really missing (Provided by Tobias Grimm). + +2006-09-30 scop + + * template/default/navigation.html, template/default/rec_list.html: + + Small HTML cleanups/fixes. + +2006-09-30 scop + + * po/fi.po: + + Add some missing Finnish translations. + 2006-09-29 tag v3_4_7 2006-09-29 amair @@ -4,6 +4,12 @@ E-Mail: mail AT andreas DOT vdr-developer DOT org VDR-Portal: amair ----------------------------------------------------------- +2006-10-27: 3.5.0beta +- Added: script to convert existing AutoTimers to epgsearch (autotimer2searchtimer.pl). +- Added: Hack for MSIE to always show vertical scroller to prevent horizontal scroller (Submitted by Udo Richter). +- Added: Support for epgsearch plugin; AutoTimer now considered deprecated and unsupported. +- Minor bugfixes + 2006-09-29: 3.4.7 - Autosave now takes care of the number of lines to show in commands menu (Requested by Ronny Kornexl). diff --git a/autotimer2searchtimer.pl b/autotimer2searchtimer.pl new file mode 100755 index 0000000..6cb24b2 --- /dev/null +++ b/autotimer2searchtimer.pl @@ -0,0 +1,277 @@ +#!/usr/bin/perl +# +# Convert VDRAdmin-AM autotimer (vdradmin.at) into +# epgsearch searchtimer (epgsearch.conf) +# +# Version: 0.2beta 2006-08-06 +# +# Author: Mike Constabel (vejoun @ vdrportal) +# Andreas Mair (amair @ vdrportal) +# +# You need: +# +# - VDRAdmin-AM >= 3.4.6 +# - Epgsearch >= 0.9.16 +# + +use Socket; +use Getopt::Std; + +#--------------------------------------------------------------------------- + +$Usage = qq{ +Usage: $0 [options] -i filename -o filename -m 0|1 + $0 [options] -i filename -o filename -s -m 0|1 + $0 [options] -i filename -s -m 0|1 + +Action: -i filename input file, vdradmind.at + -o filename output file, epgsearch.conf.new (file will be overwritten!) + -s send to epgsearch via svdrp (needs running vdr with epgsearch plugin) + -m 0|1 which new searchmode for autotimers with active status: yes, once + 0 means the whole string must match + 1 means every word must match [default] + In epgsearch 0 is default, vdradmin only use 1 + +Options: -r autotimers with regular expressions will be disabled while converting, + with this option you can enable the corresponding searchtimers. + You should not do this! Check the converted searchtimers and enable + them manually! Wrong searchtimers will flood your timers. + -d host Host for SVDRP import + -p port Port for SVDRP import + -h Show this help text + +}; + +die $Usage if (!getopts('i:o:srm:d:p:h') || !$opt_i || $opt_h || !($opt_o || $opt_s) || !($opt_m == 0 || $opt_m == 1)); + +my $AT_FILENAME = $opt_i; +my $EPGSEARCH_FILENAME = $opt_o; +my $SENDSVDRP = $opt_s ? 1 : 0; +my $EnableRegex = $opt_r ? 1 : 0; +my $Searchmode = defined $opt_m ? $opt_m : 1; +my $Dest = $opt_d ? $opt_d : "localhost"; +my $Port = $opt_p ? $opt_p : 2001; + +my $Timeout = 30; # max. seconds to wait for svdrp response + +my $conf_str="%i:%s:%i:%s:%s:%i:%s:%i:%i:%i:%i:%i:0:::%i:%i:%s:%i:%s:%s:%s:%s:%s:0:0:0::%i:0:1:1:0:0:0:0:0:1:0:0::1"; + +# [ID=0], pattern, time?, starttime, stopptime, channel? (0,1), channel, match case (0,1), search mode (0,4), title, subtitle, description, [duration=0], [min=""], [max=""], searchtimer? (0,1), +# use week? (0,1), weekday "0", series? (0,1), dir, prio, lft, bstart, bstop, [VPS=0], [action=0], [use ext. epg=0], [ext. epg=""], done? (0,1), [repeats=0], [ctitle=1], [csubtitle=1], [cdescription=0], +# [cext. epg=0], [reapeats within days=0], [delete after x days=0], [keep=0], [min before switch=1], [nach x rec pausieren=0], [blacklist=0], [blacklist-id=""], [fuzzy=0] + +sub AT_Read { + my (@at); + if (-s $AT_FILENAME) { + open(AT_FILE, $AT_FILENAME) || printf("Can't open %s", $AT_FILENAME); + while (<AT_FILE>) { + chomp; + next if ($_ eq ""); + my ($active, $pattern, $section, $start, $stop, $episode, $prio, $lft, $channel, $directory, $done, $weekday, $buffers, $bstart, $bstop) = split(/\:/, $_); + $pattern =~ s/\|/\:/g; + $pattern =~ s/\\:/\|/g; + $directory =~ s/\|/\:/g; + push( + @at, + { active => $active, + pattern => $pattern, + section => $section, + start => $start, + stop => $stop, + buffers => $buffers, + bstart => $bstart, + bstop => $bstop, + episode => $episode, + prio => $prio, + lft => $lft, + channel => $channel, + directory => $directory, + done => $done, + weekdays => $weekday + } + ); + } + close(AT_FILE); + } + return (@at); +} + +sub CONF_Collect { + my @at = @_; + my @st; + my $weekday = $stitle = $ssubtitle = $sdescription = $id = $case = 0; + my $mode = $Searchmode; + my $pattern; + my $directory; + + for my $at (@at) { + + if ($at->{pattern} =~ /^\/(.*)\/(i?)$/) { + $mode = 4; + $case = 1 if ($2 eq "i"); + $pattern = $1; + } else { + $pattern = $at->{pattern}; + } + $directory = $at->{directory}; + $pattern =~ s/\|/\!\^pipe\^\!/g; + $pattern =~ s/\:/\|/g; + $directory =~ s/\|/\!\^pipe\^\!/g; + $directory =~ s/\:/\|/g; + + $weekday = undef; + my $wd_bits = 0; + if ($at->{weekdays} =~ /^(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/) { + if ($7) { #Sunday + $weekday = 0; + $wd_bits |= 1; + } + if ($1) { #Monday + $weekday = 1; + $wd_bits |= 2; + } + if ($2) { #Tuesday + $weekday = 2; + $wd_bits |= 4; + } + if ($3) { #Wednesday + $weekday = 3; + $wd_bits |= 8; + } + if ($4) { #Thursday + $weekday = 4; + $wd_bits |= 16; + } + if ($5) { #Friday + $weekday = 5; + $wd_bits |= 32; + } + if ($6) { #Saturday + $weekday = 6; + $wd_bits |= 64; + } + } + if ($wd_bits !~ /^(1|2|4|8|16|32|64)$/) { + $weekday = -$wd_bits; + } + $stitle = $at->{section} & 1 ? 1 : 0; + $ssubtitle = $at->{section} & 2 ? 1 : 0; + $sdescription = $at->{section} & 4 ? 1 : 0; + + $id += 1 if ($EPGSEARCH_FILENAME); + + $data = sprintf $conf_str, + $id, + $pattern, + $at->{start} || $at->{stop} ? 1 : 0, + $at->{start} ? sprintf("%04i", $at->{start}) : "", + $at->{stop} ? sprintf("%04i", $at->{stop}) : "", + $at->{channel} ? 1 : 0, + $at->{channel} ? $at->{channel} : "", + $case, + $mode, + $stitle, + $ssubtitle, + $sdescription, + ($at->{active} && ($mode != 4 || $EnableRegex)) ? 1 : 0, + $weekday eq -127 || $wd_bits eq 0 ? 0 : 1, + $weekday, + $at->{episode} ? 1 : 0, + $directory, + $at->{prio} ? $at->{prio} : "", + $at->{lft} ? $at->{lft} : "", + $at->{buffers} ? $at->{bstart} : "", + $at->{buffers} ? $at->{bstop} : "", + $at->{done} ? 1 : 0; #avoid_repeats + push @st,$data; + } + return (@st) +} + +sub Error { + print STDERR "@_\n"; + close(SOCK); + exit 0; +} + +sub SplitLine($) { + my ($line)=@_; + if ($line =~ /^([0-9]{3})([- ])(.*)$/) { + return ($1,$2,$3); + } + Error("Unidentified Line: $line"); +} + +sub WriteSearchtimerSVDRP { + my @str = @_; + + $SIG{ALRM} = sub { Error("timeout"); }; + alarm($Timeout); + + my $iaddr = inet_aton($Dest) || Error("no host: $Dest"); + my $paddr = sockaddr_in($Port, $iaddr); + + my $proto = getprotobyname('tcp'); + socket(SOCK, PF_INET, SOCK_STREAM, $proto) || Error("socket: $!"); + connect(SOCK, $paddr) || Error("connect: $!"); + select(SOCK); $| = 1; + select(STDOUT); + + while (<SOCK>) { + chomp; + print STDOUT "(1):$_\n"; + my ($code,$sep,$data)=SplitLine($_); + last if ($code=220 && $sep eq ' '); + } + + foreach my $line (@str) { + chomp $line; + printf SOCK "PLUG epgsearch NEWS %s\r\n", $line; + } + + while (<SOCK>) { + chomp; + print STDOUT "(2):$_\n"; + my ($code,$sep,$data)=SplitLine($_); + last if ($code==900 && $sep eq ' '); + } + + print SOCK "quit\r\n"; + + while (<SOCK>) { + chomp; + print STDOUT "(3):$_\n"; + my ($code,$sep,$data)=SplitLine($_); + last if ($code==221 && $sep eq ' '); + } + + close(SOCK) || Error("close: $!"); +} + +sub WriteSearchtimerFile { + my @str = @_; + + open(STFILE, ">".$EPGSEARCH_FILENAME) || die("Cannot open file ${EPGSEARCH_FILENAME}!"); + print STFILE "#version 2 - DONT TOUCH THIS!\n"; + foreach my $line (@str) { + chomp $line; + printf STFILE "%s\n", $line; + } + close STFILE +} + +#--------------------------------------------------------------------------- +# main + +my @st; + +@st = CONF_Collect(AT_Read()); + +if ( $SENDSVDRP ) { + WriteSearchtimerSVDRP(@st); +} + +if ( $EPGSEARCH_FILENAME ) { + WriteSearchtimerFile(@st); +} + diff --git a/lib/Parse/RecDescent.pm b/lib/Parse/RecDescent.pm deleted file mode 100644 index 35b9e9d..0000000 --- a/lib/Parse/RecDescent.pm +++ /dev/null @@ -1,3045 +0,0 @@ -# GENERATE RECURSIVE DESCENT PARSER OBJECTS FROM A GRAMMARC -# SEE RecDescent.pod FOR FULL DETAILS - -use 5.005; -use strict; - -package Parse::RecDescent; - -use Text::Balanced qw ( extract_codeblock extract_bracketed extract_quotelike extract_delimited ); - -use vars qw ( $skip ); - - *defskip = \ '\s*'; # DEFAULT SEPARATOR IS OPTIONAL WHITESPACE - $skip = '\s*'; # UNIVERSAL SEPARATOR IS OPTIONAL WHITESPACE -my $MAXREP = 100_000_000; # REPETITIONS MATCH AT MOST 100,000,000 TIMES - - -sub import # IMPLEMENT PRECOMPILER BEHAVIOUR UNDER: - # perl -MParse::RecDescent - <grammarfile> <classname> -{ - local *_die = sub { print @_, "\n"; exit }; - - my ($package, $file, $line) = caller; - if (substr($file,0,1) eq '-' && $line == 0) - { - _die("Usage: perl -MLocalTest - <grammarfile> <classname>") - unless @ARGV == 2; - - my ($sourcefile, $class) = @ARGV; - - local *IN; - open IN, $sourcefile - or _die("Can't open grammar file '$sourcefile'"); - - my $grammar = join '', <IN>; - - Parse::RecDescent->Precompile($grammar, $class, $sourcefile); - exit; - } -} - -sub Save -{ - my ($self, $class) = @_; - $self->{saving} = 1; - $self->Precompile(undef,$class); - $self->{saving} = 0; -} - -sub Precompile -{ - my ($self, $grammar, $class, $sourcefile) = @_; - - $class =~ /^(\w+::)*\w+$/ or croak("Bad class name: $class"); - - my $modulefile = $class; - $modulefile =~ s/.*:://; - $modulefile .= ".pm"; - - open OUT, ">$modulefile" - or croak("Can't write to new module file '$modulefile'"); - - print STDERR "precompiling grammar from file '$sourcefile'\n", - "to class $class in module file '$modulefile'\n" - if $grammar && $sourcefile; - - # local $::RD_HINT = 1; - $self = Parse::RecDescent->new($grammar,1,$class) - || croak("Can't compile bad grammar") - if $grammar; - - foreach ( keys %{$self->{rules}} ) - { $self->{rules}{$_}{changed} = 1 } - - print OUT "package $class;\nuse Parse::RecDescent;\n\n"; - - print OUT "{ my \$ERRORS;\n\n"; - - print OUT $self->_code(); - - print OUT "}\npackage $class; sub new { "; - print OUT "my "; - - require Data::Dumper; - print OUT Data::Dumper->Dump([$self], [qw(self)]); - - print OUT "}"; - - close OUT - or croak("Can't write to new module file '$modulefile'"); -} - - -package Parse::RecDescent::LineCounter; - - -sub TIESCALAR # ($classname, \$text, $thisparser, $prevflag) -{ - bless { - text => $_[1], - parser => $_[2], - prev => $_[3]?1:0, - }, $_[0]; -} - -my %counter_cache; - -sub FETCH -{ - my $parser = $_[0]->{parser}; - my $from = $parser->{fulltextlen}-length(${$_[0]->{text}})-$_[0]->{prev} -; - - unless (exists $counter_cache{$from}) { - $parser->{lastlinenum} = $parser->{offsetlinenum} - - Parse::RecDescent::_linecount(substr($parser->{fulltext},$from)) - + 1; - $counter_cache{$from} = $parser->{lastlinenum}; - } - return $counter_cache{$from}; -} - -sub STORE -{ - my $parser = $_[0]->{parser}; - $parser->{offsetlinenum} -= $parser->{lastlinenum} - $_[1]; - return undef; -} - -sub resync # ($linecounter) -{ - my $self = tied($_[0]); - die "Tried to alter something other than a LineCounter\n" - unless $self =~ /Parse::RecDescent::LineCounter/; - - my $parser = $self->{parser}; - my $apparently = $parser->{offsetlinenum} - - Parse::RecDescent::_linecount(${$self->{text}}) - + 1; - - $parser->{offsetlinenum} += $parser->{lastlinenum} - $apparently; - return 1; -} - -package Parse::RecDescent::ColCounter; - -sub TIESCALAR # ($classname, \$text, $thisparser, $prevflag) -{ - bless { - text => $_[1], - parser => $_[2], - prev => $_[3]?1:0, - }, $_[0]; -} - -sub FETCH -{ - my $parser = $_[0]->{parser}; - my $missing = $parser->{fulltextlen}-length(${$_[0]->{text}})-$_[0]->{prev}+1; - substr($parser->{fulltext},0,$missing) =~ m/^(.*)\Z/m; - return length($1); -} - -sub STORE -{ - die "Can't set column number via \$thiscolumn\n"; -} - - -package Parse::RecDescent::OffsetCounter; - -sub TIESCALAR # ($classname, \$text, $thisparser, $prev) -{ - bless { - text => $_[1], - parser => $_[2], - prev => $_[3]?-1:0, - }, $_[0]; -} - -sub FETCH -{ - my $parser = $_[0]->{parser}; - return $parser->{fulltextlen}-length(${$_[0]->{text}})+$_[0]->{prev}; -} - -sub STORE -{ - die "Can't set current offset via \$thisoffset or \$prevoffset\n"; -} - - - -package Parse::RecDescent::Rule; - -sub new ($$$$$) -{ - my $class = ref($_[0]) || $_[0]; - my $name = $_[1]; - my $owner = $_[2]; - my $line = $_[3]; - my $replace = $_[4]; - - if (defined $owner->{"rules"}{$name}) - { - my $self = $owner->{"rules"}{$name}; - if ($replace && !$self->{"changed"}) - { - $self->reset; - } - return $self; - } - else - { - return $owner->{"rules"}{$name} = - bless - { - "name" => $name, - "prods" => [], - "calls" => [], - "changed" => 0, - "line" => $line, - "impcount" => 0, - "opcount" => 0, - "vars" => "", - }, $class; - } -} - -sub reset($) -{ - @{$_[0]->{"prods"}} = (); - @{$_[0]->{"calls"}} = (); - $_[0]->{"changed"} = 0; - $_[0]->{"impcount"} = 0; - $_[0]->{"opcount"} = 0; - $_[0]->{"vars"} = ""; -} - -sub DESTROY {} - -sub hasleftmost($$) -{ - my ($self, $ref) = @_; - - my $prod; - foreach $prod ( @{$self->{"prods"}} ) - { - return 1 if $prod->hasleftmost($ref); - } - - return 0; -} - -sub leftmostsubrules($) -{ - my $self = shift; - my @subrules = (); - - my $prod; - foreach $prod ( @{$self->{"prods"}} ) - { - push @subrules, $prod->leftmostsubrule(); - } - - return @subrules; -} - -sub expected($) -{ - my $self = shift; - my @expected = (); - - my $prod; - foreach $prod ( @{$self->{"prods"}} ) - { - my $next = $prod->expected(); - unless (! $next or _contains($next,@expected) ) - { - push @expected, $next; - } - } - - return join ', or ', @expected; -} - -sub _contains($@) -{ - my $target = shift; - my $item; - foreach $item ( @_ ) { return 1 if $target eq $item; } - return 0; -} - -sub addcall($$) -{ - my ( $self, $subrule ) = @_; - unless ( _contains($subrule, @{$self->{"calls"}}) ) - { - push @{$self->{"calls"}}, $subrule; - } -} - -sub addprod($$) -{ - my ( $self, $prod ) = @_; - push @{$self->{"prods"}}, $prod; - $self->{"changed"} = 1; - $self->{"impcount"} = 0; - $self->{"opcount"} = 0; - $prod->{"number"} = $#{$self->{"prods"}}; - return $prod; -} - -sub addvar -{ - my ( $self, $var, $parser ) = @_; - if ($var =~ /\A\s*local\s+([%@\$]\w+)/) - { - $parser->{localvars} .= " $1"; - $self->{"vars"} .= "$var;\n" } - else - { $self->{"vars"} .= "my $var;\n" } - $self->{"changed"} = 1; - return 1; -} - -sub addautoscore -{ - my ( $self, $code ) = @_; - $self->{"autoscore"} = $code; - $self->{"changed"} = 1; - return 1; -} - -sub nextoperator($) -{ - my $self = shift; - my $prodcount = scalar @{$self->{"prods"}}; - my $opcount = ++$self->{"opcount"}; - return "_operator_${opcount}_of_production_${prodcount}_of_rule_$self->{name}"; -} - -sub nextimplicit($) -{ - my $self = shift; - my $prodcount = scalar @{$self->{"prods"}}; - my $impcount = ++$self->{"impcount"}; - return "_alternation_${impcount}_of_production_${prodcount}_of_rule_$self->{name}"; -} - - -sub code -{ - my ($self, $namespace, $parser) = @_; - -eval 'undef &' . $namespace . '::' . $self->{"name"} unless $parser->{saving}; - - my $code = -' -# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) -sub ' . $namespace . '::' . $self->{"name"} . ' -{ - my $thisparser = $_[0]; - use vars q{$tracelevel}; - local $tracelevel = ($tracelevel||0)+1; - $ERRORS = 0; - my $thisrule = $thisparser->{"rules"}{"' . $self->{"name"} . '"}; - - Parse::RecDescent::_trace(q{Trying rule: [' . $self->{"name"} . ']}, - Parse::RecDescent::_tracefirst($_[1]), - q{' . $self->{"name"} . '}, - $tracelevel) - if defined $::RD_TRACE; - - ' . ($parser->{deferrable} - ? 'my $def_at = @{$thisparser->{deferred}};' - : '') . - ' - my $err_at = @{$thisparser->{errors}}; - - my $score; - my $score_return; - my $_tok; - my $return = undef; - my $_matched=0; - my $commit=0; - my @item = (); - my %item = (); - my $repeating = defined($_[2]) && $_[2]; - my $_noactions = defined($_[3]) && $_[3]; - my @arg = defined $_[4] ? @{ &{$_[4]} } : (); - my %arg = ($#arg & 01) ? @arg : (@arg, undef); - my $text; - my $lastsep=""; - my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); - $expectation->at($_[1]); - '. ($parser->{_check}{thisoffset}?' - my $thisoffset; - tie $thisoffset, q{Parse::RecDescent::OffsetCounter}, \$text, $thisparser; - ':'') . ($parser->{_check}{prevoffset}?' - my $prevoffset; - tie $prevoffset, q{Parse::RecDescent::OffsetCounter}, \$text, $thisparser, 1; - ':'') . ($parser->{_check}{thiscolumn}?' - my $thiscolumn; - tie $thiscolumn, q{Parse::RecDescent::ColCounter}, \$text, $thisparser; - ':'') . ($parser->{_check}{prevcolumn}?' - my $prevcolumn; - tie $prevcolumn, q{Parse::RecDescent::ColCounter}, \$text, $thisparser, 1; - ':'') . ($parser->{_check}{prevline}?' - my $prevline; - tie $prevline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser, 1; - ':'') . ' - my $thisline; - tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; - - '. $self->{vars} .' -'; - - my $prod; - foreach $prod ( @{$self->{"prods"}} ) - { - $prod->addscore($self->{autoscore},0,0) if $self->{autoscore}; - next unless $prod->checkleftmost(); - $code .= $prod->code($namespace,$self,$parser); - - $code .= $parser->{deferrable} - ? ' splice - @{$thisparser->{deferred}}, $def_at unless $_matched; - ' - : ''; - } - - $code .= -' - unless ( $_matched || defined($return) || defined($score) ) - { - ' .($parser->{deferrable} - ? ' splice @{$thisparser->{deferred}}, $def_at; - ' - : '') . ' - - $_[1] = $text; # NOT SURE THIS IS NEEDED - Parse::RecDescent::_trace(q{<<Didn\'t match rule>>}, - Parse::RecDescent::_tracefirst($_[1]), - q{' . $self->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - return undef; - } - if (!defined($return) && defined($score)) - { - Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", - q{' . $self->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - $return = $score_return; - } - splice @{$thisparser->{errors}}, $err_at; - $return = $item[$#item] unless defined $return; - if (defined $::RD_TRACE) - { - Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . - $return . q{])}, "", - q{' . $self->{"name"} .'}, - $tracelevel); - Parse::RecDescent::_trace(q{(consumed: [} . - Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, - Parse::RecDescent::_tracefirst($text), - , q{' . $self->{"name"} .'}, - $tracelevel) - } - $_[1] = $text; - return $return; -} -'; - - return $code; -} - -my @left; -sub isleftrec($$) -{ - my ($self, $rules) = @_; - my $root = $self->{"name"}; - @left = $self->leftmostsubrules(); - my $next; - foreach $next ( @left ) - { - next unless defined $rules->{$next}; # SKIP NON-EXISTENT RULES - return 1 if $next eq $root; - my $child; - foreach $child ( $rules->{$next}->leftmostsubrules() ) - { - push(@left, $child) - if ! _contains($child, @left) ; - } - } - return 0; -} - -package Parse::RecDescent::Production; - -sub describe ($;$) -{ - return join ' ', map { $_->describe($_[1]) or () } @{$_[0]->{items}}; -} - -sub new ($$;$$) -{ - my ($self, $line, $uncommit, $error) = @_; - my $class = ref($self) || $self; - - bless - { - "items" => [], - "uncommit" => $uncommit, - "error" => $error, - "line" => $line, - strcount => 0, - patcount => 0, - dircount => 0, - actcount => 0, - }, $class; -} - -sub expected ($) -{ - my $itemcount = scalar @{$_[0]->{"items"}}; - return ($itemcount) ? $_[0]->{"items"}[0]->describe(1) : ''; -} - -sub hasleftmost ($$) -{ - my ($self, $ref) = @_; - return ${$self->{"items"}}[0] eq $ref if scalar @{$self->{"items"}}; - return 0; -} - -sub leftmostsubrule($) -{ - my $self = shift; - - if ( $#{$self->{"items"}} >= 0 ) - { - my $subrule = $self->{"items"}[0]->issubrule(); - return $subrule if defined $subrule; - } - - return (); -} - -sub checkleftmost($) -{ - my @items = @{$_[0]->{"items"}}; - if (@items==1 && ref($items[0]) =~ /\AParse::RecDescent::Error/ - && $items[0]->{commitonly} ) - { - Parse::RecDescent::_warn(2,"Lone <error?> in production treated - as <error?> <reject>"); - Parse::RecDescent::_hint("A production consisting of a single - conditional <error?> directive would - normally succeed (with the value zero) if the - rule is not 'commited' when it is - tried. Since you almost certainly wanted - '<error?> <reject>' Parse::RecDescent - supplied it for you."); - push @{$_[0]->{items}}, - Parse::RecDescent::UncondReject->new(0,0,'<reject>'); - } - elsif (@items==1 && ($items[0]->describe||"") =~ /<rulevar|<autoscore/) - { - # Do nothing - } - elsif (@items && - ( ref($items[0]) =~ /\AParse::RecDescent::UncondReject/ - || ($items[0]->describe||"") =~ /<autoscore/ - )) - { - Parse::RecDescent::_warn(1,"Optimizing away production: [". $_[0]->describe ."]"); - my $what = $items[0]->describe =~ /<rulevar/ - ? "a <rulevar> (which acts like an unconditional <reject> during parsing)" - : $items[0]->describe =~ /<autoscore/ - ? "an <autoscore> (which acts like an unconditional <reject> during parsing)" - : "an unconditional <reject>"; - my $caveat = $items[0]->describe =~ /<rulevar/ - ? " after the specified variable was set up" - : ""; - my $advice = @items > 1 - ? "However, there were also other (useless) items after the leading " - . $items[0]->describe - . ", so you may have been expecting some other behaviour." - : "You can safely ignore this message."; - Parse::RecDescent::_hint("The production starts with $what. That means that the - production can never successfully match, so it was - optimized out of the final parser$caveat. $advice"); - return 0; - } - return 1; -} - -sub changesskip($) -{ - my $item; - foreach $item (@{$_[0]->{"items"}}) - { - if (ref($item) =~ /Parse::RecDescent::(Action|Directive)/) - { - return 1 if $item->{code} =~ /\$skip/; - } - } - return 0; -} - -sub adddirective -{ - my ( $self, $whichop, $line, $name ) = @_; - push @{$self->{op}}, - { type=>$whichop, line=>$line, name=>$name, - offset=> scalar(@{$self->{items}}) }; -} - -sub addscore -{ - my ( $self, $code, $lookahead, $line ) = @_; - $self->additem(Parse::RecDescent::Directive->new( - "local \$^W; - my \$thisscore = do { $code } + 0; - if (!defined(\$score) || \$thisscore>\$score) - { \$score=\$thisscore; \$score_return=\$item[-1]; } - undef;", $lookahead, $line,"<score: $code>") ) - unless $self->{items}[-1]->describe =~ /<score/; - return 1; -} - -sub check_pending -{ - my ( $self, $line ) = @_; - if ($self->{op}) - { - while (my $next = pop @{$self->{op}}) - { - Parse::RecDescent::_error("Incomplete <$next->{type}op:...>.", $line); - Parse::RecDescent::_hint( - "The current production ended without completing the - <$next->{type}op:...> directive that started near line - $next->{line}. Did you forget the closing '>'?"); - } - } - return 1; -} - -sub enddirective -{ - my ( $self, $line, $minrep, $maxrep ) = @_; - unless ($self->{op}) - { - Parse::RecDescent::_error("Unmatched > found.", $line); - Parse::RecDescent::_hint( - "A '>' angle bracket was encountered, which typically - indicates the end of a directive. However no suitable - preceding directive was encountered. Typically this - indicates either a extra '>' in the grammar, or a - problem inside the previous directive."); - return; - } - my $op = pop @{$self->{op}}; - my $span = @{$self->{items}} - $op->{offset}; - if ($op->{type} =~ /left|right/) - { - if ($span != 3) - { - Parse::RecDescent::_error( - "Incorrect <$op->{type}op:...> specification: - expected 3 args, but found $span instead", $line); - Parse::RecDescent::_hint( - "The <$op->{type}op:...> directive requires a - sequence of exactly three elements. For example: - <$op->{type}op:leftarg /op/ rightarg>"); - } - else - { - push @{$self->{items}}, - Parse::RecDescent::Operator->new( - $op->{type}, $minrep, $maxrep, splice(@{$self->{"items"}}, -3)); - $self->{items}[-1]->sethashname($self); - $self->{items}[-1]{name} = $op->{name}; - } - } -} - -sub prevwasreturn -{ - my ( $self, $line ) = @_; - unless (@{$self->{items}}) - { - Parse::RecDescent::_error( - "Incorrect <return:...> specification: - expected item missing", $line); - Parse::RecDescent::_hint( - "The <return:...> directive requires a - sequence of at least one item. For example: - <return: list>"); - return; - } - push @{$self->{items}}, - Parse::RecDescent::Result->new(); -} - -sub additem -{ - my ( $self, $item ) = @_; - $item->sethashname($self); - push @{$self->{"items"}}, $item; - return $item; -} - - -sub preitempos -{ - return q - { - push @itempos, {'offset' => {'from'=>$thisoffset, 'to'=>undef}, - 'line' => {'from'=>$thisline, 'to'=>undef}, - 'column' => {'from'=>$thiscolumn, 'to'=>undef} }; - } -} - -sub incitempos -{ - return q - { - $itempos[$#itempos]{'offset'}{'from'} += length($1); - $itempos[$#itempos]{'line'}{'from'} = $thisline; - $itempos[$#itempos]{'column'}{'from'} = $thiscolumn; - } -} - -sub postitempos -{ - return q - { - $itempos[$#itempos]{'offset'}{'to'} = $prevoffset; - $itempos[$#itempos]{'line'}{'to'} = $prevline; - $itempos[$#itempos]{'column'}{'to'} = $prevcolumn; - } -} - -sub code($$$$) -{ - my ($self,$namespace,$rule,$parser) = @_; - my $code = -' - while (!$_matched' - . (defined $self->{"uncommit"} ? '' : ' && !$commit') - . ') - { - ' . - ($self->changesskip() - ? 'local $skip = defined($skip) ? $skip : $Parse::RecDescent::skip;' - : '') .' - Parse::RecDescent::_trace(q{Trying production: [' - . $self->describe . ']}, - Parse::RecDescent::_tracefirst($_[1]), - q{' . $rule ->{name}. '}, - $tracelevel) - if defined $::RD_TRACE; - my $thisprod = $thisrule->{"prods"}[' . $self->{"number"} . ']; - ' . (defined $self->{"error"} ? '' : '$text = $_[1];' ) . ' - my $_savetext; - @item = (q{' . $rule->{"name"} . '}); - %item = (__RULE__ => q{' . $rule->{"name"} . '}); - my $repcount = 0; - -'; - $code .= -' my @itempos = ({}); -' if $parser->{_check}{itempos}; - - my $item; - my $i; - - for ($i = 0; $i < @{$self->{"items"}}; $i++) - { - $item = ${$self->{items}}[$i]; - - $code .= preitempos() if $parser->{_check}{itempos}; - - $code .= $item->code($namespace,$rule,$parser->{_check}); - - $code .= postitempos() if $parser->{_check}{itempos}; - - } - - if ($parser->{_AUTOACTION} && defined($item) && !$item->isa("Parse::RecDescent::Action")) - { - $code .= $parser->{_AUTOACTION}->code($namespace,$rule); - Parse::RecDescent::_warn(1,"Autogenerating action in rule - \"$rule->{name}\": - $parser->{_AUTOACTION}{code}") - and - Parse::RecDescent::_hint("The \$::RD_AUTOACTION was defined, - so any production not ending in an - explicit action has the specified - \"auto-action\" automatically - appended."); - } - elsif ($parser->{_AUTOTREE} && defined($item) && !$item->isa("Parse::RecDescent::Action")) - { - if ($i==1 && $item->isterminal) - { - $code .= $parser->{_AUTOTREE}{TERMINAL}->code($namespace,$rule); - } - else - { - $code .= $parser->{_AUTOTREE}{NODE}->code($namespace,$rule); - } - Parse::RecDescent::_warn(1,"Autogenerating tree-building action in rule - \"$rule->{name}\"") - and - Parse::RecDescent::_hint("The directive <autotree> was specified, - so any production not ending - in an explicit action has - some parse-tree building code - automatically appended."); - } - - $code .= -' - - Parse::RecDescent::_trace(q{>>Matched production: [' - . $self->describe . ']<<}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - $_matched = 1; - last; - } - -'; - return $code; -} - -1; - -package Parse::RecDescent::Action; - -sub describe { undef } - -sub sethashname { $_[0]->{hashname} = '__ACTION' . ++$_[1]->{actcount} .'__'; } - -sub new -{ - my $class = ref($_[0]) || $_[0]; - bless - { - "code" => $_[1], - "lookahead" => $_[2], - "line" => $_[3], - }, $class; -} - -sub issubrule { undef } -sub isterminal { 0 } - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - -' - Parse::RecDescent::_trace(q{Trying action}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .' - - $_tok = ($_noactions) ? 0 : do ' . $self->{"code"} . '; - ' . ($self->{"lookahead"}<0?'if':'unless') . ' (defined $_tok) - { - Parse::RecDescent::_trace(q{<<Didn\'t match action>> (return value: [undef])}) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $_tok; - ' . ($self->{line}>=0 ? '$item{'. $self->{hashname} .'}=$_tok;' : '' ) .' - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' -' -} - - -1; - -package Parse::RecDescent::Directive; - -sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} . '__'; } - -sub issubrule { undef } -sub isterminal { 0 } -sub describe { $_[1] ? '' : $_[0]->{name} } - -sub new ($$$$$) -{ - my $class = ref($_[0]) || $_[0]; - bless - { - "code" => $_[1], - "lookahead" => $_[2], - "line" => $_[3], - "name" => $_[4], - }, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - -' - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .' - - Parse::RecDescent::_trace(q{Trying directive: [' - . $self->describe . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; ' .' - $_tok = do { ' . $self->{"code"} . ' }; - if (defined($_tok)) - { - Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - else - { - Parse::RecDescent::_trace(q{<<Didn\'t match directive>>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - } - ' . ($self->{"lookahead"} ? '$text = $_savetext and ' : '' ) .' - last ' - . ($self->{"lookahead"}<0?'if':'unless') . ' defined $_tok; - push @item, $item{'.$self->{hashname}.'}=$_tok; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' -' -} - -1; - -package Parse::RecDescent::UncondReject; - -sub issubrule { undef } -sub isterminal { 0 } -sub describe { $_[1] ? '' : $_[0]->{name} } -sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} . '__'; } - -sub new ($$$;$) -{ - my $class = ref($_[0]) || $_[0]; - bless - { - "lookahead" => $_[1], - "line" => $_[2], - "name" => $_[3], - }, $class; -} - -# MARK, YOU MAY WANT TO OPTIMIZE THIS. - - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - -' - Parse::RecDescent::_trace(q{>>Rejecting production<< (found ' - . $self->describe . ')}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - undef $return; - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .' - - $_tok = undef; - ' . ($self->{"lookahead"} ? '$text = $_savetext and ' : '' ) .' - last ' - . ($self->{"lookahead"}<0?'if':'unless') . ' defined $_tok; -' -} - -1; - -package Parse::RecDescent::Error; - -sub issubrule { undef } -sub isterminal { 0 } -sub describe { $_[1] ? '' : $_[0]->{commitonly} ? '<error?:...>' : '<error...>' } -sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} . '__'; } - -sub new ($$$$$) -{ - my $class = ref($_[0]) || $_[0]; - bless - { - "msg" => $_[1], - "lookahead" => $_[2], - "commitonly" => $_[3], - "line" => $_[4], - }, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - - my $action = ''; - - if ($self->{"msg"}) # ERROR MESSAGE SUPPLIED - { - #WAS: $action .= "Parse::RecDescent::_error(qq{$self->{msg}}" . ',$thisline);'; - $action .= 'push @{$thisparser->{errors}}, [qq{'.$self->{msg}.'},$thisline];'; - - } - else # GENERATE ERROR MESSAGE DURING PARSE - { - $action .= ' - my $rule = $item[0]; - $rule =~ s/_/ /g; - #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); - push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; - '; - } - - my $dir = - new Parse::RecDescent::Directive('if (' . - ($self->{"commitonly"} ? '$commit' : '1') . - ") { do {$action} unless ".' $_noactions; undef } else {0}', - $self->{"lookahead"},0,$self->describe); - $dir->{hashname} = $self->{hashname}; - return $dir->code($namespace, $rule, 0); -} - -1; - -package Parse::RecDescent::Token; - -sub sethashname { $_[0]->{hashname} = '__PATTERN' . ++$_[1]->{patcount} . '__'; } - -sub issubrule { undef } -sub isterminal { 1 } -sub describe ($) { shift->{'description'}} - - -# ARGS ARE: $self, $pattern, $left_delim, $modifiers, $lookahead, $linenum -sub new ($$$$$$) -{ - my $class = ref($_[0]) || $_[0]; - my $pattern = $_[1]; - my $pat = $_[1]; - my $ldel = $_[2]; - my $rdel = $ldel; - $rdel =~ tr/{[(</}])>/; - - my $mod = $_[3]; - - my $desc; - - if ($ldel eq '/') { $desc = "$ldel$pattern$rdel$mod" } - else { $desc = "m$ldel$pattern$rdel$mod" } - $desc =~ s/\\/\\\\/g; - $desc =~ s/\$$/\\\$/g; - $desc =~ s/}/\\}/g; - $desc =~ s/{/\\{/g; - - if (!eval "no strict; - local \$SIG{__WARN__} = sub {0}; - '' =~ m$ldel$pattern$rdel" and $@) - { - Parse::RecDescent::_warn(3, "Token pattern \"m$ldel$pattern$rdel\" - may not be a valid regular expression", - $_[5]); - $@ =~ s/ at \(eval.*/./; - Parse::RecDescent::_hint($@); - } - - # QUIETLY PREVENT (WELL-INTENTIONED) CALAMITY - $mod =~ s/[gc]//g; - $pattern =~ s/(\A|[^\\])\\G/$1/g; - - bless - { - "pattern" => $pattern, - "ldelim" => $ldel, - "rdelim" => $rdel, - "mod" => $mod, - "lookahead" => $_[4], - "line" => $_[5], - "description" => $desc, - }, $class; -} - - -sub code($$$$) -{ - my ($self, $namespace, $rule, $check) = @_; - my $ldel = $self->{"ldelim"}; - my $rdel = $self->{"rdelim"}; - my $sdel = $ldel; - my $mod = $self->{"mod"}; - - $sdel =~ s/[[{(<]/{}/; - -my $code = ' - Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe - . ']}, Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{' . ($rule->hasleftmost($self) ? '' - : $self->describe ) . '})->at($text); - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . ' - - ' . ($self->{"lookahead"}<0?'if':'unless') - . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and ' - . ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '') - . ' $text =~ s' . $ldel . '\A(?:' . $self->{"pattern"} . ')' - . $rdel . $sdel . $mod . ') - { - '.($self->{"lookahead"} ? '$text = $_savetext;' : '').' - $expectation->failed(); - Parse::RecDescent::_trace(q{<<Didn\'t match terminal>>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{'.$self->{hashname}.'}=$&; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' -'; - - return $code; -} - -1; - -package Parse::RecDescent::Literal; - -sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; } - -sub issubrule { undef } -sub isterminal { 1 } -sub describe ($) { shift->{'description'} } - -sub new ($$$$) -{ - my $class = ref($_[0]) || $_[0]; - - my $pattern = $_[1]; - - my $desc = $pattern; - $desc=~s/\\/\\\\/g; - $desc=~s/}/\\}/g; - $desc=~s/{/\\{/g; - - bless - { - "pattern" => $pattern, - "lookahead" => $_[2], - "line" => $_[3], - "description" => "'$desc'", - }, $class; -} - - -sub code($$$$) -{ - my ($self, $namespace, $rule, $check) = @_; - -my $code = ' - Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe - . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{' . ($rule->hasleftmost($self) ? '' - : $self->describe ) . '})->at($text); - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . ' - - ' . ($self->{"lookahead"}<0?'if':'unless') - . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and ' - . ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '') - . ' $text =~ s/\A' . quotemeta($self->{"pattern"}) . '//) - { - '.($self->{"lookahead"} ? '$text = $_savetext;' : '').' - $expectation->failed(); - Parse::RecDescent::_trace(qq{<<Didn\'t match terminal>>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $& . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{'.$self->{hashname}.'}=$&; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' -'; - - return $code; -} - -1; - -package Parse::RecDescent::InterpLit; - -sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; } - -sub issubrule { undef } -sub isterminal { 1 } -sub describe ($) { shift->{'description'} } - -sub new ($$$$) -{ - my $class = ref($_[0]) || $_[0]; - - my $pattern = $_[1]; - $pattern =~ s#/#\\/#g; - - my $desc = $pattern; - $desc=~s/\\/\\\\/g; - $desc=~s/}/\\}/g; - $desc=~s/{/\\{/g; - - bless - { - "pattern" => $pattern, - "lookahead" => $_[2], - "line" => $_[3], - "description" => "'$desc'", - }, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule, $check) = @_; - -my $code = ' - Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe - . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{name} . '}, - $tracelevel) - if defined $::RD_TRACE; - $lastsep = ""; - $expectation->is(q{' . ($rule->hasleftmost($self) ? '' - : $self->describe ) . '})->at($text); - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . ' - - ' . ($self->{"lookahead"}<0?'if':'unless') - . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and ' - . ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '') - . ' do { $_tok = "' . $self->{"pattern"} . '"; 1 } and - substr($text,0,length($_tok)) eq $_tok and - do { substr($text,0,length($_tok)) = ""; 1; } - ) - { - '.($self->{"lookahead"} ? '$text = $_savetext;' : '').' - $expectation->failed(); - Parse::RecDescent::_trace(q{<<Didn\'t match terminal>>}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} - . $_tok . q{])}, - Parse::RecDescent::_tracefirst($text)) - if defined $::RD_TRACE; - push @item, $item{'.$self->{hashname}.'}=$_tok; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' -'; - - return $code; -} - -1; - -package Parse::RecDescent::Subrule; - -sub issubrule ($) { return $_[0]->{"subrule"} } -sub isterminal { 0 } -sub sethashname {} - -sub describe ($) -{ - my $desc = $_[0]->{"implicit"} || $_[0]->{"subrule"}; - $desc = "<matchrule:$desc>" if $_[0]->{"matchrule"}; - return $desc; -} - -sub callsyntax($$) -{ - if ($_[0]->{"matchrule"}) - { - return "&{'$_[1]'.qq{$_[0]->{subrule}}}"; - } - else - { - return $_[1].$_[0]->{"subrule"}; - } -} - -sub new ($$$$;$$$) -{ - my $class = ref($_[0]) || $_[0]; - bless - { - "subrule" => $_[1], - "lookahead" => $_[2], - "line" => $_[3], - "implicit" => $_[4] || undef, - "matchrule" => $_[5], - "argcode" => $_[6] || undef, - }, $class; -} - - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - -' - Parse::RecDescent::_trace(q{Trying subrule: [' . $self->{"subrule"} . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} . '}, - $tracelevel) - if defined $::RD_TRACE; - if (1) { no strict qw{refs}; - $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}' - # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text); - : 'q{'.$self->describe.'}' ) . ')->at($text); - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) - . ($self->{"lookahead"}<0?'if':'unless') - . ' (defined ($_tok = ' - . $self->callsyntax($namespace.'::') - . '($thisparser,$text,$repeating,' - . ($self->{"lookahead"}?'1':'$_noactions') - . ($self->{argcode} ? ",sub { return $self->{argcode} }" - : ',sub { \\@arg }') - . '))) - { - '.($self->{"lookahead"} ? '$text = $_savetext;' : '').' - Parse::RecDescent::_trace(q{<<Didn\'t match subrule: [' - . $self->{subrule} . ']>>}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched subrule: [' - . $self->{subrule} . ']<< (return value: [} - . $_tok . q{]}, - - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{' . $self->{subrule} . '}} = $_tok; - push @item, $_tok; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' - } -' -} - -package Parse::RecDescent::Repetition; - -sub issubrule ($) { return $_[0]->{"subrule"} } -sub isterminal { 0 } -sub sethashname { } - -sub describe ($) -{ - my $desc = $_[0]->{"expected"} || $_[0]->{"subrule"}; - $desc = "<matchrule:$desc>" if $_[0]->{"matchrule"}; - return $desc; -} - -sub callsyntax($$) -{ - if ($_[0]->{matchrule}) - { return "sub { goto &{''.qq{$_[1]$_[0]->{subrule}}} }"; } - else - { return "\\&$_[1]$_[0]->{subrule}"; } -} - -sub new ($$$$$$$$$$) -{ - my ($self, $subrule, $repspec, $min, $max, $lookahead, $line, $parser, $matchrule, $argcode) = @_; - my $class = ref($self) || $self; - ($max, $min) = ( $min, $max) if ($max<$min); - - my $desc; - if ($subrule=~/\A_alternation_\d+_of_production_\d+_of_rule/) - { $desc = $parser->{"rules"}{$subrule}->expected } - - if ($lookahead) - { - if ($min>0) - { - return new Parse::RecDescent::Subrule($subrule,$lookahead,$line,$desc,$matchrule,$argcode); - } - else - { - Parse::RecDescent::_error("Not symbol (\"!\") before - \"$subrule\" doesn't make - sense.",$line); - Parse::RecDescent::_hint("Lookahead for negated optional - repetitions (such as - \"!$subrule($repspec)\" can never - succeed, since optional items always - match (zero times at worst). - Did you mean a single \"!$subrule\", - instead?"); - } - } - bless - { - "subrule" => $subrule, - "repspec" => $repspec, - "min" => $min, - "max" => $max, - "lookahead" => $lookahead, - "line" => $line, - "expected" => $desc, - "argcode" => $argcode || undef, - "matchrule" => $matchrule, - }, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - - my ($subrule, $repspec, $min, $max, $lookahead) = - @{$self}{ qw{subrule repspec min max lookahead} }; - -' - Parse::RecDescent::_trace(q{Trying repeated subrule: [' . $self->describe . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} . '}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}' - # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text); - : 'q{'.$self->describe.'}' ) . ')->at($text); - ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .' - unless (defined ($_tok = $thisparser->_parserepeat($text, ' - . $self->callsyntax($namespace.'::') - . ', ' . $min . ', ' . $max . ', ' - . ($self->{"lookahead"}?'1':'$_noactions') - . ',$expectation,' - . ($self->{argcode} ? "sub { return $self->{argcode} }" - : 'undef') - . '))) - { - Parse::RecDescent::_trace(q{<<Didn\'t match repeated subrule: [' - . $self->describe . ']>>}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - last; - } - Parse::RecDescent::_trace(q{>>Matched repeated subrule: [' - . $self->{subrule} . ']<< (} - . @$_tok . q{ times)}, - - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - $item{q{' . "$self->{subrule}($self->{repspec})" . '}} = $_tok; - push @item, $_tok; - ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .' - -' -} - -package Parse::RecDescent::Result; - -sub issubrule { 0 } -sub isterminal { 0 } -sub describe { '' } - -sub new -{ - my ($class, $pos) = @_; - - bless {}, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - - ' - $return = $item[-1]; - '; -} - -package Parse::RecDescent::Operator; - -my @opertype = ( " non-optional", "n optional" ); - -sub issubrule { 0 } -sub isterminal { 0 } - -sub describe { $_[0]->{"expected"} } -sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} . '__'; } - - -sub new -{ - my ($class, $type, $minrep, $maxrep, $leftarg, $op, $rightarg) = @_; - - bless - { - "type" => "${type}op", - "leftarg" => $leftarg, - "op" => $op, - "min" => $minrep, - "max" => $maxrep, - "rightarg" => $rightarg, - "expected" => "<${type}op: ".$leftarg->describe." ".$op->describe." ".$rightarg->describe.">", - }, $class; -} - -sub code($$$$) -{ - my ($self, $namespace, $rule) = @_; - - my ($leftarg, $op, $rightarg) = - @{$self}{ qw{leftarg op rightarg} }; - - my $code = ' - Parse::RecDescent::_trace(q{Trying operator: [' . $self->describe . ']}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} . '}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}' - # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text); - : 'q{'.$self->describe.'}' ) . ')->at($text); - - $_tok = undef; - OPLOOP: while (1) - { - $repcount = 0; - my @item; - '; - - if ($self->{type} eq "leftop" ) - { - $code .= ' - # MATCH LEFTARG - ' . $leftarg->code(@_[1..2]) . ' - - $repcount++; - - my $savetext = $text; - my $backtrack; - - # MATCH (OP RIGHTARG)(s) - while ($repcount < ' . $self->{max} . ') - { - $backtrack = 0; - ' . $op->code(@_[1..2]) . ' - ' . ($op->isterminal() ? 'pop @item;' : '$backtrack=1;' ) . ' - ' . (ref($op) eq 'Parse::RecDescent::Token' - ? 'if (defined $1) {push @item, $item{'.($self->{name}||$self->{hashname}).'}=$1; $backtrack=1;}' - : "" ) . ' - ' . $rightarg->code(@_[1..2]) . ' - $savetext = $text; - $repcount++; - } - $text = $savetext; - pop @item if $backtrack; - - '; - } - else - { - $code .= ' - my $savetext = $text; - my $backtrack; - # MATCH (LEFTARG OP)(s) - while ($repcount < ' . $self->{max} . ') - { - $backtrack = 0; - ' . $leftarg->code(@_[1..2]) . ' - $repcount++; - $backtrack = 1; - ' . $op->code(@_[1..2]) . ' - $savetext = $text; - ' . ($op->isterminal() ? 'pop @item;' : "" ) . ' - ' . (ref($op) eq 'Parse::RecDescent::Token' ? 'do { push @item, $item{'.($self->{name}||$self->{hashname}).'}=$1; } if defined $1;' : "" ) . ' - } - $text = $savetext; - pop @item if $backtrack; - - # MATCH RIGHTARG - ' . $rightarg->code(@_[1..2]) . ' - $repcount++; - '; - } - - $code .= 'unless (@item) { undef $_tok; last }' unless $self->{min}==0; - - $code .= ' - $_tok = [ @item ]; - last; - } - - unless ($repcount>='.$self->{min}.') - { - Parse::RecDescent::_trace(q{<<Didn\'t match operator: [' - . $self->describe - . ']>>}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - $expectation->failed(); - last; - } - Parse::RecDescent::_trace(q{>>Matched operator: [' - . $self->describe - . ']<< (return value: [} - . qq{@{$_tok||[]}} . q{]}, - Parse::RecDescent::_tracefirst($text), - q{' . $rule->{"name"} .'}, - $tracelevel) - if defined $::RD_TRACE; - - push @item, $item{'.($self->{name}||$self->{hashname}).'}=$_tok||[]; - -'; - return $code; -} - - -package Parse::RecDescent::Expectation; - -sub new ($) -{ - bless { - "failed" => 0, - "expected" => "", - "unexpected" => "", - "lastexpected" => "", - "lastunexpected" => "", - "defexpected" => $_[1], - }; -} - -sub is ($$) -{ - $_[0]->{lastexpected} = $_[1]; return $_[0]; -} - -sub at ($$) -{ - $_[0]->{lastunexpected} = $_[1]; return $_[0]; -} - -sub failed ($) -{ - return unless $_[0]->{lastexpected}; - $_[0]->{expected} = $_[0]->{lastexpected} unless $_[0]->{failed}; - $_[0]->{unexpected} = $_[0]->{lastunexpected} unless $_[0]->{failed}; - $_[0]->{failed} = 1; -} - -sub message ($) -{ - my ($self) = @_; - $self->{expected} = $self->{defexpected} unless $self->{expected}; - $self->{expected} =~ s/_/ /g; - if (!$self->{unexpected} || $self->{unexpected} =~ /\A\s*\Z/s) - { - return "Was expecting $self->{expected}"; - } - else - { - $self->{unexpected} =~ /\s*(.*)/; - return "Was expecting $self->{expected} but found \"$1\" instead"; - } -} - -1; - -package Parse::RecDescent; - -use Carp; -use vars qw ( $AUTOLOAD $VERSION ); - -my $ERRORS = 0; - -$VERSION = '1.94'; - -# BUILDING A PARSER - -my $nextnamespace = "namespace000001"; - -sub _nextnamespace() -{ - return "Parse::RecDescent::" . $nextnamespace++; -} - -sub new ($$$) -{ - my $class = ref($_[0]) || $_[0]; - local $Parse::RecDescent::compiling = $_[2]; - my $name_space_name = defined $_[3] - ? "Parse::RecDescent::".$_[3] - : _nextnamespace(); - my $self = - { - "rules" => {}, - "namespace" => $name_space_name, - "startcode" => '', - "localvars" => '', - "_AUTOACTION" => undef, - "_AUTOTREE" => undef, - }; - if ($::RD_AUTOACTION) - { - my $sourcecode = $::RD_AUTOACTION; - $sourcecode = "{ $sourcecode }" - unless $sourcecode =~ /\A\s*\{.*\}\s*\Z/; - $self->{_check}{itempos} = - $sourcecode =~ /\@itempos\b|\$itempos\s*\[/; - $self->{_AUTOACTION} - = new Parse::RecDescent::Action($sourcecode,0,-1) - } - - bless $self, $class; - shift; - return $self->Replace(@_) -} - -sub Compile($$$$) { - - die "Compilation of Parse::RecDescent grammars not yet implemented\n"; -} - -sub DESTROY {} # SO AUTOLOADER IGNORES IT - -# BUILDING A GRAMMAR.... - -sub Replace ($$) -{ - splice(@_, 2, 0, 1); - return _generate(@_); -} - -sub Extend ($$) -{ - splice(@_, 2, 0, 0); - return _generate(@_); -} - -sub _no_rule ($$;$) -{ - _error("Ruleless $_[0] at start of grammar.",$_[1]); - my $desc = $_[2] ? "\"$_[2]\"" : ""; - _hint("You need to define a rule for the $_[0] $desc - to be part of."); -} - -my $NEGLOOKAHEAD = '\G(\s*\.\.\.\!)'; -my $POSLOOKAHEAD = '\G(\s*\.\.\.)'; -my $RULE = '\G\s*(\w+)[ \t]*:'; -my $PROD = '\G\s*([|])'; -my $TOKEN = q{\G\s*/((\\\\/|[^/])*)/([cgimsox]*)}; -my $MTOKEN = q{\G\s*(m\s*[^\w\s])}; -my $LITERAL = q{\G\s*'((\\\\['\\\\]|[^'])*)'}; -my $INTERPLIT = q{\G\s*"((\\\\["\\\\]|[^"])*)"}; -my $SUBRULE = '\G\s*(\w+)'; -my $MATCHRULE = '\G(\s*<matchrule:)'; -my $SIMPLEPAT = '((\\s+/[^/\\\\]*(?:\\\\.[^/\\\\]*)*/)?)'; -my $OPTIONAL = '\G\((\?)'.$SIMPLEPAT.'\)'; -my $ANY = '\G\((s\?)'.$SIMPLEPAT.'\)'; -my $MANY = '\G\((s|\.\.)'.$SIMPLEPAT.'\)'; -my $EXACTLY = '\G\(([1-9]\d*)'.$SIMPLEPAT.'\)'; -my $BETWEEN = '\G\((\d+)\.\.([1-9]\d*)'.$SIMPLEPAT.'\)'; -my $ATLEAST = '\G\((\d+)\.\.'.$SIMPLEPAT.'\)'; -my $ATMOST = '\G\(\.\.([1-9]\d*)'.$SIMPLEPAT.'\)'; -my $BADREP = '\G\((-?\d+)?\.\.(-?\d+)?'.$SIMPLEPAT.'\)'; -my $ACTION = '\G\s*\{'; -my $IMPLICITSUBRULE = '\G\s*\('; -my $COMMENT = '\G\s*(#.*)'; -my $COMMITMK = '\G\s*<commit>'; -my $UNCOMMITMK = '\G\s*<uncommit>'; -my $QUOTELIKEMK = '\G\s*<perl_quotelike>'; -my $CODEBLOCKMK = '\G\s*<perl_codeblock(?:\s+([][()<>{}]+))?>'; -my $VARIABLEMK = '\G\s*<perl_variable>'; -my $NOCHECKMK = '\G\s*<nocheck>'; -my $AUTOTREEMK = '\G\s*<autotree>'; -my $AUTOSTUBMK = '\G\s*<autostub>'; -my $AUTORULEMK = '\G\s*<autorule:(.*?)>'; -my $REJECTMK = '\G\s*<reject>'; -my $CONDREJECTMK = '\G\s*<reject:'; -my $SCOREMK = '\G\s*<score:'; -my $AUTOSCOREMK = '\G\s*<autoscore:'; -my $SKIPMK = '\G\s*<skip:'; -my $OPMK = '\G\s*<(left|right)op(?:=(\'.*?\'))?:'; -my $ENDDIRECTIVEMK = '\G\s*>'; -my $RESYNCMK = '\G\s*<resync>'; -my $RESYNCPATMK = '\G\s*<resync:'; -my $RULEVARPATMK = '\G\s*<rulevar:'; -my $DEFERPATMK = '\G\s*<defer:'; -my $TOKENPATMK = '\G\s*<token:'; -my $AUTOERRORMK = '\G\s*<error(\??)>'; -my $MSGERRORMK = '\G\s*<error(\??):'; -my $UNCOMMITPROD = $PROD.'\s*<uncommit'; -my $ERRORPROD = $PROD.'\s*<error'; -my $LONECOLON = '\G\s*:'; -my $OTHER = '\G\s*([^\s]+)'; - -my $lines = 0; - -sub _generate($$$;$$) -{ - my ($self, $grammar, $replace, $isimplicit, $isleftop) = (@_, 0); - - my $aftererror = 0; - my $lookahead = 0; - my $lookaheadspec = ""; - $lines = _linecount($grammar) unless $lines; - $self->{_check}{itempos} = ($grammar =~ /\@itempos\b|\$itempos\s*\[/) - unless $self->{_check}{itempos}; - for (qw(thisoffset thiscolumn prevline prevoffset prevcolumn)) - { - $self->{_check}{$_} = - ($grammar =~ /\$$_/) || $self->{_check}{itempos} - unless $self->{_check}{$_}; - } - my $line; - - my $rule = undef; - my $prod = undef; - my $item = undef; - my $lastgreedy = ''; - pos $grammar = 0; - study $grammar; - - while (pos $grammar < length $grammar) - { - $line = $lines - _linecount($grammar) + 1; - my $commitonly; - my $code = ""; - my @components = (); - if ($grammar =~ m/$COMMENT/gco) - { - _parse("a comment",0,$line); - next; - } - elsif ($grammar =~ m/$NEGLOOKAHEAD/gco) - { - _parse("a negative lookahead",$aftererror,$line); - $lookahead = $lookahead ? -$lookahead : -1; - $lookaheadspec .= $1; - next; # SKIP LOOKAHEAD RESET AT END OF while LOOP - } - elsif ($grammar =~ m/$POSLOOKAHEAD/gco) - { - _parse("a positive lookahead",$aftererror,$line); - $lookahead = $lookahead ? $lookahead : 1; - $lookaheadspec .= $1; - next; # SKIP LOOKAHEAD RESET AT END OF while LOOP - } - elsif ($grammar =~ m/(?=$ACTION)/gco - and do { ($code) = extract_codeblock($grammar); $code }) - { - _parse("an action", $aftererror, $line, $code); - $item = new Parse::RecDescent::Action($code,$lookahead,$line); - $prod and $prod->additem($item) - or $self->_addstartcode($code); - } - elsif ($grammar =~ m/(?=$IMPLICITSUBRULE)/gco - and do { ($code) = extract_codeblock($grammar,'{([',undef,'(',1); - $code }) - { - $code =~ s/\A\s*\(|\)\Z//g; - _parse("an implicit subrule", $aftererror, $line, - "( $code )"); - my $implicit = $rule->nextimplicit; - $self->_generate("$implicit : $code",$replace,1); - my $pos = pos $grammar; - substr($grammar,$pos,0,$implicit); - pos $grammar = $pos;; - } - elsif ($grammar =~ m/$ENDDIRECTIVEMK/gco) - { - - # EXTRACT TRAILING REPETITION SPECIFIER (IF ANY) - - my ($minrep,$maxrep) = (1,$MAXREP); - if ($grammar =~ m/\G[(]/gc) - { - pos($grammar)--; - - if ($grammar =~ m/$OPTIONAL/gco) - { ($minrep, $maxrep) = (0,1) } - elsif ($grammar =~ m/$ANY/gco) - { $minrep = 0 } - elsif ($grammar =~ m/$EXACTLY/gco) - { ($minrep, $maxrep) = ($1,$1) } - elsif ($grammar =~ m/$BETWEEN/gco) - { ($minrep, $maxrep) = ($1,$2) } - elsif ($grammar =~ m/$ATLEAST/gco) - { $minrep = $1 } - elsif ($grammar =~ m/$ATMOST/gco) - { $maxrep = $1 } - elsif ($grammar =~ m/$MANY/gco) - { } - elsif ($grammar =~ m/$BADREP/gco) - { - _parse("an invalid repetition specifier", 0,$line); - _error("Incorrect specification of a repeated directive", - $line); - _hint("Repeated directives cannot have - a maximum repetition of zero, nor can they have - negative components in their ranges."); - } - } - - $prod && $prod->enddirective($line,$minrep,$maxrep); - } - elsif ($grammar =~ m/\G\s*<[^m]/gc) - { - pos($grammar)-=2; - - if ($grammar =~ m/$OPMK/gco) - { - # $DB::single=1; - _parse("a $1-associative operator directive", $aftererror, $line, "<$1op:...>"); - $prod->adddirective($1, $line,$2||''); - } - elsif ($grammar =~ m/$UNCOMMITMK/gco) - { - _parse("an uncommit marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive('$commit=0;1', - $lookahead,$line,"<uncommit>"); - $prod and $prod->additem($item) - or _no_rule("<uncommit>",$line); - } - elsif ($grammar =~ m/$QUOTELIKEMK/gco) - { - _parse("an perl quotelike marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive( - 'my ($match,@res); - ($match,$text,undef,@res) = - Text::Balanced::extract_quotelike($text,$skip); - $match ? \@res : undef; - ', $lookahead,$line,"<perl_quotelike>"); - $prod and $prod->additem($item) - or _no_rule("<perl_quotelike>",$line); - } - elsif ($grammar =~ m/$CODEBLOCKMK/gco) - { - my $outer = $1||"{}"; - _parse("an perl codeblock marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive( - 'Text::Balanced::extract_codeblock($text,undef,$skip,\''.$outer.'\'); - ', $lookahead,$line,"<perl_codeblock>"); - $prod and $prod->additem($item) - or _no_rule("<perl_codeblock>",$line); - } - elsif ($grammar =~ m/$VARIABLEMK/gco) - { - _parse("an perl variable marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive( - 'Text::Balanced::extract_variable($text,$skip); - ', $lookahead,$line,"<perl_variable>"); - $prod and $prod->additem($item) - or _no_rule("<perl_variable>",$line); - } - elsif ($grammar =~ m/$NOCHECKMK/gco) - { - _parse("a disable checking marker", $aftererror,$line); - if ($rule) - { - _error("<nocheck> directive not at start of grammar", $line); - _hint("The <nocheck> directive can only - be specified at the start of a - grammar (before the first rule - is defined."); - } - else - { - local $::RD_CHECK = 1; - } - } - elsif ($grammar =~ m/$AUTOSTUBMK/gco) - { - _parse("an autostub marker", $aftererror,$line); - $::RD_AUTOSTUB = ""; - } - elsif ($grammar =~ m/$AUTORULEMK/gco) - { - _parse("an autorule marker", $aftererror,$line); - $::RD_AUTOSTUB = $1; - } - elsif ($grammar =~ m/$AUTOTREEMK/gco) - { - _parse("an autotree marker", $aftererror,$line); - if ($rule) - { - _error("<autotree> directive not at start of grammar", $line); - _hint("The <autotree> directive can only - be specified at the start of a - grammar (before the first rule - is defined."); - } - else - { - undef $self->{_AUTOACTION}; - $self->{_AUTOTREE}{NODE} - = new Parse::RecDescent::Action(q{{bless \%item, $item[0]}},0,-1); - $self->{_AUTOTREE}{TERMINAL} - = new Parse::RecDescent::Action(q{{bless {__VALUE__=>$item[1]}, $item[0]}},0,-1); - } - } - - elsif ($grammar =~ m/$REJECTMK/gco) - { - _parse("an reject marker", $aftererror,$line); - $item = new Parse::RecDescent::UncondReject($lookahead,$line,"<reject>"); - $prod and $prod->additem($item) - or _no_rule("<reject>",$line); - } - elsif ($grammar =~ m/(?=$CONDREJECTMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code }) - { - _parse("a (conditional) reject marker", $aftererror,$line); - $code =~ /\A\s*<reject:(.*)>\Z/s; - $item = new Parse::RecDescent::Directive( - "($1) ? undef : 1", $lookahead,$line,"<reject:$code>"); - $prod and $prod->additem($item) - or _no_rule("<reject:$code>",$line); - } - elsif ($grammar =~ m/(?=$SCOREMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code }) - { - _parse("a score marker", $aftererror,$line); - $code =~ /\A\s*<score:(.*)>\Z/s; - $prod and $prod->addscore($1, $lookahead, $line) - or _no_rule($code,$line); - } - elsif ($grammar =~ m/(?=$AUTOSCOREMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code; - } ) - { - _parse("an autoscore specifier", $aftererror,$line,$code); - $code =~ /\A\s*<autoscore:(.*)>\Z/s; - - $rule and $rule->addautoscore($1,$self) - or _no_rule($code,$line); - - $item = new Parse::RecDescent::UncondReject($lookahead,$line,$code); - $prod and $prod->additem($item) - or _no_rule($code,$line); - } - elsif ($grammar =~ m/$RESYNCMK/gco) - { - _parse("a resync to newline marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive( - 'if ($text =~ s/\A[^\n]*\n//) { $return = 0; $& } else { undef }', - $lookahead,$line,"<resync>"); - $prod and $prod->additem($item) - or _no_rule("<resync>",$line); - } - elsif ($grammar =~ m/(?=$RESYNCPATMK)/gco - and do { ($code) = extract_bracketed($grammar,'<'); - $code }) - { - _parse("a resync with pattern marker", $aftererror,$line); - $code =~ /\A\s*<resync:(.*)>\Z/s; - $item = new Parse::RecDescent::Directive( - 'if ($text =~ s/\A'.$1.'//) { $return = 0; $& } else { undef }', - $lookahead,$line,$code); - $prod and $prod->additem($item) - or _no_rule($code,$line); - } - elsif ($grammar =~ m/(?=$SKIPMK)/gco - and do { ($code) = extract_codeblock($grammar,'<'); - $code }) - { - _parse("a skip marker", $aftererror,$line); - $code =~ /\A\s*<skip:(.*)>\Z/s; - $item = new Parse::RecDescent::Directive( - 'my $oldskip = $skip; $skip='.$1.'; $oldskip', - $lookahead,$line,$code); - $prod and $prod->additem($item) - or _no_rule($code,$line); - } - elsif ($grammar =~ m/(?=$RULEVARPATMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code; - } ) - { - _parse("a rule variable specifier", $aftererror,$line,$code); - $code =~ /\A\s*<rulevar:(.*)>\Z/s; - - $rule and $rule->addvar($1,$self) - or _no_rule($code,$line); - - $item = new Parse::RecDescent::UncondReject($lookahead,$line,$code); - $prod and $prod->additem($item) - or _no_rule($code,$line); - } - elsif ($grammar =~ m/(?=$DEFERPATMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code; - } ) - { - _parse("a deferred action specifier", $aftererror,$line,$code); - $code =~ s/\A\s*<defer:(.*)>\Z/$1/s; - if ($code =~ /\A\s*[^{]|[^}]\s*\Z/) - { - $code = "{ $code }" - } - - $item = new Parse::RecDescent::Directive( - "push \@{\$thisparser->{deferred}}, sub $code;", - $lookahead,$line,"<defer:$code>"); - $prod and $prod->additem($item) - or _no_rule("<defer:$code>",$line); - - $self->{deferrable} = 1; - } - elsif ($grammar =~ m/(?=$TOKENPATMK)/gco - and do { ($code) = extract_codeblock($grammar,'{',undef,'<'); - $code; - } ) - { - _parse("a token constructor", $aftererror,$line,$code); - $code =~ s/\A\s*<token:(.*)>\Z/$1/s; - - my $types = eval 'no strict; local $SIG{__WARN__} = sub {0}; my @arr=('.$code.'); @arr' || (); - if (!$types) - { - _error("Incorrect token specification: \"$@\"", $line); - _hint("The <token:...> directive requires a list - of one or more strings representing possible - types of the specified token. For example: - <token:NOUN,VERB>"); - } - else - { - $item = new Parse::RecDescent::Directive( - 'no strict; - $return = { text => $item[-1] }; - @{$return->{type}}{'.$code.'} = (1..'.$types.');', - $lookahead,$line,"<token:$code>"); - $prod and $prod->additem($item) - or _no_rule("<token:$code>",$line); - } - } - elsif ($grammar =~ m/$COMMITMK/gco) - { - _parse("an commit marker", $aftererror,$line); - $item = new Parse::RecDescent::Directive('$commit = 1', - $lookahead,$line,"<commit>"); - $prod and $prod->additem($item) - or _no_rule("<commit>",$line); - } - elsif ($grammar =~ m/$AUTOERRORMK/gco) - { - $commitonly = $1; - _parse("an error marker", $aftererror,$line); - $item = new Parse::RecDescent::Error('',$lookahead,$1,$line); - $prod and $prod->additem($item) - or _no_rule("<error>",$line); - $aftererror = !$commitonly; - } - elsif ($grammar =~ m/(?=$MSGERRORMK)/gco - and do { $commitonly = $1; - ($code) = extract_bracketed($grammar,'<'); - $code }) - { - _parse("an error marker", $aftererror,$line,$code); - $code =~ /\A\s*<error\??:(.*)>\Z/s; - $item = new Parse::RecDescent::Error($1,$lookahead,$commitonly,$line); - $prod and $prod->additem($item) - or _no_rule("$code",$line); - $aftererror = !$commitonly; - } - elsif (do { $commitonly = $1; - ($code) = extract_bracketed($grammar,'<'); - $code }) - { - if ($code =~ /^<[A-Z_]+>$/) - { - _error("Token items are not yet - supported: \"$code\"", - $line); - _hint("Items like $code that consist of angle - brackets enclosing a sequence of - uppercase characters will eventually - be used to specify pre-lexed tokens - in a grammar. That functionality is not - yet implemented. Or did you misspell - \"$code\"?"); - } - else - { - _error("Untranslatable item encountered: \"$code\"", - $line); - _hint("Did you misspell \"$code\" - or forget to comment it out?"); - } - } - } - elsif ($grammar =~ m/$RULE/gco) - { - _parseunneg("a rule declaration", 0, - $lookahead,$line) or next; - my $rulename = $1; - if ($rulename =~ /Replace|Extend|Precompile|Save/ ) - { - _warn(2,"Rule \"$rulename\" hidden by method - Parse::RecDescent::$rulename",$line) - and - _hint("The rule named \"$rulename\" cannot be directly - called through the Parse::RecDescent object - for this grammar (although it may still - be used as a subrule of other rules). - It can't be directly called because - Parse::RecDescent::$rulename is already defined (it - is the standard method of all - parsers)."); - } - $rule = new Parse::RecDescent::Rule($rulename,$self,$line,$replace); - $prod->check_pending($line) if $prod; - $prod = $rule->addprod( new Parse::RecDescent::Production ); - $aftererror = 0; - } - elsif ($grammar =~ m/$UNCOMMITPROD/gco) - { - pos($grammar)-=9; - _parseunneg("a new (uncommitted) production", - 0, $lookahead, $line) or next; - - $prod->check_pending($line) if $prod; - $prod = new Parse::RecDescent::Production($line,1); - $rule and $rule->addprod($prod) - or _no_rule("<uncommit>",$line); - $aftererror = 0; - } - elsif ($grammar =~ m/$ERRORPROD/gco) - { - pos($grammar)-=6; - _parseunneg("a new (error) production", $aftererror, - $lookahead,$line) or next; - $prod->check_pending($line) if $prod; - $prod = new Parse::RecDescent::Production($line,0,1); - $rule and $rule->addprod($prod) - or _no_rule("<error>",$line); - $aftererror = 0; - } - elsif ($grammar =~ m/$PROD/gco) - { - _parseunneg("a new production", 0, - $lookahead,$line) or next; - $rule - and (!$prod || $prod->check_pending($line)) - and $prod = $rule->addprod(new Parse::RecDescent::Production($line)) - or _no_rule("production",$line); - $aftererror = 0; - } - elsif ($grammar =~ m/$LITERAL/gco) - { - ($code = $1) =~ s/\\\\/\\/g; - _parse("a literal terminal", $aftererror,$line,$1); - $item = new Parse::RecDescent::Literal($code,$lookahead,$line); - $prod and $prod->additem($item) - or _no_rule("literal terminal",$line,"'$1'"); - } - elsif ($grammar =~ m/$INTERPLIT/gco) - { - _parse("an interpolated literal terminal", $aftererror,$line); - $item = new Parse::RecDescent::InterpLit($1,$lookahead,$line); - $prod and $prod->additem($item) - or _no_rule("interpolated literal terminal",$line,"'$1'"); - } - elsif ($grammar =~ m/$TOKEN/gco) - { - _parse("a /../ pattern terminal", $aftererror,$line); - $item = new Parse::RecDescent::Token($1,'/',$3?$3:'',$lookahead,$line); - $prod and $prod->additem($item) - or _no_rule("pattern terminal",$line,"/$1/"); - } - elsif ($grammar =~ m/(?=$MTOKEN)/gco - and do { ($code, undef, @components) - = extract_quotelike($grammar); - $code } - ) - - { - _parse("an m/../ pattern terminal", $aftererror,$line,$code); - $item = new Parse::RecDescent::Token(@components[3,2,8], - $lookahead,$line); - $prod and $prod->additem($item) - or _no_rule("pattern terminal",$line,$code); - } - elsif ($grammar =~ m/(?=$MATCHRULE)/gco - and do { ($code) = extract_bracketed($grammar,'<'); - $code - } - or $grammar =~ m/$SUBRULE/gco - and $code = $1) - { - my $name = $code; - my $matchrule = 0; - if (substr($name,0,1) eq '<') - { - $name =~ s/$MATCHRULE\s*//; - $name =~ s/\s*>\Z//; - $matchrule = 1; - } - - # EXTRACT TRAILING ARG LIST (IF ANY) - - my ($argcode) = extract_codeblock($grammar, "[]",'') || ''; - - # EXTRACT TRAILING REPETITION SPECIFIER (IF ANY) - - if ($grammar =~ m/\G[(]/gc) - { - pos($grammar)--; - - if ($grammar =~ m/$OPTIONAL/gco) - { - _parse("an zero-or-one subrule match", $aftererror,$line,"$code$argcode($1)"); - $item = new Parse::RecDescent::Repetition($name,$1,0,1, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1)"); - - !$matchrule and $rule and $rule->addcall($name); - } - elsif ($grammar =~ m/$ANY/gco) - { - _parse("a zero-or-more subrule match", $aftererror,$line,"$code$argcode($1)"); - if ($2) - { - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name(s?)': $name $2 $name>(s?) "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,$1,0,$MAXREP, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1)"); - - !$matchrule and $rule and $rule->addcall($name); - - _check_insatiable($name,$1,$grammar,$line) if $::RD_CHECK; - } - } - elsif ($grammar =~ m/$MANY/gco) - { - _parse("a one-or-more subrule match", $aftererror,$line,"$code$argcode($1)"); - if ($2) - { - # $DB::single=1; - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name(s)': $name $2 $name> "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,$1,1,$MAXREP, - $lookahead,$line, - $self, - $matchrule, - $argcode); - - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1)"); - - !$matchrule and $rule and $rule->addcall($name); - - _check_insatiable($name,$1,$grammar,$line) if $::RD_CHECK; - } - } - elsif ($grammar =~ m/$EXACTLY/gco) - { - _parse("an exactly-$1-times subrule match", $aftererror,$line,"$code$argcode($1)"); - if ($2) - { - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name($1)': $name $2 $name>($1) "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,$1,$1,$1, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1)"); - - !$matchrule and $rule and $rule->addcall($name); - } - } - elsif ($grammar =~ m/$BETWEEN/gco) - { - _parse("a $1-to-$2 subrule match", $aftererror,$line,"$code$argcode($1..$2)"); - if ($3) - { - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name($1..$2)': $name $3 $name>($1..$2) "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,"$1..$2",$1,$2, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1..$2)"); - - !$matchrule and $rule and $rule->addcall($name); - } - } - elsif ($grammar =~ m/$ATLEAST/gco) - { - _parse("a $1-or-more subrule match", $aftererror,$line,"$code$argcode($1..)"); - if ($2) - { - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name($1..)': $name $2 $name>($1..) "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,"$1..",$1,$MAXREP, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode($1..)"); - - !$matchrule and $rule and $rule->addcall($name); - _check_insatiable($name,"$1..",$grammar,$line) if $::RD_CHECK; - } - } - elsif ($grammar =~ m/$ATMOST/gco) - { - _parse("a one-to-$1 subrule match", $aftererror,$line,"$code$argcode(..$1)"); - if ($2) - { - my $pos = pos $grammar; - substr($grammar,$pos,0, - "<leftop='$name(..$1)': $name $2 $name>(..$1) "); - - pos $grammar = $pos; - } - else - { - $item = new Parse::RecDescent::Repetition($name,"..$1",1,$1, - $lookahead,$line, - $self, - $matchrule, - $argcode); - $prod and $prod->additem($item) - or _no_rule("repetition",$line,"$code$argcode(..$1)"); - - !$matchrule and $rule and $rule->addcall($name); - } - } - elsif ($grammar =~ m/$BADREP/gco) - { - _parse("an subrule match with invalid repetition specifier", 0,$line); - _error("Incorrect specification of a repeated subrule", - $line); - _hint("Repeated subrules like \"$code$argcode$&\" cannot have - a maximum repetition of zero, nor can they have - negative components in their ranges."); - } - } - else - { - _parse("a subrule match", $aftererror,$line,$code); - my $desc; - if ($name=~/\A_alternation_\d+_of_production_\d+_of_rule/) - { $desc = $self->{"rules"}{$name}->expected } - $item = new Parse::RecDescent::Subrule($name, - $lookahead, - $line, - $desc, - $matchrule, - $argcode); - - $prod and $prod->additem($item) - or _no_rule("(sub)rule",$line,$name); - - !$matchrule and $rule and $rule->addcall($name); - } - } - elsif ($grammar =~ m/$LONECOLON/gco ) - { - _error("Unexpected colon encountered", $line); - _hint("Did you mean \"|\" (to start a new production)? - Or perhaps you forgot that the colon - in a rule definition must be - on the same line as the rule name?"); - } - elsif ($grammar =~ m/$ACTION/gco ) # BAD ACTION, ALREADY FAILED - { - _error("Malformed action encountered", - $line); - _hint("Did you forget the closing curly bracket - or is there a syntax error in the action?"); - } - elsif ($grammar =~ m/$OTHER/gco ) - { - _error("Untranslatable item encountered: \"$1\"", - $line); - _hint("Did you misspell \"$1\" - or forget to comment it out?"); - } - - if ($lookaheadspec =~ tr /././ > 3) - { - $lookaheadspec =~ s/\A\s+//; - $lookahead = $lookahead<0 - ? 'a negative lookahead ("...!")' - : 'a positive lookahead ("...")' ; - _warn(1,"Found two or more lookahead specifiers in a - row.",$line) - and - _hint("Multiple positive and/or negative lookaheads - are simply multiplied together to produce a - single positive or negative lookahead - specification. In this case the sequence - \"$lookaheadspec\" was reduced to $lookahead. - Was this your intention?"); - } - $lookahead = 0; - $lookaheadspec = ""; - - $grammar =~ m/\G\s+/gc; - } - - unless ($ERRORS or $isimplicit or !$::RD_CHECK) - { - $self->_check_grammar(); - } - - unless ($ERRORS or $isimplicit or $Parse::RecDescent::compiling) - { - my $code = $self->_code(); - if (defined $::RD_TRACE) - { - print STDERR "printing code (", length($code),") to RD_TRACE\n"; - local *TRACE_FILE; - open TRACE_FILE, ">RD_TRACE" - and print TRACE_FILE "my \$ERRORS;\n$code" - and close TRACE_FILE; - } - - unless ( eval "$code 1" ) - { - _error("Internal error in generated parser code!"); - $@ =~ s/at grammar/in grammar at/; - _hint($@); - } - } - - if ($ERRORS and !_verbosity("HINT")) - { - local $::RD_HINT = 1; - _hint('Set $::RD_HINT (or -RD_HINT if you\'re using "perl -s") - for hints on fixing these problems.'); - } - if ($ERRORS) { $ERRORS=0; return } - return $self; -} - - -sub _addstartcode($$) -{ - my ($self, $code) = @_; - $code =~ s/\A\s*\{(.*)\}\Z/$1/s; - - $self->{"startcode"} .= "$code;\n"; -} - -# CHECK FOR GRAMMAR PROBLEMS.... - -sub _check_insatiable($$$$) -{ - my ($subrule,$repspec,$grammar,$line) = @_; - pos($grammar)=pos($_[2]); - return if $grammar =~ m/$OPTIONAL/gco || $grammar =~ m/$ANY/gco; - my $min = 1; - if ( $grammar =~ m/$MANY/gco - || $grammar =~ m/$EXACTLY/gco - || $grammar =~ m/$ATMOST/gco - || $grammar =~ m/$BETWEEN/gco && do { $min=$2; 1 } - || $grammar =~ m/$ATLEAST/gco && do { $min=$2; 1 } - || $grammar =~ m/$SUBRULE(?!\s*:)/gco - ) - { - return unless $1 eq $subrule && $min > 0; - _warn(3,"Subrule sequence \"$subrule($repspec) $&\" will - (almost certainly) fail.",$line) - and - _hint("Unless subrule \"$subrule\" performs some cunning - lookahead, the repetition \"$subrule($repspec)\" will - insatiably consume as many matches of \"$subrule\" as it - can, leaving none to match the \"$&\" that follows."); - } -} - -sub _check_grammar ($) -{ - my $self = shift; - my $rules = $self->{"rules"}; - my $rule; - foreach $rule ( values %$rules ) - { - next if ! $rule->{"changed"}; - - # CHECK FOR UNDEFINED RULES - - my $call; - foreach $call ( @{$rule->{"calls"}} ) - { - if (!defined ${$rules}{$call} - &&!defined &{"Parse::RecDescent::$call"}) - { - if (!defined $::RD_AUTOSTUB) - { - _warn(3,"Undefined (sub)rule \"$call\" - used in a production.") - and - _hint("Will you be providing this rule - later, or did you perhaps - misspell \"$call\"? Otherwise - it will be treated as an - immediate <reject>."); - eval "sub $self->{namespace}::$call {undef}"; - } - else # EXPERIMENTAL - { - my $rule = $::RD_AUTOSTUB || qq{'$call'}; - _warn(1,"Autogenerating rule: $call") - and - _hint("A call was made to a subrule - named \"$call\", but no such - rule was specified. However, - since \$::RD_AUTOSTUB - was defined, a rule stub - ($call : $rule) was - automatically created."); - - $self->_generate("$call : $rule",0,1); - } - } - } - - # CHECK FOR LEFT RECURSION - - if ($rule->isleftrec($rules)) - { - _error("Rule \"$rule->{name}\" is left-recursive."); - _hint("Redesign the grammar so it's not left-recursive. - That will probably mean you need to re-implement - repetitions using the '(s)' notation. - For example: \"$rule->{name}(s)\"."); - next; - } - } -} - -# GENERATE ACTUAL PARSER CODE - -sub _code($) -{ - my $self = shift; - my $code = qq{ -package $self->{namespace}; -use strict; -use vars qw(\$skip \$AUTOLOAD $self->{localvars} ); -\$skip = '$skip'; -$self->{startcode} - -{ -local \$SIG{__WARN__} = sub {0}; -# PRETEND TO BE IN Parse::RecDescent NAMESPACE -*$self->{namespace}::AUTOLOAD = sub -{ - no strict 'refs'; - \$AUTOLOAD =~ s/^$self->{namespace}/Parse::RecDescent/; - goto &{\$AUTOLOAD}; -} -} - -}; - $code .= "push \@$self->{namespace}\::ISA, 'Parse::RecDescent';"; - $self->{"startcode"} = ''; - - my $rule; - foreach $rule ( values %{$self->{"rules"}} ) - { - if ($rule->{"changed"}) - { - $code .= $rule->code($self->{"namespace"},$self); - $rule->{"changed"} = 0; - } - } - - return $code; -} - - -# EXECUTING A PARSE.... - -sub AUTOLOAD # ($parser, $text; $linenum, @args) -{ - croak "Could not find method: $AUTOLOAD\n" unless ref $_[0]; - my $class = ref($_[0]) || $_[0]; - my $text = ref($_[1]) ? ${$_[1]} : $_[1]; - $_[0]->{lastlinenum} = $_[2]||_linecount($_[1]); - $_[0]->{lastlinenum} = _linecount($_[1]); - $_[0]->{lastlinenum} += $_[2] if @_ > 2; - $_[0]->{offsetlinenum} = $_[0]->{lastlinenum}; - $_[0]->{fulltext} = $text; - $_[0]->{fulltextlen} = length $text; - $_[0]->{deferred} = []; - $_[0]->{errors} = []; - my @args = @_[3..$#_]; - my $args = sub { [ @args ] }; - - $AUTOLOAD =~ s/$class/$_[0]->{namespace}/; - no strict "refs"; - - croak "Unknown starting rule ($AUTOLOAD) called\n" - unless defined &$AUTOLOAD; - my $retval = &{$AUTOLOAD}($_[0],$text,undef,undef,$args); - - if (defined $retval) - { - foreach ( @{$_[0]->{deferred}} ) { &$_; } - } - else - { - foreach ( @{$_[0]->{errors}} ) { _error(@$_); } - } - - if (ref $_[1]) { ${$_[1]} = $text } - - $ERRORS = 0; - return $retval; -} - -sub _parserepeat($$$$$$$$$$) # RETURNS A REF TO AN ARRAY OF MATCHES -{ - my ($parser, $text, $prod, $min, $max, $_noactions, $expectation, $argcode) = @_; - my @tokens = (); - - my $reps; - for ($reps=0; $reps<$max;) - { - $_[6]->at($text); # $_[6] IS $expectation FROM CALLER - my $_savetext = $text; - my $prevtextlen = length $text; - my $_tok; - if (! defined ($_tok = &$prod($parser,$text,1,$_noactions,$argcode))) - { - $text = $_savetext; - last; - } - push @tokens, $_tok if defined $_tok; - last if ++$reps >= $min and $prevtextlen == length $text; - } - - do { $_[6]->failed(); return undef} if $reps<$min; - - $_[1] = $text; - return [@tokens]; -} - - -# ERROR REPORTING.... - -my $errortext; -my $errorprefix; - -open (ERROR, ">&STDERR"); -format ERROR = -@>>>>>>>>>>>>>>>>>>>>: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -$errorprefix, $errortext -~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - $errortext -. - -select ERROR; -$| = 1; - -# TRACING - -my $tracemsg; -my $tracecontext; -my $tracerulename; -use vars '$tracelevel'; - -open (TRACE, ">&STDERR"); -format TRACE = -@>|@|||||||||@^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| -$tracelevel, $tracerulename, '|', $tracemsg - | ~~ |^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| - $tracemsg -. - -select TRACE; -$| = 1; - -open (TRACECONTEXT, ">&STDERR"); -format TRACECONTEXT = -@>|@|||||||||@ |^<<<<<<<<<<<<<<<<<<<<<<<<<<< -$tracelevel, $tracerulename, '|', $tracecontext - | ~~ | |^<<<<<<<<<<<<<<<<<<<<<<<<<<< - $tracecontext -. - - -select TRACECONTEXT; -$| = 1; - -select STDOUT; - -sub _verbosity($) -{ - defined $::RD_TRACE - or defined $::RD_HINT and $_[0] =~ /ERRORS|WARN|HINT/ - or defined $::RD_WARN and $_[0] =~ /ERRORS|WARN/ - or defined $::RD_ERRORS and $_[0] =~ /ERRORS/ -} - -sub _error($;$) -{ - $ERRORS++; - return 0 if ! _verbosity("ERRORS"); - $errortext = $_[0]; - $errorprefix = "ERROR" . ($_[1] ? " (line $_[1])" : ""); - $errortext =~ s/\s+/ /g; - print ERROR "\n" if _verbosity("WARN"); - write ERROR; - return 1; -} - -sub _warn($$;$) -{ - return 0 unless _verbosity("WARN") && ($::RD_HINT || $_[0] >= ($::RD_WARN||1)); - $errortext = $_[1]; - $errorprefix = "Warning" . ($_[2] ? " (line $_[2])" : ""); - print ERROR "\n"; - $errortext =~ s/\s+/ /g; - write ERROR; - return 1; -} - -sub _hint($) -{ - return 0 unless defined $::RD_HINT; - $errortext = "$_[0])"; - $errorprefix = "(Hint"; - $errortext =~ s/\s+/ /g; - write ERROR; - return 1; -} - -sub _tracemax($) -{ - if (defined $::RD_TRACE - && $::RD_TRACE =~ /\d+/ - && $::RD_TRACE>1 - && $::RD_TRACE+10<length($_[0])) - { - my $count = length($_[0]) - $::RD_TRACE; - return substr($_[0],0,$::RD_TRACE/2) - . "...<$count>..." - . substr($_[0],-$::RD_TRACE/2); - } - else - { - return $_[0]; - } -} - -sub _tracefirst($) -{ - if (defined $::RD_TRACE - && $::RD_TRACE =~ /\d+/ - && $::RD_TRACE>1 - && $::RD_TRACE+10<length($_[0])) - { - my $count = length($_[0]) - $::RD_TRACE; - return substr($_[0],0,$::RD_TRACE) . "...<+$count>"; - } - else - { - return $_[0]; - } -} - -my $lastcontext = ''; -my $lastrulename = ''; -my $lastlevel = ''; - -sub _trace($;$$$) -{ - $tracemsg = $_[0]; - $tracecontext = $_[1]||$lastcontext; - $tracerulename = $_[2]||$lastrulename; - $tracelevel = $_[3]||$lastlevel; - if ($tracerulename) { $lastrulename = $tracerulename } - if ($tracelevel) { $lastlevel = $tracelevel } - - $tracecontext =~ s/\n/\\n/g; - $tracecontext =~ s/\s+/ /g; - $tracerulename = qq{$tracerulename}; - write TRACE; - if ($tracecontext ne $lastcontext) - { - if ($tracecontext) - { - $lastcontext = _tracefirst($tracecontext); - $tracecontext = qq{"$tracecontext"}; - } - else - { - $tracecontext = qq{<NO TEXT LEFT>}; - } - write TRACECONTEXT; - } -} - -sub _parseunneg($$$$) -{ - _parse($_[0],$_[1],$_[3]); - if ($_[2]<0) - { - _error("Can't negate \"$&\".",$_[3]); - _hint("You can't negate $_[0]. Remove the \"...!\" before - \"$&\"."); - return 0; - } - return 1; -} - -sub _parse($$$;$) -{ - my $what = $_[3] || $&; - $what =~ s/^\s+//; - if ($_[1]) - { - _warn(3,"Found $_[0] ($what) after an unconditional <error>",$_[2]) - and - _hint("An unconditional <error> always causes the - production containing it to immediately fail. - \u$_[0] that follows an <error> - will never be reached. Did you mean to use - <error?> instead?"); - } - - return if ! _verbosity("TRACE"); - $errortext = "Treating \"$what\" as $_[0]"; - $errorprefix = "Parse::RecDescent"; - $errortext =~ s/\s+/ /g; - write ERROR; -} - -sub _linecount($) { - scalar substr($_[0], pos $_[0]||0) =~ tr/\n// -} - - -package main; - -use vars qw ( $RD_ERRORS $RD_WARN $RD_HINT $RD_TRACE $RD_CHECK ); -$::RD_CHECK = 1; -$::RD_ERRORS = 1; -$::RD_WARN = 3; - -1; - diff --git a/lib/Template/Plugin/HTML.pm b/lib/Template/Plugin/HTML.pm new file mode 100644 index 0000000..4c4d7f0 --- /dev/null +++ b/lib/Template/Plugin/HTML.pm @@ -0,0 +1,197 @@ +#============================================================= -*-Perl-*- +# +# Template::Plugin::HTML +# +# DESCRIPTION +# +# Template Toolkit plugin providing useful functionality for generating +# HTML. +# +# AUTHOR +# Andy Wardley <abw@kfs.org> +# +# COPYRIGHT +# Copyright (C) 1996-2001 Andy Wardley. All Rights Reserved. +# Copyright (C) 1998-2001 Canon Research Centre Europe Ltd. +# +# This module is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. +# +#---------------------------------------------------------------------------- +# +# $Id: HTML.pm,v 1.1 2006/10/27 10:00:31 amair Exp $ +# +#============================================================================ + +package Template::Plugin::HTML; + +require 5.004; + +use strict; +use vars qw( $VERSION ); +use base qw( Template::Plugin ); +use Template::Plugin; + +$VERSION = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/); + +sub new { + my ($class, $context, @args) = @_; + my $hash = ref $args[-1] eq 'HASH' ? pop @args : { }; + bless { + _SORTED => $hash->{ sorted } || 0, + }, $class; +} + +sub element { + my ($self, $name, $attr) = @_; + ($name, $attr) = %$name if ref $name eq 'HASH'; + return '' unless defined $name and length $name; + $attr = $self->attributes($attr); + $attr = " $attr" if $attr; + return "<$name$attr>"; +} + +sub attributes { + my ($self, $hash) = @_; + return '' unless UNIVERSAL::isa($hash, 'HASH'); + + my @keys = keys %$hash; + @keys = sort @keys if $self->{ _SORTED }; + + join(' ', map { + "$_=\"" . $self->escape( $hash->{ $_ } ) . '"'; + } @keys); +} + +sub escape { + my ($self, $text) = @_; + for ($text) { + s/&/&/g; + s/</</g; + s/>/>/g; + s/"/"/g; + } + $text; +} + +sub url { + my ($self, $text) = @_; + return undef unless defined $text; + $text =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; + return $text; +} + + +1; + +__END__ + + +#------------------------------------------------------------------------ +# IMPORTANT NOTE +# This documentation is generated automatically from source +# templates. Any changes you make here may be lost. +# +# The 'docsrc' documentation source bundle is available for download +# from http://www.template-toolkit.org/docs.html and contains all +# the source templates, XML files, scripts, etc., from which the +# documentation for the Template Toolkit is built. +#------------------------------------------------------------------------ + +=head1 NAME + +Template::Plugin::HTML - Plugin to create HTML elements + +=head1 SYNOPSIS + + [% USE HTML %] + + [% HTML.escape("if (a < b && c > d) ..." %] + + [% HTML.element(table => { border => 1, cellpadding => 2 }) %] + + [% HTML.attributes(border => 1, cellpadding => 2) %] + +=head1 DESCRIPTION + +The HTML plugin is very new and very basic, implementing a few useful +methods for generating HTML. It is likely to be extended in the future +or integrated with a larger project to generate HTML elements in a generic +way (as discussed recently on the mod_perl mailing list). + +=head1 METHODS + +=head2 escape(text) + +Returns the source text with any HTML reserved characters such as +E<lt>, E<gt>, etc., correctly esacped to their entity equivalents. + +=head2 attributes(hash) + +Returns the elements of the hash array passed by reference correctly +formatted (e.g. values quoted and correctly escaped) as attributes for +an HTML element. + +=head2 element(type, attributes) + +Generates an HTML element of the specified type and with the attributes +provided as an optional hash array reference as the second argument or +as named arguments. + + [% HTML.element(table => { border => 1, cellpadding => 2 }) %] + [% HTML.element('table', border=1, cellpadding=2) %] + [% HTML.element(table => attribs) %] + +=head1 DEBUGGING + +The HTML plugin accepts a 'sorted' option as a constructor argument +which, when set to any true value, causes the attributes generated by +the attributes() method (either directly or via element()) to be +returned in sorted order. Order of attributes isn't important in +HTML, but this is provided mainly for the purposes of debugging where +it is useful to have attributes generated in a deterministic order +rather than whatever order the hash happened to feel like returning +the keys in. + + [% USE HTML(sorted=1) %] + [% HTML.element( foo => { charlie => 1, bravo => 2, alpha => 3 } ) %] + +generates: + + <foo alpha="3" bravo="2" charlie="1"> + +=head1 AUTHOR + +Andy Wardley E<lt>abw@andywardley.comE<gt> + +L<http://www.andywardley.com/|http://www.andywardley.com/> + + + + +=head1 VERSION + +2.57, distributed as part of the +Template Toolkit version 2.14, released on 04 October 2004. + +=head1 COPYRIGHT + + Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved. + Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=head1 SEE ALSO + +L<Template::Plugin|Template::Plugin> + +=cut + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# indent-tabs-mode: nil +# End: +# +# vim: expandtab shiftwidth=4: diff --git a/lib/Template/Plugin/JavaScript.pm b/lib/Template/Plugin/JavaScript.pm new file mode 100644 index 0000000..4a82b60 --- /dev/null +++ b/lib/Template/Plugin/JavaScript.pm @@ -0,0 +1,73 @@ +package Template::Plugin::JavaScript; + +use strict; +use vars qw($VERSION); +$VERSION = '0.01'; + +require Template::Plugin; +use base qw(Template::Plugin); + +use vars qw($FILTER_NAME); +$FILTER_NAME = 'js'; + +sub new { + my($self, $context, @args) = @_; + my $name = $args[0] || $FILTER_NAME; + $context->define_filter($name, \&encode_js, 0); + return $self; +} + +sub encode_js { + local $_ = shift; + return '' unless defined $_; + + s!(['"])!\\$1!g; + s!\n!\\n!g; + s!\f!\\f!g; + s!\r!\\r!g; + s!\t!\\t!g; + $_; +} + +1; +__END__ + +=head1 NAME + +Template::Plugin::JavaScript - Encodes text to be safe in JavaScript + +=head1 SYNOPSIS + + [% USE JavaScript %] + <script type="text/javascript"> + document.write("[% sometext | js %]"); + </script> + +=head1 DESCRIPTION + +Template::Plugin::JavaScript is a TT filter that filters text so it +can be safely used in JavaScript quotes. + + [% USE JavaScript %] + document.write("[% FILTER js %] + Here's some text going on. + [% END %]"); + +will become: + + document.write("\nHere\'s some text going on.\n"); + +=head1 AUTHOR + +The original idea comes from Movable Type's C<encode_js> global filter. + +Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt> + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +L<Apache::JavaScript::DocumentWrite> + +=cut diff --git a/lib/Text/Balanced.pm b/lib/Text/Balanced.pm deleted file mode 100644 index aa09c3e..0000000 --- a/lib/Text/Balanced.pm +++ /dev/null @@ -1,2301 +0,0 @@ -# EXTRACT VARIOUSLY DELIMITED TEXT SEQUENCES FROM STRINGS. -# FOR FULL DOCUMENTATION SEE Balanced.pod - -use 5.005; -use strict; - -package Text::Balanced; - -use Exporter; -use SelfLoader; -use vars qw { $VERSION @ISA %EXPORT_TAGS }; - -$VERSION = '1.90'; -@ISA = qw ( Exporter ); - -%EXPORT_TAGS = ( ALL => [ qw( - &extract_delimited - &extract_bracketed - &extract_quotelike - &extract_codeblock - &extract_variable - &extract_tagged - &extract_multiple - - &gen_delimited_pat - &gen_extract_tagged - - &delimited_pat - ) ] ); - -Exporter::export_ok_tags('ALL'); - -# PROTOTYPES - -sub _match_bracketed($$$$$$); -sub _match_variable($$); -sub _match_codeblock($$$$$$$); -sub _match_quotelike($$$$); - -# HANDLE RETURN VALUES IN VARIOUS CONTEXTS - -sub _failmsg { - my ($message, $pos) = @_; - $@ = bless { error=>$message, pos=>$pos }, "Text::Balanced::ErrorMsg"; -} - -sub _fail -{ - my ($wantarray, $textref, $message, $pos) = @_; - _failmsg $message, $pos if $message; - return ("",$$textref,"") if $wantarray; - return undef; -} - -sub _succeed -{ - $@ = undef; - my ($wantarray,$textref) = splice @_, 0, 2; - my ($extrapos, $extralen) = @_>18 ? splice(@_, -2, 2) : (0,0); - my ($startlen) = $_[5]; - my $remainderpos = $_[2]; - if ($wantarray) - { - my @res; - while (my ($from, $len) = splice @_, 0, 2) - { - push @res, substr($$textref,$from,$len); - } - if ($extralen) { # CORRECT FILLET - my $extra = substr($res[0], $extrapos-$startlen, $extralen, "\n"); - $res[1] = "$extra$res[1]"; - eval { substr($$textref,$remainderpos,0) = $extra; - substr($$textref,$extrapos,$extralen,"\n")} ; - #REARRANGE HERE DOC AND FILLET IF POSSIBLE - pos($$textref) = $remainderpos-$extralen+1; # RESET \G - } - else { - pos($$textref) = $remainderpos; # RESET \G - } - return @res; - } - else - { - my $match = substr($$textref,$_[0],$_[1]); - substr($match,$extrapos-$_[0]-$startlen,$extralen,"") if $extralen; - my $extra = $extralen - ? substr($$textref, $extrapos, $extralen)."\n" : ""; - eval {substr($$textref,$_[4],$_[1]+$_[5])=$extra} ; #CHOP OUT PREFIX & MATCH, IF POSSIBLE - pos($$textref) = $_[4]; # RESET \G - return $match; - } -} - -# BUILD A PATTERN MATCHING A SIMPLE DELIMITED STRING - -sub gen_delimited_pat($;$) # ($delimiters;$escapes) -{ - my ($dels, $escs) = @_; - return "" unless $dels =~ /\S/; - $escs = '\\' unless $escs; - $escs .= substr($escs,-1) x (length($dels)-length($escs)); - my @pat = (); - my $i; - for ($i=0; $i<length $dels; $i++) - { - my $del = quotemeta substr($dels,$i,1); - my $esc = quotemeta substr($escs,$i,1); - if ($del eq $esc) - { - push @pat, "$del(?:[^$del]*(?:(?:$del$del)[^$del]*)*)$del"; - } - else - { - push @pat, "$del(?:[^$esc$del]*(?:$esc.[^$esc$del]*)*)$del"; - } - } - my $pat = join '|', @pat; - return "(?:$pat)"; -} - -*delimited_pat = \&gen_delimited_pat; - - -# THE EXTRACTION FUNCTIONS - -sub extract_delimited (;$$$$) -{ - my $textref = defined $_[0] ? \$_[0] : \$_; - my $wantarray = wantarray; - my $del = defined $_[1] ? $_[1] : qq{\'\"\`}; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my $esc = defined $_[3] ? $_[3] : qq{\\}; - my $pat = gen_delimited_pat($del, $esc); - my $startpos = pos $$textref || 0; - return _fail($wantarray, $textref, "Not a delimited pattern", 0) - unless $$textref =~ m/\G($pre)($pat)/gc; - my $prelen = length($1); - my $matchpos = $startpos+$prelen; - my $endpos = pos $$textref; - return _succeed $wantarray, $textref, - $matchpos, $endpos-$matchpos, # MATCH - $endpos, length($$textref)-$endpos, # REMAINDER - $startpos, $prelen; # PREFIX -} - -sub extract_bracketed (;$$$) -{ - my $textref = defined $_[0] ? \$_[0] : \$_; - my $ldel = defined $_[1] ? $_[1] : '{([<'; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my $wantarray = wantarray; - my $qdel = ""; - my $quotelike; - $ldel =~ s/'//g and $qdel .= q{'}; - $ldel =~ s/"//g and $qdel .= q{"}; - $ldel =~ s/`//g and $qdel .= q{`}; - $ldel =~ s/q//g and $quotelike = 1; - $ldel =~ tr/[](){}<>\0-\377/[[(({{<</ds; - my $rdel = $ldel; - unless ($rdel =~ tr/[({</])}>/) - { - return _fail $wantarray, $textref, - "Did not find a suitable bracket in delimiter: \"$_[1]\"", - 0; - } - my $posbug = pos; - $ldel = join('|', map { quotemeta $_ } split('', $ldel)); - $rdel = join('|', map { quotemeta $_ } split('', $rdel)); - pos = $posbug; - - my $startpos = pos $$textref || 0; - my @match = _match_bracketed($textref,$pre, $ldel, $qdel, $quotelike, $rdel); - - return _fail ($wantarray, $textref) unless @match; - - return _succeed ( $wantarray, $textref, - $match[2], $match[5]+2, # MATCH - @match[8,9], # REMAINDER - @match[0,1], # PREFIX - ); -} - -sub _match_bracketed($$$$$$) # $textref, $pre, $ldel, $qdel, $quotelike, $rdel -{ - my ($textref, $pre, $ldel, $qdel, $quotelike, $rdel) = @_; - my ($startpos, $ldelpos, $endpos) = (pos $$textref = pos $$textref||0); - unless ($$textref =~ m/\G$pre/gc) - { - _failmsg "Did not find prefix: /$pre/", $startpos; - return; - } - - $ldelpos = pos $$textref; - - unless ($$textref =~ m/\G($ldel)/gc) - { - _failmsg "Did not find opening bracket after prefix: \"$pre\"", - pos $$textref; - pos $$textref = $startpos; - return; - } - - my @nesting = ( $1 ); - my $textlen = length $$textref; - while (pos $$textref < $textlen) - { - next if $$textref =~ m/\G\\./gcs; - - if ($$textref =~ m/\G($ldel)/gc) - { - push @nesting, $1; - } - elsif ($$textref =~ m/\G($rdel)/gc) - { - my ($found, $brackettype) = ($1, $1); - if ($#nesting < 0) - { - _failmsg "Unmatched closing bracket: \"$found\"", - pos $$textref; - pos $$textref = $startpos; - return; - } - my $expected = pop(@nesting); - $expected =~ tr/({[</)}]>/; - if ($expected ne $brackettype) - { - _failmsg qq{Mismatched closing bracket: expected "$expected" but found "$found"}, - pos $$textref; - pos $$textref = $startpos; - return; - } - last if $#nesting < 0; - } - elsif ($qdel && $$textref =~ m/\G([$qdel])/gc) - { - $$textref =~ m/\G[^\\$1]*(?:\\.[^\\$1]*)*(\Q$1\E)/gsc and next; - _failmsg "Unmatched embedded quote ($1)", - pos $$textref; - pos $$textref = $startpos; - return; - } - elsif ($quotelike && _match_quotelike($textref,"",1,0)) - { - next; - } - - else { $$textref =~ m/\G(?:[a-zA-Z0-9]+|.)/gcs } - } - if ($#nesting>=0) - { - _failmsg "Unmatched opening bracket(s): " - . join("..",@nesting)."..", - pos $$textref; - pos $$textref = $startpos; - return; - } - - $endpos = pos $$textref; - - return ( - $startpos, $ldelpos-$startpos, # PREFIX - $ldelpos, 1, # OPENING BRACKET - $ldelpos+1, $endpos-$ldelpos-2, # CONTENTS - $endpos-1, 1, # CLOSING BRACKET - $endpos, length($$textref)-$endpos, # REMAINDER - ); -} - -sub revbracket($) -{ - my $brack = reverse $_[0]; - $brack =~ tr/[({</])}>/; - return $brack; -} - -my $XMLNAME = q{[a-zA-Z_:][a-zA-Z0-9_:.-]*}; - -sub extract_tagged (;$$$$$) # ($text, $opentag, $closetag, $pre, \%options) -{ - my $textref = defined $_[0] ? \$_[0] : \$_; - my $ldel = $_[1]; - my $rdel = $_[2]; - my $pre = defined $_[3] ? $_[3] : '\s*'; - my %options = defined $_[4] ? %{$_[4]} : (); - my $omode = defined $options{fail} ? $options{fail} : ''; - my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) - : defined($options{reject}) ? $options{reject} - : '' - ; - my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) - : defined($options{ignore}) ? $options{ignore} - : '' - ; - - if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } - $@ = undef; - - my @match = _match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); - - return _fail(wantarray, $textref) unless @match; - return _succeed wantarray, $textref, - $match[2], $match[3]+$match[5]+$match[7], # MATCH - @match[8..9,0..1,2..7]; # REM, PRE, BITS -} - -sub _match_tagged # ($$$$$$$) -{ - my ($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore) = @_; - my $rdelspec; - - my ($startpos, $opentagpos, $textpos, $parapos, $closetagpos, $endpos) = ( pos($$textref) = pos($$textref)||0 ); - - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg "Did not find prefix: /$pre/", pos $$textref; - goto failed; - } - - $opentagpos = pos($$textref); - - unless ($$textref =~ m/\G$ldel/gc) - { - _failmsg "Did not find opening tag: /$ldel/", pos $$textref; - goto failed; - } - - $textpos = pos($$textref); - - if (!defined $rdel) - { - $rdelspec = $&; - unless ($rdelspec =~ s/\A([[(<{]+)($XMLNAME).*/ quotemeta "$1\/$2". revbracket($1) /oes) - { - _failmsg "Unable to construct closing tag to match: $rdel", - pos $$textref; - goto failed; - } - } - else - { - $rdelspec = eval "qq{$rdel}" || do { - my $del; - for (qw,~ ! ^ & * ) _ + - = } ] : " ; ' > . ? / | ',) - { next if $rdel =~ /\Q$_/; $del = $_; last } - unless ($del) { - use Carp; - croak "Can't interpolate right delimiter $rdel" - } - eval "qq$del$rdel$del"; - }; - } - - while (pos($$textref) < length($$textref)) - { - next if $$textref =~ m/\G\\./gc; - - if ($$textref =~ m/\G(\n[ \t]*\n)/gc ) - { - $parapos = pos($$textref) - length($1) - unless defined $parapos; - } - elsif ($$textref =~ m/\G($rdelspec)/gc ) - { - $closetagpos = pos($$textref)-length($1); - goto matched; - } - elsif ($ignore && $$textref =~ m/\G(?:$ignore)/gc) - { - next; - } - elsif ($bad && $$textref =~ m/\G($bad)/gcs) - { - pos($$textref) -= length($1); # CUT OFF WHATEVER CAUSED THE SHORTNESS - goto short if ($omode eq 'PARA' || $omode eq 'MAX'); - _failmsg "Found invalid nested tag: $1", pos $$textref; - goto failed; - } - elsif ($$textref =~ m/\G($ldel)/gc) - { - my $tag = $1; - pos($$textref) -= length($tag); # REWIND TO NESTED TAG - unless (_match_tagged(@_)) # MATCH NESTED TAG - { - goto short if $omode eq 'PARA' || $omode eq 'MAX'; - _failmsg "Found unbalanced nested tag: $tag", - pos $$textref; - goto failed; - } - } - else { $$textref =~ m/./gcs } - } - -short: - $closetagpos = pos($$textref); - goto matched if $omode eq 'MAX'; - goto failed unless $omode eq 'PARA'; - - if (defined $parapos) { pos($$textref) = $parapos } - else { $parapos = pos($$textref) } - - return ( - $startpos, $opentagpos-$startpos, # PREFIX - $opentagpos, $textpos-$opentagpos, # OPENING TAG - $textpos, $parapos-$textpos, # TEXT - $parapos, 0, # NO CLOSING TAG - $parapos, length($$textref)-$parapos, # REMAINDER - ); - -matched: - $endpos = pos($$textref); - return ( - $startpos, $opentagpos-$startpos, # PREFIX - $opentagpos, $textpos-$opentagpos, # OPENING TAG - $textpos, $closetagpos-$textpos, # TEXT - $closetagpos, $endpos-$closetagpos, # CLOSING TAG - $endpos, length($$textref)-$endpos, # REMAINDER - ); - -failed: - _failmsg "Did not find closing tag", pos $$textref unless $@; - pos($$textref) = $startpos; - return; -} - -sub extract_variable (;$$) -{ - my $textref = defined $_[0] ? \$_[0] : \$_; - return ("","","") unless defined $$textref; - my $pre = defined $_[1] ? $_[1] : '\s*'; - - my @match = _match_variable($textref,$pre); - - return _fail wantarray, $textref unless @match; - - return _succeed wantarray, $textref, - @match[2..3,4..5,0..1]; # MATCH, REMAINDER, PREFIX -} - -sub _match_variable($$) -{ -# $# -# $^ -# $$ - my ($textref, $pre) = @_; - my $startpos = pos($$textref) = pos($$textref)||0; - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg "Did not find prefix: /$pre/", pos $$textref; - return; - } - my $varpos = pos($$textref); - unless ($$textref =~ m{\G\$\s*(?!::)(\d+|[][&`'+*./|,";%=~:?!\@<>()-]|\^[a-z]?)}gci) - { - unless ($$textref =~ m/\G((\$#?|[*\@\%]|\\&)+)/gc) - { - _failmsg "Did not find leading dereferencer", pos $$textref; - pos $$textref = $startpos; - return; - } - my $deref = $1; - - unless ($$textref =~ m/\G\s*(?:::|')?(?:[_a-z]\w*(?:::|'))*[_a-z]\w*/gci - or _match_codeblock($textref, "", '\{', '\}', '\{', '\}', 0) - or $deref eq '$#' or $deref eq '$$' ) - { - _failmsg "Bad identifier after dereferencer", pos $$textref; - pos $$textref = $startpos; - return; - } - } - - while (1) - { - next if $$textref =~ m/\G\s*(?:->)?\s*[{]\w+[}]/gc; - next if _match_codeblock($textref, - qr/\s*->\s*(?:[_a-zA-Z]\w+\s*)?/, - qr/[({[]/, qr/[)}\]]/, - qr/[({[]/, qr/[)}\]]/, 0); - next if _match_codeblock($textref, - qr/\s*/, qr/[{[]/, qr/[}\]]/, - qr/[{[]/, qr/[}\]]/, 0); - next if _match_variable($textref,'\s*->\s*'); - next if $$textref =~ m/\G\s*->\s*\w+(?![{([])/gc; - last; - } - - my $endpos = pos($$textref); - return ($startpos, $varpos-$startpos, - $varpos, $endpos-$varpos, - $endpos, length($$textref)-$endpos - ); -} - -sub extract_codeblock (;$$$$$) -{ - my $textref = defined $_[0] ? \$_[0] : \$_; - my $wantarray = wantarray; - my $ldel_inner = defined $_[1] ? $_[1] : '{'; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my $ldel_outer = defined $_[3] ? $_[3] : $ldel_inner; - my $rd = $_[4]; - my $rdel_inner = $ldel_inner; - my $rdel_outer = $ldel_outer; - my $posbug = pos; - for ($ldel_inner, $ldel_outer) { tr/[]()<>{}\0-\377/[[((<<{{/ds } - for ($rdel_inner, $rdel_outer) { tr/[]()<>{}\0-\377/]]))>>}}/ds } - for ($ldel_inner, $ldel_outer, $rdel_inner, $rdel_outer) - { - $_ = '('.join('|',map { quotemeta $_ } split('',$_)).')' - } - pos = $posbug; - - my @match = _match_codeblock($textref, $pre, - $ldel_outer, $rdel_outer, - $ldel_inner, $rdel_inner, - $rd); - return _fail($wantarray, $textref) unless @match; - return _succeed($wantarray, $textref, - @match[2..3,4..5,0..1] # MATCH, REMAINDER, PREFIX - ); - -} - -sub _match_codeblock($$$$$$$) -{ - my ($textref, $pre, $ldel_outer, $rdel_outer, $ldel_inner, $rdel_inner, $rd) = @_; - my $startpos = pos($$textref) = pos($$textref) || 0; - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg qq{Did not match prefix /$pre/ at"} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - return; - } - my $codepos = pos($$textref); - unless ($$textref =~ m/\G($ldel_outer)/gc) # OUTERMOST DELIMITER - { - _failmsg qq{Did not find expected opening bracket at "} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - my $closing = $1; - $closing =~ tr/([<{/)]>}/; - my $matched; - my $patvalid = 1; - while (pos($$textref) < length($$textref)) - { - $matched = ''; - if ($rd && $$textref =~ m#\G(\Q(?)\E|\Q(s?)\E|\Q(s)\E)#gc) - { - $patvalid = 0; - next; - } - - if ($$textref =~ m/\G\s*#.*/gc) - { - next; - } - - if ($$textref =~ m/\G\s*($rdel_outer)/gc) - { - unless ($matched = ($closing && $1 eq $closing) ) - { - next if $1 eq '>'; # MIGHT BE A "LESS THAN" - _failmsg q{Mismatched closing bracket at "} . - substr($$textref,pos($$textref),20) . - qq{...". Expected '$closing'}, - pos $$textref; - } - last; - } - - if (_match_variable($textref,'\s*') || - _match_quotelike($textref,'\s*',$patvalid,$patvalid) ) - { - $patvalid = 0; - next; - } - - - # NEED TO COVER MANY MORE CASES HERE!!! - if ($$textref =~ m#\G\s*( [-+*x/%^&|.]=? - | [!=]~ - | =(?!>) - | (\*\*|&&|\|\||<<|>>)=? - | split|grep|map|return - | [([] - )#gcx) - { - $patvalid = 1; - next; - } - - if ( _match_codeblock($textref, '\s*', $ldel_inner, $rdel_inner, $ldel_inner, $rdel_inner, $rd) ) - { - $patvalid = 1; - next; - } - - if ($$textref =~ m/\G\s*$ldel_outer/gc) - { - _failmsg q{Improperly nested codeblock at "} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - last; - } - - $patvalid = 0; - $$textref =~ m/\G\s*(\w+|[-=>]>|.|\Z)/gc; - } - continue { $@ = undef } - - unless ($matched) - { - _failmsg 'No match found for opening bracket', pos $$textref - unless $@; - return; - } - - my $endpos = pos($$textref); - return ( $startpos, $codepos-$startpos, - $codepos, $endpos-$codepos, - $endpos, length($$textref)-$endpos, - ); -} - - -my %mods = ( - 'none' => '[cgimsox]*', - 'm' => '[cgimsox]*', - 's' => '[cegimsox]*', - 'tr' => '[cds]*', - 'y' => '[cds]*', - 'qq' => '', - 'qx' => '', - 'qw' => '', - 'qr' => '[imsx]*', - 'q' => '', - ); - -sub extract_quotelike (;$$) -{ - my $textref = $_[0] ? \$_[0] : \$_; - my $wantarray = wantarray; - my $pre = defined $_[1] ? $_[1] : '\s*'; - - my @match = _match_quotelike($textref,$pre,1,0); - return _fail($wantarray, $textref) unless @match; - return _succeed($wantarray, $textref, - $match[2], $match[18]-$match[2], # MATCH - @match[18,19], # REMAINDER - @match[0,1], # PREFIX - @match[2..17], # THE BITS - @match[20,21], # ANY FILLET? - ); -}; - -sub _match_quotelike($$$$) # ($textref, $prepat, $allow_raw_match) -{ - my ($textref, $pre, $rawmatch, $qmark) = @_; - - my ($textlen,$startpos, - $oppos, - $preld1pos,$ld1pos,$str1pos,$rd1pos, - $preld2pos,$ld2pos,$str2pos,$rd2pos, - $modpos) = ( length($$textref), pos($$textref) = pos($$textref) || 0 ); - - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg qq{Did not find prefix /$pre/ at "} . - substr($$textref, pos($$textref), 20) . - q{..."}, - pos $$textref; - return; - } - $oppos = pos($$textref); - - my $initial = substr($$textref,$oppos,1); - - if ($initial && $initial =~ m|^[\"\'\`]| - || $rawmatch && $initial =~ m|^/| - || $qmark && $initial =~ m|^\?|) - { - unless ($$textref =~ m/ \Q$initial\E [^\\$initial]* (\\.[^\\$initial]*)* \Q$initial\E /gcsx) - { - _failmsg qq{Did not find closing delimiter to match '$initial' at "} . - substr($$textref, $oppos, 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - $modpos= pos($$textref); - $rd1pos = $modpos-1; - - if ($initial eq '/' || $initial eq '?') - { - $$textref =~ m/\G$mods{none}/gc - } - - my $endpos = pos($$textref); - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, 0, # NO OPERATOR - $oppos, 1, # LEFT DEL - $oppos+1, $rd1pos-$oppos-1, # STR/PAT - $rd1pos, 1, # RIGHT DEL - $modpos, 0, # NO 2ND LDEL - $modpos, 0, # NO 2ND STR - $modpos, 0, # NO 2ND RDEL - $modpos, $endpos-$modpos, # MODIFIERS - $endpos, $textlen-$endpos, # REMAINDER - ); - } - - unless ($$textref =~ m{\G((?:m|s|qq|qx|qw|q|qr|tr|y)\b(?=\s*\S)|<<)}gc) - { - _failmsg q{No quotelike operator found after prefix at "} . - substr($$textref, pos($$textref), 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - - my $op = $1; - $preld1pos = pos($$textref); - if ($op eq '<<') { - $ld1pos = pos($$textref); - my $label; - if ($$textref =~ m{\G([A-Za-z_]\w*)}gc) { - $label = $1; - } - elsif ($$textref =~ m{ \G ' ([^'\\]* (?:\\.[^'\\]*)*) ' - | \G " ([^"\\]* (?:\\.[^"\\]*)*) " - | \G ` ([^`\\]* (?:\\.[^`\\]*)*) ` - }gcsx) { - $label = $+; - } - else { - $label = ""; - } - my $extrapos = pos($$textref); - $$textref =~ m{.*\n}gc; - $str1pos = pos($$textref); - unless ($$textref =~ m{.*?\n(?=$label\n)}gc) { - _failmsg qq{Missing here doc terminator ('$label') after "} . - substr($$textref, $startpos, 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - $rd1pos = pos($$textref); - $$textref =~ m{$label\n}gc; - $ld2pos = pos($$textref); - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, length($op), # OPERATOR - $ld1pos, $extrapos-$ld1pos, # LEFT DEL - $str1pos, $rd1pos-$str1pos, # STR/PAT - $rd1pos, $ld2pos-$rd1pos, # RIGHT DEL - $ld2pos, 0, # NO 2ND LDEL - $ld2pos, 0, # NO 2ND STR - $ld2pos, 0, # NO 2ND RDEL - $ld2pos, 0, # NO MODIFIERS - $ld2pos, $textlen-$ld2pos, # REMAINDER - $extrapos, $str1pos-$extrapos, # FILLETED BIT - ); - } - - $$textref =~ m/\G\s*/gc; - $ld1pos = pos($$textref); - $str1pos = $ld1pos+1; - - unless ($$textref =~ m/\G(\S)/gc) # SHOULD USE LOOKAHEAD - { - _failmsg "No block delimiter found after quotelike $op", - pos $$textref; - pos $$textref = $startpos; - return; - } - pos($$textref) = $ld1pos; # HAVE TO DO THIS BECAUSE LOOKAHEAD BROKEN - my ($ldel1, $rdel1) = ("\Q$1","\Q$1"); - if ($ldel1 =~ /[[(<{]/) - { - $rdel1 =~ tr/[({</])}>/; - _match_bracketed($textref,"",$ldel1,"","",$rdel1) - || do { pos $$textref = $startpos; return }; - } - else - { - $$textref =~ /$ldel1[^\\$ldel1]*(\\.[^\\$ldel1]*)*$ldel1/gcs - || do { pos $$textref = $startpos; return }; - } - $ld2pos = $rd1pos = pos($$textref)-1; - - my $second_arg = $op =~ /s|tr|y/ ? 1 : 0; - if ($second_arg) - { - my ($ldel2, $rdel2); - if ($ldel1 =~ /[[(<{]/) - { - unless ($$textref =~ /\G\s*(\S)/gc) # SHOULD USE LOOKAHEAD - { - _failmsg "Missing second block for quotelike $op", - pos $$textref; - pos $$textref = $startpos; - return; - } - $ldel2 = $rdel2 = "\Q$1"; - $rdel2 =~ tr/[({</])}>/; - } - else - { - $ldel2 = $rdel2 = $ldel1; - } - $str2pos = $ld2pos+1; - - if ($ldel2 =~ /[[(<{]/) - { - pos($$textref)--; # OVERCOME BROKEN LOOKAHEAD - _match_bracketed($textref,"",$ldel2,"","",$rdel2) - || do { pos $$textref = $startpos; return }; - } - else - { - $$textref =~ /[^\\$ldel2]*(\\.[^\\$ldel2]*)*$ldel2/gcs - || do { pos $$textref = $startpos; return }; - } - $rd2pos = pos($$textref)-1; - } - else - { - $ld2pos = $str2pos = $rd2pos = $rd1pos; - } - - $modpos = pos $$textref; - - $$textref =~ m/\G($mods{$op})/gc; - my $endpos = pos $$textref; - - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, length($op), # OPERATOR - $ld1pos, 1, # LEFT DEL - $str1pos, $rd1pos-$str1pos, # STR/PAT - $rd1pos, 1, # RIGHT DEL - $ld2pos, $second_arg, # 2ND LDEL (MAYBE) - $str2pos, $rd2pos-$str2pos, # 2ND STR (MAYBE) - $rd2pos, $second_arg, # 2ND RDEL (MAYBE) - $modpos, $endpos-$modpos, # MODIFIERS - $endpos, $textlen-$endpos, # REMAINDER - ); -} - -my $def_func = -[ - sub { extract_variable($_[0], '') }, - sub { extract_quotelike($_[0],'') }, - sub { extract_codeblock($_[0],'{}','') }, -]; - -sub extract_multiple (;$$$$) # ($text, $functions_ref, $max_fields, $ignoreunknown) -{ - my $textref = defined($_[0]) ? \$_[0] : \$_; - my $posbug = pos; - my ($lastpos, $firstpos); - my @fields = (); - - #for ($$textref) - { - my @func = defined $_[1] ? @{$_[1]} : @{$def_func}; - my $max = defined $_[2] && $_[2]>0 ? $_[2] : 1_000_000_000; - my $igunk = $_[3]; - - pos $$textref ||= 0; - - unless (wantarray) - { - use Carp; - carp "extract_multiple reset maximal count to 1 in scalar context" - if $^W && defined($_[2]) && $max > 1; - $max = 1 - } - - my $unkpos; - my $func; - my $class; - - my @class; - foreach $func ( @func ) - { - if (ref($func) eq 'HASH') - { - push @class, (keys %$func)[0]; - $func = (values %$func)[0]; - } - else - { - push @class, undef; - } - } - - FIELD: while (pos($$textref) < length($$textref)) - { - my ($field, $rem); - my @bits; - foreach my $i ( 0..$#func ) - { - my $pref; - $func = $func[$i]; - $class = $class[$i]; - $lastpos = pos $$textref; - if (ref($func) eq 'CODE') - { ($field,$rem,$pref) = @bits = $func->($$textref); - # print "[$field|$rem]" if $field; - } - elsif (ref($func) eq 'Text::Balanced::Extractor') - { @bits = $field = $func->extract($$textref) } - elsif( $$textref =~ m/\G$func/gc ) - { @bits = $field = defined($1) ? $1 : $& } - $pref ||= ""; - if (defined($field) && length($field)) - { - if (!$igunk) { - $unkpos = pos $$textref - if length($pref) && !defined($unkpos); - if (defined $unkpos) - { - push @fields, substr($$textref, $unkpos, $lastpos-$unkpos).$pref; - $firstpos = $unkpos unless defined $firstpos; - undef $unkpos; - last FIELD if @fields == $max; - } - } - push @fields, $class - ? bless (\$field, $class) - : $field; - $firstpos = $lastpos unless defined $firstpos; - $lastpos = pos $$textref; - last FIELD if @fields == $max; - next FIELD; - } - } - if ($$textref =~ /\G(.)/gcs) - { - $unkpos = pos($$textref)-1 - unless $igunk || defined $unkpos; - } - } - - if (defined $unkpos) - { - push @fields, substr($$textref, $unkpos); - $firstpos = $unkpos unless defined $firstpos; - $lastpos = length $$textref; - } - last; - } - - pos $$textref = $lastpos; - return @fields if wantarray; - - $firstpos ||= 0; - eval { substr($$textref,$firstpos,$lastpos-$firstpos)=""; - pos $$textref = $firstpos }; - return $fields[0]; -} - - -sub gen_extract_tagged # ($opentag, $closetag, $pre, \%options) -{ - my $ldel = $_[0]; - my $rdel = $_[1]; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my %options = defined $_[3] ? %{$_[3]} : (); - my $omode = defined $options{fail} ? $options{fail} : ''; - my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) - : defined($options{reject}) ? $options{reject} - : '' - ; - my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) - : defined($options{ignore}) ? $options{ignore} - : '' - ; - - if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } - - my $posbug = pos; - for ($ldel, $pre, $bad, $ignore) { $_ = qr/$_/ if $_ } - pos = $posbug; - - my $closure = sub - { - my $textref = defined $_[0] ? \$_[0] : \$_; - my @match = Text::Balanced::_match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); - - return _fail(wantarray, $textref) unless @match; - return _succeed wantarray, $textref, - $match[2], $match[3]+$match[5]+$match[7], # MATCH - @match[8..9,0..1,2..7]; # REM, PRE, BITS - }; - - bless $closure, 'Text::Balanced::Extractor'; -} - -package Text::Balanced::Extractor; - -sub extract($$) # ($self, $text) -{ - &{$_[0]}($_[1]); -} - -package Text::Balanced::ErrorMsg; - -use overload '""' => sub { "$_[0]->{error}, detected at offset $_[0]->{pos}" }; - -1; - -__END__ - -=head1 NAME - -Text::Balanced - Extract delimited text sequences from strings. - - -=head1 SYNOPSIS - - use Text::Balanced qw ( - extract_delimited - extract_bracketed - extract_quotelike - extract_codeblock - extract_variable - extract_tagged - extract_multiple - - gen_delimited_pat - gen_extract_tagged - ); - - # Extract the initial substring of $text that is delimited by - # two (unescaped) instances of the first character in $delim. - - ($extracted, $remainder) = extract_delimited($text,$delim); - - - # Extract the initial substring of $text that is bracketed - # with a delimiter(s) specified by $delim (where the string - # in $delim contains one or more of '(){}[]<>'). - - ($extracted, $remainder) = extract_bracketed($text,$delim); - - - # Extract the initial substring of $text that is bounded by - # an XML tag. - - ($extracted, $remainder) = extract_tagged($text); - - - # Extract the initial substring of $text that is bounded by - # a C<BEGIN>...C<END> pair. Don't allow nested C<BEGIN> tags - - ($extracted, $remainder) = - extract_tagged($text,"BEGIN","END",undef,{bad=>["BEGIN"]}); - - - # Extract the initial substring of $text that represents a - # Perl "quote or quote-like operation" - - ($extracted, $remainder) = extract_quotelike($text); - - - # Extract the initial substring of $text that represents a block - # of Perl code, bracketed by any of character(s) specified by $delim - # (where the string $delim contains one or more of '(){}[]<>'). - - ($extracted, $remainder) = extract_codeblock($text,$delim); - - - # Extract the initial substrings of $text that would be extracted by - # one or more sequential applications of the specified functions - # or regular expressions - - @extracted = extract_multiple($text, - [ \&extract_bracketed, - \&extract_quotelike, - \&some_other_extractor_sub, - qr/[xyz]*/, - 'literal', - ]); - -# Create a string representing an optimized pattern (a la Friedl) -# that matches a substring delimited by any of the specified characters -# (in this case: any type of quote or a slash) - - $patstring = gen_delimited_pat(q{'"`/}); - - -# Generate a reference to an anonymous sub that is just like extract_tagged -# but pre-compiled and optimized for a specific pair of tags, and consequently -# much faster (i.e. 3 times faster). It uses qr// for better performance on -# repeated calls, so it only works under Perl 5.005 or later. - - $extract_head = gen_extract_tagged('<HEAD>','</HEAD>'); - - ($extracted, $remainder) = $extract_head->($text); - - -=head1 DESCRIPTION - -The various C<extract_...> subroutines may be used to -extract a delimited substring, possibly after skipping a -specified prefix string. By default, that prefix is -optional whitespace (C</\s*/>), but you can change it to whatever -you wish (see below). - -The substring to be extracted must appear at the -current C<pos> location of the string's variable -(or at index zero, if no C<pos> position is defined). -In other words, the C<extract_...> subroutines I<don't> -extract the first occurance of a substring anywhere -in a string (like an unanchored regex would). Rather, -they extract an occurance of the substring appearing -immediately at the current matching position in the -string (like a C<\G>-anchored regex would). - - - -=head2 General behaviour in list contexts - -In a list context, all the subroutines return a list, the first three -elements of which are always: - -=over 4 - -=item [0] - -The extracted string, including the specified delimiters. -If the extraction fails an empty string is returned. - -=item [1] - -The remainder of the input string (i.e. the characters after the -extracted string). On failure, the entire string is returned. - -=item [2] - -The skipped prefix (i.e. the characters before the extracted string). -On failure, the empty string is returned. - -=back - -Note that in a list context, the contents of the original input text (the first -argument) are not modified in any way. - -However, if the input text was passed in a variable, that variable's -C<pos> value is updated to point at the first character after the -extracted text. That means that in a list context the various -subroutines can be used much like regular expressions. For example: - - while ( $next = (extract_quotelike($text))[0] ) - { - # process next quote-like (in $next) - } - - -=head2 General behaviour in scalar and void contexts - -In a scalar context, the extracted string is returned, having first been -removed from the input text. Thus, the following code also processes -each quote-like operation, but actually removes them from $text: - - while ( $next = extract_quotelike($text) ) - { - # process next quote-like (in $next) - } - -Note that if the input text is a read-only string (i.e. a literal), -no attempt is made to remove the extracted text. - -In a void context the behaviour of the extraction subroutines is -exactly the same as in a scalar context, except (of course) that the -extracted substring is not returned. - -=head2 A note about prefixes - -Prefix patterns are matched without any trailing modifiers (C</gimsox> etc.) -This can bite you if you're expecting a prefix specification like -'.*?(?=<H1>)' to skip everything up to the first <H1> tag. Such a prefix -pattern will only succeed if the <H1> tag is on the current line, since -. normally doesn't match newlines. - -To overcome this limitation, you need to turn on /s matching within -the prefix pattern, using the C<(?s)> directive: '(?s).*?(?=<H1>)' - - -=head2 C<extract_delimited> - -The C<extract_delimited> function formalizes the common idiom -of extracting a single-character-delimited substring from the start of -a string. For example, to extract a single-quote delimited string, the -following code is typically used: - - ($remainder = $text) =~ s/\A('(\\.|[^'])*')//s; - $extracted = $1; - -but with C<extract_delimited> it can be simplified to: - - ($extracted,$remainder) = extract_delimited($text, "'"); - -C<extract_delimited> takes up to four scalars (the input text, the -delimiters, a prefix pattern to be skipped, and any escape characters) -and extracts the initial substring of the text that -is appropriately delimited. If the delimiter string has multiple -characters, the first one encountered in the text is taken to delimit -the substring. -The third argument specifies a prefix pattern that is to be skipped -(but must be present!) before the substring is extracted. -The final argument specifies the escape character to be used for each -delimiter. - -All arguments are optional. If the escape characters are not specified, -every delimiter is escaped with a backslash (C<\>). -If the prefix is not specified, the -pattern C<'\s*'> - optional whitespace - is used. If the delimiter set -is also not specified, the set C</["'`]/> is used. If the text to be processed -is not specified either, C<$_> is used. - -In list context, C<extract_delimited> returns a array of three -elements, the extracted substring (I<including the surrounding -delimiters>), the remainder of the text, and the skipped prefix (if -any). If a suitable delimited substring is not found, the first -element of the array is the empty string, the second is the complete -original text, and the prefix returned in the third element is an -empty string. - -In a scalar context, just the extracted substring is returned. In -a void context, the extracted substring (and any prefix) are simply -removed from the beginning of the first argument. - -Examples: - - # Remove a single-quoted substring from the very beginning of $text: - - $substring = extract_delimited($text, "'", ''); - - # Remove a single-quoted Pascalish substring (i.e. one in which - # doubling the quote character escapes it) from the very - # beginning of $text: - - $substring = extract_delimited($text, "'", '', "'"); - - # Extract a single- or double- quoted substring from the - # beginning of $text, optionally after some whitespace - # (note the list context to protect $text from modification): - - ($substring) = extract_delimited $text, q{"'}; - - - # Delete the substring delimited by the first '/' in $text: - - $text = join '', (extract_delimited($text,'/','[^/]*')[2,1]; - -Note that this last example is I<not> the same as deleting the first -quote-like pattern. For instance, if C<$text> contained the string: - - "if ('./cmd' =~ m/$UNIXCMD/s) { $cmd = $1; }" - -then after the deletion it would contain: - - "if ('.$UNIXCMD/s) { $cmd = $1; }" - -not: - - "if ('./cmd' =~ ms) { $cmd = $1; }" - - -See L<"extract_quotelike"> for a (partial) solution to this problem. - - -=head2 C<extract_bracketed> - -Like C<"extract_delimited">, the C<extract_bracketed> function takes -up to three optional scalar arguments: a string to extract from, a delimiter -specifier, and a prefix pattern. As before, a missing prefix defaults to -optional whitespace and a missing text defaults to C<$_>. However, a missing -delimiter specifier defaults to C<'{}()[]E<lt>E<gt>'> (see below). - -C<extract_bracketed> extracts a balanced-bracket-delimited -substring (using any one (or more) of the user-specified delimiter -brackets: '(..)', '{..}', '[..]', or '<..>'). Optionally it will also -respect quoted unbalanced brackets (see below). - -A "delimiter bracket" is a bracket in list of delimiters passed as -C<extract_bracketed>'s second argument. Delimiter brackets are -specified by giving either the left or right (or both!) versions -of the required bracket(s). Note that the order in which -two or more delimiter brackets are specified is not significant. - -A "balanced-bracket-delimited substring" is a substring bounded by -matched brackets, such that any other (left or right) delimiter -bracket I<within> the substring is also matched by an opposite -(right or left) delimiter bracket I<at the same level of nesting>. Any -type of bracket not in the delimiter list is treated as an ordinary -character. - -In other words, each type of bracket specified as a delimiter must be -balanced and correctly nested within the substring, and any other kind of -("non-delimiter") bracket in the substring is ignored. - -For example, given the string: - - $text = "{ an '[irregularly :-(] {} parenthesized >:-)' string }"; - -then a call to C<extract_bracketed> in a list context: - - @result = extract_bracketed( $text, '{}' ); - -would return: - - ( "{ an '[irregularly :-(] {} parenthesized >:-)' string }" , "" , "" ) - -since both sets of C<'{..}'> brackets are properly nested and evenly balanced. -(In a scalar context just the first element of the array would be returned. In -a void context, C<$text> would be replaced by an empty string.) - -Likewise the call in: - - @result = extract_bracketed( $text, '{[' ); - -would return the same result, since all sets of both types of specified -delimiter brackets are correctly nested and balanced. - -However, the call in: - - @result = extract_bracketed( $text, '{([<' ); - -would fail, returning: - - ( undef , "{ an '[irregularly :-(] {} parenthesized >:-)' string }" ); - -because the embedded pairs of C<'(..)'>s and C<'[..]'>s are "cross-nested" and -the embedded C<'E<gt>'> is unbalanced. (In a scalar context, this call would -return an empty string. In a void context, C<$text> would be unchanged.) - -Note that the embedded single-quotes in the string don't help in this -case, since they have not been specified as acceptable delimiters and are -therefore treated as non-delimiter characters (and ignored). - -However, if a particular species of quote character is included in the -delimiter specification, then that type of quote will be correctly handled. -for example, if C<$text> is: - - $text = '<A HREF=">>>>">link</A>'; - -then - - @result = extract_bracketed( $text, '<">' ); - -returns: - - ( '<A HREF=">>>>">', 'link</A>', "" ) - -as expected. Without the specification of C<"> as an embedded quoter: - - @result = extract_bracketed( $text, '<>' ); - -the result would be: - - ( '<A HREF=">', '>>>">link</A>', "" ) - -In addition to the quote delimiters C<'>, C<">, and C<`>, full Perl quote-like -quoting (i.e. q{string}, qq{string}, etc) can be specified by including the -letter 'q' as a delimiter. Hence: - - @result = extract_bracketed( $text, '<q>' ); - -would correctly match something like this: - - $text = '<leftop: conj /and/ conj>'; - -See also: C<"extract_quotelike"> and C<"extract_codeblock">. - - -=head2 C<extract_variable> - -C<extract_variable> extracts any valid Perl variable or -variable-involved expression, including scalars, arrays, hashes, array -accesses, hash look-ups, method calls through objects, subroutine calles -through subroutine references, etc. - -The subroutine takes up to two optional arguments: - -=over 4 - -=item 1. - -A string to be processed (C<$_> if the string is omitted or C<undef>) - -=item 2. - -A string specifying a pattern to be matched as a prefix (which is to be -skipped). If omitted, optional whitespace is skipped. - -=back - -On success in a list context, an array of 3 elements is returned. The -elements are: - -=over 4 - -=item [0] - -the extracted variable, or variablish expression - -=item [1] - -the remainder of the input text, - -=item [2] - -the prefix substring (if any), - -=back - -On failure, all of these values (except the remaining text) are C<undef>. - -In a scalar context, C<extract_variable> returns just the complete -substring that matched a variablish expression. C<undef> is returned on -failure. In addition, the original input text has the returned substring -(and any prefix) removed from it. - -In a void context, the input text just has the matched substring (and -any specified prefix) removed. - - -=head2 C<extract_tagged> - -C<extract_tagged> extracts and segments text between (balanced) -specified tags. - -The subroutine takes up to five optional arguments: - -=over 4 - -=item 1. - -A string to be processed (C<$_> if the string is omitted or C<undef>) - -=item 2. - -A string specifying a pattern to be matched as the opening tag. -If the pattern string is omitted (or C<undef>) then a pattern -that matches any standard XML tag is used. - -=item 3. - -A string specifying a pattern to be matched at the closing tag. -If the pattern string is omitted (or C<undef>) then the closing -tag is constructed by inserting a C</> after any leading bracket -characters in the actual opening tag that was matched (I<not> the pattern -that matched the tag). For example, if the opening tag pattern -is specified as C<'{{\w+}}'> and actually matched the opening tag -C<"{{DATA}}">, then the constructed closing tag would be C<"{{/DATA}}">. - -=item 4. - -A string specifying a pattern to be matched as a prefix (which is to be -skipped). If omitted, optional whitespace is skipped. - -=item 5. - -A hash reference containing various parsing options (see below) - -=back - -The various options that can be specified are: - -=over 4 - -=item C<reject =E<gt> $listref> - -The list reference contains one or more strings specifying patterns -that must I<not> appear within the tagged text. - -For example, to extract -an HTML link (which should not contain nested links) use: - - extract_tagged($text, '<A>', '</A>', undef, {reject => ['<A>']} ); - -=item C<ignore =E<gt> $listref> - -The list reference contains one or more strings specifying patterns -that are I<not> be be treated as nested tags within the tagged text -(even if they would match the start tag pattern). - -For example, to extract an arbitrary XML tag, but ignore "empty" elements: - - extract_tagged($text, undef, undef, undef, {ignore => ['<[^>]*/>']} ); - -(also see L<"gen_delimited_pat"> below). - - -=item C<fail =E<gt> $str> - -The C<fail> option indicates the action to be taken if a matching end -tag is not encountered (i.e. before the end of the string or some -C<reject> pattern matches). By default, a failure to match a closing -tag causes C<extract_tagged> to immediately fail. - -However, if the string value associated with <reject> is "MAX", then -C<extract_tagged> returns the complete text up to the point of failure. -If the string is "PARA", C<extract_tagged> returns only the first paragraph -after the tag (up to the first line that is either empty or contains -only whitespace characters). -If the string is "", the the default behaviour (i.e. failure) is reinstated. - -For example, suppose the start tag "/para" introduces a paragraph, which then -continues until the next "/endpara" tag or until another "/para" tag is -encountered: - - $text = "/para line 1\n\nline 3\n/para line 4"; - - extract_tagged($text, '/para', '/endpara', undef, - {reject => '/para', fail => MAX ); - - # EXTRACTED: "/para line 1\n\nline 3\n" - -Suppose instead, that if no matching "/endpara" tag is found, the "/para" -tag refers only to the immediately following paragraph: - - $text = "/para line 1\n\nline 3\n/para line 4"; - - extract_tagged($text, '/para', '/endpara', undef, - {reject => '/para', fail => MAX ); - - # EXTRACTED: "/para line 1\n" - -Note that the specified C<fail> behaviour applies to nested tags as well. - -=back - -On success in a list context, an array of 6 elements is returned. The elements are: - -=over 4 - -=item [0] - -the extracted tagged substring (including the outermost tags), - -=item [1] - -the remainder of the input text, - -=item [2] - -the prefix substring (if any), - -=item [3] - -the opening tag - -=item [4] - -the text between the opening and closing tags - -=item [5] - -the closing tag (or "" if no closing tag was found) - -=back - -On failure, all of these values (except the remaining text) are C<undef>. - -In a scalar context, C<extract_tagged> returns just the complete -substring that matched a tagged text (including the start and end -tags). C<undef> is returned on failure. In addition, the original input -text has the returned substring (and any prefix) removed from it. - -In a void context, the input text just has the matched substring (and -any specified prefix) removed. - - -=head2 C<gen_extract_tagged> - -(Note: This subroutine is only available under Perl5.005) - -C<gen_extract_tagged> generates a new anonymous subroutine which -extracts text between (balanced) specified tags. In other words, -it generates a function identical in function to C<extract_tagged>. - -The difference between C<extract_tagged> and the anonymous -subroutines generated by -C<gen_extract_tagged>, is that those generated subroutines: - -=over 4 - -=item * - -do not have to reparse tag specification or parsing options every time -they are called (whereas C<extract_tagged> has to effectively rebuild -its tag parser on every call); - -=item * - -make use of the new qr// construct to pre-compile the regexes they use -(whereas C<extract_tagged> uses standard string variable interpolation -to create tag-matching patterns). - -=back - -The subroutine takes up to four optional arguments (the same set as -C<extract_tagged> except for the string to be processed). It returns -a reference to a subroutine which in turn takes a single argument (the text to -be extracted from). - -In other words, the implementation of C<extract_tagged> is exactly -equivalent to: - - sub extract_tagged - { - my $text = shift; - $extractor = gen_extract_tagged(@_); - return $extractor->($text); - } - -(although C<extract_tagged> is not currently implemented that way, in order -to preserve pre-5.005 compatibility). - -Using C<gen_extract_tagged> to create extraction functions for specific tags -is a good idea if those functions are going to be called more than once, since -their performance is typically twice as good as the more general-purpose -C<extract_tagged>. - - -=head2 C<extract_quotelike> - -C<extract_quotelike> attempts to recognize, extract, and segment any -one of the various Perl quotes and quotelike operators (see -L<perlop(3)>) Nested backslashed delimiters, embedded balanced bracket -delimiters (for the quotelike operators), and trailing modifiers are -all caught. For example, in: - - extract_quotelike 'q # an octothorpe: \# (not the end of the q!) #' - - extract_quotelike ' "You said, \"Use sed\"." ' - - extract_quotelike ' s{([A-Z]{1,8}\.[A-Z]{3})} /\L$1\E/; ' - - extract_quotelike ' tr/\\\/\\\\/\\\//ds; ' - -the full Perl quotelike operations are all extracted correctly. - -Note too that, when using the /x modifier on a regex, any comment -containing the current pattern delimiter will cause the regex to be -immediately terminated. In other words: - - 'm / - (?i) # CASE INSENSITIVE - [a-z_] # LEADING ALPHABETIC/UNDERSCORE - [a-z0-9]* # FOLLOWED BY ANY NUMBER OF ALPHANUMERICS - /x' - -will be extracted as if it were: - - 'm / - (?i) # CASE INSENSITIVE - [a-z_] # LEADING ALPHABETIC/' - -This behaviour is identical to that of the actual compiler. - -C<extract_quotelike> takes two arguments: the text to be processed and -a prefix to be matched at the very beginning of the text. If no prefix -is specified, optional whitespace is the default. If no text is given, -C<$_> is used. - -In a list context, an array of 11 elements is returned. The elements are: - -=over 4 - -=item [0] - -the extracted quotelike substring (including trailing modifiers), - -=item [1] - -the remainder of the input text, - -=item [2] - -the prefix substring (if any), - -=item [3] - -the name of the quotelike operator (if any), - -=item [4] - -the left delimiter of the first block of the operation, - -=item [5] - -the text of the first block of the operation -(that is, the contents of -a quote, the regex of a match or substitution or the target list of a -translation), - -=item [6] - -the right delimiter of the first block of the operation, - -=item [7] - -the left delimiter of the second block of the operation -(that is, if it is a C<s>, C<tr>, or C<y>), - -=item [8] - -the text of the second block of the operation -(that is, the replacement of a substitution or the translation list -of a translation), - -=item [9] - -the right delimiter of the second block of the operation (if any), - -=item [10] - -the trailing modifiers on the operation (if any). - -=back - -For each of the fields marked "(if any)" the default value on success is -an empty string. -On failure, all of these values (except the remaining text) are C<undef>. - - -In a scalar context, C<extract_quotelike> returns just the complete substring -that matched a quotelike operation (or C<undef> on failure). In a scalar or -void context, the input text has the same substring (and any specified -prefix) removed. - -Examples: - - # Remove the first quotelike literal that appears in text - - $quotelike = extract_quotelike($text,'.*?'); - - # Replace one or more leading whitespace-separated quotelike - # literals in $_ with "<QLL>" - - do { $_ = join '<QLL>', (extract_quotelike)[2,1] } until $@; - - - # Isolate the search pattern in a quotelike operation from $text - - ($op,$pat) = (extract_quotelike $text)[3,5]; - if ($op =~ /[ms]/) - { - print "search pattern: $pat\n"; - } - else - { - print "$op is not a pattern matching operation\n"; - } - - -=head2 C<extract_quotelike> and "here documents" - -C<extract_quotelike> can successfully extract "here documents" from an input -string, but with an important caveat in list contexts. - -Unlike other types of quote-like literals, a here document is rarely -a contiguous substring. For example, a typical piece of code using -here document might look like this: - - <<'EOMSG' || die; - This is the message. - EOMSG - exit; - -Given this as an input string in a scalar context, C<extract_quotelike> -would correctly return the string "<<'EOMSG'\nThis is the message.\nEOMSG", -leaving the string " || die;\nexit;" in the original variable. In other words, -the two separate pieces of the here document are successfully extracted and -concatenated. - -In a list context, C<extract_quotelike> would return the list - -=over 4 - -=item [0] - -"<<'EOMSG'\nThis is the message.\nEOMSG\n" (i.e. the full extracted here document, -including fore and aft delimiters), - -=item [1] - -" || die;\nexit;" (i.e. the remainder of the input text, concatenated), - -=item [2] - -"" (i.e. the prefix substring -- trivial in this case), - -=item [3] - -"<<" (i.e. the "name" of the quotelike operator) - -=item [4] - -"'EOMSG'" (i.e. the left delimiter of the here document, including any quotes), - -=item [5] - -"This is the message.\n" (i.e. the text of the here document), - -=item [6] - -"EOMSG" (i.e. the right delimiter of the here document), - -=item [7..10] - -"" (a here document has no second left delimiter, second text, second right -delimiter, or trailing modifiers). - -=back - -However, the matching position of the input variable would be set to -"exit;" (i.e. I<after> the closing delimiter of the here document), -which would cause the earlier " || die;\nexit;" to be skipped in any -sequence of code fragment extractions. - -To avoid this problem, when it encounters a here document whilst -extracting from a modifiable string, C<extract_quotelike> silently -rearranges the string to an equivalent piece of Perl: - - <<'EOMSG' - This is the message. - EOMSG - || die; - exit; - -in which the here document I<is> contiguous. It still leaves the -matching position after the here document, but now the rest of the line -on which the here document starts is not skipped. - -To prevent <extract_quotelike> from mucking about with the input in this way -(this is the only case where a list-context C<extract_quotelike> does so), -you can pass the input variable as an interpolated literal: - - $quotelike = extract_quotelike("$var"); - - -=head2 C<extract_codeblock> - -C<extract_codeblock> attempts to recognize and extract a balanced -bracket delimited substring that may contain unbalanced brackets -inside Perl quotes or quotelike operations. That is, C<extract_codeblock> -is like a combination of C<"extract_bracketed"> and -C<"extract_quotelike">. - -C<extract_codeblock> takes the same initial three parameters as C<extract_bracketed>: -a text to process, a set of delimiter brackets to look for, and a prefix to -match first. It also takes an optional fourth parameter, which allows the -outermost delimiter brackets to be specified separately (see below). - -Omitting the first argument (input text) means process C<$_> instead. -Omitting the second argument (delimiter brackets) indicates that only C<'{'> is to be used. -Omitting the third argument (prefix argument) implies optional whitespace at the start. -Omitting the fourth argument (outermost delimiter brackets) indicates that the -value of the second argument is to be used for the outermost delimiters. - -Once the prefix an dthe outermost opening delimiter bracket have been -recognized, code blocks are extracted by stepping through the input text and -trying the following alternatives in sequence: - -=over 4 - -=item 1. - -Try and match a closing delimiter bracket. If the bracket was the same -species as the last opening bracket, return the substring to that -point. If the bracket was mismatched, return an error. - -=item 2. - -Try to match a quote or quotelike operator. If found, call -C<extract_quotelike> to eat it. If C<extract_quotelike> fails, return -the error it returned. Otherwise go back to step 1. - -=item 3. - -Try to match an opening delimiter bracket. If found, call -C<extract_codeblock> recursively to eat the embedded block. If the -recursive call fails, return an error. Otherwise, go back to step 1. - -=item 4. - -Unconditionally match a bareword or any other single character, and -then go back to step 1. - -=back - - -Examples: - - # Find a while loop in the text - - if ($text =~ s/.*?while\s*\{/{/) - { - $loop = "while " . extract_codeblock($text); - } - - # Remove the first round-bracketed list (which may include - # round- or curly-bracketed code blocks or quotelike operators) - - extract_codeblock $text, "(){}", '[^(]*'; - - -The ability to specify a different outermost delimiter bracket is useful -in some circumstances. For example, in the Parse::RecDescent module, -parser actions which are to be performed only on a successful parse -are specified using a C<E<lt>defer:...E<gt>> directive. For example: - - sentence: subject verb object - <defer: {$::theVerb = $item{verb}} > - -Parse::RecDescent uses C<extract_codeblock($text, '{}E<lt>E<gt>')> to extract the code -within the C<E<lt>defer:...E<gt>> directive, but there's a problem. - -A deferred action like this: - - <defer: {if ($count>10) {$count--}} > - -will be incorrectly parsed as: - - <defer: {if ($count> - -because the "less than" operator is interpreted as a closing delimiter. - -But, by extracting the directive using -S<C<extract_codeblock($text, '{}', undef, 'E<lt>E<gt>')>> -the '>' character is only treated as a delimited at the outermost -level of the code block, so the directive is parsed correctly. - -=head2 C<extract_multiple> - -The C<extract_multiple> subroutine takes a string to be processed and a -list of extractors (subroutines or regular expressions) to apply to that string. - -In an array context C<extract_multiple> returns an array of substrings -of the original string, as extracted by the specified extractors. -In a scalar context, C<extract_multiple> returns the first -substring successfully extracted from the original string. In both -scalar and void contexts the original string has the first successfully -extracted substring removed from it. In all contexts -C<extract_multiple> starts at the current C<pos> of the string, and -sets that C<pos> appropriately after it matches. - -Hence, the aim of of a call to C<extract_multiple> in a list context -is to split the processed string into as many non-overlapping fields as -possible, by repeatedly applying each of the specified extractors -to the remainder of the string. Thus C<extract_multiple> is -a generalized form of Perl's C<split> subroutine. - -The subroutine takes up to four optional arguments: - -=over 4 - -=item 1. - -A string to be processed (C<$_> if the string is omitted or C<undef>) - -=item 2. - -A reference to a list of subroutine references and/or qr// objects and/or -literal strings and/or hash references, specifying the extractors -to be used to split the string. If this argument is omitted (or -C<undef>) the list: - - [ - sub { extract_variable($_[0], '') }, - sub { extract_quotelike($_[0],'') }, - sub { extract_codeblock($_[0],'{}','') }, - ] - -is used. - - -=item 3. - -An number specifying the maximum number of fields to return. If this -argument is omitted (or C<undef>), split continues as long as possible. - -If the third argument is I<N>, then extraction continues until I<N> fields -have been successfully extracted, or until the string has been completely -processed. - -Note that in scalar and void contexts the value of this argument is -automatically reset to 1 (under C<-w>, a warning is issued if the argument -has to be reset). - -=item 4. - -A value indicating whether unmatched substrings (see below) within the -text should be skipped or returned as fields. If the value is true, -such substrings are skipped. Otherwise, they are returned. - -=back - -The extraction process works by applying each extractor in -sequence to the text string. - -If the extractor is a subroutine it is called in a list context and is -expected to return a list of a single element, namely the extracted -text. It may optionally also return two further arguments: a string -representing the text left after extraction (like $' for a pattern -match), and a string representing any prefix skipped before the -extraction (like $` in a pattern match). Note that this is designed -to facilitate the use of other Text::Balanced subroutines with -C<extract_multiple>. Note too that the value returned by an extractor -subroutine need not bear any relationship to the corresponding substring -of the original text (see examples below). - -If the extractor is a precompiled regular expression or a string, -it is matched against the text in a scalar context with a leading -'\G' and the gc modifiers enabled. The extracted value is either -$1 if that variable is defined after the match, or else the -complete match (i.e. $&). - -If the extractor is a hash reference, it must contain exactly one element. -The value of that element is one of the -above extractor types (subroutine reference, regular expression, or string). -The key of that element is the name of a class into which the successful -return value of the extractor will be blessed. - -If an extractor returns a defined value, that value is immediately -treated as the next extracted field and pushed onto the list of fields. -If the extractor was specified in a hash reference, the field is also -blessed into the appropriate class, - -If the extractor fails to match (in the case of a regex extractor), or returns an empty list or an undefined value (in the case of a subroutine extractor), it is -assumed to have failed to extract. -If none of the extractor subroutines succeeds, then one -character is extracted from the start of the text and the extraction -subroutines reapplied. Characters which are thus removed are accumulated and -eventually become the next field (unless the fourth argument is true, in which -case they are disgarded). - -For example, the following extracts substrings that are valid Perl variables: - - @fields = extract_multiple($text, - [ sub { extract_variable($_[0]) } ], - undef, 1); - -This example separates a text into fields which are quote delimited, -curly bracketed, and anything else. The delimited and bracketed -parts are also blessed to identify them (the "anything else" is unblessed): - - @fields = extract_multiple($text, - [ - { Delim => sub { extract_delimited($_[0],q{'"}) } }, - { Brack => sub { extract_bracketed($_[0],'{}') } }, - ]); - -This call extracts the next single substring that is a valid Perl quotelike -operator (and removes it from $text): - - $quotelike = extract_multiple($text, - [ - sub { extract_quotelike($_[0]) }, - ], undef, 1); - -Finally, here is yet another way to do comma-separated value parsing: - - @fields = extract_multiple($csv_text, - [ - sub { extract_delimited($_[0],q{'"}) }, - qr/([^,]+)(.*)/, - ], - undef,1); - -The list in the second argument means: -I<"Try and extract a ' or " delimited string, otherwise extract anything up to a comma...">. -The undef third argument means: -I<"...as many times as possible...">, -and the true value in the fourth argument means -I<"...discarding anything else that appears (i.e. the commas)">. - -If you wanted the commas preserved as separate fields (i.e. like split -does if your split pattern has capturing parentheses), you would -just make the last parameter undefined (or remove it). - - -=head2 C<gen_delimited_pat> - -The C<gen_delimited_pat> subroutine takes a single (string) argument and - > builds a Friedl-style optimized regex that matches a string delimited -by any one of the characters in the single argument. For example: - - gen_delimited_pat(q{'"}) - -returns the regex: - - (?:\"(?:\\\"|(?!\").)*\"|\'(?:\\\'|(?!\').)*\') - -Note that the specified delimiters are automatically quotemeta'd. - -A typical use of C<gen_delimited_pat> would be to build special purpose tags -for C<extract_tagged>. For example, to properly ignore "empty" XML elements -(which might contain quoted strings): - - my $empty_tag = '<(' . gen_delimited_pat(q{'"}) . '|.)+/>'; - - extract_tagged($text, undef, undef, undef, {ignore => [$empty_tag]} ); - - -C<gen_delimited_pat> may also be called with an optional second argument, -which specifies the "escape" character(s) to be used for each delimiter. -For example to match a Pascal-style string (where ' is the delimiter -and '' is a literal ' within the string): - - gen_delimited_pat(q{'},q{'}); - -Different escape characters can be specified for different delimiters. -For example, to specify that '/' is the escape for single quotes -and '%' is the escape for double quotes: - - gen_delimited_pat(q{'"},q{/%}); - -If more delimiters than escape chars are specified, the last escape char -is used for the remaining delimiters. -If no escape char is specified for a given specified delimiter, '\' is used. - -Note that -C<gen_delimited_pat> was previously called -C<delimited_pat>. That name may still be used, but is now deprecated. - - -=head1 DIAGNOSTICS - -In a list context, all the functions return C<(undef,$original_text)> -on failure. In a scalar context, failure is indicated by returning C<undef> -(in this case the input text is not modified in any way). - -In addition, on failure in I<any> context, the C<$@> variable is set. -Accessing C<$@-E<gt>{error}> returns one of the error diagnostics listed -below. -Accessing C<$@-E<gt>{pos}> returns the offset into the original string at -which the error was detected (although not necessarily where it occurred!) -Printing C<$@> directly produces the error message, with the offset appended. -On success, the C<$@> variable is guaranteed to be C<undef>. - -The available diagnostics are: - -=over 4 - -=item C<Did not find a suitable bracket: "%s"> - -The delimiter provided to C<extract_bracketed> was not one of -C<'()[]E<lt>E<gt>{}'>. - -=item C<Did not find prefix: /%s/> - -A non-optional prefix was specified but wasn't found at the start of the text. - -=item C<Did not find opening bracket after prefix: "%s"> - -C<extract_bracketed> or C<extract_codeblock> was expecting a -particular kind of bracket at the start of the text, and didn't find it. - -=item C<No quotelike operator found after prefix: "%s"> - -C<extract_quotelike> didn't find one of the quotelike operators C<q>, -C<qq>, C<qw>, C<qx>, C<s>, C<tr> or C<y> at the start of the substring -it was extracting. - -=item C<Unmatched closing bracket: "%c"> - -C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> encountered -a closing bracket where none was expected. - -=item C<Unmatched opening bracket(s): "%s"> - -C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> ran -out of characters in the text before closing one or more levels of nested -brackets. - -=item C<Unmatched embedded quote (%s)> - -C<extract_bracketed> attempted to match an embedded quoted substring, but -failed to find a closing quote to match it. - -=item C<Did not find closing delimiter to match '%s'> - -C<extract_quotelike> was unable to find a closing delimiter to match the -one that opened the quote-like operation. - -=item C<Mismatched closing bracket: expected "%c" but found "%s"> - -C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> found -a valid bracket delimiter, but it was the wrong species. This usually -indicates a nesting error, but may indicate incorrect quoting or escaping. - -=item C<No block delimiter found after quotelike "%s"> - -C<extract_quotelike> or C<extract_codeblock> found one of the -quotelike operators C<q>, C<qq>, C<qw>, C<qx>, C<s>, C<tr> or C<y> -without a suitable block after it. - -=item C<Did not find leading dereferencer> - -C<extract_variable> was expecting one of '$', '@', or '%' at the start of -a variable, but didn't find any of them. - -=item C<Bad identifier after dereferencer> - -C<extract_variable> found a '$', '@', or '%' indicating a variable, but that -character was not followed by a legal Perl identifier. - -=item C<Did not find expected opening bracket at %s> - -C<extract_codeblock> failed to find any of the outermost opening brackets -that were specified. - -=item C<Improperly nested codeblock at %s> - -A nested code block was found that started with a delimiter that was specified -as being only to be used as an outermost bracket. - -=item C<Missing second block for quotelike "%s"> - -C<extract_codeblock> or C<extract_quotelike> found one of the -quotelike operators C<s>, C<tr> or C<y> followed by only one block. - -=item C<No match found for opening bracket> - -C<extract_codeblock> failed to find a closing bracket to match the outermost -opening bracket. - -=item C<Did not find opening tag: /%s/> - -C<extract_tagged> did not find a suitable opening tag (after any specified -prefix was removed). - -=item C<Unable to construct closing tag to match: /%s/> - -C<extract_tagged> matched the specified opening tag and tried to -modify the matched text to produce a matching closing tag (because -none was specified). It failed to generate the closing tag, almost -certainly because the opening tag did not start with a -bracket of some kind. - -=item C<Found invalid nested tag: %s> - -C<extract_tagged> found a nested tag that appeared in the "reject" list -(and the failure mode was not "MAX" or "PARA"). - -=item C<Found unbalanced nested tag: %s> - -C<extract_tagged> found a nested opening tag that was not matched by a -corresponding nested closing tag (and the failure mode was not "MAX" or "PARA"). - -=item C<Did not find closing tag> - -C<extract_tagged> reached the end of the text without finding a closing tag -to match the original opening tag (and the failure mode was not -"MAX" or "PARA"). - - - - -=back - - -=head1 AUTHOR - -Damian Conway (damian@conway.org) - - -=head1 BUGS AND IRRITATIONS - -There are undoubtedly serious bugs lurking somewhere in this code, if -only because parts of it give the impression of understanding a great deal -more about Perl than they really do. - -Bug reports and other feedback are most welcome. - - -=head1 COPYRIGHT - - Copyright (c) 1997-2001, Damian Conway. All Rights Reserved. - This module is free software. It may be used, redistributed - and/or modified under the same terms as Perl itself. diff --git a/locale/cs/LC_MESSAGES/vdradmin.mo b/locale/cs/LC_MESSAGES/vdradmin.mo Binary files differindex d2b9246..b08a3bd 100644 --- a/locale/cs/LC_MESSAGES/vdradmin.mo +++ b/locale/cs/LC_MESSAGES/vdradmin.mo diff --git a/locale/de/LC_MESSAGES/vdradmin.mo b/locale/de/LC_MESSAGES/vdradmin.mo Binary files differindex 874df93..61a1fde 100644 --- a/locale/de/LC_MESSAGES/vdradmin.mo +++ b/locale/de/LC_MESSAGES/vdradmin.mo diff --git a/locale/es/LC_MESSAGES/vdradmin.mo b/locale/es/LC_MESSAGES/vdradmin.mo Binary files differindex 9544fd4..1a21f0a 100644 --- a/locale/es/LC_MESSAGES/vdradmin.mo +++ b/locale/es/LC_MESSAGES/vdradmin.mo diff --git a/locale/fi/LC_MESSAGES/vdradmin.mo b/locale/fi/LC_MESSAGES/vdradmin.mo Binary files differindex 1cf67ae..2d034b1 100644 --- a/locale/fi/LC_MESSAGES/vdradmin.mo +++ b/locale/fi/LC_MESSAGES/vdradmin.mo diff --git a/locale/fr/LC_MESSAGES/vdradmin.mo b/locale/fr/LC_MESSAGES/vdradmin.mo Binary files differindex 7e07375..1d69fe3 100644 --- a/locale/fr/LC_MESSAGES/vdradmin.mo +++ b/locale/fr/LC_MESSAGES/vdradmin.mo diff --git a/locale/nl/LC_MESSAGES/vdradmin.mo b/locale/nl/LC_MESSAGES/vdradmin.mo Binary files differindex 379e63d..472555d 100644 --- a/locale/nl/LC_MESSAGES/vdradmin.mo +++ b/locale/nl/LC_MESSAGES/vdradmin.mo diff --git a/locale/ru/LC_MESSAGES/vdradmin.mo b/locale/ru/LC_MESSAGES/vdradmin.mo Binary files differindex 3f0a923..d41794b 100644 --- a/locale/ru/LC_MESSAGES/vdradmin.mo +++ b/locale/ru/LC_MESSAGES/vdradmin.mo @@ -1,7 +1,7 @@ #!/bin/bash LANGS="cs de es fr fi nl ru" -DIST_FILES="ChangeLog COPYING CREDITS FAQ HISTORY INSTALL README README.translators REQUIREMENTS contrib convert.pl install.sh lib locale make.sh template uninstall.sh vdradmind.pl vdradmind.pl.1" +DIST_FILES="autotimer2searchtimer.pl ChangeLog COPYING CREDITS FAQ HISTORY INSTALL README README.translators REQUIREMENTS contrib convert.pl install.sh lib locale make.sh template uninstall.sh vdradmind.pl vdradmind.pl.1" INSTALL_SH=./install.sh CVS2CL="./cvs2cl.pl" # get it at http://www.red-bean.com/cvs2cl/ TMPDIR=/tmp @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: cs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-09-23 13:14+0200\n" "Last-Translator: Karel Borkovec <her-ur@her-ur.org>\n" "Language-Team: <cs@li.org>\n" @@ -17,8 +17,7 @@ msgstr "" "X-Generator: KBabel 1.11.2\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -34,11 +33,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-2" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "O programu" @@ -61,54 +62,68 @@ msgid "Translation Team" msgstr "Pøekladatelský tým" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Holand¹tina:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Angliètina:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Fin¹tina:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Nìmèina:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Francouz¹tina:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "©panìl¹tina:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Nìmèina:" +msgid "Finnish:" +msgstr "Fin¹tina:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "©panìl¹tina:" +msgid "Dutch:" +msgstr "Holand¹tina:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Ru¹tina:" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "Francouz¹tina:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Informace" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "Verze VDRAdminu-AM:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "Verze VDR:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "Podporované vlastnosti ve VDR:" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +#, fuzzy +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"TV streamování (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" +"plugin\" target=\"_blank\">Streamdev Plugin</a>)" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -116,7 +131,7 @@ msgstr "" "TV streamování (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -124,11 +139,11 @@ msgstr "" "Pøejmenování nahrávek (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/" "patches/\" target=\"_blank\">Liemikuutio Patch</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Rady a nahla¹ování chyb" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -137,7 +152,7 @@ msgstr "" "Pokud si nevíte rady, pou¾ijte prosím nejdøíve on-line nápovìdu na rùzných " "webech. Kliknìte zde <img src=\"bilder/help.png\" alt=\"\" />." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -149,7 +164,7 @@ msgstr "" "\"_blank\">VDR-Portal</a> (nìmecký jazyk je samozøejmostí, popø. " "angliètina). Vyu¾ijte tzv. ANNOUNCE vlákno, hledat:" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -172,7 +187,6 @@ msgid "AutoTimer" msgstr "Auto-Èasovaè" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -180,11 +194,12 @@ msgstr "Auto-Èasovaè" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Priorita:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -192,6 +207,8 @@ msgstr "Priorita:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "" @@ -200,30 +217,38 @@ msgid "New AutoTimer" msgstr "Nové èasování" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Nápovìda" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Aktivovat" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Kanál" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Start" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Stop" @@ -236,14 +261,11 @@ msgstr "Jméno" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Vybrat v¹e/Nic" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -255,14 +277,15 @@ msgstr "Vybrat v¹e/Nic" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Ano" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -274,23 +297,32 @@ msgstr "Ano" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "Ne" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Upravit" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "Smazat èasovaè?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Smazat" @@ -312,200 +344,10 @@ msgstr "Vymazat v¹echny vybrané èasovaèe?" msgid "No AutoTimers defined!" msgstr "Nové èasování" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Pøidat nový AutoÈasovaè" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "Upravit AutoÈasovaè" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "Aktivní AutoÈasovaè:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Vyhledávací znaky:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "Hledat v:" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "Název" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Titulky" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Popis" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Hledat pouze v tyto dny:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Pondìlí" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Úterý" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Støeda" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Ètvrtek" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Pátek" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Sobota" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Nedìle" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Kanál" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "v¹e" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Zaèátek po:" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "hodin" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Konec pøed:" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "minuty" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Epizoda:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Zapamatovat naprogramovaný èasovaè:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Slo¾ka:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Ulo¾it" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Test:" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Zru¹it" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Vysíláno" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Ulo¾eno v:" - -#: ../template/default/at_timer_new.html:182 -#, fuzzy -msgid "No matches found!" -msgstr "Nefunguje" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Nastavení" @@ -591,7 +433,7 @@ msgstr "Guest heslo:" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Èasová pøímka" @@ -621,6 +463,33 @@ msgstr "Aktivní:" msgid "Timeout:" msgstr "" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "minuty" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -774,6 +643,12 @@ msgstr "V \"AutoÈasovaèi\"?" msgid "In \"Watch TV\"?" msgstr "V \"Sleduj TV\"?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Ulo¾it" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Pou¾ij" @@ -828,6 +703,13 @@ msgstr "" "class=\"submit\" value=\"Force Update\"/> k vynucení re-connectu k VDR, " "stáhnutí aktuálního EPG a kontroly AutoÈasovaèù.</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "Upravit AutoÈasovaè" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -838,6 +720,11 @@ msgid "" "irregularly broadcasted series or movies you don't want to miss.</p>" msgstr "" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "Aktivní AutoÈasovaè:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -846,6 +733,11 @@ msgid "" "so this AutoTimer only programs the (one!) next matching broadcast." msgstr "" +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Vyhledávací znaky:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -867,18 +759,36 @@ msgid "" "\"Enterprise~Azati Prime\" as Blacklist-string)." msgstr "" +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "Hledat v:" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " "search pattern." msgstr "" +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Hledat pouze v tyto dny:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "" +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Kanál" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -886,18 +796,33 @@ msgid "" "in \"Configuration\"." msgstr "" +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Zaèátek po:" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Konec pøed:" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -975,12 +900,22 @@ msgstr "" "until the given number of days since the <strong>start</strong> time of the " "recording has passed by." +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Epizoda:" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " "subtitle to the recording's file name." msgstr "" +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Zapamatovat naprogramovaný èasovaè:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -988,6 +923,12 @@ msgid "" "have been programmed automatically in the timers listing." msgstr "" +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Slo¾ka:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1352,8 +1293,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Nahrávky" @@ -1582,35 +1523,42 @@ msgstr "Vá¹ prohlí¾eè nepodporuje rámy!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "Co bì¾í nyní?" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "Co pobì¾í dnes?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "Kanály" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "hledat" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Dálkové ovládání" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "Sleduj TV" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 #, fuzzy msgid "Commands" msgstr "Pøíkazy:" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 #, fuzzy msgid "Search" msgstr "hledat" @@ -1643,6 +1591,7 @@ msgid "view" msgstr "náhled" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "nahrát" @@ -1678,7 +1627,7 @@ msgstr "Naladit TV" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Stream" @@ -1693,6 +1642,8 @@ msgstr "Start!" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "Více informací" @@ -1727,7 +1678,7 @@ msgstr "Nahrávání" msgid "No EPG information available" msgstr "®ádné informace" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Bì¾í dnes" @@ -1735,6 +1686,22 @@ msgstr "Bì¾í dnes" msgid "starting at" msgstr "zaèíná v" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "hodin" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1742,12 +1709,12 @@ msgid "What's on:" msgstr "Co bì¾í:" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "v" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "nyní" @@ -1789,10 +1756,16 @@ msgstr "Nové jméno nahrávky:" msgid "Subtitle:" msgstr "Titulky:" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Pøejmenovat" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Zru¹it" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Celkové:" @@ -1814,49 +1787,50 @@ msgstr "Datum" msgid "Total" msgstr "Celkem" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "Nový" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "Hrát" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "Støihnout" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "Smazat nahrávku?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Obnovit" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Pøíkazy:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Spustit" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "Opravdu spustit tento pøíkaz?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Smazat oznaèené nahrávky" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "Smazat v¹echny oznaèené nahrávky?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 #, fuzzy msgid "No recordings available" msgstr "Nápovìda není dostupná" @@ -1923,6 +1897,48 @@ msgstr "®ádný èasovaè není definován!" msgid "Create New Timer" msgstr "Vytvoøit nový èasovaè" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Pondìlí" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Úterý" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Støeda" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Ètvrtek" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Pátek" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Sobota" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Nedìle" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -1991,83 +2007,441 @@ msgstr "SVDRP pøíkazy:" msgid "Commands defined in commands.conf:" msgstr "Pøíkazy definované v commands.conf:" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Výstup" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "hledat" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "Pøidat nový AutoÈasovaè" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +#, fuzzy +msgid "No matches found!" +msgstr "Nefunguje" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "Obecné nastavení" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "Hledat v:" + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "Hledat v:" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "Název" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Titulky" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Popis" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "Kanál" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "nyní" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "Interval:" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "Kanál" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Jazyk:" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "Kanál" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "U¾iv. jméno:" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "Zaèátek po:" + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "Zaèátek po:" + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "Délka:" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "Délka:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "Délka:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "Naladit TV" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "v¹e" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "Hledat v:" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "Pøejmenovat nahrávku" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "Smazat nahrávku?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "Nahrávky" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "Slo¾ka s nahrávkami:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Pøidat nový AutoÈasovaè" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Test:" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Vysíláno" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Ulo¾eno v:" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "hledat" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "hledat" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "Aktivovat" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "Nahoru" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "Vyhledávací znaky:" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "Pátek" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "Vymazat vybrané èasovaèe" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "Vymazat v¹echny vybrané èasovaèe?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "Vymazat vybrané èasovaèe" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "Délka:" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "Jaké je Va¹e VDR hostname?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "Na jakém portu mám oèekávat SVDRP pøíkazy?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "Na jaké adrese má èekat VDRAdmin-AM (0.0.0.0 pro jakoukoli)?" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "Na jakém portu má èekat VDRAdmin-AM?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "U¾iv. jméno?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "Heslo?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Kam ukládáte nahrávky z VDR?" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Kde se nacházejí konfiguraèní soubory VDR?" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "Konfiguraèní soubor ulo¾en v poøádku." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s startuje s pidem %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "Nefunguje" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "Po¾adovaná URL nebyla na tomto serveru nalezena!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Zakázáno" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "Nemáte práva pro vyu¾ití této funkce!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "Pøístup k souboru \"%s\" odmítnut!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "URL \"%s\" nebyla na tomto serveru nalezena!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "nyní" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "Nemohu otevøít soubor \"%s\"!" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2076,61 +2450,61 @@ msgstr "" "Nemohu se pøipojit k VDR v %s:%s<br /><br />Prosím zkontrolujte, zda VDR " "bì¾í a pokud je soubor soubor svdrphosts.conf øádnì nastaven." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Chyba pøi posílání pøíkazu k VDR v %s" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 #, fuzzy msgid "Internal error:" msgstr "Interval:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "Nemohu nalézt EPG vstup!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Co pobì¾í zítra?" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "Pobì¾í v %s" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "dal¹í" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Co bì¾í pak" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Co bì¾í v" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "struèný pøehled" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "detailní pøehled" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Plán" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Èasovaèe" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Defaultní nastavení" @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: VDRAdmin-AM-3.4.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-03-30 14:49+0100\n" "Last-Translator: Andreas Mair <mail@andreas.vdr-developer.org>\n" "Language-Team: <LL.org>\n" @@ -24,8 +24,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -41,11 +40,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-1" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "Über" @@ -66,54 +67,66 @@ msgid "Translation Team" msgstr "Übersetzungsteam" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Holländisch:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Englisch:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Finnisch:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Deutsch:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Französisch:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "Wird zurzeit nicht aktualisiert, ältere Übersetzungen von:" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "Spanisch:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Deutsch:" +msgid "Finnish:" +msgstr "Finnisch:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "Spanisch:" +msgid "Dutch:" +msgstr "Holländisch:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Russisch:" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +msgid "Czech:" +msgstr "Tschechisch:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Informationen" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "VDRAdmin-AM Version:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "VDR Version:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "Unterstützte Funktionen im VDR:" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -121,7 +134,7 @@ msgstr "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -129,11 +142,11 @@ msgstr "" "Aufnahmen umbenennen (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/" "patches/\" target=\"_blank\">Liemikuutio Patch</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Hilfe bekommen und Fehler melden" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -143,7 +156,7 @@ msgstr "" "Online-Hilfe, die für einige Seiten verfügbar ist. Sie können Sie aufrufen " "indem Sie <img src=\"bilder/help.png\" alt=\"\" /> anklicken." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -155,7 +168,7 @@ msgstr "" "a> zu bekommen. Bitte verwenden Sie hierfür wenn möglich den " "Ankündigungsthread, suchen Sie dafür nach:" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -178,7 +191,6 @@ msgid "AutoTimer" msgstr "AutoTimer" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -186,11 +198,12 @@ msgstr "AutoTimer" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Priorität:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -198,6 +211,8 @@ msgstr "Priorität:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "Lebenszeit:" @@ -206,30 +221,38 @@ msgid "New AutoTimer" msgstr "Neuer AutoTimer" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Hilfe" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Aktiv" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Sender" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Beginn" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Ende" @@ -242,14 +265,11 @@ msgstr "Name" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Alle/keine auswählen" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -261,14 +281,15 @@ msgstr "Alle/keine auswählen" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Ja" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -280,23 +301,32 @@ msgstr "Ja" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "Nein" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Bearbeiten" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "Timer löschen?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Löschen" @@ -317,199 +347,10 @@ msgstr "Ausgewählte Timer wirklich löschen?" msgid "No AutoTimers defined!" msgstr "Es wurden noch keine AutoTimer definiert!" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Neuen AutoTimer anlegen" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "AutoTimer editieren" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "AutoTimer aktiv:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "einmal" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Suchbegriffe:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "zu suchen in:" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "Titel" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Untertitel" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Beschreibung" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Nur an diesen Tagen suchen:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Montag" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Dienstag" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Mittwoch" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Donnerstag" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Freitag" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Samstag" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Sonntag" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Sender:" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "alle" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Beginnt frühestens:" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "Uhr" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Endet spätestens:" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "Zeitpuffer für Anfang/Ende überschreiben:" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "Zeitpuffer Anfang:" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "Minuten" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "Zeitpuffer Ende:" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Serie:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Programmierte Timer merken:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Ordner:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Speichern" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Testen" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Abbrechen" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Ausgestrahlt" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Abgelegt in" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "Nichts gefunden!" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Konfiguration" @@ -595,7 +436,7 @@ msgstr "Gast Passwort:" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Zeitleiste" @@ -625,6 +466,33 @@ msgstr "Aktiv:" msgid "Timeout:" msgstr "Timeout:" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "Minuten" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "Zeitpuffer Anfang:" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "Zeitpuffer Ende:" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -778,6 +646,12 @@ msgstr "Bei \"AutoTimer\"?" msgid "In \"Watch TV\"?" msgstr "In \"Fernseher\"?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Speichern" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Anwenden" @@ -840,6 +714,13 @@ msgstr "" "Daten zu holen und anschliessend nach übereinstimmenden AutoTimern zu suchen." "</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "AutoTimer editieren" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -858,6 +739,11 @@ msgstr "" "Das ist sehr komfortable für unregelmäßig ausgestrahlte Serien oder " "Spielfilmen, die Sie nicht vermissen wollen.</p>" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "AutoTimer aktiv:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -872,6 +758,11 @@ msgstr "" "dass dieser AutoTimer nur die als nächstes übereinstimmende Sendung (eine " "einzige!) programmiert." +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Suchbegriffe:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -912,6 +803,12 @@ msgstr "" "Eintrag) oder nur eine bestimmte Episode (z.B. \"Enterprise~Azati Prime\") " "ausschliessen." +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "zu suchen in:" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " @@ -920,12 +817,24 @@ msgstr "" "Hier geben Sie die Abschnitte aus dem EPG an, den VDRAdmin-AM nach den " "Suchbegriffen durchsuchen soll." +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Nur an diesen Tagen suchen:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "Haken Sie die Tage an, an denen Sendungen gesucht werden sollen." +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Sender:" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -937,6 +846,11 @@ msgstr "" "erwünschten Sender für den AutoTimer können auf der \"Konfiguration\" Seite " "eingestellt werden." +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Beginnt frühestens:" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " @@ -945,6 +859,11 @@ msgstr "" "Eine Sendung darf frühestens zu der hier eingestellten Uhrzeit beginnen. Das " "erste Textfeld gibt die Stunden, das zweite die Minuten an." +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Endet spätestens:" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " @@ -953,6 +872,11 @@ msgstr "" "Eine Sendung darf spätestens zu der hier eingestellten Uhrzeit aufhören. Das " "erste Textfeld gibt die Stunden, das zweite die Minuten an." +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "Zeitpuffer für Anfang/Ende überschreiben:" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -1038,6 +962,11 @@ msgstr "" "Anzahl von Tagen seit der <strong>Startzeit</strong> abgelaufen ist und " "Plattenplatz für eine neue Aufnahme benötigt wird." +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Serie:" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " @@ -1046,6 +975,11 @@ msgstr "" "Aktivieren Sie diese Option, wenn Sie wollen, dass VDRAdmin-AM den " "Untertitel der Sendung aus dem EPG an den Namen der Aufnahme anhängt." +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Programmierte Timer merken:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -1057,6 +991,12 @@ msgstr "" "programmierte Timer in der Timerliste deaktiviert oder gelöscht werden " "sollen." +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Ordner:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1496,8 +1436,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Aufnahmen" @@ -1830,34 +1770,40 @@ msgstr "Ihr Browser unterstützt keine Frames!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "Was läuft jetzt?" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "Was läuft heute?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "Programmübersicht" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +msgid "EPG Search" +msgstr "EPG Search" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Fernbedienung" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "Fernseher" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "Befehle" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "Suchen" @@ -1890,6 +1836,7 @@ msgid "view" msgstr "umschalten" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "aufnehmen" @@ -1924,7 +1871,7 @@ msgstr "TV umschalten" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Stream" @@ -1939,6 +1886,8 @@ msgstr "Go!" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "mehr Infos" @@ -1971,7 +1920,7 @@ msgstr "Sendung aufnehmen" msgid "No EPG information available" msgstr "Es sind keine EPG Informationen vorhanden" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Was läuft heute" @@ -1979,6 +1928,22 @@ msgstr "Was läuft heute" msgid "starting at" msgstr "ab" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "Uhr" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1986,12 +1951,12 @@ msgid "What's on:" msgstr "Was läuft:" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "um" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "jetzt" @@ -2033,10 +1998,16 @@ msgstr "Neuer Titel der Aufnahme:" msgid "Subtitle:" msgstr "Untertitel:" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Umbenennen" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Abbrechen" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Total:" @@ -2058,49 +2029,50 @@ msgstr "Datum" msgid "Total" msgstr "Gesamt" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "neu" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "Abspielen" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "Schneiden" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "Aufnahme löschen?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Neu einlesen" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Befehle:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Ausführen" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "Diesen Befehl wirklich ausführen?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Ausgewählte Aufnahmen löschen" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "Ausgewählte Aufnahmen wirklich löschen?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "Es sind keine Aufnahmen vorhanden" @@ -2166,6 +2138,48 @@ msgstr "Es wurden noch keine Timer angelegt!" msgid "Create New Timer" msgstr "Neuen Timer anlegen" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Montag" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Dienstag" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Mittwoch" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Donnerstag" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Freitag" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Samstag" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Sonntag" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -2234,85 +2248,407 @@ msgstr "SVDRP Befehle:" msgid "Commands defined in commands.conf:" msgstr "In commands.conf definierte Befehle:" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Ausgabe" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "Neue Suche anlegen" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +msgid "Edit Search" +msgstr "Suche bearbeiten" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "Kurzes Suchmuster.\\nSoll es wirklich verwendet werden?" + +#: ../template/default/epgsearch_new.html:151 +msgid "Add New Search" +msgstr "Neuen Suche anlegen" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "Ergebnis ausblenden" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "Nichts gefunden!" + +#: ../template/default/epgsearch_new.html:211 +msgid "Settings" +msgstr "Einstellungen" + +#: ../template/default/epgsearch_new.html:216 +msgid "Search Term:" +msgstr "Suche:" + +#: ../template/default/epgsearch_new.html:223 +msgid "Search Mode:" +msgstr "Suchmodus:" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "Ausdruck" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "alle Worte" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "ein Wort" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "exakt" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "regulärer Ausdruck" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "unscharf" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "Toleranz für \"unscharf\":" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "Groß/klein:" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "Titel" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Untertitel" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Beschreibung" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "Verwende erweiterte EPG Info:" + +#: ../template/default/epgsearch_new.html:293 +msgid "Use Channel:" +msgstr "Verwende Kanal:" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +msgid "no" +msgstr "nein" + +#: ../template/default/epgsearch_new.html:297 +msgid "interval" +msgstr "Bereich" + +#: ../template/default/epgsearch_new.html:298 +msgid "channel group" +msgstr "Kanalgruppe" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "ohne PayTV" + +#: ../template/default/epgsearch_new.html:302 +msgid "Range:" +msgstr "Bereich:" + +#: ../template/default/epgsearch_new.html:316 +msgid "Channel Group:" +msgstr "Kanalgruppe:" + +#: ../template/default/epgsearch_new.html:327 +msgid "Use Time:" +msgstr "Verwende Uhrzeit:" + +#: ../template/default/epgsearch_new.html:333 +msgid "Start After:" +msgstr "Start nach:" + +#: ../template/default/epgsearch_new.html:340 +msgid "Start Before:" +msgstr "Start vor:" + +#: ../template/default/epgsearch_new.html:352 +msgid "Use Duration:" +msgstr "Verwende Dauer:" + +#: ../template/default/epgsearch_new.html:358 +msgid "Min. Duration:" +msgstr "Minimale Dauer:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "hh:mm" + +#: ../template/default/epgsearch_new.html:365 +msgid "Max. Duration:" +msgstr "Maximale Dauer:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "Verwende Wochentag:" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "Verwende Ausschlusslisten:" + +#: ../template/default/epgsearch_new.html:397 +msgid "selection" +msgstr "Auswahl" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "alle" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "In Favoritenmenü verwenden:" + +#: ../template/default/epgsearch_new.html:420 +msgid "Use as Search Timer:" +msgstr "Als Suchtimer verwenden:" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "nur ankündigen" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "nur umschalten" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "Einstellungen für \"aufnehmen\"" + +#: ../template/default/epgsearch_new.html:440 +msgid "Series Recording:" +msgstr "Serienaufnahme:" + +#: ../template/default/epgsearch_new.html:452 +msgid "Delete Recordings After ... Days:" +msgstr "Aufnahme nach ... Tagen löschen:" + +#: ../template/default/epgsearch_new.html:455 +msgid "Keep ... Recordings:" +msgstr "Behalte ... Aufnahmen:" + +#: ../template/default/epgsearch_new.html:460 +msgid "Pause, when ... recordings exist:" +msgstr "Pause, wenn ... Aufnahmen existieren:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "Vermeide Wiederholung:" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "Erlaubte Wiederholungen:" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "Nur Wiederholungen innerhalb ... Tagen:" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "Vergleiche:" + +#: ../template/default/epgsearch_new.html:526 +msgid "VPS:" +msgstr "VPS:" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "Settings für \"nur umschalten\"" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "Umschalten ... Minuten vor Start:" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "Als Vorlage speichern" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Neuen AutoTimer anlegen" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "einmal" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Testen" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Ausgestrahlt" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Abgelegt in" + +#: ../template/default/epgsearch_list.html:6 +msgid "EPG search" +msgstr "EPG search" + +#: ../template/default/epgsearch_list.html:26 +msgid "New Search" +msgstr "Neue Suche" + +#: ../template/default/epgsearch_list.html:54 +msgid "Action" +msgstr "Aktion" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "Von" + +#: ../template/default/epgsearch_list.html:93 +msgid "To" +msgstr "Bis" + +#: ../template/default/epgsearch_list.html:107 +msgid "Search pattern" +msgstr "Suchbegriff" + +#: ../template/default/epgsearch_list.html:163 +msgid "Find" +msgstr "Suche starten" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "Favoriten anzeigen" + +#: ../template/default/epgsearch_list.html:187 +msgid "Delete Selected Searches" +msgstr "Ausgewählte Suchen löschen" + +#: ../template/default/epgsearch_list.html:187 +msgid "Delete all selected searches?" +msgstr "Alle ausgewählten Suchen wirklich löschen?" + +#: ../template/default/epgsearch_list.html:188 +msgid "Execute Selected Searches" +msgstr "Ausgewählte Suchen ausführen" + +#: ../template/default/epgsearch_list.html:212 +msgid "Duration" +msgstr "Dauer" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "Wie lautet der Hostname des VDR (z.B. video.intra.net)?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "Auf welchem Port hört der VDR auf SVDRP-Anfragen?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "" "An welcher Adresse soll VDRAdmin-AM auf Verbindungen warten (0.0.0.0 für " "alle)?" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "Auf welchem Port soll VDRAdmin-AM hören?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "Benutzername?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "Passwort?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Wo befinden sich die Aufnahmen?" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Wo befinden sich die Konfigurationsdateien des VDR?" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "Konfigurationsdatei wurde erfolgreich geschrieben." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s wurde mit der Prozeß-ID %d gestartet." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "Nicht gefunden" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "Die angeforderte URL konnte auf dem Server nicht gefunden werden!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Verboten" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "Sie haben nicht die Erlaubnis diese Funktion aufzurufen!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "Zugriff auf Datei \"%s\" verweigert!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "Die URL \"%s\" wurde auf dem Server nicht gefunden!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "--- kein Timer ---" + +#: ../vdradmind.pl:2276 +msgid "unknown" +msgstr "unbekannt" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "keine" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "Kann Datei \"%s\" nicht öffnen!" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2321,78 +2657,60 @@ msgstr "" "Konnte Verbindung zu %s:%s nicht aufbauen!<br /><br />Bitte überprüfen Sie, " "dass VDR läuft und dass seine svdrphosts.conf richtig konfiguriert ist." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Fehler beim Senden eines Kommandos zu %s" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "Interner Fehler:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "EPG-Eintrag wurde nicht gefunden!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Was läuft morgen" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "Was läuft am %s" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "als nächstes" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Was läuft nach" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Was läuft um" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "Suchergebnis für" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "Listenansicht" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "Ausführliche Ansicht" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Übersicht" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Timer" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Systemstandard" - -#~ msgid "Format:" -#~ msgstr "Format:" - -#~ msgid "Description:" -#~ msgstr "Beschreibung:" - -#~ msgid "Timeline:" -#~ msgstr "Zeitleiste:" - -#~ msgid "Can't connect to VDR at %s!" -#~ msgstr "Konnte Verbindung zu %s nicht aufbauen!" - -#~ msgid "Switch" -#~ msgstr "Umschalten" - -#~ msgid "more" -#~ msgstr "mehr" @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: VDRAdmin-AM-3.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-09-12 19:43+0100\n" "Last-Translator: rudibert <r_jung@web.de>\n" "Language-Team: Rudi <LL.org>\n" @@ -28,8 +28,7 @@ msgstr "" "X-Poedit-Bookmarks: 210,-1,86,-1,-1,-1,-1,-1,-1,-1\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -45,11 +44,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-1" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "Acerca de" @@ -70,54 +71,68 @@ msgid "Translation Team" msgstr "Equipo de traducción" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Holandés:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Inglés:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Finlandés:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Alemán:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Francés:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "De momento no se actualiza, traducciones anteriores de:" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "Español:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Alemán:" +msgid "Finnish:" +msgstr "Finlandés:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "Español:" +msgid "Dutch:" +msgstr "Holandés:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Ruso:" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "Francés:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Informaciones" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "Versión del VDRAdmin-AM:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "Versión del VDR:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "Características respaldadas en VDR:" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +#, fuzzy +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"Flujo de LiveTV (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" +"plugin\" target=\"_blank\">Streamdev Plugin</a>) (en alemán de momento)" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -125,7 +140,7 @@ msgstr "" "Flujo de LiveTV (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>) (en alemán de momento)" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -133,11 +148,11 @@ msgstr "" "Renombrar grabaciones (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/" "patches/\" target=\"_blank\">Liemikuutio Patch</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Recibir ayuda y comentar \"Bugs\" (fallos)" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -147,7 +162,7 @@ msgstr "" "encontraras en algunas páginas. Tienes acceso haciendo clic encima de <img " "src=\"bilder/help.png\" alt=\"\" />." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -159,7 +174,7 @@ msgstr "" "entiendes alemán (lo siento...). Para empezar alli aprovecha la funcción " "\"suchen\" por:" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -182,7 +197,6 @@ msgid "AutoTimer" msgstr "Autoprogramaciones" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -190,11 +204,12 @@ msgstr "Autoprogramaciones" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Prioridad:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -202,6 +217,8 @@ msgstr "Prioridad:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "Durabilidad:" @@ -210,30 +227,38 @@ msgid "New AutoTimer" msgstr "Añadir autoprogramación" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Ayuda" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Activada" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Emisora" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Comienzo" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Fin" @@ -246,14 +271,11 @@ msgstr "Título" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Seleccionar todas/ninguna" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -265,14 +287,15 @@ msgstr "Seleccionar todas/ninguna" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Sí" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -284,23 +307,32 @@ msgstr "Sí" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "No" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Modificar" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "¿Borrar programación?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Borrar" @@ -321,199 +353,10 @@ msgstr "¿Estas seguro de que deseas borrar las programaciones elegidas?" msgid "No AutoTimers defined!" msgstr "No hay autoprogramaciones!" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Añadir autoprogramación" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "Modificar autoprogramación" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "Autoprogramación activa:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "una vez" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Palabras claves:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "Buscar en:" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "Título" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Subtítulo" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Resumen" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Los días para la búsqueda:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Lunes" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Martes" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Miércoles" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Jueves" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Viernes" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Sábado" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Domingo" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Emisora:" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "todos" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Empieza después de:" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "h." - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Acaba antes de:" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "Reemplazar los margenes de tiempo para Inicio/Fin:" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "Más tiempo al principio:" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "minutos" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "Más tiempo al final:" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Episodios:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Recordar programaciones:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Carpeta:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Guardar" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Prueba" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Cancelar" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Difundido" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Guardado en" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "Ninguna coincidencia encontrado!" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Configuraciones" @@ -599,7 +442,7 @@ msgstr "Contraseña como invitado:" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Tabla de tiempo" @@ -629,6 +472,33 @@ msgstr "Activada:" msgid "Timeout:" msgstr "Actualización cada:" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "minutos" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "Más tiempo al principio:" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "Más tiempo al final:" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -783,6 +653,12 @@ msgstr "¿Usar en \"Autoprogramaciones\"?" msgid "In \"Watch TV\"?" msgstr "En \"Televisión\"?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Guardar" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Establecer" @@ -855,6 +731,13 @@ msgstr "" "ahora\"/> arrancarás una búsqueda inmediatamente en los datos actuales de la " "EPG récien actualizados.</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "Modificar autoprogramación" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -873,6 +756,11 @@ msgstr "" "estreno encontrado. Bastante útil para estrenos irregulares, que te importan " "mucho.</p>" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "Autoprogramación activa:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -884,6 +772,11 @@ msgstr "" "encuentran todavia en la lista de las programaciones. Asi se puede activarse " "más tarde. Pero significará que no grabará mientras está desactiva." +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Palabras claves:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -924,6 +817,12 @@ msgstr "" "estreno. Así se puede bloquear una serie completo (p.e. con \"Stargate\" " "como registro negro) o un episodio soló (p.e. \"Stargate~Revisiones\")." +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "Buscar en:" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " @@ -932,6 +831,11 @@ msgstr "" "Aquí se ajusta las secciones de la EPG (emisoras posibles) donde VDRAdmin-AM " "va a buscar por palabras claves." +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Los días para la búsqueda:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " @@ -940,6 +844,13 @@ msgstr "" "Marca estos campos para especificar los dias de la semana, que quieres " "incluir para la búsqueda." +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Emisora:" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -950,6 +861,11 @@ msgstr "" "conocidas o deseadas. Se puede establecer las emisoras deseadas para " "autoprogramaciones en \"Configuraciones\"." +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Empieza después de:" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " @@ -958,6 +874,11 @@ msgstr "" "Un estreno tiene que empezar después de la hora esablecida aquí. El primer " "campo es para \"hora\", el segundo para \"minutos\"." +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Acaba antes de:" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " @@ -966,6 +887,11 @@ msgstr "" "Un estreno tiene que finalizar antes de la hora esablecida aquí. El primer " "campo es para \"hora\", el segundo para \"minutos\"." +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "Reemplazar los margenes de tiempo para Inicio/Fin:" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -1051,6 +977,11 @@ msgstr "" "grabación nueva, cuando se han pasado los dias ajustados y garantizados " "desde su <strong>dia de grabación</strong>." +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Episodios:" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " @@ -1059,6 +990,11 @@ msgstr "" "Marca este campo si VDRAdmin-AM debe añadir el subtítulo de la EPG del " "estreno al nombre de la grabación." +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Recordar programaciones:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -1069,6 +1005,12 @@ msgstr "" "automáticamente. Así se puede borrar o desactivar estas pragramaciones " "agregadas automáticamente de la lista de programaciones." +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Carpeta:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1506,8 +1448,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Grabaciones" @@ -1858,34 +1800,41 @@ msgstr "¡El navegador no respalda marcos!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "Estrenos ahora" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "¿Estrenos hoy?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "EPG por emisoras" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "Buscar" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Mando a distancia" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "Televisión" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "Comandos:" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "Buscar" @@ -1918,6 +1867,7 @@ msgid "view" msgstr "cambiar" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "grabar" @@ -1952,7 +1902,7 @@ msgstr "cambiar canal" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Flujo" @@ -1967,6 +1917,8 @@ msgstr "¡Venga!" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "más información" @@ -1999,7 +1951,7 @@ msgstr "Grabar estreno" msgid "No EPG information available" msgstr "No hay información de la EPG" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Estrenos hoy" @@ -2007,6 +1959,22 @@ msgstr "Estrenos hoy" msgid "starting at" msgstr "empezando a la/s" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "h." + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -2014,12 +1982,12 @@ msgid "What's on:" msgstr "Se puede ver:" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr " a la/s:" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "ahora" @@ -2061,10 +2029,16 @@ msgstr "Título nuevo de la grabación:" msgid "Subtitle:" msgstr "Subtítulo:" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Renombrar" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Cancelar" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Espacio en el disco:" @@ -2086,49 +2060,50 @@ msgstr "Fecha" msgid "Total" msgstr "en total" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "nueva" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "Reproducir" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "Cortar" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "¿Borrar grabación?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Restaurar" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Órdenes:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Iniciar" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "¿Ejecutar el orden de verdad?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Borrar grabaciones elegidas" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "¿Estas seguro de que deseas borrar las grabaciones elegidas?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "No hay grabaciones." @@ -2194,6 +2169,48 @@ msgstr "No hay programaciones!" msgid "Create New Timer" msgstr "Añadir programación" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Lunes" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Martes" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Miércoles" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Jueves" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Viernes" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Sábado" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Domingo" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -2262,83 +2279,440 @@ msgstr "Órdenes de SVDRP:" msgid "Commands defined in commands.conf:" msgstr "Órdenes definido en commands.conf:" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Salida" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "Buscar" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "Añadir autoprogramación" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "Ninguna coincidencia encontrado!" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "Propiedades generales" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "Buscar en:" + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "Buscar en:" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "Título" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Subtítulo" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Resumen" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "Emisora:" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "ahora" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "Intervalo:" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "Emisora" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Idioma:" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "Emisora:" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "Nombre del usuario:" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "Empieza después de:" + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "Empieza después de:" + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "Duración:" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "Duración:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "Duración:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "cambiar canal" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "todos" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "Buscar en:" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "Renombrar grabación" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "¿Borrar grabación?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "Grabaciones" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "Ruta de las grabaciones:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Añadir autoprogramación" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "una vez" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Prueba" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Difundido" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Guardado en" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "repeticiones" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "Buscar" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "Activada" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "Al principio" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "Palabras claves:" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "Viernes" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "Borrar programaciones elegidas" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "¿Estas seguro de que deseas borrar las programaciones elegidas?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "Borrar programaciones elegidas" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "Duración:" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "¿Cuál es el nombre del sitio del VDR (p.e. video.intra.net)?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "¿Cuál puerto esta vigilando VDR para requeridas de SVDRP?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "¿En qué dirección debe VDRAdmin-AM escuchar (0.0.0.0 para todas)?" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "¿Qué puerto debe VDRAdmin-AM esperar órdenes?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "¿Nombre del usuario?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "¿Contraseña?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Introduce la ruta de las grabaciones:" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Introduce la ruta de los archivos de configuración:" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "¡Los archivos de configuración creados!" -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s se ha iniciado con pid %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "No encontrado" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "¡No encontrado la URL requerida, en el servidor!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Prohibido" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "¡No tienes permiso para ésta funcción!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "¡Acceso al archivo \"%s\" negado!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "¡No encontrado la URL %s en el servidor!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "ahora" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "¡No se pudo abrir el archivo \"%s\" !" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2347,61 +2721,61 @@ msgstr "" "No se puede conectar a VDR a %s:%s<br /><br />Compruebe si VDR está en " "marcha y su svdrhosts.conf bien configurado." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Error mientras mandó el orden a %s " -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "Error interno:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "No se encuentra el registro en la EPG!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Estrenos mañana" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "Estrenos en %s" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "próximo" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Se puede ver después:" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Se puede ver a la/s:" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "Emparejamientos convenientes para:" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "Vista rapida" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "Vista detallada" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Vista general" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Programaciones" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Defecto del sistema" @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: VDRAdmin-AM-3.4.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" -"PO-Revision-Date: 2006-06-26 12:36+0200\n" -"Last-Translator: Rofa\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" +"PO-Revision-Date: 2006-09-30 11:50+0200\n" +"Last-Translator: Ville Skyttä <ville.skytta@iki.fi>\n" "Language-Team: Suomi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -33,11 +32,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-1" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "Tietoja" @@ -58,54 +59,68 @@ msgid "Translation Team" msgstr "Lokalisointi" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Hollanti:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Englanti:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Suomi:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Saksa:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Ranska:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "Ei ylläpidetty - aiemmat lokalisoinnit:" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "Espanja:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Saksa:" +msgid "Finnish:" +msgstr "Suomi:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "Espanja:" +msgid "Dutch:" +msgstr "Hollanti:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Venäjä:" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "Ranska:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Lisätietoja" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "VDRAdmin-AM:n versio:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "VDR:n versio:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "VDR:n tuetut ominaisuudet:" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +#, fuzzy +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"Live-kuvan suoratoisto (<a href=\"http://www.vdr-wiki.de/wiki/index.php/" +"Streamdev-plugin\" target=\"_blank\">Streamdev-laajennos</a>)" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -113,7 +128,7 @@ msgstr "" "Live-kuvan suoratoisto (<a href=\"http://www.vdr-wiki.de/wiki/index.php/" "Streamdev-plugin\" target=\"_blank\">Streamdev-laajennos</a>)" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -121,11 +136,11 @@ msgstr "" "Tallenteiden uudelleennimeäminen (<a href=\"http://www.saunalahti.fi/" "~rahrenbe/vdr/patches/\" target=\"_blank\">Liemikuutio-kokoelma</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Avunsaanti ja virheiden raportointi" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -134,7 +149,7 @@ msgstr "" "Saat opasteen näytille painamalla <img src=\"bilder/help.png\" alt=\"\" /> -" "kuvaketta." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -145,7 +160,7 @@ msgstr "" "vdrportal.de\" target=\"_blank\">VDR-Portal</a> -foorumilta, missä " "ensisijaisesti kannattaa selata VDRAdminin julkistussäie läpi: " -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -167,7 +182,6 @@ msgid "AutoTimer" msgstr "Hakuajastimet" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -175,11 +189,12 @@ msgstr "Hakuajastimet" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Prioriteetti:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -187,6 +202,8 @@ msgstr "Prioriteetti:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "Elinaika:" @@ -195,30 +212,38 @@ msgid "New AutoTimer" msgstr "Uusi hakuajastin" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Opaste" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Aktiivinen" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Kanava" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Aloitus" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Lopetus" @@ -231,14 +256,11 @@ msgstr "Nimi" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Valitse kaikki/ei yhtään" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -250,14 +272,15 @@ msgstr "Valitse kaikki/ei yhtään" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Kyllä" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -269,23 +292,32 @@ msgstr "Kyllä" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "Ei" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Muokkaa" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "Poistetaanko ajastin?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Poista" @@ -306,199 +338,10 @@ msgstr "Poistetaanko valitut ajastimet?" msgid "No AutoTimers defined!" msgstr "Hakuajastimia ei ole määritelty!" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Lisää uusi hakuajastin" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "Muokkaa hakuajastinta" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "Aktiivinen:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "Kerran" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Hakuehdot:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "Hakukentät:" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "Otsikko" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Lyhyt kuvaus" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Kuvaus" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Etsi valittuina päivinä:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Maanantai" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Tiistai" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Keskiviikko" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Torstai" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Perjantai" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Lauantai" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Sunnuntai" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Kanava:" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "Kaikki" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Alkaa jälkeen:" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr " " - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Loppuu ennen:" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "Käytä yksilöllisiä aloitus- ja lopetusmarginaaleja" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "Aloitusmarginaali:" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "minuuttia" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "Lopetusmarginaali:" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Sarjatallennus:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Muista ohjelmoidut ajastimet:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Hakemisto:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Tallenna" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Hae" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Peru" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Lähetysaika" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Tallennehakemisto" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "Ei löydy" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Asetukset" @@ -533,7 +376,7 @@ msgstr "Kieli:" #: ../template/default/config.html:107 ../template/default/help_config.html:44 msgid "Save settings on exit:" -msgstr "" +msgstr "Tallenna asetukset suljettaessa:" #: ../template/default/config.html:117 ../template/default/help_config.html:30 #: ../template/default/help_config.html:50 @@ -584,7 +427,7 @@ msgstr "Vierailijan salasana:" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Aikajana" @@ -614,6 +457,33 @@ msgstr "Käytössä:" msgid "Timeout:" msgstr "Odotusaika:" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "minuuttia" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "Aloitusmarginaali:" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "Lopetusmarginaali:" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -767,6 +637,12 @@ msgstr "Käytä kanavavalintoja \"Hakuajastimet\"-sivulla" msgid "In \"Watch TV\"?" msgstr "Käytä kanavavalintoja \"Katso TV:tä\"-sivulla" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Tallenna" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Käytä" @@ -801,6 +677,13 @@ msgid "" "check for matching AutoTimers.</p>" msgstr "" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "Muokkaa hakuajastinta" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -811,6 +694,11 @@ msgid "" "irregularly broadcasted series or movies you don't want to miss.</p>" msgstr "" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "Aktiivinen:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -819,6 +707,11 @@ msgid "" "so this AutoTimer only programs the (one!) next matching broadcast." msgstr "" +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Hakuehdot:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -840,18 +733,36 @@ msgid "" "\"Enterprise~Azati Prime\" as Blacklist-string)." msgstr "" +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "Hakukentät:" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " "search pattern." msgstr "" +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Etsi valittuina päivinä:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "" +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Kanava:" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -859,18 +770,33 @@ msgid "" "in \"Configuration\"." msgstr "" +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Alkaa jälkeen:" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Loppuu ennen:" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "Käytä yksilöllisiä aloitus- ja lopetusmarginaaleja" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -910,6 +836,20 @@ msgid "" "will interrupt the timer with the lowest priority in order to start " "recording." msgstr "" +"Kokonaisluku väliltä <strong>0...99</strong> joka määrittää tämän ajastimen " +"ja sen tekemien tallennusten <strong>prioriteetin</strong>. <strong>0</" +"strong> on alin prioriteetti, <strong>99</strong> ylin. Prioriteettiarvoa " +"käytetään päättämään mikä ajastettu tallennus aloitetaan mikäli asetettuna " +"on kaksi tai useampia samaan aikaan <strong>alkamaan</strong> asetettuja " +"ajastimia. Valinta kohdistuu ensimmäiseen suurimmalla prioriteetilla " +"olevista ajastimista.<br /><br />Prioriteettiarvo säilytetään myös " +"tallenteen mukana, ja sitä käytetään myöhemmin päättämään mikä tallenne " +"poistetaan mikäli uutta varten pitää saada lisää levytilaa. Mikäli levy " +"täyttyy ja uusi tallenne tarvitsee lisää tilaa, pienimmällä prioriteetilla " +"merkitty tallenne (joka on ylittänyt <strong>taatun</strong> elinaikanasa) " +"poistetaan.<br /><br />Mikäli kaikki DVB-kortit ovat käytössä, korkeamman " +"prioriteetin ajastin keskeyttää tarvittaessa käynnissä olevan alimman " +"prioriteetin tallennuksen." #: ../template/default/help_at_timer_new.html:53 #: ../template/default/help_config.html:101 @@ -925,6 +865,19 @@ msgid "" "until the given number of days since the <strong>start</strong> time of the " "recording has passed by." msgstr "" +"Tämän ajastimen tekemien tallenteiden <strong>taattu</strong> elinaika " +"(päivinä). <strong>0</strong> tarkoittaa että tallenne saatetaan poistaa " +"automaattisesti milloin tahansa korkeamman prioriteetin ajastimen tarvitessa " +"lisää levytilaa. <strong>99</strong> tarkoittaa että tallennetta ei poisteta " +"automaattisesti. Numero väliltä <strong>1...98</strong> tarkoittaa päivien " +"määrää, jonka pitää olla kulunut ajastimen <strong>alkuajankohdasta</strong> " +"ennen kuin tallenne saatetaan poistaa automaattisesti uuden tallenteen " +"tarvitessa levytilaa." + +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Sarjatallennus:" #: ../template/default/help_at_timer_new.html:55 msgid "" @@ -932,6 +885,11 @@ msgid "" "subtitle to the recording's file name." msgstr "" +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Muista ohjelmoidut ajastimet:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -939,6 +897,12 @@ msgid "" "have been programmed automatically in the timers listing." msgstr "" +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Hakemisto:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1260,8 +1224,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Tallenteet" @@ -1350,7 +1314,7 @@ msgstr "Muokkaa ajastinta" #: ../template/default/help_timer_new.html:24 msgid "<p>Here you can edit a timer's settings.</p>" -msgstr "" +msgstr "<p>Tässä näkymässä voit muokata ajastimen asetuksia.</p>" #: ../template/default/help_timer_new.html:26 #: ../template/default/timer_new.html:60 @@ -1363,6 +1327,9 @@ msgid "" "the timer list so that they can be activated again, but they do not record " "anything meanwhile." msgstr "" +"Aktivoi tai deaktivoi tämä ajastin. Deaktivoidut ajastimet eivät tallenna " +"mitään, mutta ne näytetään ajastinlistauksessa josta ne voidaan aktivoida " +"uudelleen." #: ../template/default/help_timer_new.html:28 #: ../template/default/timer_new.html:67 @@ -1373,7 +1340,7 @@ msgstr "Hakuajastimen tarkistus:" msgid "" "Depending on how this timer has been programmed you have up to three " "possible settings:" -msgstr "" +msgstr "Riippuen ajastimen tekotavasta, käytettävissäsi on useita asetuksia:" #: ../template/default/help_timer_new.html:31 #: ../template/default/timer_new.html:71 @@ -1386,6 +1353,10 @@ msgid "" "that this only works if the provided identification is a fix and unique " "value! This option is not available with timers programmed in VDR." msgstr "" +"Tarkista ajastinta ohjelmisto-oppaan sisältämän ohjelmatunnisteen " +"perusteella. Tämä tarkistustapa toimii vain mikäli ohjelmisto-oppaan " +"ohjelmatunniste on vakio ja uniikki. Tämä valinta ei ole käytettävissä VDR:" +"stä tehtyjen ajastimien kohdalla." #: ../template/default/help_timer_new.html:33 #: ../template/default/rec_list.html:64 ../template/default/timer_new.html:73 @@ -1394,7 +1365,7 @@ msgstr "Aika" #: ../template/default/help_timer_new.html:34 msgid "Monitor this timer using the start and stop time." -msgstr "" +msgstr "Tarkista ajastin käyttäen alku- ja loppuaikoja." #: ../template/default/help_timer_new.html:35 #: ../template/default/timer_new.html:74 ../template/default/tv.html:79 @@ -1403,11 +1374,11 @@ msgstr "Pois" #: ../template/default/help_timer_new.html:36 msgid "Do not monitor this timer." -msgstr "" +msgstr "Älä tarkista tätä ajastinta." #: ../template/default/help_timer_new.html:40 msgid "The channel to record." -msgstr "" +msgstr "Tallennettava kanava." #: ../template/default/help_timer_new.html:41 #: ../template/default/timer_new.html:88 @@ -1423,6 +1394,13 @@ msgid "" "the seven checkboxes below the text field. Check the box for each day you " "want the timer to get active." msgstr "" +"Ajastimen aktivoitumispäivä. Voit käyttää kahta eri muotoa päivän " +"asettamiseen:<ul><li>Kaksi numeroa (PP). Tämä täydennetään päivämääräksi " +"kuluvalla kuukaudella ja vuodella.</li><li>ISO-standardi (VVVV-KK-PP). Voit " +"tehdä ajastuksia niin kauas tulevaisuuteen kuin haluat.</li></ul>Halutessasi " +"asettaa toistuvan ajastuksen voit käyttää tekstikentän alla olevia seitsemää " +"viikonpäiväkohtaista valintaruutua. Valitse jokainen viikonpäivä jolloin " +"haluat ajastimen aktivoituvan." #: ../template/default/help_timer_new.html:49 #: ../template/default/timer_new.html:102 @@ -1434,6 +1412,8 @@ msgid "" "This is the time when the timer should start recording. The first text field " "is for \"hour\", the second for \"minute\"." msgstr "" +"Aika jolloin ajastettu tallennus alkaa. Ensimmäiseen kenttään syötetään " +"tunnit, jälkimmäiseen minuutit." #: ../template/default/help_timer_new.html:51 #: ../template/default/timer_new.html:114 @@ -1445,6 +1425,8 @@ msgid "" "This is the time when the timer should stop recording. The first text field " "is for \"hour\", the second for \"minute\"." msgstr "" +"Aika jolloin ajastettu tallennus päättyy. Ensimmäiseen kenttään syötetään " +"tunnit, jälkimmäiseen minuutit." #: ../template/default/help_timer_new.html:57 #: ../template/default/timer_new.html:138 @@ -1463,6 +1445,12 @@ msgid "" "default to the channel name, and <strong>EPISODE</strong> will default to a " "blank." msgstr "" +"Ajastimen tekemien tallenteiden <strong>tiedostonimi</strong>. " +"Hakemistoerottimena käytetään '~':a (koska '/' saattaa esiintyä ohjelmien " +"nimissä).<br /><br />Avainsanat <strong>TITLE</strong> ja <strong>EPISODE</" +"strong> korvataan ohjelmisto-oppaan otsikko- ja jaksotiedoilla mikäli ne " +"ovat saatavilla tallennuksen alkaessa. Jos eivät, <strong>TITLE</strong>:n " +"oletus on kanavan nimi ja <strong>EPISODE</strong>:n tyhjä." #: ../template/default/help_timer_new.html:59 #: ../template/default/rec_edit.html:38 ../template/default/timer_new.html:142 @@ -1476,6 +1464,10 @@ msgid "" "\"ref_file\">summary.vdr</span> or <span class=\"ref_file\">info.vdr</span> " "file of the recording." msgstr "" +"Vapaavalintainen lisätietoteksti tämän ajastimen tekemille tallenteille. Jos " +"tämä kenttä ei ole tyhjä, sen sisältö kirjoitetaan tallenteen <span class=" +"\"ref_file\">summary.vdr</span>- tai <span class=\"ref_file\">info.vdr</" +"span>-tiedostoon." #: ../template/default/index.html:21 msgid "Your Browser does not support frames!" @@ -1483,34 +1475,41 @@ msgstr "Selaimesi ei tue kehyksiä!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "Menossa nyt" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "Tänään" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "Kanavat" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "Etsi" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Kauko-ohjain" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "Katso TV:tä" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "Komennot" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "Etsi" @@ -1540,6 +1539,7 @@ msgid "view" msgstr "Katso" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "Tallenna" @@ -1574,7 +1574,7 @@ msgstr "Valitse" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Suoratoisto" @@ -1589,6 +1589,8 @@ msgstr "Siirry" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "Lisätietoja" @@ -1621,7 +1623,7 @@ msgstr "Tallenna" msgid "No EPG information available" msgstr "Ohjelmaoppaan tietoja ei saatavilla" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Ohjelmisto tänään" @@ -1629,6 +1631,22 @@ msgstr "Ohjelmisto tänään" msgid "starting at" msgstr "alkaen kello" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr " " + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1636,12 +1654,12 @@ msgid "What's on:" msgstr "Menossa" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr " " #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "nyt" @@ -1683,10 +1701,16 @@ msgstr "Tallenteen uusi nimi:" msgid "Subtitle:" msgstr "Lyhyt kuvaus" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Nimeä" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Peru" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Käytössä:" @@ -1708,49 +1732,50 @@ msgstr "Päivä" msgid "Total" msgstr "kpl" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "Uusi" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "Toista" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "Leikkaa" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "Poistetaanko tallenne?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Päivitä" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Komennot:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Suorita" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "Suoritetaanko komento?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Poista valitut tallenteet" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "Poistetaanko valitut tallenteet?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "Tallenteita ei saatavilla" @@ -1816,6 +1841,48 @@ msgstr "Ajastimia ei määritelty!" msgid "Create New Timer" msgstr "Luo uusi ajastin" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Maanantai" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Tiistai" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Keskiviikko" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Torstai" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Perjantai" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Lauantai" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Sunnuntai" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -1884,83 +1951,440 @@ msgstr "SVDRP-komennot:" msgid "Commands defined in commands.conf:" msgstr "Määritellyt komennot (commands.conf):" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Vaste" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "Etsi" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "Lisää uusi hakuajastin" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "Ei löydy" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "Yleiset" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "Hakukentät:" + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "Hakukentät:" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "Otsikko" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Lyhyt kuvaus" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Kuvaus" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "Kanava:" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "nyt" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "Päivitysväli:" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "Kanava" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Kieli:" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "Kanava:" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "Käyttäjätunnus:" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "Alkaa jälkeen:" + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "Alkaa jälkeen:" + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "Kesto:" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "Kesto:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "Kesto:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "Valitse" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "Kaikki" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "Hakukentät:" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "Nimeä tallenne" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "Poistetaanko tallenne?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "Tallenteet" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "VDR-tallenteiden polku:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Lisää uusi hakuajastin" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "Kerran" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Hae" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Lähetysaika" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Tallennehakemisto" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "Etsi" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "Etsi" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "Aktiivinen" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "Alkuun" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "Hakuehdot:" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "Perjantai" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "Poista valitut ajastimet" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "Poistetaanko valitut ajastimet?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "Poista valitut ajastimet" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "Kesto:" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "Anna VDR-koneesi nimi (esim. video.intra.net):" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "Anna VDR-koneesi käyttämä SVDRP-portti:" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "Anna VDRAdmin-AM käyttämä osoiteavaruus (0.0.0.0 ei rajoituksia):" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "Anna VDRAdmin-AM käyttämä portti:" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "Anna käyttäjätunnus VDRAdmin-AM varten:" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "Anna salasana VDRAdmin-AM varten:" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Anna VDR-koneesi tallennehakemiston polku:" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Anna VDR-koneesi konfigurointihakemiston polku:" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "VDRAdmin-AM konfigurointitiedosto muodostettu." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s käynnistetty prosessitunnisteella %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "Ei löydy" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "Pyydettyä URL:ia ei löydy palvelimelta!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Kielletty" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "Puutteelliset käyttäjäoikeudet haluttuun toimintoon!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "Pääsy tiedostoon \"%s\" evätty!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "URL:ia \"%s\" ei löydy palvelimelta!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "nyt" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "Tiedoston \"%s\" avaus ei onnistu!" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -1969,60 +2393,60 @@ msgstr "" "Yhteydenotto VDR:ään (%s:%s) epäonnistui!<br /><br />Varmista VDR:n " "päälläolo ja svdrphosts.conf-tiedoston oikeellisuus." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Komennon lähetys VDR:lle epäonnistui (%s)" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "Sisäinen virhe:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "Ohjelman tietoja ei löydy ohjelmaoppaasta!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Ohjelmisto huomenna" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "Ohjelmisto %d päivä" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "seuraavaksi" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Menossa seuraavaksi" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Menossa" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "Hakutulokset termille:" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "lyhyt näkymä" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "pitkä näkymä" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Ohjelmisto" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Ajastimet" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Oletus" @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: VDRAdmin-AM-3.4.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-05-21 00:34+0100\n" "Last-Translator: NIVAL Michaël <mnival@club-internet.fr>\n" "Language-Team: Trois Six <trois.six@free.fr>\n" @@ -13,8 +13,7 @@ msgstr "" "X-Poedit-Country: FRANCE\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -30,11 +29,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-1" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "A propos" @@ -55,70 +56,81 @@ msgid "Translation Team" msgstr "Équipe de Traduction" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Hollandais :" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Anglais :" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Finlandais :" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Allemand :" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Français" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "Pour le moment non maintenu, précédente traductions par :" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "Espagnol :" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Allemand :" +msgid "Finnish:" +msgstr "Finlandais :" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "Espagnol :" +msgid "Dutch:" +msgstr "Hollandais :" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Russe" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "Français" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Informations" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "Version de VDRAdmin-AM :" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "Version de VDR :" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" msgstr "" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" msgstr "" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Avoir de l'Aide et Rapporter les Bugs" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -127,7 +139,7 @@ msgstr "" "Si vous avez besoin d'aide, merci de regarder en priorité sur l'aide en " "ligne. Ici <img src=\"bilder/help.png\" alt=\"\" />." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -139,7 +151,7 @@ msgstr "" "\">VDR-Portal</a> si vous comprenez l'allemand. Merci d'utiliser le topic de " "l'annonce si possible, recherchez : " -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -161,7 +173,6 @@ msgid "AutoTimer" msgstr "Auto-Programmation" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -169,11 +180,12 @@ msgstr "Auto-Programmation" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Priorité :" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -181,6 +193,8 @@ msgstr "Priorité :" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "Chronologie :" @@ -189,30 +203,38 @@ msgid "New AutoTimer" msgstr "Nouvelle Auto-Programmation" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Aide" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Actif" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Chaîne" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Début" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Fin" @@ -225,14 +247,11 @@ msgstr "Nom" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Selectionner tout/rien" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -244,14 +263,15 @@ msgstr "Selectionner tout/rien" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Oui" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -263,23 +283,32 @@ msgstr "Oui" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "Non" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Editer" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "Supprimer Programmation ?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Supprimer" @@ -301,200 +330,10 @@ msgstr "Supprimer Programmations Sélectionnées ?" msgid "No AutoTimers defined!" msgstr "Vérification Auto-Programmation :" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Ajouter Nouvelle Auto-Programmation" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "Editer Auto-Programmation" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "Auto-Programmation Active :" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "une fois" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Rechercher Modèles :" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "Rechercher dans :" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "une fois" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Sous-titre" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Description" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Rechercher uniquement sur ces jours :" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Lundi" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Mardi" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Mercredi" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Jeudi" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Vendredi" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Samedi" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Dimanche" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Chaîne :" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "tout" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Début de recherche :" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "Heure" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Fin de recherche :" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "Marge avant :" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "minutes" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "Marge après :" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Episode :" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Se souvenir des programmations :" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Chemin :" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Enregistrer" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Test" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Annuler" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Diffusé" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Stockés dans" - -#: ../template/default/at_timer_new.html:182 -#, fuzzy -msgid "No matches found!" -msgstr "Non trouvé" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Configuration" @@ -580,7 +419,7 @@ msgstr "Mot de Passe Invité :" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Chronologie" @@ -610,6 +449,33 @@ msgstr "Active :" msgid "Timeout:" msgstr "Délai de dépassement :" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "minutes" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "Marge avant :" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "Marge après :" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -763,6 +629,12 @@ msgstr "Dans \"Auto-Programmations\" ?" msgid "In \"Watch TV\"?" msgstr "Dans \"Regarder TV\" ?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Enregistrer" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Appliquer" @@ -825,6 +697,13 @@ msgstr "" "données EPG courantes et vérifier and les modèles de Programmations " "Automatiques.</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "Editer Auto-Programmation" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -843,6 +722,11 @@ msgstr "" "est très confortable pour enregistrer des séries diffusées irrégulièrement " "ou des films que vous ne voulez par manquer.</p>" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "Auto-Programmation Active :" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -857,6 +741,11 @@ msgstr "" "cette Auto-Programmation programme seulement la prochaine (et unique!) " "occurrence de la diffusion." +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Rechercher Modèles :" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -898,6 +787,12 @@ msgstr "" "de caractère) ou seulement un épisode (en utilisant \"Enterprise~Azati Prime" "\" comme chaîne de caractères)." +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "Rechercher dans :" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " @@ -906,6 +801,11 @@ msgstr "" "Ici, vous pouvez définir les sections du guide électronique des programmes " "où VDRAdmin-AM recherchera le motif de recherche." +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Rechercher uniquement sur ces jours :" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " @@ -914,6 +814,13 @@ msgstr "" "Utilisez ces cases à cocher pour limiter la recherche de diffusions " "concordantes à un jeu de jours." +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Chaîne :" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -924,6 +831,11 @@ msgstr "" "rechercher dans toutes les chaînes connues ou désirées. Vous pouvez définir " "les chaînes désirées pour l'Auto-programmation dans \"Configuration\"." +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Début de recherche :" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " @@ -932,6 +844,11 @@ msgstr "" "Une diffusion doit démarrer après l'horaire entrée pour être concordante. Le " "premier champ est pour \"heure\", le second pour \"minute\"." +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Fin de recherche :" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " @@ -940,6 +857,11 @@ msgstr "" "Une diffusion doit s'arrêter avant l'horaire entrée pour être concordante. " "Le premier champ est pour \"heure\", le second pour \"minute\"." +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -1020,6 +942,11 @@ msgstr "" "enregistrement, jusqu'à ce que le nombre de jour donné depuis la date de " "<strong>démarrage</strong> de l'enregistrement soit dépassé." +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Episode :" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " @@ -1028,6 +955,11 @@ msgstr "" "Cochez cette case si vous voulez que VDRAdmin-AM ajoute le sous-titre EPG de " "la diffusion au nom du fichier de l'enregistrement." +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Se souvenir des programmations :" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -1039,6 +971,12 @@ msgstr "" "supprimer les programmations automatiquement créées dans la liste des " "programmations." +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Chemin :" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1476,8 +1414,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Enregistrements" @@ -1815,35 +1753,42 @@ msgstr "Votre Navigateur ne supporte pas les cadres !" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "En ce Moment ?" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "Aujourd'hui ?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "Chaînes" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "Rechercher" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Télécommande" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "Regarder TV" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 #, fuzzy msgid "Commands" msgstr "Commandes :" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "Rechercher" @@ -1875,6 +1820,7 @@ msgid "view" msgstr "vue" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "enregistrer" @@ -1909,7 +1855,7 @@ msgstr "Zapper" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Flux" @@ -1924,6 +1870,8 @@ msgstr "Ok !" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "Plus d'Informations" @@ -1958,7 +1906,7 @@ msgstr "Enregistrer" msgid "No EPG information available" msgstr "Pas d'information" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Joué Aujourd'hui" @@ -1966,6 +1914,22 @@ msgstr "Joué Aujourd'hui" msgid "starting at" msgstr "Commence à" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "Heure" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1973,12 +1937,12 @@ msgid "What's on:" msgstr "En ce moment :" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "à" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "maintenant" @@ -2020,10 +1984,16 @@ msgstr "Nouveau Nom d'Enregistrement :" msgid "Subtitle:" msgstr "Sous-titre :" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Renommer" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Annuler" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Total :" @@ -2045,49 +2015,50 @@ msgstr "Date" msgid "Total" msgstr "Total" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "Nouveau" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "Supprimer l'Enregistrement ?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Rafraîchir" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Commandes :" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Exécuter" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "Voulez-vous réellement exécuter cette commande ?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Supprimer Enregistrements Sélectionnés" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "Supprimer Enregistrements Sélectionnés ?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 #, fuzzy msgid "No recordings available" msgstr "Pas d'aide disponible" @@ -2155,6 +2126,48 @@ msgstr "Aucune correspondance trouvée !" msgid "Create New Timer" msgstr "Créer Nouvelle Programmation" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Lundi" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Mardi" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Mercredi" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Jeudi" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Vendredi" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Samedi" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Dimanche" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -2223,83 +2236,441 @@ msgstr "Commandes SVDRP :" msgid "Commands defined in commands.conf:" msgstr "Commandes définies dans commands.conf :" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Sortie" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "Rechercher" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "Ajouter Nouvelle Auto-Programmation" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +#, fuzzy +msgid "No matches found!" +msgstr "Non trouvé" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "Paramètres Généraux" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "Rechercher dans :" + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "Rechercher dans :" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "une fois" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Sous-titre" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Description" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "Chaîne :" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "maintenant" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "Intervalle :" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "Chaîne" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Langue :" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "Chaîne :" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "Identifiant :" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "Début de recherche :" + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "Début de recherche :" + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "Durée :" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "Durée :" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "Durée :" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "Zapper" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "tout" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "Rechercher dans :" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "Nom Original d'Enregistrement :" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "Supprimer l'Enregistrement ?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "Enregistrements" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "Chemin des Enregistrements VDR :" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Ajouter Nouvelle Auto-Programmation" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "une fois" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Test" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Diffusé" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Stockés dans" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "rechercher" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "Rechercher" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "Actif" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "Haut" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "Rechercher Modèles :" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "Vendredi" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "Supprimer Programmations Sélectionnées" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "Supprimer Programmations Sélectionnées ?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "Supprimer Programmations Sélectionnées" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "Durée :" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "Quel est votre Nom d'hôte (ex video.intra.net) ?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "Sur quel port VDR écoute les requêtes SVDRP ?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "Sur quelle adresse VDRAdmin-AM doit-il écouter (0.0.0.0 pour toutes) ?" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "Sur quel port VDRAdmin-AM doit-il écouter ?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "Identifiant ?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "Mot de Passe ?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Où vos enregistrements sont-ils stockés ?" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Où sont vos fichiers de configuration de VDR ?" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "Fichier de configuration écrit avec succès." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmin.pl %s a démarré avec le pid %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "Non trouvé" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "L'URL demandée n'a pas été trouvée sur le serveur !" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Interdit" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "Vous n'avez pas la permission d'accéder à cette fonction !" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "Accès au fichier \"%s\" interdit !" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "L'URL \"%s\" n'a pas été trouvée sur le serveur !" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "maintenant" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "Ne peut pas ouvrir le fichier \"%s\" !" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2308,62 +2679,62 @@ msgstr "" "Connexion impossible vers VDR %s:%s<br /><br />Merci de vérifier que VDR est " "lancé et que le fichier svdrphosts.conf est configuré correctement." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Erreur en envoyant la commande à %s" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 #, fuzzy msgid "Internal error:" msgstr "Intervalle :" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Joué demain" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, fuzzy, perl-format msgid "Playing on the %s" msgstr "En cours sur la %d." -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "suivant" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Que se passe-t-il ensuite" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Que se passe-t-il à telle heure" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "Correspondances trouvées pour :" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "Court aperçu" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "Long aperçu" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Programmateur" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Programmations" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Par défaut" @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: nl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-09-14 20:15+0200\n" "Last-Translator: Roel <rl.koelewijn@home.nl>\n" "Language-Team: Nederlands <nl@li.org>\n" @@ -19,8 +19,7 @@ msgstr "" "X-Generator: KBabel 1.10\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -36,11 +35,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-1" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "Over" @@ -61,54 +62,68 @@ msgid "Translation Team" msgstr "Vertalers team" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "Nederlands:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "Engels:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "Fins:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "Duits:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "Frans:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "Op dit moment niet onderhouden, eerdere vertalingen door:" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "Spaans:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "Duits:" +msgid "Finnish:" +msgstr "Fins:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "Spaans:" +msgid "Dutch:" +msgstr "Nederlands:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "Russies" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "Frans:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "Informatie" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "VDRAdmin-AM versie:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "VDRAdmin versie:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "Ondersteunde elementen in VDR" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +#, fuzzy +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" +"plugin\" target=\"_blank\">Streamdev Plugin</a>)" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -116,7 +131,7 @@ msgstr "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -124,11 +139,11 @@ msgstr "" "Hernoem opnamers (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "Voor het verkrijgen van hulp en melden van bugs" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -138,7 +153,7 @@ msgstr "" "pagina's vinden. U kunt dit bezoeken door op <img src=\"bilder/help.png\" " "alt=\"\" /> te klikken." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -150,7 +165,7 @@ msgstr "" "de duitse taal verstaat. Gebruik graag de bekendmakingen draad indien " "mogelijk, zoek naar:" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -172,7 +187,6 @@ msgid "AutoTimer" msgstr "AutoTimer" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -180,11 +194,12 @@ msgstr "AutoTimer" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "Prioriteit:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -192,6 +207,8 @@ msgstr "Prioriteit:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "Levensduur:" @@ -200,30 +217,38 @@ msgid "New AutoTimer" msgstr "Nieuwe AutoTimer" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "Help" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "Aktief" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "Kanaal" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "Start" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "Stop" @@ -236,14 +261,11 @@ msgstr "Naam" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "Selecteer alles/niets" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -255,14 +277,15 @@ msgstr "Selecteer alles/niets" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "Ja" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -274,23 +297,32 @@ msgstr "Ja" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "Nee" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "Bewerken" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "Timer verwijderen? " #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "Verwijderen" @@ -311,199 +343,10 @@ msgstr "Verwijder alle geselecteerde timers?" msgid "No AutoTimers defined!" msgstr "Geen Auto timers ingesteld!" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "Nieuwe auto timer toevoegen " - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "Auto timer bewerken" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "Auto timer aktief:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "eenmalig" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "Zoek patronen:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "Zoeken in: " - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "Titel" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "Subtitel" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "Omschrijving" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "Alleen zoeken op deze dagen:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "Maandag" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "Dinsdag" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "Woensdag" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "Donderdag" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "Vrijdag" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "Zaterdag" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "Zondag" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "Kanaal" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "Alle" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "Start na: " - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "Uur" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "Eindigd voor: " - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "Start/stop marges overschrijden" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "Tijd marge bij start:" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "minuten" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "Tijd marge bij stop:" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "Aflevering:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "Herinner geprogrammeerde timer:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "Map:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "Opslaan" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "Test" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "Annuleren" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "Uitgezonden" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "Opgeslagen in" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "Geen overeenkomsten gevonden!" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "Configuratie" @@ -589,7 +432,7 @@ msgstr "Wachtwoord gast" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "Tijdlijn" @@ -619,6 +462,33 @@ msgstr "Aktief:" msgid "Timeout:" msgstr "Timeout:" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "minuten" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "Tijd marge bij start:" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "Tijd marge bij stop:" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -772,6 +642,12 @@ msgstr "In \"AutoTimer\"?" msgid "In \"Watch TV\"?" msgstr "In \"TV bekijken\"?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "Opslaan" + #: ../template/default/config.html:451 msgid "Apply" msgstr "Toepassen" @@ -830,6 +706,13 @@ msgstr "" "VDR, de laatste EPG data op te halen en te controleren voor overeenkomstige " "timers.</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "Auto timer bewerken" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -846,6 +729,11 @@ msgstr "" "overeenkomst word een timer toegevoegd. Dit is zeer gemakkelijk voor " "onregelmatig uitgezonden series of voor film die u niet wilt missen.</p> " +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "Auto timer aktief:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -859,6 +747,11 @@ msgstr "" "instellen op \"eenmalig\" zodat deze auto timer alleen de eerst volgende " "overeenkomstige programma zal opnemen." +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "Zoek patronen:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -899,6 +792,12 @@ msgstr "" "lijst zoekterm) of alleen een opname (door gebruikt te maken van " "\"Enterprise~Azati Prime\" als zwarte lijst zoekterm)." +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "Zoeken in: " + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " @@ -907,12 +806,24 @@ msgstr "" "Hier kunt u aangeven de EPG delen aangeven waar VDRAdmin-AM moet zoeken naar " "zoekpatronen." +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "Alleen zoeken op deze dagen:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "Gebruik deze hokjes om het zoeken te beperken op bepaalde dagen." +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "Kanaal" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -923,6 +834,11 @@ msgstr "" "of \"alle\" om te zoeken in alle bekende of gewenste kanalen. U kunt de " "gewenste kanalen voor de auto timer aangeven in \"Configuratie\"." +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "Start na: " + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " @@ -932,6 +848,11 @@ msgstr "" "komen voor opname. Het eerste veld is voor \"Uur\", de tweede voor \"minuut" "\"." +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "Eindigd voor: " + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " @@ -941,6 +862,11 @@ msgstr "" "komen voor opname. Het eerste veld is voor \"Uur\", de tweede voor \"minuut" "\"." +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "Start/stop marges overschrijden" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -1024,6 +950,11 @@ msgstr "" "plaats te maken voor een nieuwe opname, alleen als de levensduur van de " "opname voorbij is." +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "Aflevering:" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " @@ -1032,6 +963,11 @@ msgstr "" "Vink dit vakje aan als u VDRAdmin-AM de titel wilt laten toevoegen die " "gevonden is in de EPG informatie aan de opname's bestandsnaam." +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "Herinner geprogrammeerde timer:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -1042,6 +978,12 @@ msgstr "" "automatisch heeft geprogrammeerd. Dit handig als u timers wilt aktiveren of " "verwijderen die automatisch zijn geprogrammeerd in de timer lijst." +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "Map:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1473,8 +1415,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "Opnames" @@ -1797,34 +1739,41 @@ msgstr "UW browser ondersteund geen frames!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "Wat is er nu op?" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "Speelt vandaag?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "Kanalen" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "Zoeken" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "Afstands bedienig " -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "TV bekijken" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "Commando's" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "Zoeken" @@ -1856,6 +1805,7 @@ msgid "view" msgstr "bekijken" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "opnemen" @@ -1890,7 +1840,7 @@ msgstr "Selecteer programma" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Stream" @@ -1905,6 +1855,8 @@ msgstr "Ga!" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "Meer informatie" @@ -1937,7 +1889,7 @@ msgstr "Opnemen" msgid "No EPG information available" msgstr "Geen informatie EPG informatie beschikbaar" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "Programma vandaag " @@ -1945,6 +1897,22 @@ msgstr "Programma vandaag " msgid "starting at" msgstr "start om" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "Uur" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1952,12 +1920,12 @@ msgid "What's on:" msgstr "Wat is er op:" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "om" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "nu" @@ -1999,10 +1967,16 @@ msgstr "Nieuwe naam van de opname:" msgid "Subtitle:" msgstr "Subtitel:" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "Hernoemen" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "Annuleren" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "Totaal:" @@ -2024,49 +1998,50 @@ msgstr "Datum" msgid "Total" msgstr "Totaal" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "Nieuw" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "Afspelen" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "Knippen" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "Opname verwijderen?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "Verversen" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "Commando's:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "Uitvoeren" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "Echt dit commando uitvoeren?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "Geselecteerde opnames verwijderen" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "Alle geselecteerde opnames verwijderen?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "Geen opnames beschikbaar" @@ -2132,6 +2107,48 @@ msgstr "Geen timers opgegeven!" msgid "Create New Timer" msgstr "Nieuwe timer instellen" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "Maandag" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "Dinsdag" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "Woensdag" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "Donderdag" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "Vrijdag" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "Zaterdag" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "Zondag" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -2200,83 +2217,440 @@ msgstr "SVDRP commando's:" msgid "Commands defined in commands.conf:" msgstr "Commando's gedefinieerd in commands.conf:" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "Uitvoer" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "Zoeken" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "Nieuwe auto timer toevoegen " + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "Geen overeenkomsten gevonden!" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "Algemene instellingen" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "Zoeken in: " + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "Zoeken in: " + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "Titel" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "Subtitel" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "Omschrijving" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "Kanaal" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "nu" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "Interval:" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "Kanaal" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Taal:" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "Kanaal" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "Gebruikersnaam:" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "Start na: " + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "Start na: " + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "Duur:" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "Duur:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "Duur:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "Selecteer programma" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "Alle" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "Zoeken in: " + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "Hernoemen opname" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "Opname verwijderen?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "Opnames" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "Pad voor opnames:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "Nieuwe auto timer toevoegen " + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "eenmalig" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "Test" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "Uitgezonden" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "Opgeslagen in" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "zoeken" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "Zoeken" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "Aktief" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "Boven" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "Zoek patronen:" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "Vrijdag" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "Verwijder geselecteerde timers" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "Verwijder alle geselecteerde timers?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "Verwijder geselecteerde timers" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "Duur:" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "Wat de de hostnaam van de VDR (b.v. video.intra.net)?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "Op welke poort luister VDR naar SVDRP verzoeken?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "Naar welk adres moet VDRAdmin-AM luisteren (0.0.0.0 voor alles)?" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "Naar welke poort moet VDRAdmin-AM luisteren?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "Gebruikersnaam?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "Wachtwoord?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "Waar worden uw opnames opgeslagen?" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "Waar bevinden zicht de VDR's configuratie bestanden?" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "Configuratie bestanden succesvol weggeschreven." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s gestart met pid %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "Niet gevonden" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "De gevraagde URl is niet gevonden op deze server!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "Verboden" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "U heeft geen toestemming om deze functie te gebruiken!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "Toegang tot bestand \"%s\" geweigerd!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "De URl \"%s\" is niet gevonden op deze server!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "nu" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "Kan bestand \"%s\" niet openen!" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2285,60 +2659,60 @@ msgstr "" "Kan geen verbinding maken met VDR at %s:%s<br /><br /> Controleer of VDR " "draait en of VDR's svdrphosts.conf op de juiste manier is geconfigureerd." -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "Fout tijdens verzenden van commando op %s" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "Interne fout:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "Kan geen EPG gegevens vinden!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "Speelt morgen" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "Speelt op de %s" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "volgende" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "Wat is er op na" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "Wat is er op om:" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "Bruikbare overeenkomsten voor:" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "beknopt tonen" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "uitgebreid tonen" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "Schema" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "Timers" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "Systeem standaard" @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: VDRAdmin-AM-3.4.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: 2006-09-13 10:42+0100\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n" "Language-Team: Allrussian <LL.org>\n" @@ -26,8 +26,7 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -43,11 +42,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "ISO-8859-5" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "O" @@ -68,54 +69,68 @@ msgid "Translation Team" msgstr "³àãßßÐ ßÕàÕÒÞÔçØÚÞÒ" #: ../template/default/about.html:34 -msgid "Dutch:" -msgstr "³ÞÛÛÐÝÔáÚØÙ:" - -#: ../template/default/about.html:38 msgid "English:" msgstr "°ÝÓÛØÙáÚØÙ:" -#: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "ÄØÝáÚØÙ:" +#: ../template/default/about.html:38 +msgid "German:" +msgstr "½ÕÜÕæÚØÙ:" -#: ../template/default/about.html:46 +#: ../template/default/about.html:42 msgid "French:" msgstr "ÄàÐÝæã×áÚØÙ:" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "² ÝÐáâÞïéÕÕ ÒàÕÜï ÝÕ ÞÑÝÞÒÛïÕâáï, ßàÕÖÝØÕ ßÕàÕÒÞÔë Þâ:" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "¸áßÐÝáÚØÙ:" + #: ../template/default/about.html:50 -msgid "German:" -msgstr "½ÕÜÕæÚØÙ:" +msgid "Finnish:" +msgstr "ÄØÝáÚØÙ:" #: ../template/default/about.html:54 -msgid "Spanish:" -msgstr "¸áßÐÝáÚØÙ:" +msgid "Dutch:" +msgstr "³ÞÛÛÐÝÔáÚØÙ:" #: ../template/default/about.html:58 msgid "Russian:" msgstr "ÀãááÚØÙ" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +#, fuzzy +msgid "Czech:" +msgstr "ÄàÐÝæã×áÚØÙ:" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "¸ÝäÞàÜÐæØï" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "²ÕàáØï VDRAdmin-AM:" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "²ÕàáØï VDR:" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "¿ÞÔÔÕàÖØÒÐÕÜëÕ ãÛãçèÕÝØï Ò VDR:" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +#, fuzzy +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" +"LiveTV Streaming (<a href=\"http://www.free-x.de/wiki/index.php/Streamdev-" +"plugin\" target=\"_blank\">Streamdev Plugin</a>" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" @@ -123,7 +138,7 @@ msgstr "" "LiveTV Streaming (<a href=\"http://www.free-x.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" @@ -131,11 +146,11 @@ msgstr "" "¿ÕàÕØÜÕÝÞÒÐÝØÕ ×ÐߨáÕÙ (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/" "patches/\" target=\"_blank\">Liemikuutio Patch</a>)" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "¿ÞÛãçØâì ßÞÜÞéì Ø áÞÞÑéØâì ÞÑ ÞèØÑÚÕ" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" @@ -145,7 +160,7 @@ msgstr "" "ØÝâÕàÐÚâØÒÝÞÙ ßÞÜÞéØ, ÚÞâÞàÐï ÔÞáâãßÝÐ ÝÐ ÝÕÚÞâÞàëå áâàÐÝØæÐå. ²ë ÜÞÖÕâÕ " "Òë×ëÒÐâì ÕÕ ÝÐÖØÜÐï ÝÐ <img src=\"bilder/help.png\" alt=\"\" />." -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -156,7 +171,7 @@ msgstr "" "ßÞßëâÐâìáï ßÞÛãçØâì ßÞÜÞéì Ò <a href=\"http://www.allrussian.info/board.php?" "boardid=61 \"target=\"_blank\">Allrussian VDR äÞàãÜÕ</a>. ¸éØâÕ ÔÛï íâÞÓÞ:" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -179,7 +194,6 @@ msgid "AutoTimer" msgstr "°ÒâÞâÐÙÜÕàë" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -187,11 +201,12 @@ msgstr "°ÒâÞâÐÙÜÕàë" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "¿àØÞàØâÕâ:" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -199,6 +214,8 @@ msgstr "¿àØÞàØâÕâ:" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "ºÐÚ ÔÞÛÓÞ åàÐÝØâì:" @@ -207,30 +224,38 @@ msgid "New AutoTimer" msgstr "½ÞÒëÙ °ÒâÞâÐÙÜÕà" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "¿ÞÜÞéì" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "°ÚâØÒØàÞÒÐÝÞ" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "ºÐÝÐÛ" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "½ÐçÐÛÞ" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "ºÞÝÕæ" @@ -243,14 +268,11 @@ msgstr "¸Üï" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "²ëÑàÐâì ÒáÕ ØÛØ ÝØçÕÓÞ" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -262,14 +284,15 @@ msgstr "²ëÑàÐâì ÒáÕ ØÛØ ÝØçÕÓÞ" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "´Ð" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -281,23 +304,32 @@ msgstr "´Ð" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "½Õâ" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "ÀÕÔÐÚâØàÞÒÐâì" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "ÃÔÐÛØâì âÐÙÜÕà?" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "ÃÔÐÛØâì" @@ -318,199 +350,10 @@ msgstr "ÃÔÐÛØâì ÒáÕ ÒëÑàÐÝÝëÕ °ÒâÞâÐÙÜÕàë?" msgid "No AutoTimers defined!" msgstr "AutoTimer ÝÕ ãáâÐÝÞÒÛÕÝ" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "ÁÞ×ÔÐâì ÝÞÒëÙ °ÒâÞâÐÙÜÕà" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "ÀÕÔÐÚâØàÞÒÐÝØÕ °ÒâÞâÐÙÜÕàÐ" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "°ÒâÞâÐÙÜÕà ÐÚâØÒÕÝ:" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "ÞÔÝÞÚàÐâÝÞ" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "¿ÞØáÚÞÒëÕ ßàØ×ÝÐÚØ:" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "ØáÚÐâì Ò:" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "·ÐÓÞÛÞÒÞÚ" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "¿ÞÔ×ÐÓÞÛÞÒÞÚ" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "¾ßØáÐÝØÕ" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "¸áÚÐâì âÞÛìÚÞ Ò íâØ ÔÝØ:" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "¿ÞÝÕÔÕÛìÝØÚ" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "²âÞàÝØÚ" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "ÁàÕÔÐ" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "ÇÕâÒÕàÓ" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "¿ïâÝØæÐ" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "ÁãÑÑÞâÐ" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "²ÞáÚàÕáÕÝØÕ" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "ºÐÝÐÛ:" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "ÒáÕ" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "½ÐçØÝÐÕâáï ÝÕ àÐÝìèÕ:" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "ÇÐáÞÒ" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "·ÐÚÐÝçØÒÐÕâáï ÝÕ ßÞ×ÔÝÕÕ:" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "¿ÕàÕߨáëÒÐâì áâÐàâ/áâÞß " - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "¾ßÕàÕÖÕÝØÕ ÝÐçÐÛÐ âÐÙÜÕàÐ (ÜØÝ.):" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "¼ØÝãâë" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "·ÐßÐ×ÔëÒÐÝØÕ ÞáâÐÝÞÒÚØ âÐÙÜÕàÐ (ÜØÝ.):" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "ÁÕàØï:" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "·ÐßÞÜÝØâì ×ÐßàÞÓàÐÜÜØàÞÒÐÝÝëÕ âÐÙÜÕàë:" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "ºÐâÐÛÞÓ:" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "ÁÞåàÐÝØâì" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "ÂÕáâ" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "¾âÜÕÝØâì" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "²ÕéïÛÞáì" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "ÁÞåàÐÝÕÝÝÞ Ò" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "½Õâ àÕ×ãÛìâÐâÞÒ!" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "½ÐáâàÞÙÚØ" @@ -596,7 +439,7 @@ msgstr "¿ÐàÞÛì ÔÛï ÓÞáâï:" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "³àÐäØÚ ÒàÕÜÕÝØ" @@ -626,6 +469,33 @@ msgstr "°ÚâØÒØàÞÒÐÝÞ:" msgid "Timeout:" msgstr "Timeout:" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "¼ØÝãâë" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "¾ßÕàÕÖÕÝØÕ ÝÐçÐÛÐ âÐÙÜÕàÐ (ÜØÝ.):" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "·ÐßÐ×ÔëÒÐÝØÕ ÞáâÐÝÞÒÚØ âÐÙÜÕàÐ (ÜØÝ.):" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -779,6 +649,12 @@ msgstr "² \"°ÒâÞâÐÙÜÕàë\"?" msgid "In \"Watch TV\"?" msgstr "¿àØ \"ßàÞáÜÞâàÕ TV\"?" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "ÁÞåàÐÝØâì" + #: ../template/default/config.html:451 msgid "Apply" msgstr "¿àØÜÕÝØâì" @@ -837,6 +713,13 @@ msgstr "" "áÒï×ëÒÐâìáï á VDR ÔÛï ÞÑÝÞÒÛÕÝØï ÔÐÝÝëå EPG Ø ßÞØáÚÐ áÞÒßÞÔÐîéØå " "°ÒâÞâÐÙÜÕàÞÒ.</p>" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "ÀÕÔÐÚâØàÞÒÐÝØÕ °ÒâÞâÐÙÜÕàÐ" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -854,6 +737,11 @@ msgstr "" "ÝÕàÕÓãÛïàÝÞ âàÐÝáÛØàãÕÜëå áÕàØÐÛÞÒ ØÛØ åãÔÞÖÕáâÒÕÝÝëå äØÛìÜÞÒ, ÚÞâÞàëÕ ²ë ÝÕ " "åÞâØâÕ ßàÞßãáâØâì.</p>" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "°ÒâÞâÐÙÜÕà ÐÚâØÒÕÝ:" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -867,6 +755,11 @@ msgstr "" "ÝÐ \"ÞÔÝÞÚàÐâÝÞ\", âÐÚ çâÞÑë íâÞâ °ÒâÞâÐÙÜÕà áàÐÑÞâÐÛ âÞÛìÚÞ ÕÔØÝÐÖÔë ÝÐ " "áÛÕÔãéÕÙ ßÕàÕÔÐçÕ." +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "¿ÞØáÚÞÒëÕ ßàØ×ÝÐÚØ:" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -903,6 +796,12 @@ msgstr "" "ßÕàÕÔÐçÐ ÐÒâÞÜÐâØçÕáÚØ ÝÕ ßàÞÓàÐÜÜØàãÕâáï.ÂÐÚØÜ ÞÑàÐ×ÞÜ ²ë ÜÞÖÕâÕ ØáÚÛîçÐâì " "ßÞÛÝãî áÕàØî." +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "ØáÚÐâì Ò:" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " @@ -911,12 +810,24 @@ msgstr "" "·ÔÕáì ²ë ãÚÐ×ëÒÐÕâÕ àÐ×ÔÕÛë Ø× EPG, ÚÞâÞàëÕ VDRAdmin-AM ÔÞÛÖÕÝ ÞáÜÐâàØÒÐâì " "ÝÐ ÝÐÛØçØÕ ßàØ×ÝÐÚÞÒ ßÞØáÚÐ." +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "¸áÚÐâì âÞÛìÚÞ Ò íâØ ÔÝØ:" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "¾âÜÕâìâÕ ÔÝØ ÝÕÔÕÛØ, Ò ÚÞâÞàëÕ ÑãÔÕâ ßàÞÒÞÔØâìáï ßÞØáÚ ßÕàÕÔÐç." +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "ºÐÝÐÛ:" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -927,6 +838,11 @@ msgstr "" "\" ÑãÔãâ ßàÞáÜÞâàÕÝë ÒáÕ Ø×ÒÕáâÝëÕ ØÛØ ÖÕÛÐÕÜëÕ ÚÐÝÐÛë. ¶ÕÛÐÕÜëÕ ÚÐÝÐÛë ÔÛï " "ÐÒâÞâÐÙÜÕàÞÒ ãáâÐÝÐÒÛØÒÐîâáï ÝÐ áâàÐÝØæÕ \"ºÞÝäØÓãàÐæØØ\". " +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "½ÐçØÝÐÕâáï ÝÕ àÐÝìèÕ:" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " @@ -935,6 +851,11 @@ msgstr "" "¿ÕàÕÔÐçÐ ÜÞÖÕâ ÝÐçØÝÐâìáï ÝÕ àÐÝìèÕ ãáâÐÝÞÒÛÕÝÝÞÓÞ ×ÔÕáì ÒàÕÜÕÝØ. ¿ÕàÒÞÕ " "âÕÚáâÞÒÞÕ ßÞÛÕ ãÚÐ×ëÒÐÕâ çÐáë, ÒâÞàÞÕ ÜØÝãâë." +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "·ÐÚÐÝçØÒÐÕâáï ÝÕ ßÞ×ÔÝÕÕ:" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " @@ -943,6 +864,11 @@ msgstr "" "¿ÕàÕÔÐçÐ ÔÞÛÖÝÐ ×ÐÚÐÝçØÒÐâìáï ÝÕ ßÞ×ÔÝÕÕ ãáâÐÝÞÒÛÕÝÝÞÓÞ ×ÔÕáì ÒàÕÜÕÝØ." "¿ÕàÒÞÕâÕÚáâÞÒÞÕ ßÞÛÕ ãÚÐ×ëÒÐÕâ çÐáë, ÒâÞàÞÕ ÜØÝãâë." +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "¿ÕàÕߨáëÒÐâì áâÐàâ/áâÞß " + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -1022,6 +948,11 @@ msgstr "" "ãÔÐÛØâáï ÐÒâÞÜÐâØçÕáÚØ, ÕáÛØ ãÚÐ×ÐÝÝÞÕ ÚÞÛØçÕáâÒÞ ÔÝÕÙ ØáâÕÚÛÞ áÞ ÔÝï ×ÐßØáØ " "Ø ÝÐ ÖÕáâÚÞÜ ÔØáÚÕ ÝÕâ ÑÞÛìèÕ ÜÕáâÐ ÔÛï ÝÞÒëå ×ÐߨáÕÙ. " +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "ÁÕàØï:" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " @@ -1030,6 +961,11 @@ msgstr "" "°ÚâØÒØàãÙâÕ íâã ÞßæØî, ÕáÛØ ²ë åÞâØâÕ, çâÞÑë VDRAdmin-AM ÔÞÑÐÒÛïÛ " "ßÞÔ×ÐÓÞÛÞÒÞÚ ßÕàÕÔÐçØ Ø× EPG Ú ÝÐ×ÒÐÝØî ×ÐߨáØ." +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "·ÐßÞÜÝØâì ×ÐßàÞÓàÐÜÜØàÞÒÐÝÝëÕ âÐÙÜÕàë:" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -1041,6 +977,12 @@ msgstr "" "×ÐßàÞÓàÐÜÜØàÞÒÐÝÝëÕ âÐÙÜÕàë ÔÞÛÖÝë ãÔÐÛïâìáï ØÛØ ÔÕÐÚâØÒØàÞÒÐâìáï Ò áߨáÚÕ " "âÐÙÜÕàÞÒ." +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "ºÐâÐÛÞÓ:" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1450,8 +1392,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "·ÐߨáØ" @@ -1771,34 +1713,41 @@ msgstr "²Ðè ±àÞã×Õà ÝÕ ßÞÔÔÕàÖØÒÐÕâ äàÕÙÜë!" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "ÇâÞ ØÔÕâ áÕÙçÐá?" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "ÇâÞ ÑãÔÕâ áÕÓÞÔÝï?" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "ÂÕÛÕÓØÔ" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +#, fuzzy +msgid "EPG Search" +msgstr "¿ÞØáÚ" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "¿ãÛìâ ´Ã" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "ÂÕÛÕÒØ×Þà" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "ºÞÜÐÝÔë" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "¿ÞØáÚ" @@ -1829,6 +1778,7 @@ msgid "view" msgstr "ßÕàÕÚÛîçØâì" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "×ÐߨáÐâì" @@ -1863,7 +1813,7 @@ msgstr "TV ßÕàÕÚÛîçØâì" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "Stream" @@ -1878,6 +1828,8 @@ msgstr "ÁâÐàâÞÒÐâì!" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "´ÞßÞÛÝØâÕÛìÝÐï ØÝäÞàÜÐæØï" @@ -1910,7 +1862,7 @@ msgstr "·ÐߨáÐâì ßÕàÕÔÐçã" msgid "No EPG information available" msgstr "½Õâ EPG ØÝäÞàÜÐæØØ" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "ÇâÞ ÑãÔÕâ áÕÓÞÔÝï?" @@ -1918,6 +1870,22 @@ msgstr "ÇâÞ ÑãÔÕâ áÕÓÞÔÝï?" msgid "starting at" msgstr "½ÐçÐâì Ò" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "ÇÐáÞÒ" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1925,12 +1893,12 @@ msgid "What's on:" msgstr "ÇâÞ áÕÙçÐá:" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "Ò" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "áÕÙçÐá" @@ -1972,10 +1940,16 @@ msgstr "½ÞÒÞÕ ÝÐ×ÒÐÝØÕ ×ÐߨáØ:" msgid "Subtitle:" msgstr "¿ÞÔ×ÐÓÞÛÞÒÞÚ:" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "¿ÕàÕØÜÕÝÞÒÐâì" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "¾âÜÕÝØâì" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "²áÕÓÞ:" @@ -1997,49 +1971,50 @@ msgstr "´ÐâÐ" msgid "Total" msgstr "²áÕÓÞ" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "½ÞÒëÙ" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "²ÞáßàÞØ×ÒÕÔÕÝØÕ" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "ÁàÕ×" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "ÃÔÐÛØâì ×Ðߨáì?" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "¾ÑÝÞÒØâì" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "ºÞÜÐÝÔë:" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "²ëßÞÛÝØâì" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "´ÕÙáâÒØâÕÛìÝÞ ÒëßÞÛÝØâì ÚÞÜÐÝÔã?" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "ÃÔÐÛØâì ÒëÑàÐÝÝëÕ ×ÐߨáØ" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "ÃÔÐÛØâì ÒáÕ ÒëÑàÐÝÝëÕ ×ÐߨáØ?" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "½Õâ ×ÐߨáÕÙ" @@ -2105,6 +2080,48 @@ msgstr "½Õâ âÐÙÜÕàÞÒ!" msgid "Create New Timer" msgstr "ÁÞ×ÔÐâì ÝÞÒëÙ âÐÙÜÕà" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "¿ÞÝÕÔÕÛìÝØÚ" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "²âÞàÝØÚ" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "ÁàÕÔÐ" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "ÇÕâÒÕàÓ" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "¿ïâÝØæÐ" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "ÁãÑÑÞâÐ" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "²ÞáÚàÕáÕÝØÕ" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -2173,84 +2190,441 @@ msgstr "SVDRP ºÞÜÐÝÔë:" msgid "Commands defined in commands.conf:" msgstr "ºÞÜÜÐÝÔë Ø× commands.conf:" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "²ëÒÞÔ" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Edit Search" +msgstr "¿ÞØáÚ" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +#, fuzzy +msgid "Add New Search" +msgstr "ÁÞ×ÔÐâì ÝÞÒëÙ °ÒâÞâÐÙÜÕà" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "½Õâ àÕ×ãÛìâÐâÞÒ!" + +#: ../template/default/epgsearch_new.html:211 +#, fuzzy +msgid "Settings" +msgstr "¾ÑéØÕ ÝÐáâàÞÙÚØ" + +#: ../template/default/epgsearch_new.html:216 +#, fuzzy +msgid "Search Term:" +msgstr "ØáÚÐâì Ò:" + +#: ../template/default/epgsearch_new.html:223 +#, fuzzy +msgid "Search Mode:" +msgstr "ØáÚÐâì Ò:" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "·ÐÓÞÛÞÒÞÚ" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "¿ÞÔ×ÐÓÞÛÞÒÞÚ" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "¾ßØáÐÝØÕ" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +#, fuzzy +msgid "Use Channel:" +msgstr "ºÐÝÐÛ:" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +#, fuzzy +msgid "no" +msgstr "áÕÙçÐá" + +#: ../template/default/epgsearch_new.html:297 +#, fuzzy +msgid "interval" +msgstr "¸ÝâÕàÒÐÛ:" + +#: ../template/default/epgsearch_new.html:298 +#, fuzzy +msgid "channel group" +msgstr "ºÐÝÐÛ" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +#, fuzzy +msgid "Range:" +msgstr "Ï×ëÚ:" + +#: ../template/default/epgsearch_new.html:316 +#, fuzzy +msgid "Channel Group:" +msgstr "ºÐÝÐÛ:" + +#: ../template/default/epgsearch_new.html:327 +#, fuzzy +msgid "Use Time:" +msgstr "¸Üï:" + +#: ../template/default/epgsearch_new.html:333 +#, fuzzy +msgid "Start After:" +msgstr "½ÐçØÝÐÕâáï ÝÕ àÐÝìèÕ:" + +#: ../template/default/epgsearch_new.html:340 +#, fuzzy +msgid "Start Before:" +msgstr "½ÐçØÝÐÕâáï ÝÕ àÐÝìèÕ:" + +#: ../template/default/epgsearch_new.html:352 +#, fuzzy +msgid "Use Duration:" +msgstr "¿àÞÔÞÛÖØâÕÛìÝÞáâì:" + +#: ../template/default/epgsearch_new.html:358 +#, fuzzy +msgid "Min. Duration:" +msgstr "¿àÞÔÞÛÖØâÕÛìÝÞáâì:" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +#, fuzzy +msgid "Max. Duration:" +msgstr "¿àÞÔÞÛÖØâÕÛìÝÞáâì:" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +#, fuzzy +msgid "selection" +msgstr "TV ßÕàÕÚÛîçØâì" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "ÒáÕ" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +#, fuzzy +msgid "Use as Search Timer:" +msgstr "ØáÚÐâì Ò:" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +#, fuzzy +msgid "Series Recording:" +msgstr "¿ÕàÕØÜÕÝÞÒÐâì ×Ðߨáì" + +#: ../template/default/epgsearch_new.html:452 +#, fuzzy +msgid "Delete Recordings After ... Days:" +msgstr "ÃÔÐÛØâì ×Ðߨáì?" + +#: ../template/default/epgsearch_new.html:455 +#, fuzzy +msgid "Keep ... Recordings:" +msgstr "·ÐߨáØ" + +#: ../template/default/epgsearch_new.html:460 +#, fuzzy +msgid "Pause, when ... recordings exist:" +msgstr "¿ãâì Ú ×ÐߨáïÜ:" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +#, fuzzy +msgid "VPS:" +msgstr "VPS" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "ÁÞ×ÔÐâì ÝÞÒëÙ °ÒâÞâÐÙÜÕà" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "ÞÔÝÞÚàÐâÝÞ" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "ÂÕáâ" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "²ÕéïÛÞáì" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "ÁÞåàÐÝÕÝÝÞ Ò" + +#: ../template/default/epgsearch_list.html:6 +#, fuzzy +msgid "EPG search" +msgstr "¿ÞÒâÞàÕÝØï" + +#: ../template/default/epgsearch_list.html:26 +#, fuzzy +msgid "New Search" +msgstr "¿ÞØáÚ" + +#: ../template/default/epgsearch_list.html:54 +#, fuzzy +msgid "Action" +msgstr "°ÚâØÒØàÞÒÐÝÞ" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +#, fuzzy +msgid "To" +msgstr "ÒÒÕàå" + +#: ../template/default/epgsearch_list.html:107 +#, fuzzy +msgid "Search pattern" +msgstr "¿ÞØáÚÞÒëÕ ßàØ×ÝÐÚØ:" + +#: ../template/default/epgsearch_list.html:163 +#, fuzzy +msgid "Find" +msgstr "¿ïâÝØæÐ" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete Selected Searches" +msgstr "ÃÔÐÛØâì ÒëÑàÐÝÝëÕ âÐÙÜÕàë" + +#: ../template/default/epgsearch_list.html:187 +#, fuzzy +msgid "Delete all selected searches?" +msgstr "ÃÔÐÛØâì ÒáÕ ÒëÑàÐÝÝëÕ °ÒâÞâÐÙÜÕàë?" + +#: ../template/default/epgsearch_list.html:188 +#, fuzzy +msgid "Execute Selected Searches" +msgstr "ÃÔÐÛØâì ÒëÑàÐÝÝëÕ âÐÙÜÕàë" + +#: ../template/default/epgsearch_list.html:212 +#, fuzzy +msgid "Duration" +msgstr "¿àÞÔÞÛÖØâÕÛìÝÞáâì:" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "¸Üï åÞáâÐ VDR (ÝÐßàØÜÕà, video.intra.net)?" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "ºÐÚÞÙ ßÞàâ ØáßÞÛì×ãÕâ VDR ÔÛï ×ÐßàÞáÞÒ SVDRP?" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "" "¿Þ ÚÐÚÞÜã ÐÔàÕáã VDRAdmin-AM ÔÞÛÖÕÝ ÖÔÐâì áÞÕÔØÝÕÝØï (0.0.0.0 ßÞÒáÕÜ)? " -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "ºÐÚÞÙ ÝÞÜÕà ßÞàâÐ ÔÞÛÖÕÝ ØáßÞÛì×ÞÒÐâì VDRAdmin-AM?" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "¸Üï ßÞÛì×ÞÒÐâÕÛï?" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "¿ÐàÞÛì?" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "¿Þ ÚÐÚÞÜã ÐÔàÕáã ÝÐåÞÔïâáï ×ÐߨáØ?" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "¿Þ ÚÐÚÞÜã ÐÔàÕáã ÝÐåÞÔïâáï ÚÞÝäØÓãàÐæØÞÝÝëÕ äÐÙÛë VDR?" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "ÄÐÙÛ ÚÞÝäØÓãàÐæØØ ãáßÕèÝÞ ×ÐߨáÐÝ." -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "vdradmind.pl %s ÑëÛ ×ÐßãéÕÝ á PID-ÞÜ %d." -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "½Õ ÝÐÙÔÕÝÞ" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "·ÐâàÕÑÞÒÐÝÝëÙ URL ÝÕ ÑëÛ ÝÐÙÔÕÝ ÝÐ íâÞÜ áÕàÒÕàÕ!" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "·ÐßàÕéÕÝÞ" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "à ÒÐá ÝÕÔÞáâÐâÞçÝÞ ßàÐÒ ÔÛï Òë×ÞÒÐ íâÞÙ äãÝ򾯯!" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "² ÔÞáâãßÕ Ú äÐÙÛã \"%s\" ÞâÚÐ×ÐÝÝÞ!" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "URL \"%s\" ÝÕ ÑëÛ ÝÐÙÔÕÝ ÝÐ íâÞÜ áÕàÒÕàÕ!" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +#, fuzzy +msgid "unknown" +msgstr "áÕÙçÐá" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "½Õ ÜÞÖÕâ ÞâÚàëâì äÐÙÛ \"%s\"!" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " @@ -2259,64 +2633,68 @@ msgstr "" "½Õ ÜÞÓã áÞÕÔØÝØâìáï á VDR %s:%s<br /><br />¿àÞÚÞÝâàÞÛØàãÙâÕ VDR Ø " "svdrphosts.conf" -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "¾èØÑÚÐ ßàØ ÞâßàÐÒÛÕÝØØ ÚÞÜÐÝÔë Ú %s" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "²ÝãâàÕÝÝïï ÞèØÑÚÐ:" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "½Õâ EPG ×ÐߨáÕÙ!" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "¿àÞÓàÐÜÜÐ ÝÐ ×ÐÒâàÐ" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "²ÞáßàÞØ×ÒÕáâØ %s." -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "áÛÕÔ." -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "ÇâÞ ßÞâÞÜ" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "ÇâÞ Ò:" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "ÀÕ×ãÛìâÐâë ßÞØáÚÐ ÔÛï" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "áÞÚàÐéÕÝÝÐï ØÝäÞàÜÐæØï" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "ÀÐáèØàÕÝÝÐï ØÝäÞàÜÐæØï" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "ÀÐáߨáÐÝØÕ" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "ÂÐÙÜÕàë" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "ÁØáâÕÜÝëÙ áâÐÝÔÐàâ" +#, fuzzy +#~ msgid "Switch only" +#~ msgstr "¿ÕàÕÚÛîçØâì" + #~ msgid "Format:" #~ msgstr "ÄÞàÜÐâ:" @@ -2332,8 +2710,5 @@ msgstr "ÁØáâÕÜÝëÙ áâÐÝÔÐàâ" #~ msgid "Can't connect to VDR at %s!" #~ msgstr "½Õ ÜÞÖÕâ áÞÕÔØÝØâìáï á %s!" -#~ msgid "Switch" -#~ msgstr "¿ÕàÕÚÛîçØâì" - #~ msgid "more" #~ msgstr "ÑÞÛìèÕ" diff --git a/po/vdradmin.pot b/po/vdradmin.pot index 1b63e03..a01cdb8 100644 --- a/po/vdradmin.pot +++ b/po/vdradmin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:18+0200\n" +"POT-Creation-Date: 2006-10-27 12:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,8 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../template/default/about.html:5 ../template/default/at_timer_list.html:5 -#: ../template/default/at_timer_new.html:5 ../template/default/config.html:4 -#: ../template/default/error.html:5 +#: ../template/default/config.html:4 ../template/default/error.html:5 #: ../template/default/help_at_timer_list.html:5 #: ../template/default/help_at_timer_new.html:11 #: ../template/default/help_config.html:8 ../template/default/help_no.html:5 @@ -34,11 +33,13 @@ msgstr "" #: ../template/default/rec_edit.html:5 ../template/default/rec_list.html:5 #: ../template/default/timer_list.html:5 ../template/default/timer_new.html:5 #: ../template/default/tv.html:6 ../template/default/vdr_cmds.html:5 -#: ../vdradmind.pl:2090 +#: ../template/default/epgsearch_new.html:5 +#: ../template/default/at_timer_new.html:5 +#: ../template/default/epgsearch_list.html:5 ../vdradmind.pl:2740 msgid "ISO-8859-1" msgstr "" -#: ../template/default/about.html:6 ../template/default/navigation.html:64 +#: ../template/default/about.html:6 ../template/default/navigation.html:69 msgid "About" msgstr "" @@ -59,77 +60,87 @@ msgid "Translation Team" msgstr "" #: ../template/default/about.html:34 -msgid "Dutch:" +msgid "English:" msgstr "" #: ../template/default/about.html:38 -msgid "English:" +msgid "German:" msgstr "" #: ../template/default/about.html:42 -msgid "Finnish:" -msgstr "" - -#: ../template/default/about.html:46 msgid "French:" msgstr "" -#: ../template/default/about.html:47 +#: ../template/default/about.html:43 msgid "At the moment unmaintained, former translations by:" msgstr "" +#: ../template/default/about.html:46 +msgid "Spanish:" +msgstr "" + #: ../template/default/about.html:50 -msgid "German:" +msgid "Finnish:" msgstr "" #: ../template/default/about.html:54 -msgid "Spanish:" +msgid "Dutch:" msgstr "" #: ../template/default/about.html:58 msgid "Russian:" msgstr "" -#: ../template/default/about.html:65 +#: ../template/default/about.html:62 +msgid "Czech:" +msgstr "" + +#: ../template/default/about.html:69 msgid "Informations" msgstr "" -#: ../template/default/about.html:68 +#: ../template/default/about.html:72 msgid "VDRAdmin-AM version:" msgstr "" -#: ../template/default/about.html:72 +#: ../template/default/about.html:76 msgid "VDR version:" msgstr "" -#: ../template/default/about.html:76 +#: ../template/default/about.html:80 msgid "Supported features in VDR:" msgstr "" -#: ../template/default/about.html:83 +#: ../template/default/about.html:87 +msgid "" +"EPGSearch (<a href=\"http://people.freenet.de/cwieninger/html/vdr-epg-search." +"html\" target=\"_blank\">EPGSearch Plugin</a>)" +msgstr "" + +#: ../template/default/about.html:93 msgid "" "LiveTV Streaming (<a href=\"http://www.vdr-wiki.de/wiki/index.php/Streamdev-" "plugin\" target=\"_blank\">Streamdev Plugin</a>)" msgstr "" -#: ../template/default/about.html:89 +#: ../template/default/about.html:99 msgid "" "Rename Recordings (<a href=\"http://www.saunalahti.fi/~rahrenbe/vdr/patches/" "\" target=\"_blank\">Liemikuutio Patch</a>)" msgstr "" -#: ../template/default/about.html:96 +#: ../template/default/about.html:106 msgid "Getting Help and Reporting Bugs" msgstr "" -#: ../template/default/about.html:101 +#: ../template/default/about.html:111 msgid "" "If you need help please first try to use the online help you'll find on some " "pages. You can access it by clicking <img src=\"bilder/help.png\" alt=\"\" /" ">." msgstr "" -#: ../template/default/about.html:102 +#: ../template/default/about.html:112 msgid "" "If this doesn't provide the information you need you can try to get help at " "<a href=\"http://www.vdrportal.de\" target=\"_blank\">VDR-Portal</a> if you " @@ -137,7 +148,7 @@ msgid "" "search for:" msgstr "" -#: ../template/default/about.html:103 +#: ../template/default/about.html:113 msgid "" "If you think you have found a bug please check that it's a new one and " "report it in the <a href=\"http://www.vdr-developer.org/mantisbt/main_page." @@ -156,7 +167,6 @@ msgid "AutoTimer" msgstr "" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:120 #: ../template/default/config.html:203 ../template/default/config.html:261 #: ../template/default/help_at_timer_new.html:50 #: ../template/default/help_config.html:98 @@ -164,11 +174,12 @@ msgstr "" #: ../template/default/help_timer_new.html:53 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:130 +#: ../template/default/epgsearch_new.html:502 +#: ../template/default/at_timer_new.html:120 msgid "Priority:" msgstr "" #: ../template/default/at_timer_list.html:24 -#: ../template/default/at_timer_new.html:126 #: ../template/default/config.html:207 ../template/default/config.html:265 #: ../template/default/help_at_timer_new.html:52 #: ../template/default/help_config.html:100 @@ -176,6 +187,8 @@ msgstr "" #: ../template/default/help_timer_new.html:55 #: ../template/default/timer_list.html:27 #: ../template/default/timer_new.html:134 +#: ../template/default/epgsearch_new.html:508 +#: ../template/default/at_timer_new.html:126 msgid "Lifetime:" msgstr "" @@ -184,30 +197,38 @@ msgid "New AutoTimer" msgstr "" #: ../template/default/at_timer_list.html:43 -#: ../template/default/at_timer_new.html:23 ../template/default/config.html:32 -#: ../template/default/navigation.html:64 ../template/default/rec_list.html:26 -#: ../template/default/timer_list.html:50 +#: ../template/default/config.html:32 ../template/default/navigation.html:69 +#: ../template/default/rec_list.html:26 ../template/default/timer_list.html:50 #: ../template/default/timer_new.html:52 ../template/default/vdr_cmds.html:20 +#: ../template/default/epgsearch_new.html:155 +#: ../template/default/at_timer_new.html:23 +#: ../template/default/epgsearch_list.html:31 msgid "Help" msgstr "" #: ../template/default/at_timer_list.html:57 #: ../template/default/timer_list.html:205 +#: ../template/default/epgsearch_list.html:43 msgid "Active" msgstr "" #: ../template/default/at_timer_list.html:68 #: ../template/default/timer_list.html:216 +#: ../template/default/epgsearch_list.html:65 +#: ../template/default/epgsearch_list.html:67 +#: ../template/default/epgsearch_list.html:214 msgid "Channel" msgstr "" #: ../template/default/at_timer_list.html:79 #: ../template/default/timer_list.html:238 +#: ../template/default/epgsearch_list.html:81 msgid "Start" msgstr "" #: ../template/default/at_timer_list.html:90 #: ../template/default/timer_list.html:249 +#: ../template/default/epgsearch_list.html:95 msgid "Stop" msgstr "" @@ -220,14 +241,11 @@ msgstr "" #: ../template/default/at_timer_list.html:112 #: ../template/default/rec_list.html:85 #: ../template/default/timer_list.html:271 +#: ../template/default/epgsearch_list.html:117 msgid "Select all/none" msgstr "" #: ../template/default/at_timer_list.html:120 -#: ../template/default/at_timer_new.html:35 -#: ../template/default/at_timer_new.html:39 -#: ../template/default/at_timer_new.html:103 -#: ../template/default/at_timer_new.html:140 #: ../template/default/config.html:109 ../template/default/config.html:152 #: ../template/default/config.html:181 ../template/default/config.html:194 #: ../template/default/config.html:223 ../template/default/config.html:250 @@ -239,14 +257,15 @@ msgstr "" #: ../template/default/config.html:409 ../template/default/config.html:416 #: ../template/default/config.html:423 ../template/default/timer_list.html:294 #: ../template/default/timer_new.html:62 +#: ../template/default/at_timer_new.html:35 +#: ../template/default/at_timer_new.html:39 +#: ../template/default/at_timer_new.html:103 +#: ../template/default/at_timer_new.html:140 +#: ../template/default/epgsearch_list.html:125 msgid "Yes" msgstr "" #: ../template/default/at_timer_list.html:122 -#: ../template/default/at_timer_new.html:36 -#: ../template/default/at_timer_new.html:40 -#: ../template/default/at_timer_new.html:104 -#: ../template/default/at_timer_new.html:141 #: ../template/default/config.html:110 ../template/default/config.html:153 #: ../template/default/config.html:182 ../template/default/config.html:195 #: ../template/default/config.html:224 ../template/default/config.html:251 @@ -258,23 +277,32 @@ msgstr "" #: ../template/default/config.html:410 ../template/default/config.html:417 #: ../template/default/config.html:424 ../template/default/timer_list.html:295 #: ../template/default/timer_new.html:63 +#: ../template/default/at_timer_new.html:36 +#: ../template/default/at_timer_new.html:40 +#: ../template/default/at_timer_new.html:104 +#: ../template/default/at_timer_new.html:141 +#: ../template/default/epgsearch_list.html:127 msgid "No" msgstr "" #: ../template/default/at_timer_list.html:143 #: ../template/default/at_timer_list.html:148 #: ../template/default/timer_list.html:324 +#: ../template/default/epgsearch_list.html:158 +#: ../template/default/epgsearch_list.html:166 msgid "Edit" msgstr "" #: ../template/default/at_timer_list.html:153 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete timer?" msgstr "" #: ../template/default/at_timer_list.html:153 -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 #: ../template/default/timer_list.html:327 +#: ../template/default/epgsearch_list.html:169 msgid "Delete" msgstr "" @@ -295,199 +323,10 @@ msgstr "" msgid "No AutoTimers defined!" msgstr "" -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -msgid "Add New AutoTimer" -msgstr "" - -#: ../template/default/at_timer_new.html:6 -#: ../template/default/at_timer_new.html:19 -#: ../template/default/help_at_timer_new.html:12 -#: ../template/default/help_at_timer_new.html:23 -msgid "Edit AutoTimer" -msgstr "" - -#: ../template/default/at_timer_new.html:32 -#: ../template/default/help_at_timer_new.html:30 -msgid "AutoTimer Active:" -msgstr "" - -#: ../template/default/at_timer_new.html:37 -#: ../template/default/at_timer_new.html:41 -msgid "oneshot" -msgstr "" - -#: ../template/default/at_timer_new.html:46 -#: ../template/default/help_at_timer_new.html:32 -msgid "Search Patterns:" -msgstr "" - -#: ../template/default/at_timer_new.html:52 -#: ../template/default/help_at_timer_new.html:34 -msgid "Search in:" -msgstr "" - -#: ../template/default/at_timer_new.html:54 -#: ../template/default/at_timer_new.html:167 -msgid "Title" -msgstr "" - -#: ../template/default/at_timer_new.html:55 -#: ../template/default/at_timer_new.html:168 -msgid "Subtitle" -msgstr "" - -#: ../template/default/at_timer_new.html:56 -msgid "Description" -msgstr "" - -#: ../template/default/at_timer_new.html:60 -#: ../template/default/help_at_timer_new.html:36 -msgid "Search only on these days:" -msgstr "" - -#: ../template/default/at_timer_new.html:62 -#: ../template/default/timer_new.html:92 -msgid "Monday" -msgstr "" - -#: ../template/default/at_timer_new.html:63 -#: ../template/default/timer_new.html:93 -msgid "Tuesday" -msgstr "" - -#: ../template/default/at_timer_new.html:64 -#: ../template/default/timer_new.html:94 -msgid "Wednesday" -msgstr "" - -#: ../template/default/at_timer_new.html:65 -#: ../template/default/timer_new.html:95 -msgid "Thursday" -msgstr "" - -#: ../template/default/at_timer_new.html:66 -#: ../template/default/timer_new.html:96 -msgid "Friday" -msgstr "" - -#: ../template/default/at_timer_new.html:67 -#: ../template/default/timer_new.html:97 -msgid "Saturday" -msgstr "" - -#: ../template/default/at_timer_new.html:68 -#: ../template/default/timer_new.html:98 -msgid "Sunday" -msgstr "" - -#: ../template/default/at_timer_new.html:72 -#: ../template/default/help_at_timer_new.html:38 -#: ../template/default/help_timer_new.html:39 -#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 -msgid "Channel:" -msgstr "" - -#: ../template/default/at_timer_new.html:75 -msgid "all" -msgstr "" - -#: ../template/default/at_timer_new.html:83 -#: ../template/default/help_at_timer_new.html:40 -msgid "Starts After:" -msgstr "" - -#: ../template/default/at_timer_new.html:88 -#: ../template/default/at_timer_new.html:97 -#: ../template/default/prog_list2.html:31 -#: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 -#: ../template/default/prog_timeline.html:77 -#: ../template/default/prog_timeline.html:155 -#: ../template/default/prog_timeline.html:172 -#: ../template/default/timer_new.html:107 -#: ../template/default/timer_new.html:119 ../vdradmind.pl:4034 -#: ../vdradmind.pl:4047 -msgid "o'clock" -msgstr "" - -#: ../template/default/at_timer_new.html:92 -#: ../template/default/help_at_timer_new.html:42 -msgid "Ends Before:" -msgstr "" - -#: ../template/default/at_timer_new.html:101 -#: ../template/default/help_at_timer_new.html:44 -msgid "Override Start/Stop Margins:" -msgstr "" - -#: ../template/default/at_timer_new.html:108 -#: ../template/default/config.html:212 ../template/default/config.html:269 -#: ../template/default/help_at_timer_new.html:46 -#: ../template/default/help_config.html:126 -msgid "Time Margin at Start:" -msgstr "" - -#: ../template/default/at_timer_new.html:110 -#: ../template/default/at_timer_new.html:116 -#: ../template/default/config.html:200 ../template/default/config.html:270 -#: ../template/default/config.html:274 ../template/default/timer_new.html:109 -#: ../template/default/timer_new.html:121 -msgid "minutes" -msgstr "" - -#: ../template/default/at_timer_new.html:114 -#: ../template/default/config.html:216 ../template/default/config.html:273 -#: ../template/default/help_at_timer_new.html:48 -#: ../template/default/help_config.html:128 -msgid "Time Margin at Stop:" -msgstr "" - -#: ../template/default/at_timer_new.html:132 -#: ../template/default/help_at_timer_new.html:54 -msgid "Episode:" -msgstr "" - -#: ../template/default/at_timer_new.html:138 -#: ../template/default/help_at_timer_new.html:56 -msgid "Remember programmed timers:" -msgstr "" - -#: ../template/default/at_timer_new.html:145 -#: ../template/default/help_at_timer_new.html:58 -msgid "Directory:" -msgstr "" - -#: ../template/default/at_timer_new.html:154 -#: ../template/default/config.html:450 ../template/default/timer_new.html:154 -msgid "Save" -msgstr "" - -#: ../template/default/at_timer_new.html:155 -msgid "Test" -msgstr "" - -#: ../template/default/at_timer_new.html:156 -#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 -msgid "Cancel" -msgstr "" - -#: ../template/default/at_timer_new.html:169 -msgid "Broadcasted" -msgstr "" - -#: ../template/default/at_timer_new.html:170 -msgid "Stored in" -msgstr "" - -#: ../template/default/at_timer_new.html:182 -msgid "No matches found!" -msgstr "" - #: ../template/default/config.html:5 ../template/default/config.html:28 #: ../template/default/help_config.html:9 #: ../template/default/help_config.html:24 -#: ../template/default/navigation.html:61 +#: ../template/default/navigation.html:66 msgid "Configuration" msgstr "" @@ -573,7 +412,7 @@ msgstr "" #: ../template/default/config.html:168 ../template/default/help_config.html:30 #: ../template/default/help_config.html:80 #: ../template/default/navigation.html:35 -#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_timeline.html:7 ../vdradmind.pl:5318 msgid "Timeline" msgstr "" @@ -603,6 +442,33 @@ msgstr "" msgid "Timeout:" msgstr "" +#: ../template/default/config.html:200 ../template/default/config.html:270 +#: ../template/default/config.html:274 ../template/default/timer_new.html:109 +#: ../template/default/timer_new.html:121 +#: ../template/default/epgsearch_new.html:516 +#: ../template/default/epgsearch_new.html:522 +#: ../template/default/epgsearch_new.html:542 +#: ../template/default/at_timer_new.html:110 +#: ../template/default/at_timer_new.html:116 +msgid "minutes" +msgstr "" + +#: ../template/default/config.html:212 ../template/default/config.html:269 +#: ../template/default/help_at_timer_new.html:46 +#: ../template/default/help_config.html:126 +#: ../template/default/epgsearch_new.html:514 +#: ../template/default/at_timer_new.html:108 +msgid "Time Margin at Start:" +msgstr "" + +#: ../template/default/config.html:216 ../template/default/config.html:273 +#: ../template/default/help_at_timer_new.html:48 +#: ../template/default/help_config.html:128 +#: ../template/default/epgsearch_new.html:520 +#: ../template/default/at_timer_new.html:114 +msgid "Time Margin at Stop:" +msgstr "" + #: ../template/default/config.html:221 #: ../template/default/help_config.html:102 msgid "Send email after programming timer:" @@ -756,6 +622,12 @@ msgstr "" msgid "In \"Watch TV\"?" msgstr "" +#: ../template/default/config.html:450 ../template/default/timer_new.html:154 +#: ../template/default/epgsearch_new.html:557 +#: ../template/default/at_timer_new.html:154 +msgid "Save" +msgstr "" + #: ../template/default/config.html:451 msgid "Apply" msgstr "" @@ -790,6 +662,13 @@ msgid "" "check for matching AutoTimers.</p>" msgstr "" +#: ../template/default/help_at_timer_new.html:12 +#: ../template/default/help_at_timer_new.html:23 +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Edit AutoTimer" +msgstr "" + #: ../template/default/help_at_timer_new.html:27 msgid "" "<p>Here you can edit an automatic timer's (AutoTimer) settings.</" @@ -800,6 +679,11 @@ msgid "" "irregularly broadcasted series or movies you don't want to miss.</p>" msgstr "" +#: ../template/default/help_at_timer_new.html:30 +#: ../template/default/at_timer_new.html:32 +msgid "AutoTimer Active:" +msgstr "" + #: ../template/default/help_at_timer_new.html:31 msgid "" "Activate or deactivate this AutoTimer. Deactivated AutoTimers are still " @@ -808,6 +692,11 @@ msgid "" "so this AutoTimer only programs the (one!) next matching broadcast." msgstr "" +#: ../template/default/help_at_timer_new.html:32 +#: ../template/default/at_timer_new.html:46 +msgid "Search Patterns:" +msgstr "" + #: ../template/default/help_at_timer_new.html:33 msgid "" "Choosing the right search items decides whether only the wanted broadcasts " @@ -829,18 +718,36 @@ msgid "" "\"Enterprise~Azati Prime\" as Blacklist-string)." msgstr "" +#: ../template/default/help_at_timer_new.html:34 +#: ../template/default/epgsearch_new.html:248 +#: ../template/default/at_timer_new.html:52 +msgid "Search in:" +msgstr "" + #: ../template/default/help_at_timer_new.html:35 msgid "" "Here you can define the EPG sections where VDRAdmin-AM should look for the " "search pattern." msgstr "" +#: ../template/default/help_at_timer_new.html:36 +#: ../template/default/at_timer_new.html:60 +msgid "Search only on these days:" +msgstr "" + #: ../template/default/help_at_timer_new.html:37 msgid "" "Use these checkboxes to limit searching for matching broadcasts to a set of " "weekdays." msgstr "" +#: ../template/default/help_at_timer_new.html:38 +#: ../template/default/help_timer_new.html:39 +#: ../template/default/prog_list.html:32 ../template/default/timer_new.html:78 +#: ../template/default/at_timer_new.html:72 +msgid "Channel:" +msgstr "" + #: ../template/default/help_at_timer_new.html:39 msgid "" "The channel to look for matching broadcasts or \"all\" to search in all " @@ -848,18 +755,33 @@ msgid "" "in \"Configuration\"." msgstr "" +#: ../template/default/help_at_timer_new.html:40 +#: ../template/default/at_timer_new.html:83 +msgid "Starts After:" +msgstr "" + #: ../template/default/help_at_timer_new.html:41 msgid "" "A broadcast must start after the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:42 +#: ../template/default/at_timer_new.html:92 +msgid "Ends Before:" +msgstr "" + #: ../template/default/help_at_timer_new.html:43 msgid "" "A broadcast must end before the time entered here to match. The first text " "field is for \"hour\", the second for \"minute\"." msgstr "" +#: ../template/default/help_at_timer_new.html:44 +#: ../template/default/at_timer_new.html:101 +msgid "Override Start/Stop Margins:" +msgstr "" + #: ../template/default/help_at_timer_new.html:45 msgid "" "Set this option to \"yes\" if all timers programed by this AutoTimer should " @@ -915,12 +837,22 @@ msgid "" "recording has passed by." msgstr "" +#: ../template/default/help_at_timer_new.html:54 +#: ../template/default/at_timer_new.html:132 +msgid "Episode:" +msgstr "" + #: ../template/default/help_at_timer_new.html:55 msgid "" "Check this box if you want VDRAdmin-AM to append the broadcast's EPG " "subtitle to the recording's file name." msgstr "" +#: ../template/default/help_at_timer_new.html:56 +#: ../template/default/at_timer_new.html:138 +msgid "Remember programmed timers:" +msgstr "" + #: ../template/default/help_at_timer_new.html:57 msgid "" "If you enable this VDRAdmin-AM will track timers it has already programmed " @@ -928,6 +860,12 @@ msgid "" "have been programmed automatically in the timers listing." msgstr "" +#: ../template/default/help_at_timer_new.html:58 +#: ../template/default/epgsearch_new.html:446 +#: ../template/default/at_timer_new.html:145 +msgid "Directory:" +msgstr "" + #: ../template/default/help_at_timer_new.html:60 msgid "" "The directory this AutoTimer will place the recordings in. If the name shall " @@ -1242,8 +1180,8 @@ msgstr "" #: ../template/default/help_rec_list.html:6 #: ../template/default/help_rec_list.html:17 -#: ../template/default/navigation.html:49 ../template/default/rec_list.html:6 -#: ../template/default/rec_list.html:17 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:54 ../template/default/rec_list.html:6 +#: ../template/default/rec_list.html:17 ../vdradmind.pl:5318 msgid "Recordings" msgstr "" @@ -1465,34 +1403,40 @@ msgstr "" #: ../template/default/navigation.html:29 #: ../template/default/prog_summary.html:7 -#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:7 ../vdradmind.pl:5318 msgid "What's On Now?" msgstr "" -#: ../template/default/navigation.html:32 ../vdradmind.pl:4644 +#: ../template/default/navigation.html:32 ../vdradmind.pl:5318 msgid "Playing Today?" msgstr "" #: ../template/default/navigation.html:38 ../template/default/prog_list.html:6 #: ../template/default/prog_list2.html:56 #: ../template/default/prog_summary.html:48 -#: ../template/default/prog_summary2.html:85 ../vdradmind.pl:4644 +#: ../template/default/prog_summary2.html:85 +#: ../template/default/epgsearch_list.html:246 ../vdradmind.pl:5318 msgid "Channels" msgstr "" -#: ../template/default/navigation.html:52 ../template/default/rc.html:6 +#: ../template/default/navigation.html:50 +#: ../template/default/epgsearch_list.html:23 +msgid "EPG Search" +msgstr "" + +#: ../template/default/navigation.html:57 ../template/default/rc.html:6 msgid "Remote Control" msgstr "" -#: ../template/default/navigation.html:55 +#: ../template/default/navigation.html:60 msgid "Watch TV" msgstr "" -#: ../template/default/navigation.html:58 +#: ../template/default/navigation.html:63 msgid "Commands" msgstr "" -#: ../template/default/navigation.html:69 +#: ../template/default/navigation.html:74 msgid "Search" msgstr "" @@ -1521,6 +1465,7 @@ msgid "view" msgstr "" #: ../template/default/prog_detail.html:37 +#: ../template/default/epgsearch_new.html:425 ../vdradmind.pl:2270 msgid "record" msgstr "" @@ -1555,7 +1500,7 @@ msgstr "" #: ../template/default/prog_list2.html:59 #: ../template/default/prog_summary.html:68 #: ../template/default/prog_summary2.html:89 -#: ../template/default/rec_list.html:126 +#: ../template/default/rec_list.html:120 msgid "Stream" msgstr "" @@ -1570,6 +1515,8 @@ msgstr "" #: ../template/default/prog_summary.html:104 #: ../template/default/prog_summary2.html:70 #: ../template/default/prog_summary2.html:99 +#: ../template/default/epgsearch_new.html:181 +#: ../template/default/epgsearch_list.html:232 msgid "More Information" msgstr "" @@ -1602,7 +1549,7 @@ msgstr "" msgid "No EPG information available" msgstr "" -#: ../template/default/prog_list2.html:6 ../vdradmind.pl:2754 +#: ../template/default/prog_list2.html:6 ../vdradmind.pl:3427 msgid "Playing Today" msgstr "" @@ -1610,6 +1557,22 @@ msgstr "" msgid "starting at" msgstr "" +#: ../template/default/prog_list2.html:31 +#: ../template/default/prog_summary.html:33 +#: ../template/default/prog_summary2.html:33 +#: ../template/default/prog_timeline.html:77 +#: ../template/default/prog_timeline.html:155 +#: ../template/default/prog_timeline.html:172 +#: ../template/default/timer_new.html:107 +#: ../template/default/timer_new.html:119 +#: ../template/default/epgsearch_new.html:336 +#: ../template/default/epgsearch_new.html:343 +#: ../template/default/at_timer_new.html:88 +#: ../template/default/at_timer_new.html:97 ../vdradmind.pl:4708 +#: ../vdradmind.pl:4721 +msgid "o'clock" +msgstr "" + #: ../template/default/prog_summary.html:27 #: ../template/default/prog_summary2.html:27 #: ../template/default/prog_timeline.html:158 @@ -1617,12 +1580,12 @@ msgid "What's on:" msgstr "" #: ../template/default/prog_summary.html:33 -#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4034 +#: ../template/default/prog_summary2.html:33 ../vdradmind.pl:4708 msgid "at" msgstr "" #: ../template/default/prog_timeline.html:76 -#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4019 +#: ../template/default/prog_timeline.html:163 ../vdradmind.pl:4693 msgid "now" msgstr "" @@ -1664,10 +1627,16 @@ msgstr "" msgid "Subtitle:" msgstr "" -#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:122 +#: ../template/default/rec_edit.html:44 ../template/default/rec_list.html:116 msgid "Rename" msgstr "" +#: ../template/default/rec_edit.html:45 ../template/default/timer_new.html:155 +#: ../template/default/epgsearch_new.html:559 +#: ../template/default/at_timer_new.html:156 +msgid "Cancel" +msgstr "" + #: ../template/default/rec_list.html:20 msgid "Total:" msgstr "" @@ -1689,49 +1658,50 @@ msgstr "" msgid "Total" msgstr "" -#: ../template/default/rec_list.html:98 ../template/default/rec_list.html:101 +#: ../template/default/rec_list.html:97 msgid "New" msgstr "" -#: ../template/default/rec_list.html:116 +#: ../template/default/rec_list.html:110 msgid "Play" msgstr "" -#: ../template/default/rec_list.html:119 +#: ../template/default/rec_list.html:113 msgid "Cut" msgstr "" -#: ../template/default/rec_list.html:124 +#: ../template/default/rec_list.html:118 msgid "Delete recording?" msgstr "" -#: ../template/default/rec_list.html:140 +#: ../template/default/rec_list.html:134 msgid "Refresh" msgstr "" -#: ../template/default/rec_list.html:144 +#: ../template/default/rec_list.html:138 msgid "Commands:" msgstr "" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 +#: ../template/default/epgsearch_new.html:558 msgid "Run" msgstr "" -#: ../template/default/rec_list.html:150 ../template/default/vdr_cmds.html:43 +#: ../template/default/rec_list.html:144 ../template/default/vdr_cmds.html:43 #: ../template/default/vdr_cmds.html:55 msgid "Really run this command?" msgstr "" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete Selected Recordings" msgstr "" -#: ../template/default/rec_list.html:154 +#: ../template/default/rec_list.html:148 msgid "Delete all selected recordings?" msgstr "" -#: ../template/default/rec_list.html:160 +#: ../template/default/rec_list.html:155 msgid "No recordings available" msgstr "" @@ -1797,6 +1767,48 @@ msgstr "" msgid "Create New Timer" msgstr "" +#: ../template/default/timer_new.html:92 +#: ../template/default/epgsearch_new.html:381 +#: ../template/default/at_timer_new.html:62 +msgid "Monday" +msgstr "" + +#: ../template/default/timer_new.html:93 +#: ../template/default/epgsearch_new.html:382 +#: ../template/default/at_timer_new.html:63 +msgid "Tuesday" +msgstr "" + +#: ../template/default/timer_new.html:94 +#: ../template/default/epgsearch_new.html:383 +#: ../template/default/at_timer_new.html:64 +msgid "Wednesday" +msgstr "" + +#: ../template/default/timer_new.html:95 +#: ../template/default/epgsearch_new.html:384 +#: ../template/default/at_timer_new.html:65 +msgid "Thursday" +msgstr "" + +#: ../template/default/timer_new.html:96 +#: ../template/default/epgsearch_new.html:385 +#: ../template/default/at_timer_new.html:66 +msgid "Friday" +msgstr "" + +#: ../template/default/timer_new.html:97 +#: ../template/default/epgsearch_new.html:386 +#: ../template/default/at_timer_new.html:67 +msgid "Saturday" +msgstr "" + +#: ../template/default/timer_new.html:98 +#: ../template/default/epgsearch_new.html:387 +#: ../template/default/at_timer_new.html:68 +msgid "Sunday" +msgstr "" + #: ../template/default/timer_new.html:109 #: ../template/default/timer_new.html:121 msgid "Buffer:" @@ -1865,143 +1877,465 @@ msgstr "" msgid "Commands defined in commands.conf:" msgstr "" -#: ../template/default/vdr_cmds.html:67 +#: ../template/default/vdr_cmds.html:68 msgid "Output" msgstr "" -#: ../vdradmind.pl:346 +#: ../template/default/epgsearch_new.html:6 +msgid "Define New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:6 +#: ../template/default/epgsearch_new.html:151 +msgid "Edit Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:135 +msgid "Small search pattern.\\nDo you really want to use it?" +msgstr "" + +#: ../template/default/epgsearch_new.html:151 +msgid "Add New Search" +msgstr "" + +#: ../template/default/epgsearch_new.html:165 +msgid "Hide results" +msgstr "" + +#: ../template/default/epgsearch_new.html:204 +#: ../template/default/at_timer_new.html:182 +#: ../template/default/epgsearch_list.html:255 +msgid "No matches found!" +msgstr "" + +#: ../template/default/epgsearch_new.html:211 +msgid "Settings" +msgstr "" + +#: ../template/default/epgsearch_new.html:216 +msgid "Search Term:" +msgstr "" + +#: ../template/default/epgsearch_new.html:223 +msgid "Search Mode:" +msgstr "" + +#: ../template/default/epgsearch_new.html:226 +msgid "phrase" +msgstr "" + +#: ../template/default/epgsearch_new.html:227 +msgid "all words" +msgstr "" + +#: ../template/default/epgsearch_new.html:228 +msgid "at least one word" +msgstr "" + +#: ../template/default/epgsearch_new.html:229 +msgid "match exactly" +msgstr "" + +#: ../template/default/epgsearch_new.html:230 +msgid "regular expression" +msgstr "" + +#: ../template/default/epgsearch_new.html:231 +msgid "fuzzy" +msgstr "" + +#: ../template/default/epgsearch_new.html:234 +msgid "Tolerance for \"fuzzy\":" +msgstr "" + +#: ../template/default/epgsearch_new.html:241 +msgid "Match Case:" +msgstr "" + +#: ../template/default/epgsearch_new.html:250 +#: ../template/default/epgsearch_new.html:483 +#: ../template/default/at_timer_new.html:54 +#: ../template/default/at_timer_new.html:167 +#: ../template/default/epgsearch_list.html:213 +msgid "Title" +msgstr "" + +#: ../template/default/epgsearch_new.html:251 +#: ../template/default/epgsearch_new.html:484 +#: ../template/default/at_timer_new.html:55 +#: ../template/default/at_timer_new.html:168 +msgid "Subtitle" +msgstr "" + +#: ../template/default/epgsearch_new.html:252 +#: ../template/default/epgsearch_new.html:485 +#: ../template/default/at_timer_new.html:56 +msgid "Description" +msgstr "" + +#: ../template/default/epgsearch_new.html:258 +msgid "Use extended EPG info:" +msgstr "" + +#: ../template/default/epgsearch_new.html:293 +msgid "Use Channel:" +msgstr "" + +#: ../template/default/epgsearch_new.html:296 +#: ../template/default/epgsearch_new.html:396 +msgid "no" +msgstr "" + +#: ../template/default/epgsearch_new.html:297 +msgid "interval" +msgstr "" + +#: ../template/default/epgsearch_new.html:298 +msgid "channel group" +msgstr "" + +#: ../template/default/epgsearch_new.html:299 +msgid "only FTA" +msgstr "" + +#: ../template/default/epgsearch_new.html:302 +msgid "Range:" +msgstr "" + +#: ../template/default/epgsearch_new.html:316 +msgid "Channel Group:" +msgstr "" + +#: ../template/default/epgsearch_new.html:327 +msgid "Use Time:" +msgstr "" + +#: ../template/default/epgsearch_new.html:333 +msgid "Start After:" +msgstr "" + +#: ../template/default/epgsearch_new.html:340 +msgid "Start Before:" +msgstr "" + +#: ../template/default/epgsearch_new.html:352 +msgid "Use Duration:" +msgstr "" + +#: ../template/default/epgsearch_new.html:358 +msgid "Min. Duration:" +msgstr "" + +#: ../template/default/epgsearch_new.html:361 +#: ../template/default/epgsearch_new.html:368 +msgid "hh:mm" +msgstr "" + +#: ../template/default/epgsearch_new.html:365 +msgid "Max. Duration:" +msgstr "" + +#: ../template/default/epgsearch_new.html:377 +msgid "Use Day of Week:" +msgstr "" + +#: ../template/default/epgsearch_new.html:393 +msgid "Use Blacklists:" +msgstr "" + +#: ../template/default/epgsearch_new.html:397 +msgid "selection" +msgstr "" + +#: ../template/default/epgsearch_new.html:398 +#: ../template/default/at_timer_new.html:75 +msgid "all" +msgstr "" + +#: ../template/default/epgsearch_new.html:412 +msgid "Use in Favorites Menu:" +msgstr "" + +#: ../template/default/epgsearch_new.html:420 +msgid "Use as Search Timer:" +msgstr "" + +#: ../template/default/epgsearch_new.html:426 ../vdradmind.pl:2272 +msgid "announce only" +msgstr "" + +#: ../template/default/epgsearch_new.html:427 ../vdradmind.pl:2274 +msgid "switch only" +msgstr "" + +#: ../template/default/epgsearch_new.html:437 +msgid "Settings for action \"record\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:440 +msgid "Series Recording:" +msgstr "" + +#: ../template/default/epgsearch_new.html:452 +msgid "Delete Recordings After ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:455 +msgid "Keep ... Recordings:" +msgstr "" + +#: ../template/default/epgsearch_new.html:460 +msgid "Pause, when ... recordings exist:" +msgstr "" + +#: ../template/default/epgsearch_new.html:466 +msgid "Avoid Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:472 +msgid "Allowed Repeats:" +msgstr "" + +#: ../template/default/epgsearch_new.html:475 +msgid "Only Repeats Within ... Days:" +msgstr "" + +#: ../template/default/epgsearch_new.html:480 +msgid "Compare:" +msgstr "" + +#: ../template/default/epgsearch_new.html:526 +msgid "VPS:" +msgstr "" + +#: ../template/default/epgsearch_new.html:537 +msgid "Settings for action \"switch only\"" +msgstr "" + +#: ../template/default/epgsearch_new.html:540 +msgid "Switch ... Minutes Before Start:" +msgstr "" + +#: ../template/default/epgsearch_new.html:553 +msgid "Save as template" +msgstr "" + +#: ../template/default/at_timer_new.html:6 +#: ../template/default/at_timer_new.html:19 +msgid "Add New AutoTimer" +msgstr "" + +#: ../template/default/at_timer_new.html:37 +#: ../template/default/at_timer_new.html:41 +msgid "oneshot" +msgstr "" + +#: ../template/default/at_timer_new.html:155 +msgid "Test" +msgstr "" + +#: ../template/default/at_timer_new.html:169 +msgid "Broadcasted" +msgstr "" + +#: ../template/default/at_timer_new.html:170 +#: ../template/default/epgsearch_list.html:215 +msgid "Stored in" +msgstr "" + +#: ../template/default/epgsearch_list.html:6 +msgid "EPG search" +msgstr "" + +#: ../template/default/epgsearch_list.html:26 +msgid "New Search" +msgstr "" + +#: ../template/default/epgsearch_list.html:54 +msgid "Action" +msgstr "" + +#: ../template/default/epgsearch_list.html:79 +msgid "From" +msgstr "" + +#: ../template/default/epgsearch_list.html:93 +msgid "To" +msgstr "" + +#: ../template/default/epgsearch_list.html:107 +msgid "Search pattern" +msgstr "" + +#: ../template/default/epgsearch_list.html:163 +msgid "Find" +msgstr "" + +#: ../template/default/epgsearch_list.html:184 +msgid "Show Favorites" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +msgid "Delete Selected Searches" +msgstr "" + +#: ../template/default/epgsearch_list.html:187 +msgid "Delete all selected searches?" +msgstr "" + +#: ../template/default/epgsearch_list.html:188 +msgid "Execute Selected Searches" +msgstr "" + +#: ../template/default/epgsearch_list.html:212 +msgid "Duration" +msgstr "" + +#: ../vdradmind.pl:352 msgid "What's your VDR hostname (e.g video.intra.net)?" msgstr "" -#: ../vdradmind.pl:347 +#: ../vdradmind.pl:353 msgid "On which port does VDR listen to SVDRP queries?" msgstr "" -#: ../vdradmind.pl:348 +#: ../vdradmind.pl:354 msgid "On which address should VDRAdmin-AM listen (0.0.0.0 for any)?" msgstr "" -#: ../vdradmind.pl:349 +#: ../vdradmind.pl:355 msgid "On which port should VDRAdmin-AM listen?" msgstr "" -#: ../vdradmind.pl:350 +#: ../vdradmind.pl:356 msgid "Username?" msgstr "" -#: ../vdradmind.pl:351 +#: ../vdradmind.pl:357 msgid "Password?" msgstr "" -#: ../vdradmind.pl:352 +#: ../vdradmind.pl:358 msgid "Where are your recordings stored?" msgstr "" -#: ../vdradmind.pl:353 +#: ../vdradmind.pl:359 msgid "Where are your VDR's configuration files located?" msgstr "" -#: ../vdradmind.pl:360 +#: ../vdradmind.pl:366 msgid "Config file written successfully." msgstr "" -#: ../vdradmind.pl:420 +#: ../vdradmind.pl:426 #, perl-format msgid "vdradmind.pl %s started with pid %d." msgstr "" -#: ../vdradmind.pl:480 ../vdradmind.pl:1085 ../vdradmind.pl:2078 +#: ../vdradmind.pl:486 ../vdradmind.pl:1117 ../vdradmind.pl:2728 msgid "Not found" msgstr "" -#: ../vdradmind.pl:480 ../vdradmind.pl:2079 +#: ../vdradmind.pl:486 ../vdradmind.pl:2729 msgid "The requested URL was not found on this server!" msgstr "" -#: ../vdradmind.pl:550 ../vdradmind.pl:1081 ../vdradmind.pl:2081 +#: ../vdradmind.pl:563 ../vdradmind.pl:1113 ../vdradmind.pl:2731 msgid "Forbidden" msgstr "" -#: ../vdradmind.pl:550 ../vdradmind.pl:2082 +#: ../vdradmind.pl:563 ../vdradmind.pl:2732 msgid "You don't have permission to access this function!" msgstr "" -#: ../vdradmind.pl:1081 ../vdradmind.pl:2083 +#: ../vdradmind.pl:1113 ../vdradmind.pl:2733 #, perl-format msgid "Access to file \"%s\" denied!" msgstr "" -#: ../vdradmind.pl:1085 ../vdradmind.pl:2080 +#: ../vdradmind.pl:1117 ../vdradmind.pl:2730 #, perl-format msgid "The URL \"%s\" was not found on this server!" msgstr "" -#: ../vdradmind.pl:2084 +#: ../vdradmind.pl:2188 +msgid "--- no timer ---" +msgstr "" + +#: ../vdradmind.pl:2276 +msgid "unknown" +msgstr "" + +#: ../vdradmind.pl:2279 +msgid "none" +msgstr "" + +#: ../vdradmind.pl:2734 #, perl-format msgid "Can't open file \"%s\"!" msgstr "" -#: ../vdradmind.pl:2085 +#: ../vdradmind.pl:2735 #, perl-format msgid "" "Can't connect to VDR at %s:%s<br /><br />Please check if VDR is running and " "if VDR's svdrphosts.conf is configured correctly." msgstr "" -#: ../vdradmind.pl:2086 +#: ../vdradmind.pl:2736 #, perl-format msgid "Error while sending command to VDR at %s" msgstr "" -#: ../vdradmind.pl:2142 +#: ../vdradmind.pl:2792 msgid "Internal error:" msgstr "" -#: ../vdradmind.pl:2495 +#: ../vdradmind.pl:3164 msgid "Can't find EPG entry!" msgstr "" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 msgid "Playing Tomorrow" msgstr "" -#: ../vdradmind.pl:2754 +#: ../vdradmind.pl:3427 #, perl-format msgid "Playing on the %s" msgstr "" -#: ../vdradmind.pl:4024 +#: ../vdradmind.pl:4698 msgid "next" msgstr "" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on after" msgstr "" -#: ../vdradmind.pl:4043 +#: ../vdradmind.pl:4717 msgid "What's on at" msgstr "" -#: ../vdradmind.pl:4046 +#: ../vdradmind.pl:4720 msgid "Suitable matches for:" msgstr "" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "short view" msgstr "" -#: ../vdradmind.pl:4049 +#: ../vdradmind.pl:4723 msgid "long view" msgstr "" -#: ../vdradmind.pl:4098 +#: ../vdradmind.pl:4772 msgid "Schedule" msgstr "" -#: ../vdradmind.pl:4644 +#: ../vdradmind.pl:5318 msgid "Timers" msgstr "" -#: ../vdradmind.pl:4712 +#: ../vdradmind.pl:5386 msgid "System default" msgstr "" diff --git a/template/default/.#about.html.1.6 b/template/default/.#about.html.1.6 new file mode 100644 index 0000000..8e2d438 --- /dev/null +++ b/template/default/.#about.html.1.6 @@ -0,0 +1,116 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + +<head> + <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> + <title><?% gettext('About') %?></title> + <script type="text/javascript" language="JavaScript1.2" src="library.js"></script> + <link href="style.css" rel="stylesheet" media="screen" type="text/css" /> + <?% IF usercss %?> + <link href="user.css" rel="stylesheet" media="screen" type="text/css" /> + <?% END %?> +</head> + +<body id="about" onload="window.focus()"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="heading"> + <td colspan="2"><h2><?% gettext('Authors') %?></h2></td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Current author (VDRAdmin-AM branch):') %?></h5></td> + <td class="col_value"><a href="mailto:mail@andreas.vdr-developer.org">Andreas Mair</a> (<a href="http://andreas.vdr-developer.org" target="_blank">Homepage</a>)</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Original author (VDRAdmin):') %?></h5></td> + <td class="col_value">Thomas Koch (<a href="http://www.linvdr.org" target="_blank">Homepage</a>)</td> + </tr> + </table> + + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="heading"> + <td colspan="2"><h2><?% gettext('Translation Team') %?></h2></td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Dutch:') %?></h5></td> + <td class="col_value">Roel Koelewijn</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('English:') %?></h5></td> + <td class="col_value">Andreas Mair</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Finnish:') %?></h5></td> + <td class="col_value">Rolf Ahrenberg</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('French:') %?></h5></td> + <td class="col_value"><!-- <?% gettext('At the moment unmaintained, former translations by:') %?> -->Trois Six (also at vdrportal.de), map, lobotomise, bads, Mickaël Nival</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('German:') %?></h5></td> + <td class="col_value">Andreas Mair</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Spanish:') %?></h5></td> + <td class="col_value">Rüdiger Jung</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Russian:') %?></h5></td> + <td class="col_value">Oleg Roitburd and Allrussian-forum translation team</td> + </tr> + </table> + + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="heading"> + <td colspan="2"><h2><?% gettext('Informations') %?></h2></td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('VDRAdmin-AM version:') %?></h5></td> + <td class="col_value"><?% myversion %?></td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('VDR version:') %?></h5></td> + <td class="col_value"><?% vdrversion %?></td> + </tr> + <tr class="row_even"> + <td class="col_label" valign="top"><h5><?% gettext('Supported features in VDR:') %?></h5></td> + <td class="col_value"> + <?% IF features.EPGSEARCH %?> + <img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> + <?% ELSE %?> + <img src="bilder/poempl_rot.png" alt="" align="middle" border="0"/> + <?% END %?> + <?% gettext('EPGSearch (<a href="http://people.freenet.de/cwieninger/html/vdr-epg-search.html" target="_blank">EPGSearch Plugin</a>)') %?><br /> + <?% IF features.STREAMDEV %?> + <img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> + <?% ELSE %?> + <img src="bilder/poempl_rot.png" alt="" align="middle" border="0"/> + <?% END %?> + <?% gettext('LiveTV Streaming (<a href="http://www.vdr-wiki.de/wiki/index.php/Streamdev-plugin" target="_blank">Streamdev Plugin</a>)') %?><br /> + <?% IF features.REC_RENAME %?> + <img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> + <?% ELSE %?> + <img src="bilder/poempl_rot.png" alt="" align="middle" border="0"/> + <?% END %?> + <?% gettext('Rename Recordings (<a href="http://www.saunalahti.fi/~rahrenbe/vdr/patches/" target="_blank">Liemikuutio Patch</a>)') %?><br /> + </td> + </tr> + </table> + + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="help" class="group"> + <tr class="heading"> + <td><h2><?% gettext('Getting Help and Reporting Bugs') %?></h2></td> + </tr> + <tr class="row_even"> + <td> + <ul> + <li><?% gettext('If you need help please first try to use the online help you\'ll find on some pages. You can access it by clicking <img src="bilder/help.png" alt="" />.') %?></li> + <li><?% gettext('If this doesn\'t provide the information you need you can try to get help at <a href="http://www.vdrportal.de" target="_blank">VDR-Portal</a> if you understand German language. Please use the announcement thread if possible, search for:') %?> "[ANNOUNCE] VDRAdmin-AM-<?% myversion %?>"</li> + <li><?% gettext('If you think you have found a bug please check that it\'s a new one and report it in the <a href="http://www.vdr-developer.org/mantisbt/main_page.php" target="_blank">VDRAdmin-AM BugTracking system</a>.') %?></li> + </ul> + </td> + </tr> + </table> +</body> + +</html> diff --git a/template/default/.#navigation.html.1.4 b/template/default/.#navigation.html.1.4 new file mode 100644 index 0000000..3847057 --- /dev/null +++ b/template/default/.#navigation.html.1.4 @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> + <title>VDRAdmin-AM</title> + <link type="text/css" href="style.css" rel="stylesheet" media="screen" /> + <?% IF usercss %?> + <link type="text/css" href="user.css" rel="stylesheet" media="screen" /> + <?% END %?> + + <script type="text/javascript"> + <!-- + function rc_open() { + window.open("./vdradmin.pl?aktion=rc_show", "vdradminRC", "width=200, height=510, resizable=no, scrollbars=no, status=no, toolbar=no"); + } + function tv_open() { + window.open("./vdradmin.pl?aktion=tv_show", "vdradminTV", "width=615, height=548, resizable=yes, scrollbars=no, status=no, toolbar=no"); + } + // --> + </script> +</head> + +<body id="navigation"> + <div class="logo"> + <a href="./" target="_top"><img src="bilder/logo.png" alt="" height="50" width="150" border="0" /></a> + </div> + <div class="nav_bar"> + <div class="navi" id="prog_summary"> + <a href="vdradmin.pl?aktion=prog_summary" target="main"><?% gettext('What\'s On Now?') %?></a> + </div> + <div class="navi" id="prog_list2"> + <a href="vdradmin.pl?aktion=prog_list2" target="main"><?% gettext('Playing Today?') %?></a> + </div> + <div class="navi" id="prog_timeline"> + <a href="vdradmin.pl?aktion=prog_timeline" target="main"><?% gettext('Timeline') %?></a> + </div> + <div class="navi" id="prog_list"> + <a href="vdradmin.pl?aktion=prog_list" target="main"><?% gettext('Channels') %?></a> + </div> + <div class="navi" id="timer_list"> + <a href="vdradmin.pl?aktion=timer_list" target="main"><?% gettext('Timer') %?></a> + </div> +<?% IF features.AUTOTIMER %?> + <div class="navi" id="at_timer_list"> + <a href="vdradmin.pl?aktion=at_timer_list" target="main"><?% gettext('AutoTimer') %?></a> + </div> +<?% END %?> +<?% IF features.EPGSEARCH %?> + <div class="navi" id="epgsearch_list"> + <a href="vdradmin.pl?aktion=epgsearch_list" target="main"><?% gettext('EPG Search') %?></a> + </div> +<X?% END %?> + <div class="navi" id="rec_list"> + <a href="vdradmin.pl?aktion=rec_list" target="main"><?% gettext('Recordings') %?></a> + </div> + <div class="navi" id="rc"> + <a href="javascript:rc_open();"><?% gettext('Remote Control') %?></a> + </div> + <div class="navi" id="tv"> + <a href="vdradmin.pl?aktion=tv_show" target="main"><?% gettext('Watch TV') %?></a> + </div> + <div class="navi" id="commands"> + <a href="vdradmin.pl?aktion=vdr_cmds" target="main"><?% gettext('Commands') %?></a> + </div> + <div class="navi" id="config"> + <a href="vdradmin.pl?aktion=config" target="main"><?% gettext('Configuration') %?></a> + </div> + <div class="navi" id="about"> + <a href="vdradmin.pl?aktion=about" target="main"><?% gettext('About') %?> / <?% gettext('Help') %?></a> + </div> + + <form action="vdradmin.pl" method="get" name="FormName" target="main" class="search"> + <input type="text" name="search" /><br /> + <input type="submit" name="submit" value="<?% gettext('Search') %?>" / + <input type="hidden" name="aktion" value="prog_summary" /> + </form> + </div> +</body> +</html> diff --git a/template/default/about.html b/template/default/about.html index 7cb6dcd..9d94fcb 100644 --- a/template/default/about.html +++ b/template/default/about.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -31,33 +31,37 @@ <td colspan="2"><h2><?% gettext('Translation Team') %?></h2></td> </tr> <tr class="row_even"> - <td class="col_label"><h5><?% gettext('Dutch:') %?></h5></td> - <td class="col_value">Roel Koelewijn</td> - </tr> - <tr class="row_even"> <td class="col_label"><h5><?% gettext('English:') %?></h5></td> <td class="col_value">Andreas Mair</td> </tr> <tr class="row_even"> - <td class="col_label"><h5><?% gettext('Finnish:') %?></h5></td> - <td class="col_value">Rolf Ahrenberg</td> + <td class="col_label"><h5><?% gettext('German:') %?></h5></td> + <td class="col_value">Andreas Mair</td> </tr> <tr class="row_even"> <td class="col_label"><h5><?% gettext('French:') %?></h5></td> <td class="col_value"><!-- <?% gettext('At the moment unmaintained, former translations by:') %?> -->Trois Six (also at vdrportal.de), map, lobotomise, bads, Mickaël Nival</td> </tr> <tr class="row_even"> - <td class="col_label"><h5><?% gettext('German:') %?></h5></td> - <td class="col_value">Andreas Mair</td> - </tr> - <tr class="row_even"> <td class="col_label"><h5><?% gettext('Spanish:') %?></h5></td> <td class="col_value">Rüdiger Jung</td> </tr> <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Finnish:') %?></h5></td> + <td class="col_value">Rolf Ahrenberg</td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Dutch:') %?></h5></td> + <td class="col_value">Roel Koelewijn</td> + </tr> + <tr class="row_even"> <td class="col_label"><h5><?% gettext('Russian:') %?></h5></td> <td class="col_value">Oleg Roitburd and Allrussian-forum translation team</td> </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Czech:') %?></h5></td> + <td class="col_value">Karel Borkovec</td> + </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> @@ -75,6 +79,12 @@ <tr class="row_even"> <td class="col_label" valign="top"><h5><?% gettext('Supported features in VDR:') %?></h5></td> <td class="col_value"> + <?% IF features.EPGSEARCH %?> + <img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> + <?% ELSE %?> + <img src="bilder/poempl_rot.png" alt="" align="middle" border="0"/> + <?% END %?> + <?% gettext('EPGSearch (<a href="http://people.freenet.de/cwieninger/html/vdr-epg-search.html" target="_blank">EPGSearch Plugin</a>)') %?><br /> <?% IF features.STREAMDEV %?> <img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> <?% ELSE %?> diff --git a/template/default/at_timer_list.html b/template/default/at_timer_list.html index aa67c40..306ab74 100644 --- a/template/default/at_timer_list.html +++ b/template/default/at_timer_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>"/> @@ -138,7 +138,7 @@ <?% IF at.stop %?><?% at.stop %?><?% ELSE %?>-<?% END %?> </div> </td> - <td class="col_name <?% IF at.sortbypattern %?>selected<?% END %?>" <?% IF config.AT_TOOLTIP %?>onMouseOver="tip('VDR-<?% at.id %?>'); return true;" onMouseOut="untip(); return true;"<?% END %?>> + <td class="col_name <?% IF at.sortbypattern %?>selected<?% END %?>" <?% IF config.AT_TOOLTIP %?>onmouseover="tip('VDR-<?% at.id %?>'); return true;" onmouseout="untip(); return true;"<?% END %?>> <div> <a href="<?% at.modurl %?>" title="<?% gettext('Edit') %?>"><?% at.pattern %?></a> </div> @@ -168,7 +168,7 @@ <input type="submit" class="submit" name="at_force" value="<?% gettext('Force Update') %?>" /> </td> <td align="right"> - <input type="submit" class="submit" name="at_delete" value="<?% gettext('Delete Selected AutoTimers') %?>" onclick="return mdel_old('<?% gettext('Delete all selected timers?') %?>');" /> + <input type="submit" class="submit" name="at_delete" value="<?% gettext('Delete Selected AutoTimers') %?>" onclick="return mdel(this, '<?% gettext('Delete all selected timers?') %?>');" /> </td> </tr> </table> diff --git a/template/default/at_timer_new.html b/template/default/at_timer_new.html index d30c3d5..6a8dfb0 100644 --- a/template/default/at_timer_new.html +++ b/template/default/at_timer_new.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>"/> diff --git a/template/default/config.html b/template/default/config.html index 03f47db..bb25def 100644 --- a/template/default/config.html +++ b/template/default/config.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> <title>VDRAdmin-AM - <?% gettext('Configuration') %?></title> @@ -426,7 +426,7 @@ </tr> <tr class="row_odd"> <td class="col_channels"> - <select name="all_channels" size="8" multiple class="channels"> + <select name="all_channels" size="8" multiple="multiple" class="channels"> <?% FOREACH chan = ALL_CHANNELS %?> <option value="<?% chan.vdr_id %?>"><?% chan.name | html %?></option> <?% END %?> @@ -437,7 +437,7 @@ <input type="submit" class="submit" name="submit" value="<<<<<" /> </td> <td class="col_wanted_channels"> - <select name="selected_channels" size="8" multiple class="channels"> + <select name="selected_channels" size="8" multiple="multiple" class="channels"> <?% FOREACH chan = SELECTED_CHANNELS %?> <option value="<?% chan.vdr_id %?>"><?% chan.name | html %?></option> <?% END %?> diff --git a/template/default/default/sauerei.gif b/template/default/default/sauerei.gif Binary files differdeleted file mode 100644 index f931774..0000000 --- a/template/default/default/sauerei.gif +++ /dev/null diff --git a/template/default/epgsearch_list.html b/template/default/epgsearch_list.html new file mode 100644 index 0000000..42a3ac7 --- /dev/null +++ b/template/default/epgsearch_list.html @@ -0,0 +1,260 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html id="scroller"> +<?% USE JavaScript, HTML %?> +<head> + <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>"/> + <title>VDRAdmin-AM - <?% gettext('EPG search') %?></title> + <link href="style.css" rel="stylesheet" media="screen" type="text/css"/> + <?% IF usercss %?> + <link href="user.css" rel="stylesheet" media="screen" type="text/css"/> + <?% END %?> + <script type="text/javascript" language="JavaScript1.2" src="library.js"></script> + <?% IF config.AT_TOOLTIP %?> + <script type="text/javascript" language="JavaScript1.2" src="infobox.js"></script> + <?% END %?> +</head> + +<body id="epgsearch_list"> +<?% UNLESS did_search %?> + <form action="<?% url %?>" method="get" name="FormName0"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="heading"> + <tr> + <td class="col_title"> + <h1><?% gettext('EPG Search') %?></h1> + </td> + <td class="col_other"> + <input type="submit" class="submit" name="new_search" value="<?% gettext('New Search') %?>" /> + <input type="hidden" name="aktion" value="epgsearch_edit" /> + </td> +<?% IF help_url %?> + <td class="col_help"> + <a href="javascript:open_help('<?% help_url %?>');"><img src="bilder/help.png" border="0" alt="help" title="<?% gettext('Help') %?>"/></a> + </td> +<?% END %?> + </tr> + </table> + </form> + + <form action="<?% url %?>" method="get" name="FormName"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="content" class="list hilight"> + <tr class="heading"> + <td class="col_active <?% IF sortbyactive %?>selected<?% END %?>"> + <h2> + <a href="<?% sortbyactiveurl %?>"><?% gettext('Active') %?> + <?% IF sortbyactive %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + </h2> + </td> + <td class="col_action <?% IF sortbyaction %?>selected<?% END %?>"> + <h2> + <a href="<?% sortbyactionurl %?>"><?% gettext('Action') %?> + <?% IF sortbyaction %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + </h2> + </td> + <td class="col_channel <?% IF sortbychannel %?>selected<?% END %?>"> + <h2> + <?% gettext('Channel') %?> + <!-- + <a href="<?% sortbychannelurl %?>"><?% gettext('Channel') %?> + <?% IF sortbychannel %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + --> + </h2> + </td> + <td class="col_start <?% IF sortbystart %?>selected<?% END %?>"> + <h2> + <?% gettext('From') %?> + <!-- + <a href="<?% sortbystarturl %?>"><?% gettext('Start') %?> + <?% IF sortbystart %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + --> + </h2> + </td> + <td class="col_stop <?% IF sortbystop %?>selected<?% END %?>"> + <h2> + <?% gettext('To') %?> + <!-- + <a href="<?% sortbystopurl %?>"><?% gettext('Stop') %?> + <?% IF sortbystop %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + --> + </h2> + </td> + <td class="col_name <?% IF sortbypattern %?>selected<?% END %?>"> + <h2> + <a href="<?% sortbypatternurl %?>"><?% gettext('Search pattern') %?> + <?% IF sortbypattern %?> + <img src="bilder/sortiert_<?% desc %?>.gif" alt="" width="9" height="11" border="0"/> + <?% ELSE %?> + <img src="bilder/spacer.gif" alt="" width="9" height="11" border="0"/> + <?% END %?> + </a> + </h2> + </td> + <td class="col_buttons"></td> + <td class="col_checkbox"><input type="checkbox" name="SELALL" value="SELALL" onclick="AllMessages(this.form);" title="<?% gettext('Select all/none') %?>"/></td> + </tr> + +<?% FOREACH searches %?> + <tr class="<?% IF loop.count % 2 == 0 %?>row_even<?% ELSE %?>row_odd<?% END %?>"> + <td class="col_active <?% IF sortbyactive %?>selected<?% END %?>"> + <div> + <?% IF has_action %?> + <a href="<?% toggleurl %?>"><img src="bilder/poempl_gruen.png" alt="" align="middle" border="0"/> <?% gettext('Yes') %?></a> + <?% ELSE %?> + <a href="<?% toggleurl %?>"><img src="bilder/poempl_grau.png" alt="" align="middle" border="0"/> <?% gettext('No') %?></a> + <?% END %?> + </div> + </td> + <td class="col_active <?% IF sortbyactive %?>selected<?% END %?>"> + <div><?% action_text %?></div> + </td> + <td class="col_channel <?% IF sortbychannel %?>selected<?% END %?>"> + <div> + <?% SWITCH use_channel %?> + <?% CASE 1 %?> + <?% channel_from_name %?><?% IF channel_from_name != channel_to_name %?> - <?% channel_to_name %?><?% END %?> + <?% CASE 2 %?> + <?% channels %?> + <?% CASE %?> + - + <?% END %?> + </div> + </td> + <td class="col_start <?% IF sortbystart %?>selected<?% END %?>"> + <div> + <?% IF time_start %?><?% time_start %?><?% ELSE %?>--:--<?% END %?> + </div> + </td> + <td class="col_stop <?% IF sortbystop %?>selected<?% END %?>"> + <div> + <?% IF time_stop %?><?% time_stop %?><?% ELSE %?>--:--<?% END %?> + </div> + </td> + <td class="col_name <?% IF sortbypattern %?>selected<?% END %?>"> + <div> + <a href="<?% modurl %?>" title="<?% gettext('Edit') %?>"><?% pattern | html %?></a> + </div> + </td> + <td class="col_buttons"> + <span class="action find"> + <a href="<?% findurl %?>"><img src="bilder/find.png" alt="find" border="0" title="<?% gettext('Find') %?>"/></a> + </span> + <span class="action edit"> + <a href="<?% modurl %?>"><img src="bilder/edit.png" alt="edit" border="0" title="<?% gettext('Edit') %?>"/></a> + </span> + <span class="action delete"> + <a href="javascript:del('<?% gettext('Delete timer?') %?>\n\n"<?% pattern | js %?>"', '<?% delurl %?>');"><img src="bilder/delete.png" alt="delete" border="0" title="<?% gettext('Delete') %?>"/></a> + </span> + </td> + <td class="col_checkbox"> + <div> + <input type="checkbox" name="xxxx_<?% id %?>"/> + </div> + </td> + </tr> +<?% END %?> + </table> + + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="buttons"> + <tr> + <td align="left"> + <input type="submit" class="submit" name="favorites" value="<?% gettext('Show Favorites') %?>" /> + </td> + <td align="right"> + <input type="submit" class="submit" name="delete" value="<?% gettext('Delete Selected Searches') %?>" onclick="mdel(this, '<?% gettext('Delete all selected searches?') %?>');" /> + <input type="submit" class="submit" name="execute" value="<?% gettext('Execute Selected Searches') %?>" /> + </td> + </tr> + </table> + <input type="hidden" name="aktion" value="epgsearch_aktion"/> + + </form> +<?% END %?> + +<?% IF did_search %?> + <form action="<?% url %?>" method="get" name="FormName0"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="heading"> + <tr> + <td class="col_title"> + <h1><?% title %?></h1> + </td> + </tr> + </table> + </form> + + <?% IF matches.size() > 0 %?> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="list" id="content"> + <!-- + <tr class="heading"> + <td class="col_duration"><h2><?% gettext('Duration') %?></h2></td> + <td class="col_center"><h2><?% gettext('Title') %?></h2></td> + <td class="col_channel"><h2><?% gettext('Channel') %?></h2></td> + <td class="col_folder"><h2><?% gettext('Stored in') %?></h2></td> + </tr> + --> + <?% FOREACH matches; + IF olddate != date; + olddate = date; %?> + <tr class="newday"> + <td colspan="4"><span class="date_long"><?% date %?></span></td> + </tr> + <?% END %?> + <tr class="<?% IF loop.count % 2 == 0 %?>row_even<?% ELSE %?>row_odd<?% END %?>"> + <td class="col_duration"> + <span class="time_duration"><span class="time_start"><?% start %?></span> - <span class="time_stop"><?% stop %?></span></span> + </td> + <td class="col_center"> + <div class="epg_title"> + <?% IF infurl %?> + <a href="javascript:popup('<?% infurl %?>');" title="<?% gettext('More Information') %?>"> + <?% END %?> + <?% title %?> + <?% IF infurl %?> + </a> + <?% END %?> + </div> + <?% IF subtitle %?> + <div class="epg_subtitle"><?% subtitle %?></div> + <?% ELSE %?> + <div class="epg_subtitle"> </div> + <?% END %?> + </td> + <td class="col_channel"> + <div class="channel_name"><a href="<?% proglink %?>" title="<?% gettext('Channels') %?>"><?% channel %?></a></div> + </td> + <td class="col_folder"> + <?% folder %?> + </td> + </tr> + <?% END %?> + </table> + <?% ELSE %?> + <div class="warning"><?% gettext('No matches found!') %?></div> + <?% END %?> +<?% END %?> +</body> + +</html> diff --git a/template/default/epgsearch_new.html b/template/default/epgsearch_new.html new file mode 100644 index 0000000..cfc917b --- /dev/null +++ b/template/default/epgsearch_new.html @@ -0,0 +1,571 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html id="scroller"> + +<head> + <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>"/> + <title>VDRAdmin-AM - <?% IF newtimer %?><?% gettext('Define New Search') %?><?% ELSE %?><?% gettext('Edit Search') %?><?% END %?></title> + <link href="style.css" rel="stylesheet" media="screen" type="text/css"/> + <?% IF usercss %?> + <link href="user.css" rel="stylesheet" media="screen" type="text/css"/> + <?% END %?> + <script type="text/javascript" language="JavaScript1.2" src="library.js"></script> + <script type="text/javascript" language="JavaScript1.2"> + <!-- + function initGUI() + { + if (document.getElementById("hide_results")) + document.getElementById("hide_results").style.display = "block"; + changedSearchMode(document.getElementById("search_mode")); + changedUseChannel(document.getElementById("use_channel")); +<?% IF extepg.size() > 0 %?> + changedUseExtEpg(document.getElementById("use_extepg")); +<?% END %?> + changedUseTime(document.getElementById("use_time")); + changedUseDuration(document.getElementById("use_duration")); + changedUseDays(document.getElementById("use_days")); + changedUseBlacklists(document.getElementById("use_blacklists")); + changedAction(document.getElementById("select_action")); + changedHasAction(document.getElementById("has_action")); + changedAvoidRepeats(document.getElementById("avoid_repeats")); + } + + function changedSearchMode(mySelect) + { + document.getElementById("fuzzy_tolerance").style.display = (mySelect.options[mySelect.selectedIndex].value == 5 ? "block" : "none"); + } + + function changedUseChannel(mySelect) + { + switch (mySelect.options[mySelect.selectedIndex].value) + { + case "0": + case "3": + document.getElementById("channel_range").style.display = "none"; + document.getElementById("channel_group").style.display = "none"; + break; + + case "1": + document.getElementById("channel_range").style.display = "block"; + document.getElementById("channel_group").style.display = "none"; + break; + + case "2": + document.getElementById("channel_range").style.display = "none"; + document.getElementById("channel_group").style.display = "block"; + break; + } + } + + function changedUseExtEpg(myCheckbox) + { + document.getElementById("use_extepg_settings").style.display = (myCheckbox.checked ? "block" : "none"); + } + + function changedUseTime(myCheckbox) + { + document.getElementById("use_time_settings").style.display = (myCheckbox.checked ? "block" : "none"); + } + + function changedUseDuration(myCheckbox) + { + document.getElementById("use_duration_settings").style.display = (myCheckbox.checked ? "block" : "none"); + } + + function changedUseDays(myCheckbox) + { + document.getElementById("use_days_settings").style.display = (myCheckbox.checked ? "block" : "none"); + } + + function changedUseBlacklists(mySelect) + { + document.getElementById("select_blacklists").style.display = (mySelect.options[mySelect.selectedIndex].value == 1 ? "block" : "none"); + } + + function changedHasAction(myCheckbox) + { + if (myCheckbox.checked) + { + document.getElementById("set_action").style.display = "inline"; + changedAction(document.getElementById("select_action")); + } + else + { + document.getElementById("set_action").style.display = "none"; + document.getElementById("action_record_settings").style.display = "none"; + document.getElementById("action_switch_settings").style.display = "none"; + } + } + + function changedAction(mySelect) + { + switch (mySelect.options[mySelect.selectedIndex].value) + { + case "0": + document.getElementById("action_record_settings").style.display = "block"; + document.getElementById("action_switch_settings").style.display = "none"; + break; + + case "1": + document.getElementById("action_record_settings").style.display = "none"; + document.getElementById("action_switch_settings").style.display = "none"; + break; + + case "2": + document.getElementById("action_record_settings").style.display = "none"; + document.getElementById("action_switch_settings").style.display = "block"; + break; + } + } + + function changedAvoidRepeats(myCheckbox) + { + document.getElementById("avoid_repeats_settings").style.display = (myCheckbox.checked ? "block" : "none"); + } + + function checkSearchPattern() + { + if (document.getElementById("pattern").value.length > 3) + return true; + + if ( !document.getElementById("use_title").checked + && !document.getElementById("use_subtitle").checked + && !document.getElementById("use_descr").checked) + return true; + + return confirm('<?% gettext('Small search pattern.\nDo you really want to use it?') %?>'); + } + + function hideResults() + { + document.getElementById("results").style.display = "none"; + } + //--> + </script> +</head> + +<body id="epgsearch_new" onload="javascript:initGUI()"> + <form action="<?% url %?>" method="get" name="FormName"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="heading"> + <tr> + <td class="col_title"> + <h1><?% IF do_edit %?><?% gettext('Edit Search') %?><?% ELSE %?><?% gettext('Add New Search') %?><?% END %?></h1> + </td> +<?% IF help_url %?> + <td class="col_help"> + <a href="javascript:open_help('<?% help_url %?>');"><img src="bilder/help.png" border="0" alt="help" title="<?% gettext('Help') %?>"/></a> + </td> +<?% END %?> + </tr> + </table> + + <div id="content"> +<?% IF did_search %?> + <?% IF matches %?> + <div id="results"> + <input type="button" name="hide_results" value="<?% gettext('Hide results') %?>" onclick="javascript:hideResults()" id="hide_results" style="display:none;"/> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="list"> + <?% FOREACH matches; + IF olddate != date; + olddate = date; %?> + <tr class="newday"> + <td colspan="4"><span class="date_long"><?% date %?></span></td> + </tr> + <?% END %?> + <tr class="<?% IF loop.count % 2 == 0 %?>row_even<?% ELSE %?>row_odd<?% END %?>"> + <td class="col_duration"> + <span class="time_duration"><span class="time_start"><?% start %?></span> - <span class="time_stop"><?% stop %?></span></span> + </td> + <td class="col_center"> + <div class="epg_title"> + <?% IF infurl %?> + <a href="javascript:popup('<?% infurl %?>');" title="<?% gettext('More Information') %?>"> + <?% END %?> + <?% title %?> + <?% IF infurl %?> + </a> + <?% END %?> + </div> + <?% IF subtitle %?> + <div class="epg_subtitle"><?% subtitle %?></div> + <?% ELSE %?> + <div class="epg_subtitle"> </div> + <?% END %?> + </td> + <td class="col_channel"> + <div class="channel_name"><?% channel %?></div> + </td> + <td class="col_folder"> + <?% folder %?> + </td> + </tr> + <?% END %?> + </table> + <?% ELSE %?> + <div class="warning"><?% gettext('No matches found!') %?></div> + <?% END %?> + <br /> + </div> +<?% END %?> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="newday"> + <td colspan="2"><?% gettext('Settings') %?></td> + </tr> + <?% tr_class = "row_odd" %?> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label"><h5><?% gettext('Search Term:') %?></h5></td> + <td class="col_value"> + <input type="text" name="pattern" id="pattern" value="<?% epgsearch.pattern %?>" size="40" /> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Search Mode:') %?></h5></td> + <td class="col_value"> + <select onchange="javascript:changedSearchMode(this)" id="search_mode" name="mode"> + <option value="0" <?% IF epgsearch.mode == 0 %?>selected="selected"<?% END %?>><?% gettext('phrase') %?></option> + <option value="1" <?% IF epgsearch.mode == 1 %?>selected="selected"<?% END %?>><?% gettext('all words') %?></option> + <option value="2" <?% IF epgsearch.mode == 2 %?>selected="selected"<?% END %?>><?% gettext('at least one word') %?></option> + <option value="3" <?% IF epgsearch.mode == 3 %?>selected="selected"<?% END %?>><?% gettext('match exactly') %?></option> + <option value="4" <?% IF epgsearch.mode == 4 %?>selected="selected"<?% END %?>><?% gettext('regular expression') %?></option> + <option value="5" <?% IF epgsearch.mode == 5 %?>selected="selected"<?% END %?>><?% gettext('fuzzy') %?></option> + </select> + <div id="fuzzy_tolerance"> + <?% gettext('Tolerance for "fuzzy":') %?> + <input type="text" name="fuzzy_tolerance" size="2" value="<?% epgsearch.fuzzy_tolerance %?>" /> + </div> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label"><h5><?% gettext('Match Case:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="matchcase" value="1" <?% IF epgsearch.matchcase %?>checked="checked"<?% END %?> /> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Search in:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_title" value="1" id="use_title" <?% IF epgsearch.use_title %?>checked="checked"<?% END %?> /><label for="use_title"><?% gettext('Title') %?></label> + <input type="checkbox" name="use_subtitle" value="1" id="use_subtitle" <?% IF epgsearch.use_subtitle %?>checked="checked"<?% END %?> /><label for="use_subtitle"><?% gettext('Subtitle') %?></label> + <input type="checkbox" name="use_descr" value="1" id="use_descr" <?% IF epgsearch.use_descr %?>checked="checked"<?% END %?> /><label for="use_descr"><?% gettext('Description') %?></label> + </td> + </tr> +<?% IF extepg.size() > 0 %?> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use extended EPG info:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_extepg" value="1" id="use_extepg" <?% IF epgsearch.use_extepg %?>checked="checked"<?% END %?> onclick="javascript:changedUseExtEpg(this)" /><br/> + <div id="use_extepg_settings"> + <?% FOREACH ext = extepg %?> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><?% ext.title %?></td> + </tr> + <tr> + <td> + <input type="text" value="<?% ext.data_text %?>" size="10" name="extepg_<?% ext.id %?>_data_text"/> + </td> + </tr> + <tr> + <td> + <select size="3" multiple="multiple" style="<?% IF ext.data.size() == 0 %?>visibility:hidden;<?% END %?>" name="extepg_<?% ext.id %?>_data"> + <?% IF ext.data.size() > 0 %?> + <?% FOREACH v = ext.data %?> + <option value="<?% v.name | html %?>" <?% IF v.sel %?>selected="selected"<?% END %?>><?% v.name | html %?></option> + <?% END %?> + <?% ELSE %?> + <option/> + <?% END %?> + </select> + </td> + </tr> + </table> + <?% END %?> + </div> + </td> + </tr> +<?% END %?> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use Channel:') %?></h5></td> + <td class="col_value"> + <select onchange="javascript:changedUseChannel(this)" id="use_channel" name="use_channel"> + <option value="0" <?% IF epgsearch.use_channel == 0 %?>selected="selected"<?% END %?>><?% gettext('no') %?></option> + <option value="1" <?% IF epgsearch.use_channel == 1 %?>selected="selected"<?% END %?>><?% gettext('interval') %?></option> + <option value="2" <?% IF epgsearch.use_channel == 2 %?>selected="selected"<?% END %?>><?% gettext('channel group') %?></option> + <option value="3" <?% IF epgsearch.use_channel == 3 %?>selected="selected"<?% END %?>><?% gettext('only FTA') %?></option> + </select> + <div id="channel_range"> + <?% gettext('Range:') %?> + <select name="channel_from"> +<?% FOREACH channels %?> + <option value="<?% uniq_id %?>" <?% IF uniq_id == epgsearch.channel_from %?>selected="selected"<?% END %?>><?% name | html %?></option> +<?% END %?> + </select> + - + <select name="channel_to"> +<?% FOREACH channels %?> + <option value="<?% uniq_id %?>" <?% IF uniq_id == epgsearch.channel_to %?>selected="selected"<?% END %?>><?% name | html %?></option> +<?% END %?> + </select> + </div> + <div id="channel_group"> + <?% gettext('Channel Group:') %?> + <select name="channel_group"> + <?% FOREACH group = ch_groups %?> + <option value="<?% group.id %?>" <?% IF group.sel %?>selected="selected"<?% END %?>><?% group.name | html %?></option> + <?% END %?> + </select> + </div> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use Time:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_time" value="1" <?% IF epgsearch.use_time %?>checked="checked"<?% END %?> onclick="javascript:changedUseTime(this)" id="use_time" /> + <div id="use_time_settings"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="col_label"><h5><?% gettext('Start After:') %?></h5></td> + <td class="col_value"> + <input type="text" name="time_start" value="<?% epgsearch.time_start %?>" size="5" maxlength="5" /> + <?% gettext('o\'clock') %?> + </td> + </tr> + <tr> + <td class="col_label"><h5><?% gettext('Start Before:') %?></h5></td> + <td class="col_value"> + <input type="text" name="time_stop" value="<?% epgsearch.time_stop %?>" size="5" maxlength="5" /> + <?% gettext('o\'clock') %?> + </td> + </tr> + </table> + </div> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use Duration:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_duration" value="1" <?% IF epgsearch.use_duration %?>checked="checked"<?% END %?> onclick="javascript:changedUseDuration(this)" id="use_duration" /> + <div id="use_duration_settings"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="col_label"><h5><?% gettext('Min. Duration:') %?></h5></td> + <td class="col_value"> + <input type="text" name="min_duration" value="<?% epgsearch.min_duration %?>" size="5" maxlength="5" /> + (<?% gettext('hh:mm') %?>) + </td> + </tr> + <tr> + <td class="col_label"><h5><?% gettext('Max. Duration:') %?></h5></td> + <td class="col_value"> + <input type="text" name="max_duration" value="<?% epgsearch.max_duration %?>" size="5" maxlength="5" /> + (<?% gettext('hh:mm') %?>) + </td> + </tr> + </table> + </div> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use Day of Week:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_days" value="1" id="use_days" <?% IF epgsearch.use_days %?>checked="checked"<?% END %?> onclick="javascript:changedUseDays(this)" /> + <div id="use_days_settings"> + <input type="checkbox" name="monday" value="1" id="monday" <?% IF epgsearch.monday %?>checked="checked"<?% END %?> /><label for="monday"><?% gettext('Monday') %?></label> + <input type="checkbox" name="tuesday" value="1" id="tuesday" <?% IF epgsearch.tuesday %?>checked="checked"<?% END %?> /><label for="tuesday"><?% gettext('Tuesday') %?></label> + <input type="checkbox" name="wednesday" value="1" id="wednesday" <?% IF epgsearch.wednesday %?>checked="checked"<?% END %?> /><label for="wednesday"><?% gettext('Wednesday') %?></label> + <input type="checkbox" name="thursday" value="1" id="thursday" <?% IF epgsearch.thursday %?>checked="checked"<?% END %?> /><label for="thursday"><?% gettext('Thursday') %?></label> + <input type="checkbox" name="friday" value="1" id="friday" <?% IF epgsearch.friday %?>checked="checked"<?% END %?> /><label for="friday"><?% gettext('Friday') %?></label> + <input type="checkbox" name="saturday" value="1" id="saturday" <?% IF epgsearch.saturday %?>checked="checked"<?% END %?> /><label for="saturday"><?% gettext('Saturday') %?></label> + <input type="checkbox" name="sunday" value="1" id="sunday" <?% IF epgsearch.sunday %?>checked="checked"<?% END %?> /><label for="sunday"><?% gettext('Sunday') %?></label> + </div> + </td> + </tr> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label" valign="top"><h5><?% gettext('Use Blacklists:') %?></h5></td> + <td class="col_value"> + <select onchange="javascript:changedUseBlacklists(this)" id="use_blacklists" name="use_blacklists"> + <option value="0" <?% IF epgsearch.use_blacklists == 0 %?> selected="selected"<?% END %?>><?% gettext('no') %?></option> + <option value="1" <?% IF epgsearch.use_blacklists == 1 %?> selected="selected"<?% END %?>><?% gettext('selection') %?></option> + <option value="2" <?% IF epgsearch.use_blacklists == 2 %?> selected="selected"<?% END %?>><?% gettext('all') %?></option> + </select> + <div id="select_blacklists"> + <select size="5" multiple="multiple" name="sel_blacklists"> + <?% FOREACH bl = blacklists %?> + <option value="<?% bl.id %?>" <?% IF bl.sel %?>selected="selected"<?% END %?>><?% bl.pattern | html %?></option> + <?% END %?> + </select> + </div> + </td> + </tr> +<?% IF epgs_settings.ShowFavoritesMenu %?> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label"><h5><?% gettext('Use in Favorites Menu:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_for_fav" value="1" <?% IF epgsearch.use_for_fav %?>checked="checked"<?% END %?> /> + </td> + </tr> +<?% END %?> + <tr class="<?% tr_class %?>"> + <?% tr_class = (tr_class == "row_odd" ? "row_even" : "row_odd") %?> + <td class="col_label"><h5><?% gettext('Use as Search Timer:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="has_action" value="1" <?% IF epgsearch.has_action %?>checked="checked"<?% END %?> onclick="javascript:changedHasAction(this)" id="has_action" /> + <span id="set_action"> + <select onchange="javascript:changedAction(this)" id="select_action" name="action"> + <option value="0" <?% IF epgsearch.action == 0 %?>selected="selected"<?% END %?>><?% gettext('record') %?></option> + <option value="1" <?% IF epgsearch.action == 1 %?>selected="selected"<?% END %?>><?% gettext('announce only') %?></option> + <option value="2" <?% IF epgsearch.action == 2 %?>selected="selected"<?% END %?>><?% gettext('switch only') %?></option> + </select> + </span> + </td> + </tr> + </table> + + <div id="action_record_settings"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="heading"> + <td colspan="2"><h2><?% gettext('Settings for action "record"') %?></h2></td> + </tr> + <tr class="row_odd"> + <td class="col_label"><h5><?% gettext('Series Recording:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="is_series" value="1" id="is_series" <?% IF epgsearch.is_series %?>checked="checked"<?% END %?> /> + </td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Directory:') %?></h5></td> + <td class="col_value"> + <input type="text" name="directory" value="<?% epgsearch.directory %?>" size="40" /> + </td> + </tr> + <tr class="row_odd"> + <td class="col_label"><h5><?% gettext('Delete Recordings After ... Days:') %?></h5></td> + <td class="col_value"> + <input type="text" name="delete_after" value="<?% epgsearch.delete_after %?>" size="3" /> + <h5><?% gettext('Keep ... Recordings:') %?></h5> + <input type="text" name="keep_recordings" value="<?% epgsearch.keep_recordings %?>" size="3" /> + </td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Pause, when ... recordings exist:') %?></h5></td> + <td class="col_value"> + <input type="text" name="pause" value="<?% epgsearch.pause %?>" size="3" /> + </td> + </tr> + <tr class="row_odd"> + <td class="col_label" valign="top"><h5><?% gettext('Avoid Repeats:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="avoid_repeats" value="1" <?% IF epgsearch.avoid_repeats %?>checked="checked"<?% END %?> onclick="javascript:changedAvoidRepeats(this)" id="avoid_repeats" /> + <div id="avoid_repeats_settings"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="col_label"><h5><?% gettext('Allowed Repeats:') %?></h5></td> + <td class="col_value"> + <input type="text" name="allowed_repeats" value="<?% epgsearch.allowed_repeats %?>" size="3" id="allowed_repeats"/> + <h5><?% gettext('Only Repeats Within ... Days:') %?></h5> + <input type="text" name="repeats_in_days" value="<?% epgsearch.repeats_in_days %?>" size="3" /> + </td> + </tr> + <tr> + <td class="col_label" valign="top"><h5><?% gettext('Compare:') %?></h5></td> + <td class="col_value"> + <div> + <input type="checkbox" name="comp_title" value="1" id="comp_title" <?% IF epgsearch.comp_title %?>checked="checked"<?% END %?> /><label for="comp_title"><?% gettext('Title') %?></label> + <input type="checkbox" name="comp_subtitle" value="1" id="comp_subtitle" <?% IF epgsearch.comp_subtitle %?>checked="checked"<?% END %?> /><label for="comp_subtitle"><?% gettext('Subtitle') %?></label> + <input type="checkbox" name="comp_descr" value="1" id="comp_descr" <?% IF epgsearch.comp_descr %?>checked="checked"<?% END %?> /><label for="comp_descr"><?% gettext('Description') %?></label> + </div> + <div> + <?% FOREACH ext = extepg %?> + <span> + <?% fullid = "comp_extepg_${ext.id}" %?> + <input type="checkbox" name="<?% fullid %?>" value="1" id="<?% fullid %?>" <?% IF epgsearch.$fullid %?>checked="checked"<?% END %?> /><label for="<?% fullid %?>"><?% ext.title %?></label> + </span> + <?% END %?> + </div> + </td> + </tr> + </table> + </div> + </td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Priority:') %?></h5></td> + <td class="col_value"> + <input type="text" name="prio" value="<?% epgsearch.prio %?>" size="2" maxlength="2" /> + </td> + </tr> + <tr class="row_odd"> + <td class="col_label"><h5><?% gettext('Lifetime:') %?></h5></td> + <td class="col_value"> + <input type="text" name="lft" value="<?% epgsearch.lft %?>" size="2" maxlength="2" /> + </td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('Time Margin at Start:') %?></h5></td> + <td class="col_value"> + <input type="text" name="bstart" value="<?% epgsearch.bstart %?>" size="2" maxlength="2" /> <?% gettext('minutes') %?> + </td> + </tr> + <tr class="row_odd"> + <td class="col_label"><h5><?% gettext('Time Margin at Stop:') %?></h5></td> + <td class="col_value"> + <input type="text" name="bstop" value="<?% epgsearch.bstop %?>" size="2" maxlength="2" /> <?% gettext('minutes') %?> + </td> + </tr> + <tr class="row_even"> + <td class="col_label"><h5><?% gettext('VPS:') %?></h5></td> + <td class="col_value"> + <input type="checkbox" name="use_vps" value="1" id="use_vps" <?% IF epgsearch.use_vps %?>checked="checked"<?% END %?> /> + </td> + </tr> + </table> + </div> + + <div id="action_switch_settings"> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> + <tr class="heading"> + <td colspan="2"><h2><?% gettext('Settings for action "switch only"') %?></h2></td> + </tr> + <tr class="row_odd"> + <td class="col_label"><h5><?% gettext('Switch ... Minutes Before Start:') %?></h5></td> + <td class="col_value"> + <input type="text" name="switch_before" value="<?% epgsearch.switch_before %?>" size="2" maxlength="2" /> <?% gettext('minutes') %?> + </td> + </tr> + </table> + </div> + </div> + + <table width="100%" border="0" cellspacing="0" cellpadding="0" id="buttons"> + <tr> + <!-- + <td align="left"> + <input type="submit" class="submit" name="template" value="<?% gettext('Save as template') %?>" /> + </td> + --> + <td align="right"> + <input type="submit" class="submit" name="save" value="<?% gettext('Save') %?>" onclick="return checkSearchPattern();" /> + <input type="submit" class="submit" name="single_test" value="<?% gettext('Run') %?>" onclick="return checkSearchPattern();" /> + <input type="submit" class="submit" name="exit" value="<?% gettext('Cancel') %?>" /> + </td> + </tr> + </table> + <input type="hidden" name="aktion" value="epgsearch_aktion" /> + <?% IF do_edit %?> + <input type="hidden" name="id" value="<?% epgsearch.id %?>" /> + <?% END %?> + <input type="hidden" name="unused" value="<?% epgsearch.unused %?>" /> + </form> +</body> + +</html> diff --git a/template/default/error.html b/template/default/error.html index 6e45956..f704759 100644 --- a/template/default/error.html +++ b/template/default/error.html @@ -13,9 +13,7 @@ <body id="error"> <div align="center"> - <img src="bilder/sauerei.gif" height="230" width="177" border="0" alt="" /> - <br/> - <h2><?% error %?></h2> + <div class="error"><?% error %?></div> </div> </body> diff --git a/template/default/help_at_timer_list.html b/template/default/help_at_timer_list.html index 129d286..ebbd880 100644 --- a/template/default/help_at_timer_list.html +++ b/template/default/help_at_timer_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/help_at_timer_new.html b/template/default/help_at_timer_new.html index 794c9d5..6e1d88c 100644 --- a/template/default/help_at_timer_new.html +++ b/template/default/help_at_timer_new.html @@ -5,7 +5,7 @@ * the HISTORY of macfly's patch --> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -42,7 +42,7 @@ <dt><?% gettext('Ends Before:') %?></dt> <dd><?% gettext('A broadcast must end before the time entered here to match. The first text field is for "hour", the second for "minute".') %?></dd> <dt><?% gettext('Override Start/Stop Margins:') %?></dt> - <dd><?% gettext('Set this option to "yes" if all timers programed by this AutoTimer should have individual start/stop margins and enter the values in the next two text boxes.') %?> + <dd><?% gettext('Set this option to "yes" if all timers programed by this AutoTimer should have individual start/stop margins and enter the values in the next two text boxes.') %?></dd> <dt><?% gettext('Time Margin at Start:') %?></dt> <dd><?% gettext('The number of minutes VDRAdmin-AM subtracts from the broadcasts start time found in the EPG.') %?></dd> <dt><?% gettext('Time Margin at Stop:') %?></dt> diff --git a/template/default/help_config.html b/template/default/help_config.html index 675935b..5bc6163 100644 --- a/template/default/help_config.html +++ b/template/default/help_config.html @@ -2,7 +2,7 @@ <!-- This help is partly taken from the VDR man page, Copyright (c) by Klaus Schmidinger --> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -108,7 +108,7 @@ <dt><?% gettext('Mail server:') %?></dt> <dd><?% gettext('The outgoing mail server.') %?></dd> <dt><?% gettext('SMTPAuth user:') %?></dt> - <dd><?% gettext('If you need to authenticate yourself at the outgoing mail server, you have to supply the username and the password below. Leaving this field empty will disable SMTPAuth.') %?> + <dd><?% gettext('If you need to authenticate yourself at the outgoing mail server, you have to supply the username and the password below. Leaving this field empty will disable SMTPAuth.') %?></dd> <dt><?% gettext('SMTPAuth password:') %?></dt> <dd><?% gettext('The password for the SMTPAuth user.') %?></dd> <dt><?% gettext('Tooltips:') %?></dt> diff --git a/template/default/help_rec_list.html b/template/default/help_rec_list.html index ba8d0c7..b5fb008 100644 --- a/template/default/help_rec_list.html +++ b/template/default/help_rec_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/help_timer_list.html b/template/default/help_timer_list.html index 7d8e11c..08762da 100644 --- a/template/default/help_timer_list.html +++ b/template/default/help_timer_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/help_timer_new.html b/template/default/help_timer_new.html index c6c85cb..046eba9 100644 --- a/template/default/help_timer_new.html +++ b/template/default/help_timer_new.html @@ -2,7 +2,7 @@ <!-- This help is partly taken from the VDR man page, Copyright (c) by Klaus Schmidinger --> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/index.html b/template/default/index.html index a88f62b..30f0a72 100644 --- a/template/default/index.html +++ b/template/default/index.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html> <head> @@ -13,8 +13,8 @@ </head> <frameset border="0" cols="155,*" frameborder="no" framespacing="0"> - <frame name="nav" noresize src="navigation.html" /> - <frame name="main" noresize src="<?% loginpage %?>" /> + <frame name="nav" noresize="noresize" src="navigation.html" /> + <frame name="main" noresize="noresize" src="<?% loginpage %?>" /> <noframes> <body> diff --git a/template/default/library.js b/template/default/library.js index 67b36fb..bc4ccc0 100644 --- a/template/default/library.js +++ b/template/default/library.js @@ -15,15 +15,9 @@ function change(message, suffix) { if(check) window.location.href=suffix; } -function mdel_old(message) { +function mdel(but, message) { check=confirm(message); - if(check) document.FormName.submit(); -} - -function mdel(message) { - check=confirm(message); -// if(check) document.FormName.submit(); - return check; + if(check) but.form.submit(); } function callurl( url ) { diff --git a/template/default/navigation.html b/template/default/navigation.html index e6cd932..7ef88be 100644 --- a/template/default/navigation.html +++ b/template/default/navigation.html @@ -45,6 +45,11 @@ <a href="vdradmin.pl?aktion=at_timer_list" target="main"><?% gettext('AutoTimer') %?></a> </div> <?% END %?> +<?% IF features.EPGSEARCH %?> + <div class="navi" id="epgsearch_list"> + <a href="vdradmin.pl?aktion=epgsearch_list" target="main"><?% gettext('EPG Search') %?></a> + </div> +<?% END %?> <div class="navi" id="rec_list"> <a href="vdradmin.pl?aktion=rec_list" target="main"><?% gettext('Recordings') %?></a> </div> @@ -66,7 +71,7 @@ <form action="vdradmin.pl" method="get" name="FormName" target="main" class="search"> <input type="text" name="search" /><br /> - <input type="submit" name="submit" value="<?% gettext('Search') %?>" / + <input type="submit" name="submit" value="<?% gettext('Search') %?>" /> <input type="hidden" name="aktion" value="prog_summary" /> </form> </div> diff --git a/template/default/prog_list.html b/template/default/prog_list.html index b8308fe..083b15f 100644 --- a/template/default/prog_list.html +++ b/template/default/prog_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/prog_list2.html b/template/default/prog_list2.html index 0a15582..fa36f7f 100644 --- a/template/default/prog_list2.html +++ b/template/default/prog_list2.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -27,7 +27,7 @@ <td class="col_title"> <h1><?% title %?></h1> <?% gettext('starting at') %?> - <input type="text" size="5" maxlength="5" value="<?% now %?>" name="time"/> + <input type="text" size="5" maxlength="5" value="<?% now %?>" name="time"/> <?% gettext('o\'clock') %?> </td> <td class="col_navi"> @@ -36,7 +36,7 @@ <select name="days" size="1" onchange="window.open(this.options[this.selectedIndex].value,'main')"> <?% FOREACH d = days %?> <option value="<?% d.id %?>" <?% IF d.sel %?>selected="selected"<?% END %?>><?% d.name %?></option> <?% END %?> - </select> + </select> <?% IF nextdayurl %?><a href="<?% nextdayurl %?>"><img src="bilder/pfeile_nachrechts.png" border="0" alt="" /></a><?% ELSE %?><img src="bilder/pfeile_nachrechts_soft.png" border="0" alt="" /><?% END %?> <?% END %?> </td> diff --git a/template/default/prog_summary.html b/template/default/prog_summary.html index 5ace9b7..74031ed 100644 --- a/template/default/prog_summary.html +++ b/template/default/prog_summary.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="refresh" content="600; URL=vdradmin.pl?aktion=prog_summary" /> diff --git a/template/default/prog_summary2.html b/template/default/prog_summary2.html index 2532023..e572a09 100644 --- a/template/default/prog_summary2.html +++ b/template/default/prog_summary2.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="refresh" content="600; URL=vdradmin.pl?aktion=prog_summary" /> diff --git a/template/default/prog_timeline.html b/template/default/prog_timeline.html index 2fc51b8..d48d6e5 100644 --- a/template/default/prog_timeline.html +++ b/template/default/prog_timeline.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="refresh" content="600; URL=vdradmin.pl?aktion=prog_timeline" /> @@ -83,7 +83,7 @@ { if (redraw_w != GetWindowW() || redraw_h != GetWindowH()) { - Go('<?% nowurl %?>&time=<?% date.format(now_sec, '%H:%M') %?>'); + Go('<?% nowurl %?>&time=<?% date.format(now_sec, '%H:%M') %?>'); } } @@ -132,7 +132,7 @@ <?% FOREACH show = shows2.${name}; %?> - events[<?% counter %?>] = AddEvent(<?% counter %?>, <?% show.vdr_id %?>, <?% show.anchor %?>, <?% show.start %?>, <?% show.stop %?>, "<?% show.title %?>", <?% show.timer %?>, <?% show.summary ? 1 : 0 %?>); + events[<?% counter %?>] = AddEvent(<?% counter %?>, <?% show.vdr_id %?>, <?% show.anchor %?>, <?% show.start %?>, <?% show.stop %?>, "<?% show.title | html %?>", <?% show.timer %?>, <?% show.summary ? 1 : 0 %?>); <?% counter = counter + 1; END; @@ -156,7 +156,7 @@ </td> <td class="col_other"> <?% gettext('What\'s on:') %?> - <select name="Auswahl" class="submit" onChange="Go(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)" width="100"> + <select name="Auswahl" class="submit" onchange="Go(this.form.Auswahl.options[this.form.Auswahl.options.selectedIndex].value)"> <?% select_now = (now == date.format(date.now, '%H:%M')) %?> <script type="text/javascript" language="JavaScript1.2"> BuildOption("", 0, "-"); diff --git a/template/default/rec_edit.html b/template/default/rec_edit.html index cf1e6ca..bb18671 100644 --- a/template/default/rec_edit.html +++ b/template/default/rec_edit.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/rec_list.html b/template/default/rec_list.html index eb657ca..ab4905c 100644 --- a/template/default/rec_list.html +++ b/template/default/rec_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -93,15 +93,9 @@ </td> <td class="col_time <?% IF rec.sortbytime %?>selected<?% END %?>"> <span class="time"><?% rec.time %?></span> - <span class="new"> - <?% IF rec.isfolder %?> - <?% gettext('New') %?> - <?% ELSE %?> - <?% IF rec.new %?> - <?% gettext('New') %?> - <?% END %?> - <?% END %?> - </span> + <?% IF rec.isfolder || rec.new %?> + <span class="new"><?% gettext('New') %?></span> + <?% END %?> </td> <td class="col_name <?% IF rec.sortbyname %?>selected<?% END %?>"> <?% IF rec.isfolder %?> @@ -151,8 +145,9 @@ </td> <?% END %?> <td align="right"> - <input type="submit" class="submit" name="rec_delete" value="<?% gettext('Delete Selected Recordings') %?>" onclick="return mdel('<?% gettext('Delete all selected recordings?') %?>');" /> + <input type="submit" class="submit" name="rec_delete" value="<?% gettext('Delete Selected Recordings') %?>" onclick="return mdel(this, '<?% gettext('Delete all selected recordings?') %?>');" /> </td> + </tr> </table> <input type="hidden" name="aktion" value="rec_delete" /> </form> diff --git a/template/default/style.css b/template/default/style.css index 30ca69f..0bcc6ff 100644 --- a/template/default/style.css +++ b/template/default/style.css @@ -1,5 +1,17 @@ +/* ugly MSIE6/7 hacks */ +/* always show vertical scroller to avoid horizontal scrolling on some pages */ +* html#scroller { + overflow-y: scroll; +} +/* avoid too small inputs/selects */ +*+html #epgsearch_new #use_extepg_settings table, +* html #epgsearch_new #use_extepg_settings table { + width: 30%; +} +/* END OF ugly MSIE hacks */ + * { - font-family: Verdana, Arial, Geneva, Helvetica, sans-serif; + font-family: Bitstream Vera Sans, Verdana, Arial, Geneva, Helvetica, sans-serif; } #rc, @@ -45,6 +57,7 @@ select { img { border: 0; vertical-align: middle; + display: inline; } /* .submit { @@ -150,8 +163,8 @@ body.help .heading { display: table-row; } -.row_odd -.row_even, +.row_odd td, +.row_even td, .heading { height: 17px; } @@ -194,11 +207,6 @@ body.help .heading { white-space: nowrap; } -.row_odd, -.row_even { - height: 25px; -} - .col_channels { text-align: right; padding: 10px; @@ -249,6 +257,9 @@ body.help .heading { text-align: center; width: 20px; } +.heading .action { + background-color: white; +} /* Summary */ #prog_summary .group { @@ -310,6 +321,10 @@ body.help .heading { padding: 2px 2px; } +#action_record_settings, +#action_switch_settings { + margin-top: 1em; +} .newday { height: 17px; background-color: #6d96a9; @@ -331,12 +346,16 @@ body.help .heading { } #prog_list .col_buttons, #rec_list .col_buttons, +#epgsearch_list .col_buttons, #prog_summary2 .col_buttons { width: 120px; text-align: right; padding-right: 3px; white-space: nowrap; } +#prog_summary2 table.percent td { + height: 8px; +} #prog_summary2 table.percent { height: 8px; width: 80px; @@ -523,6 +542,7 @@ body.help .heading { margin-top: 0.6em; } #timer_list .blackline { + height: 1px; background-color: black; } #timer_list .color_ok { @@ -537,7 +557,7 @@ body.help .heading { #timer_list .color_inactive { background-color: #858585; } -#timer_list #prgtable { +#timer_list .prgtable { border-left-color: #000000; border-right-color: #000000; } @@ -560,6 +580,29 @@ body.help .heading { padding: 0px; } +#epgsearch_new #use_extepg_settings { + white-space: normal; + vertical-align: top; +} +#epgsearch_new #use_extepg_settings table { + padding: 0 5px 5px 0; + display: inline; + float: left; + vertical-align: top; + height: 100%; +} +#epgsearch_new #use_extepg_settings table select, +#epgsearch_new #use_extepg_settings table input { + width: 100%; +} +#epgsearch_new #avoid_repeats_settings div { + white-space: normal; +} +#epgsearch_new #avoid_repeats_settings span { + float: left; + padding-right: 1em; +} + #content { margin-top: 0.6em; } @@ -588,31 +631,6 @@ body.help .heading { #config .col_label { width: 50%; } -.tabs td { - padding: 0; - margin: 0; - background-color: transparent; - border-bottom: 2px solid #6d96a9; -} -.tab_selected a { - color: white; - margin: 1px 3px; -} -.tab_unselected a { - color: black; - margin: 1px 3px; -} -.tab_selected { - border-right: 1px solid #6d96a9; - background-color: #6d96a9; - color: white; - font-weight: bold; -} -.tab_unselected { - border-right: 1px solid #6d96a9; - background-color: white; - color: black; -} #about .col_label { width: 20%; } @@ -755,9 +773,6 @@ select.channels { #navigation input { width: 140px; } -#navigation #epgsearch_list a { - color: green; -} /* message boxes */ .warning h1 { diff --git a/template/default/timer_list.html b/template/default/timer_list.html index a251da8..a5147a4 100644 --- a/template/default/timer_list.html +++ b/template/default/timer_list.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -13,7 +13,7 @@ <script type="text/javascript" language="JavaScript1.2" src="infobox.js"></script> <?% END %?> <style type="text/css"> - #prgtable { border-left-width:1px; border-left-style:solid; border-right-width:1px; border-right-style:solid; } + .prgtable { border-left-width:1px; border-left-style:solid; border-right-width:1px; border-right-style:solid; } </style> </head> @@ -147,12 +147,12 @@ END; IF ende - pos < 2; %?> - <td class="<?% td_class %?>"><span <?% IF config.TM_TT_TIMELINE %?>onMouseOver="tip('VDR-<?% sendung.id %?>'); return true;" onMouseOut="untip(); return true;"<?% END %?>><img src="bilder/spacer.gif" width="<?% ende - pos %?>" height="20" border="0" alt="" /></span></td> + <td class="<?% td_class %?>"><span <?% IF config.TM_TT_TIMELINE %?>onmouseover="tip('VDR-<?% sendung.id %?>'); return true;" onmouseout="untip(); return true;"<?% END %?>><img src="bilder/spacer.gif" width="<?% ende - pos %?>" height="20" border="0" alt="" /></span></td> <?% ELSE; %?> - <td class="<?% td_class %?>" id="prgtable"><span <?% IF config.TM_TT_TIMELINE %?>onMouseOver="tip('VDR-<?% sendung.id %?>'); return true;" onMouseOut="untip(); return true;"<?% END %?>><img src="bilder/spacer.gif" width="<?% ende - pos - 2 %?>" height="20" border="0" alt="" /></span></td> + <td class="<?% td_class %?> prgtable"><span <?% IF config.TM_TT_TIMELINE %?>onmouseover="tip('VDR-<?% sendung.id %?>'); return true;" onmouseout="untip(); return true;"<?% END %?>><img src="bilder/spacer.gif" width="<?% ende - pos - 2 %?>" height="20" border="0" alt="" /></span></td> <?% END; @@ -311,7 +311,7 @@ <div><?% timer.stop %?></div> </td> <td class="col_name <?% IF timer.sortbyname %?>selected<?% END %?>"> - <div <?% IF config.TM_TT_LIST %?>onMouseOver="tip('VDR-<?% timer.id %?>'); return true;" onMouseOut="untip(); return true;"<?% END %?>> + <div <?% IF config.TM_TT_LIST %?>onmouseover="tip('VDR-<?% timer.id %?>'); return true;" onmouseout="untip(); return true;"<?% END %?>> <?% IF timer.recording %?><img align="middle" src="bilder/rec.gif" border="0" alt="" /> <?% END %?> <?% IF timer.infurl %?> <a href="javascript:popup('<?% timer.infurl %?>');"><?% timer.title %?></a> @@ -341,7 +341,7 @@ <?% gettext('selected timers') %?> </td> <td align="right"> - <input type="submit" class="submit" name="timer_delete" value="<?% gettext('Delete Selected Timers') %?>" onclick="return mdel('<?% gettext('Delete all selected timers?') %?>');" /> + <input type="submit" class="submit" name="timer_delete" value="<?% gettext('Delete Selected Timers') %?>" onclick="return mdel(this, '<?% gettext('Delete all selected timers?') %?>');" /> </td> </tr> </table> diff --git a/template/default/timer_new.html b/template/default/timer_new.html index e6b0cbe..3d200aa 100644 --- a/template/default/timer_new.html +++ b/template/default/timer_new.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> diff --git a/template/default/tv.html b/template/default/tv.html index 5eb2dae..8b85826 100644 --- a/template/default/tv.html +++ b/template/default/tv.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <title>VDRAdmin-AM - <?% gettext('TV') %?> (<?% host %?>)</title> @@ -67,7 +67,7 @@ </script> </head> -<body onLoad="window.focus();WebcamUpdate()" id="tv"> +<body onload="window.focus();WebcamUpdate()" id="tv"> <form action="<?% url %?>" method="get" name="liveform"> <?% UNLESS tv_only %?> <table width="100%" border="0" cellspacing="0" cellpadding="0" id="heading"> @@ -75,7 +75,7 @@ <td class="col_title"><h1><?% gettext('TV') %?></h1></td> <td class="col_other"> <h5><?% gettext('Interval:') %?></h5> - <select name="Seconds" class="submit" onChange="v_changeInterval(this.options[this.selectedIndex].value)"> + <select name="Seconds" class="submit" onchange="v_changeInterval(this.options[this.selectedIndex].value)"> <option value="0"><?% gettext('off') %?></option> <option value="1" <?% IF interval == 1 %?>selected="selected"<?% END %?>> 1 <?% gettext('sec.') %?></option> <option value="2" <?% IF interval == 2 %?>selected="selected"<?% END %?>> 2 <?% gettext('sec.') %?></option> @@ -85,14 +85,14 @@ <option value="30" <?% IF interval == 30 %?>selected="selected"<?% END %?>>30 <?% gettext('sec.') %?></option> <option value="60" <?% IF interval == 60 %?>selected="selected"<?% END %?>>60 <?% gettext('sec.') %?></option> </select> - <input type="button" class="submit" name="livebild" value='<?% gettext('G') %?>' title="<?% gettext('Grab the picture!') %?>" onClick="WebcamUpdate()" /> + <input type="button" class="submit" name="livebild" value='<?% gettext('G') %?>' title="<?% gettext('Grab the picture!') %?>" onclick="WebcamUpdate()" /> <h5><?% gettext('Size:') %?></h5> - <select name="Size" class="submit" onChange="v_changeSize(this.options[this.selectedIndex].value)"> + <select name="Size" class="submit" onchange="v_changeSize(this.options[this.selectedIndex].value)"> <option value="full" <?% IF size == 'full' %?>selected="selected"<?% END %?>>1:1</option> <option value="half" <?% IF size == 'half' %?>selected="selected"<?% END %?>>1:2</option> <option value="quarter" <?% IF size == 'quarter' %?>selected="selected"<?% END %?>>1:4</option> </select> - <input type="button" class="submit" name="livebild" value='<?% gettext('G') %?>' title="<?% gettext('Grab the picture!') %?>" onClick="WebcamUpdate()" /> + <input type="button" class="submit" name="livebild" value='<?% gettext('G') %?>' title="<?% gettext('Grab the picture!') %?>" onclick="WebcamUpdate()" /> </td> <td align="right"><?% UNLESS new_win %?>[<a class="submit" href="javascript:tv_open();"><?% gettext('Open in separate window') %?></a>] <?% END %?></td> </tr> diff --git a/template/default/vdr_cmds.html b/template/default/vdr_cmds.html index edf6365..8038d9f 100644 --- a/template/default/vdr_cmds.html +++ b/template/default/vdr_cmds.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> +<html id="scroller"> <head> <meta http-equiv="content-type" content="text/html;charset=<?% gettext('ISO-8859-1') %?>" /> @@ -62,7 +62,8 @@ </form> <?% IF show_output.size() > 0 %?> - <table width="100%" border="0" cellspacing="0" cellpadding="0" id="content" class="group"> + <br /> + <table width="100%" border="0" cellspacing="0" cellpadding="0" class="group"> <tr class="heading"> <td><h2><?% gettext('Output') %?></h2></td> </tr> diff --git a/vdradmind.pl b/vdradmind.pl index ccc1fe8..d4d99df 100755 --- a/vdradmind.pl +++ b/vdradmind.pl @@ -28,7 +28,7 @@ require 5.004; -my $VERSION = "3.4.7"; +my $VERSION = "3.5.0beta"; my $BASENAME; my $EXENAME; @@ -151,6 +151,7 @@ $CONFIG{TIMES} = "18:00, 20:00, 21:00, 22:00"; $CONFIG{TL_TOOLTIP} = 1; # +$CONFIG{AT_OFFER} = 0; $CONFIG{AT_FUNC} = 1; $CONFIG{AT_TIMEOUT} = 120; $CONFIG{AT_LIFETIME} = 99; @@ -158,18 +159,21 @@ $CONFIG{AT_PRIORITY} = 99; $CONFIG{AT_MARGIN_BEGIN} = 10; $CONFIG{AT_MARGIN_END} = 10; $CONFIG{AT_TOOLTIP} = 1; -$CONFIG{AT_SORTBY}; -$CONFIG{AT_DESC}; +$CONFIG{AT_SORTBY} = "pattern"; +$CONFIG{AT_DESC} = 0; # +$CONFIG{ES_SORTBY} = "pattern"; +$CONFIG{ES_DESC} = 0; + $CONFIG{TM_LIFETIME} = 99; $CONFIG{TM_PRIORITY} = 99; $CONFIG{TM_MARGIN_BEGIN} = 10; $CONFIG{TM_MARGIN_END} = 10; $CONFIG{TM_TT_TIMELINE} = 1; $CONFIG{TM_TT_LIST} = 1; -$CONFIG{TM_SORTBY}; -$CONFIG{TM_DESC}; +$CONFIG{TM_SORTBY} = "day"; +$CONFIG{TM_DESC} = 0; #$CONFIG{TM_ADD_SUMMARY} = 0; # @@ -214,8 +218,8 @@ $CONFIG{TV_INTERVAL} = "5"; $CONFIG{TV_SIZE} = "half"; $CONFIG{REC_MIMETYPE} = "video/x-mpegurl"; $CONFIG{REC_EXT} = "m3u"; -$CONFIG{REC_SORTBY}; -$CONFIG{REC_DESC}; +$CONFIG{REC_SORTBY} = "name"; +$CONFIG{REC_DESC} = 0; # $CONFIG{PS_VIEW} = "ext"; @@ -228,10 +232,12 @@ my %FEATURES; $FEATURES{STREAMDEV} = 0; $FEATURES{REC_RENAME} = 0; $FEATURES{AUTOTIMER} = 0; +my %EPGSEARCH_SETTINGS; my $SERVERVERSION = "vdradmind/$VERSION"; my $VDRVERSION = 0; # Numeric VDR version, e.g. 10344 my $VDRVERSION_HR; # Human readable VDR version, e.g. 1.3.44 +my $EPGSEARCH_VERSION = 0; # Numeric epgsearch plugin version, e.g. 918 my %ERROR_MESSAGE; my ($TEMPLATEDIR, $CONFFILE, $LOGFILE, $PIDFILE, $AT_FILENAME, $DONE_FILENAME, $BL_FILENAME, $ETCDIR, $USER_CSS); @@ -435,7 +441,7 @@ my ($Socket) = Reuse => 1 ); die("can't start server: $!\n") if (!$Socket); -$Socket->timeout($CONFIG{AT_TIMEOUT} * 60) if ($CONFIG{AT_FUNC}); +$Socket->timeout($CONFIG{AT_TIMEOUT} * 60) if ($CONFIG{AT_FUNC} && $FEATURES{AUTOTIMER}); $CONFIG{CACHE_LASTUPDATE} = 0; $CONFIG{CACHE_REC_LASTUPDATE} = 0; @@ -443,11 +449,11 @@ $CONFIG{CACHE_REC_LASTUPDATE} = 0; # Mainloop ## my ($Client, $MyURL, $Referer, $Request, $Query, $Guest); -my @GUEST_USER = qw(prog_detail prog_list prog_list2 prog_timeline timer_list at_timer_list +my @GUEST_USER = qw(prog_detail prog_list prog_list2 prog_timeline timer_list at_timer_list epgsearch_list prog_summary rec_list rec_detail show_top toolbar show_help about); my @TRUSTED_USER = ( - @GUEST_USER, qw(at_timer_edit at_timer_new at_timer_save at_timer_test - at_timer_delete timer_new_form timer_add timer_delete timer_toggle rec_delete rec_rename rec_edit + @GUEST_USER, qw(at_timer_edit at_timer_new at_timer_save at_timer_test at_timer_delete + epgsearch_edit epgsearch_save epgsearch_delete epgsearch_toggle timer_new_form timer_add timer_delete timer_toggle rec_delete rec_rename rec_edit config prog_switch rc_show rc_hitk grab_picture at_timer_toggle tv_show tv_switch live_stream rec_stream rec_play rec_cut force_update vdr_cmds) ); @@ -534,6 +540,13 @@ while (true) { } elsif ($real_aktion eq "timer_aktion") { $real_aktion = "timer_delete" if ($q->param("timer_delete")); $real_aktion = "timer_toggle" if ($q->param("timer_active") || $q->param("timer_inactive")); + } elsif ($real_aktion eq "epgsearch_aktion") { + $real_aktion = "epgsearch_save"; + $real_aktion = "epgsearch_delete" if ($q->param("delete")); + $real_aktion = "epgsearch_edit" if ($q->param("single_test")); + $real_aktion = "epgsearch_list" if ($q->param("execute")); + $real_aktion = "epgsearch_list" if ($q->param("favorites")); + $real_aktion = "epgsearch_list" if ($q->param("exit")); } my @ALLOWED_FUNCTIONS; @@ -665,7 +678,8 @@ sub ChanTree { service_id => $service_id, nid => $nid, tid => $tid, - rid => $rid + rid => $rid, + uniq_id => $source . "-" . $nid . "-" . ($nid || $tid ? $tid : $frequency) . "-" . $service_id } ); } @@ -721,6 +735,24 @@ sub get_channelid_from_vdrid { } } +sub get_name_from_uniqid { + my $uniq_id = shift; + if ($uniq_id) { + + # Kanalliste nach identischer vdr_id durchsuchen + my @C = grep($_->{uniq_id} eq $uniq_id, @CHAN); +# foreach (@CHAN) { +# printf("(%s) ($uniq_id)\n", $_->{uniq_id}); +# return $_->{name} if ($_->{uniq_id} eq $uniq_id); +# } + + # Es darf nach Spec nur eine Übereinstimmung geben + if (scalar(@C) == 1) { + return $C[0]->{name}; + } + } +} + sub get_name_from_vdrid { my $vdr_id = shift; if ($vdr_id) { @@ -1219,7 +1251,7 @@ sub BlackList_Read { } sub AutoTimer { - return if (!$CONFIG{AT_FUNC}); + return if (!$CONFIG{AT_FUNC} || !$FEATURES{AUTOTIMER}); Log(LOG_AT, "Auto Timer: Scanning for events..."); my ($search, $start, $stop) = @_; my @at_matches; @@ -1684,8 +1716,10 @@ sub AT_ProgTimer { Log(LOG_FATALERROR, "Failed to send email! Please contact the author."); } } elsif ($CONFIG{AT_SENDMAIL} == 1) { - print("Missing Perl module Net::SMTP.\nAutoTimer email notification disabled.\n"); - Log(LOG_FATALERROR, "Missing Perl module Net::SMTP. AutoTimer email notification disabled."); + if (!$can_use_net_smtp) { + print("Missing Perl module Net::SMTP.\nAutoTimer email notification disabled.\n"); + Log(LOG_FATALERROR, "Missing Perl module Net::SMTP. AutoTimer email notification disabled."); + } if ($CONFIG{MAIL_AUTH_USER} ne "" && !$can_use_smtpauth) { print("Missing Perl module Authen::SASL and/or Digest::HMAC_MD5.\nAutoTimer email notification disabled.\n"); Log(LOG_FATALERROR, "Missing Perl module Authen::SASL and/or Digest::HMAC_MD5. AutoTimer email notification disabled."); @@ -1804,6 +1838,7 @@ sub CheckTimers { # check for each event how probable it is matching the old timer if (scalar(@eventlist) > 0) { my $origlen = ($timer->{stop} - $timer->{bstop} * 60) - ($timer->{start} + $timer->{bstart} * 60); + next unless($origlen); my $maxwight = 0; $event = $eventlist[0]; @@ -1861,6 +1896,621 @@ sub CheckTimers { } ############################################################################# +# epgsearch +############################################################################# +sub epgsearch_list { + return if (UptoDate()); + + if ($EPGSEARCH_VERSION < 918) { + HTMLError("Your version of epgsearch plugin is too old! You need at least v0.9.18!"); + return + } + + $CONFIG{ES_DESC} = ($q->param("desc") ? 1 : 0) if (defined($q->param("desc"))); + $CONFIG{ES_SORTBY} = $q->param("sortby") if (defined($q->param("sortby"))); + $CONFIG{ES_SORTBY} = "pattern" if (!$CONFIG{ES_SORTBY}); + + my @matches; + my $do_test = $q->param("execute"); + + if ($do_test) { + my $id = $q->param("id"); + unless (defined $id) { + for ($q->param) { + if (/xxxx_(.*)/) { + $id .= "|" if (defined $id); + $id .= $1; + } + } + } + + if (defined $id) { + @matches = EpgSearchQuery("plug epgsearch qrys $id"); + } + } else { + $do_test = $q->param("favorites"); + @matches = EpgSearchQuery("plug epgsearch qryf") if ($do_test); + } + + my @searches; + for (ParseEpgSearch(undef)) { + $_->{modurl} = $MyURL . "?aktion=epgsearch_edit&id=" . $_->{id}; + $_->{delurl} = $MyURL . "?aktion=epgsearch_delete&id=" . $_->{id}; + $_->{findurl} = $MyURL . "?aktion=epgsearch_aktion&execute=1&id=" . $_->{id}; + $_->{toggleurl} = sprintf("%s?aktion=epgsearch_toggle&active=%s&id=%s", $MyURL, $_->{has_action}, $_->{id}); + push(@searches, $_); + } + + if ($CONFIG{ES_SORTBY} eq "active") { + if ($CONFIG{ES_DESC}) { + @searches = sort({ $b->{has_action} <=> $a->{has_action} } @searches); + } else { + @searches = sort({ $a->{has_action} <=> $b->{has_action} } @searches); + } + } elsif ($CONFIG{ES_SORTBY} eq "action") { + if ($CONFIG{ES_DESC}) { + @searches = sort({ lc($b->{action_text}) cmp lc($a->{action_text}) } @searches); + } else { + @searches = sort({ lc($a->{action_text}) cmp lc($b->{action_text}) } @searches); + } + } elsif ($CONFIG{ES_SORTBY} eq "pattern") { + if ($CONFIG{ES_DESC}) { + @searches = sort({ lc($b->{pattern}) cmp lc($a->{pattern}) } @searches); + } else { + @searches = sort({ lc($a->{pattern}) cmp lc($b->{pattern}) } @searches); + } + } + + my $toggle_desc = ($CONFIG{ES_DESC} ? 0 : 1); + + my $vars = { usercss => $UserCSS, + url => $MyURL, + sortbypatternurl => "$MyURL?aktion=epgsearch_list&sortby=pattern&desc=" . (($CONFIG{ES_SORTBY} eq "pattern") ? $toggle_desc : $CONFIG{ES_DESC}), + sortbyactiveurl => "$MyURL?aktion=epgsearch_list&sortby=active&desc=" . (($CONFIG{ES_SORTBY} eq "active") ? $toggle_desc : $CONFIG{ES_DESC}), + sortbyactionurl => "$MyURL?aktion=epgsearch_list&sortby=action&desc=" . (($CONFIG{ES_SORTBY} eq "action") ? $toggle_desc : $CONFIG{ES_DESC}), + desc => $CONFIG{ES_DESC} ? "desc" : "asc", + sortbypattern => ($CONFIG{ES_SORTBY} eq "pattern") ? 1 : 0, + sortbyactive => ($CONFIG{ES_SORTBY} eq "active") ? 1 : 0, + sortbyaction => ($CONFIG{ES_SORTBY} eq "action") ? 1 : 0, + searches => \@searches, + did_search => $do_test, + title => $do_test ? ($q->param("favorites") ? "Your favorites" : "Search results") : undef, + matches => (@matches ? \@matches : undef) + }; + return showTemplate("epgsearch_list.html", $vars); +} + +sub epgsearch_edit { + my $id = $q->param("id"); + my $do_test = $q->param("single_test"); + + my $search; + my @blacklists; + my @ch_groups; + my @matches; + my @sel_bl; + + if ($do_test) { + # test search + $search = $q->Vars(); + @sel_bl = $q->param("sel_blacklists"); + @matches = EpgSearchQuery("plug epgsearch qrys 0:" . epgsearch_Param2Line()); + } elsif (defined $id) { + # edit search + my @temp = ParseEpgSearch($id); + $search = pop @temp; + @sel_bl = split(/\|/, $search->{sel_blacklists}); + } else { + # new search + $search->{use_title} = 1; + $search->{use_subtitle} = 1; + $search->{use_descr} = 1; + $search->{comp_title} = 1; + $search->{comp_subtitle} = 1; + $search->{comp_descr} = 1; + } + + if (@sel_bl) { + for my $bl (ParseEpgSearchBlacklists(undef)) { + for (@sel_bl) { + if ($bl->{id} == $_) { + $bl->{sel} = 1; + last; + } + } + push(@blacklists, $bl); + } + } else { + @blacklists = ParseEpgSearchBlacklists(undef); + } + + if ($search->{use_channels} == 2) { + for my $cg (ParseEpgSearchChanGroups(undef)) { + $cg->{sel} = 1 if ($cg->{id} == $search->{channels}) ; + push(@ch_groups, $cg); + } + } else { + @ch_groups = ParseEpgSearchChanGroups(undef); + } + + my @extepg = ParseEpgSearchExtEpgInfos($search->{extepg_infos}); + if ($search->{comp_extepg_info}) { + foreach (@extepg) { + if ($search->{comp_extepg_info} & (1 << ($_->{id} - 1))) { + $search->{"comp_extepg_" . $_->{id}} = 1; + } + } + } + + epgsearch_getSettings(); + + my $vars = { usercss => $UserCSS, + url => $MyURL, + epgsearch => $search, + channels => \@CHAN, + blacklists => \@blacklists, + ch_groups => \@ch_groups, + did_search => $do_test, + matches => (@matches ? \@matches : undef), + do_edit => (defined $id ? "1" : undef), + extepg => \@extepg, + epgs_settings => \%EPGSEARCH_SETTINGS + }; + return showTemplate("epgsearch_new.html", $vars); +} + +sub ParseEpgSearch { + my $id = shift; + + my @temp; + for (SendCMD("plug epgsearch lsts $id")) { + chomp; + next if (length($_) == 0); + last if (/^no searches defined$/); + + push(@temp, ExtractEpgSearchConf($_)); + } + + return @temp; +} + +sub ParseEpgSearchBlacklists { + my $id = shift; + + my @temp; + for (SendCMD("plug epgsearch lstb $id")) { + chomp; + next if (length($_) == 0); + last if (/^no blacklists defined$/); + + push(@temp, ExtractEpgSearchConf($_)); + } + + return @temp; +} + +sub ParseEpgSearchChanGroups { + my $id = shift; + + my @temp; + for (SendCMD("plug epgsearch lstc $id")) { + chomp; + next if (length($_) == 0); + last if (/^no channel groups defined$/); + + my ($name, $channels) = split(/\|/, $_, 2); + push(@temp, { + id => $name, + name => $name, + channels => $channels + } + ); + } + + return @temp; +} + +sub ParseEpgSearchExtEpgInfos { + my @temp = split(/\|/, shift); + my %sel; + foreach (@temp) { + my ($id, $val) = split(/#/); + $val =~ s/\!\^colon\^\!/\:/g; + $val =~ s/\!\^pipe\^\!/\|/g; + $sel{$id} = $val; + } + + my @return; + for (SendCMD("plug epgsearch lste")) { + chomp; + next if (length($_) == 0); + last if (/^no EPG categories defined$/); + + my ($id, $name, $title, $values, $searchmode) = split(/\|/, $_, 5); + my @val; + my $selected; + foreach (split(/, /, $values)) { + my $value = $_; + my @res = grep(/^$value$/, split(/, /, $sel{$id})); + $selected = 1 if (@res); + push(@val, { name => $value, + sel => (@res) ? 1 : undef + } + ); + } + push(@return, { + id => $id, + name => $name, + title => $title, + data => \@val, + searchmode => $searchmode, + data_text => $selected ? undef : $sel{$id} + } + ); + } + + return @return; +} + +sub EpgSearchQuery { + my $cmd = shift; + my $ref = shift; + return unless($cmd); + +#print("EpgSearchQuery: $cmd\n"); + my @result; + for (SendCMD($cmd)) { + chomp; + next if (length($_) == 0); + last if(/^no results$/); +# Suchtimer-ID : Event-ID : Title : Subtitle : Event-Begin : Event-Ende : +# Kanalnummer : Timer-Start : Timer-Ende : Timer-File : hat/bekommt Timer + my ($es_id, $event_id, $title, $subtitle, $estart, $estop, $chan, $tstart, $tstop, $tdir, $has_timer) = split(/:/); + if ($title) { + $title =~ s/\|/:/g; + $title =~ s/\!\^pipe\^\!/\|/g; + } + if ($subtitle) { + $subtitle =~ s/\|/:/g; + $subtitle =~ s/\!\^pipe\^\!/\|/g; + } + if ($tdir) { + $tdir =~ s/\|/:/g; + $tdir =~ s/\!\^pipe\^\!/\|/g; + } + + push(@result, { title => $title, + subtitle => $subtitle, + date => my_strftime("%A, %x", $estart), + start => my_strftime("%H:%M", $estart), + stop => my_strftime("%H:%M", $estop), + channel => get_name_from_uniqid($chan), + folder => $has_timer ? $tdir : gettext("--- no timer ---"), + infurl => $event_id ? sprintf("%s?aktion=prog_detail&epg_id=%s&channel_id=%s&referer=%s", $MyURL, $event_id, $chan, $ref) : undef, + proglink => sprintf("%s?aktion=prog_list&channel_id=%s", $MyURL, $chan) + } + ); + } + return @result; +} + +sub ExtractEpgSearchConf { + my $timer; + ($timer->{id}, # 1 - unique search timer id + $timer->{pattern}, # 2 - the search term + $timer->{use_time}, # 3 - use time? 0/1 + $timer->{time_start}, # 4 - start time in HHMM + $timer->{time_stop}, # 5 - stop time in HHMM + $timer->{use_channel}, # 6 - use channel? 0 = no, 1 = Intervall, 2 = Channel group, 3 = FTA only + $timer->{channels}, # 7 - if 'use channel' = 1 then channel id[|channel id] in vdr format, + # one entry or min/max entry separated with |, if 'use channel' = 2 + # then the channel group name + $timer->{matchcase}, # 8 - match case? 0/1 + $timer->{mode}, # 9 - search mode: + # 0 - the whole term must appear as substring + # 1 - all single terms (delimiters are blank,',', ';', '|' or '~') + # must exist as substrings. + # 2 - at least one term (delimiters are blank, ',', ';', '|' or '~') + # must exist as substring. + # 3 - matches exactly + # 4 - regular expression + $timer->{use_title}, #10 - use title? 0/1 + $timer->{use_subtitle}, #11 - use subtitle? 0/1 + $timer->{use_descr}, #12 - use description? 0/1 + $timer->{use_duration}, #13 - use duration? 0/1 + $timer->{min_duration}, #14 - min duration in minutes + $timer->{max_duration}, #15 - max duration in minutes + $timer->{has_action}, #16 - use as search timer? 0/1 + $timer->{use_days}, #17 - use day of week? 0/1 + $timer->{which_days}, #18 - day of week (0 = sunday, 1 = monday...) + $timer->{is_series}, #19 - use series recording? 0/1 + $timer->{directory}, #20 - directory for recording + $timer->{prio}, #21 - priority of recording + $timer->{lft}, #22 - lifetime of recording + $timer->{bstart}, #23 - time margin for start in minutes + $timer->{bstop}, #24 - time margin for stop in minutes + $timer->{use_vps}, #25 - use VPS? 0/1 + $timer->{action}, #26 - action: + # 0 = create a timer + # 1 = announce only via OSD (no timer) + # 2 = switch only (no timer) + $timer->{use_extepg}, #27 - use extended EPG info? 0/1 #TODO + $timer->{extepg_infos}, #28 - extended EPG info values. This entry has the following format #TODO + # (delimiter is '|' for each category, '#' separates id and value): + # 1 - the id of the extended EPG info category as specified in + # epgsearchcats.conf + # 2 - the value of the extended EPG info category + # (a ':' will be tranlated to "!^colon^!", e.g. in "16:9") + $timer->{avoid_repeats}, #29 - avoid repeats? 0/1 + $timer->{allowed_repeats}, #30 - allowed repeats + $timer->{comp_title}, #31 - compare title when testing for a repeat? 0/1 + $timer->{comp_subtitle}, #32 - compare subtitle when testing for a repeat? 0/1 + $timer->{comp_descr}, #33 - compare description when testing for a repeat? 0/1 + $timer->{comp_extepg_info}, #34 - compare extended EPG info when testing for a repeat? #TODO + # This entry is a bit field of the category ids. + $timer->{repeats_in_days}, #35 - accepts repeats only within x days + $timer->{delete_after}, #36 - delete a recording automatically after x days + $timer->{keep_recordings}, #37 - but keep this number of recordings anyway + $timer->{switch_before}, #38 - minutes before switch (if action = 2) + $timer->{pause}, #39 - pause if x recordings already exist + $timer->{use_blacklists}, #40 - blacklist usage mode (0 none, 1 selection, 2 all) + $timer->{sel_blacklists}, #41 - selected blacklist IDs separated with '|' + $timer->{fuzzy_tolerance}, #42 - fuzzy tolerance value for fuzzy searching + $timer->{use_for_fav}, #43 - use this search in favorites menu (0 no, 1 yes) + $timer->{unused}) = split(/:/, $_); + + #format selected fields + $timer->{time_start} =~ s/(\d\d)(\d\d)/\1:\2/ if($timer->{time_start}); + $timer->{time_stop} =~ s/(\d\d)(\d\d)/\1:\2/ if($timer->{time_stop}); + $timer->{min_duration} =~ s/(\d\d)(\d\d)/\1:\2/ if($timer->{min_duration}); + $timer->{max_duration} =~ s/(\d\d)(\d\d)/\1:\2/ if($timer->{max_duration}); + + if ($timer->{has_action}) { + if ($timer->{action} == 0) { + $timer->{action_text} = gettext("record"); + } elsif ($timer->{action} == 1) { + $timer->{action_text} = gettext("announce only"); + } elsif ($timer->{action} == 2) { + $timer->{action_text} = gettext("switch only"); + } else { + $timer->{action_text} = gettext("unknown"); + } + } else { + $timer->{action_text} = gettext("none"); + } + + if ($timer->{channels} && $timer->{use_channel} == 1) { + ($timer->{channel_from}, $timer->{channel_to}) = split(/\|/, $timer->{channels}, 2); + $timer->{channel_to} = $timer->{channel_from} unless ($timer->{channel_to}); + $timer->{channel_from_name} = get_name_from_uniqid($timer->{channel_from}); + $timer->{channel_to_name} = get_name_from_uniqid($timer->{channel_to}); + #TODO: links to channels + } + + if ($timer->{use_days}) { + if ($timer->{which_days} >= 0) { + $timer->{sunday} = 1 if ($timer->{which_days} == 0); + $timer->{monday} = 1 if ($timer->{which_days} == 1); + $timer->{tuesday} = 1 if ($timer->{which_days} == 2); + $timer->{wednesday} = 1 if ($timer->{which_days} == 3); + $timer->{thursday} = 1 if ($timer->{which_days} == 4); + $timer->{friday} = 1 if ($timer->{which_days} == 5); + $timer->{saturday} = 1 if ($timer->{which_days} == 6); + } else { + my $which_days = -$timer->{which_days}; + $timer->{sunday} = 1 if ($which_days & 1); + $timer->{monday} = 1 if ($which_days & 2); + $timer->{tuesday} = 1 if ($which_days & 4); + $timer->{wednesday} = 1 if ($which_days & 8); + $timer->{thursday} = 1 if ($which_days & 16); + $timer->{friday} = 1 if ($which_days & 32); + $timer->{saturday} = 1 if ($which_days & 64); + } + } + + if ($timer->{pattern}) { + $timer->{pattern} =~ s/\|/:/g; + $timer->{pattern} =~ s/\!\^pipe\^\!/\|/g; + } + + if ($timer->{directory}) { + $timer->{directory} =~ s/\|/:/g; + $timer->{directory} =~ s/\!\^pipe\^\!/\|/g; + } + return $timer; +} + +sub validTime { + my $t = shift; + return unless ($t); + my ($h, $m) = split(/:/, $t); + $h = "0" . $h if (length($h) == 1); + if (length($h) > 2) { #TODO: $m defined? + $m = substr($h, -2); + $h = substr($h, 0, -2); + } + return sprintf("%02d%02d", $h, $m); +} + +sub epgsearch_Param2Line { + my $weekdays_bits = 0; + my $weekdays = 0; + my $had_weekday = 0; + + if ($q->param("use_days")) { + if ($q->param("sunday")) { + $had_weekday++; + $weekdays_bits |= 1; + $weekdays = 0; + } + if ($q->param("monday")) { + $had_weekday++; + $weekdays_bits |= 2; + $weekdays = 1; + } + if ($q->param("tuesday")) { + $had_weekday++; + $weekdays_bits |= 4; + $weekdays = 2; + } + if ($q->param("wednesday")) { + $had_weekday++; + $weekdays_bits |= 8; + $weekdays = 3; + } + if ($q->param("thursday")) { + $had_weekday++; + $weekdays_bits |= 16; + $weekdays = 4; + } + if ($q->param("friday")) { + $had_weekday++; + $weekdays_bits |= 32; + $weekdays = 5; + } + if ($q->param("saturday")) { + $had_weekday++; + $weekdays_bits |= 64; + $weekdays = 6; + } + $weekdays_bits = - $weekdays_bits; + } + + my $time_start = validTime($q->param("time_start")); + my $time_stop = validTime($q->param("time_stop")); + my $min_duration = validTime($q->param("min_duration")); + my $max_duration = validTime($q->param("max_duration")); + + my $use_channel = $q->param("use_channel"); + my $channels; + if ($use_channel == 1) { + $channels = $q->param("channel_from") . "|" . $q->param("channel_to"); + } elsif ($use_channel == 2) { + $channels = $q->param("channel_group"); + } + + my $sel_blacklists; + for ($q->param("sel_blacklists")) { + $sel_blacklists .= "|" if (defined($sel_blacklists)); + $sel_blacklists .= $_; + } + + my $pattern = $q->param("pattern"); + if ($pattern) { + $pattern =~ s/\|/\!\^pipe\^\!/g; + $pattern =~ s/:/\|/g; + } + + my $directory = $q->param("directory"); + if ($directory) { + $directory =~ s/\|/\!\^pipe\^\!/g; + $directory =~ s/:/\|/g; + } + + my $extepg_info; + for ($q->param) { + if (/extepg_([0-9]+)_data_text/) { + my $e_id = $1; + $extepg_info .= "|" if ($extepg_info); + my $data = join(", ", $q->param("extepg_" . $e_id . "_data")); + $data =~ s/:/\!\^colon\^\!/g; + $data =~ s/\|/\!\^pipe\^\!/g; + $extepg_info .= sprintf("%s#%s", $e_id, $data); + my $data_text = $q->param("extepg_" . $e_id . "_data_text"); + if ($data_text) { + $extepg_info .= ", " if ($data); + $data_text =~ s/:/\!\^colon\^\!/g; + $data_text =~ s/\|/\!\^pipe\^\!/g; + $extepg_info .= $data_text; + } + } + } + + my $cmd = $pattern . ":" + . ($q->param("use_time") ? "1" : "0") . ":" + . $time_start . ":" + . $time_stop . ":" + . $use_channel . ":" + . $channels . ":" + . ($q->param("matchcase") ? "1" : "0") . ":" + . $q->param("mode") . ":" + . ($q->param("use_title") ? "1" : "0") . ":" + . ($q->param("use_subtitle") ? "1" : "0") . ":" + . ($q->param("use_descr") ? "1" : "0") . ":" + . ($q->param("use_duration") ? "1" : "0") . ":" + . $min_duration . ":" + . $max_duration . ":" + . ($q->param("has_action") ? "1" : "0") . ":" + . ($q->param("use_days") ? "1" : "0") . ":" + . ($had_weekday > 1 ? $weekdays_bits : $weekdays) . ":" + . ($q->param("is_series") ? "1" : "0") . ":" + . $directory . ":" + . $q->param("prio") . ":" + . $q->param("lft") . ":" + . $q->param("bstart") . ":" + . $q->param("bstop") . ":" + . ($q->param("use_vps") ? "1" : "0") . ":" + . $q->param("action") . ":" + . ($q->param("use_extepg") ? "1" : "0") . ":" + . $extepg_info . ":" + . ($q->param("avoid_repeats") ? "1" : "0") . ":" + . $q->param("allowed_repeats") . ":" + . ($q->param("comp_title") ? "1" : "0") . ":" + . ($q->param("comp_subtitle") ? "1" : "0") . ":" + . ($q->param("comp_descr") ? "1" : "0") . ":" + . ($q->param("comp_extepg_info") ? "1" : "0") . ":" #TODO + . $q->param("repeats_in_days") . ":" + . $q->param("delete_after") . ":" + . $q->param("keep_recordings") . ":" + . $q->param("switch_before") . ":" + . $q->param("pause") . ":" + . $q->param("use_blacklists") . ":" + . $sel_blacklists . ":" + . $q->param("fuzzy_tolerance") . ":" + . ($q->param("use_for_fav") ? "1" : "0"); + + $cmd .= ":" . $q->param("unused") if ($q->param("unused")); +#print("CMD: $cmd\n"); + return $cmd; +} + +sub epgsearch_save { + my $cmd = (defined $q->param("id") ? "EDIS " . $q->param("id") + : "NEWS 0") + . ":" . epgsearch_Param2Line(); + SendCMD("plug epgsearch " . $cmd); + return (headerForward("$MyURL?aktion=epgsearch_list")); +} + +sub epgsearch_delete { + my $id = $q->param("id"); + if (defined $id) { + SendCMD("plug epgsearch dels $id"); + } else { + for ($q->param) { + SendCMD("plug epgsearch dels $1") if (/xxxx_(.*)/); + } + } + return (headerForward("$MyURL?aktion=epgsearch_list")); +} + +sub epgsearch_toggle { + my $id = $q->param("id"); + if (defined $id) { + SendCMD(sprintf("plug epgsearch mods %s %s", $id, $q->param("active") ? "off" : "on")); + } + return (headerForward("$MyURL?aktion=epgsearch_list")); +} + +sub epgsearch_getSettings { + for (SendCMD("plug epgsearch setp")) { + chomp; + next if (length($_) == 0); + $EPGSEARCH_SETTINGS{$1} = $2 if (/^([^:]*): (.*)/); + } +} + +############################################################################# # regulary timers ############################################################################# sub my_mktime { @@ -2283,7 +2933,23 @@ sub ValidConfig { $CONFIG{REC_MIMETYPE} = "video/x-mpegurl" if (!$CONFIG{REC_MIMETYPE}); $CONFIG{REC_EXT} = "m3u" if (!$CONFIG{REC_EXT}); - $FEATURES{AUTOTIMER} = $CONFIG{AT_FUNC}; + if ($CONFIG{AT_OFFER} == 2) { + # User wants to use AutoTimer + $FEATURES{AUTOTIMER} = 1; + } elsif ($CONFIG{AT_OFFER} == 1) { + # User doesn't want AutoTimer + $FEATURES{AUTOTIMER} = 0; + } else { + # No decition made yet + if (-s $AT_FILENAME && $CONFIG{AT_FUNC}) { + $FEATURES{AUTOTIMER} = 1; + $CONFIG{AT_OFFER} = 2; + } else { + $CONFIG{AT_FUNC} = 0; + $FEATURES{AUTOTIMER} = 0; + $CONFIG{AT_OFFER} = 1; + } + } } sub ReadConfig { @@ -2439,6 +3105,9 @@ sub prog_detail { my ($channel_name, $title, $subtitle, $vps, $video, $audio, $start, $stop, $text, @epgimages); + if ($q->param("channel_id")) { + $vdr_id = get_vdrid_from_channelid($q->param("channel_id")); + } if ($vdr_id && $epg_id) { for (@{ $EPG{$vdr_id} }) { @@ -2519,6 +3188,10 @@ sub prog_list { my ($vdr_id, $dummy); ($vdr_id, $dummy) = split("#", $q->param("vdr_id"), 2) if ($q->param("vdr_id")); + if ($q->param("channel_id")) { + $vdr_id = get_vdrid_from_channelid($q->param("channel_id")); + } + my $myself = Encode_Referer($MyURL . "?" . $Query); # @@ -3363,6 +4036,7 @@ sub live_stream { } else { $ip = $CONFIG{VDR_HOST}; } + chomp($ip); $data = "http://$ip:$CONFIG{ST_STREAMDEV_PORT}/$channel"; return (header("200", $CONFIG{TV_MIMETYPE}, $data)); } @@ -4818,15 +5492,8 @@ sub show_help { # information ############################################################################# sub about { - my $missing_features = "RENR" unless ($FEATURES{REC_RENAME}); - unless ($FEATURES{STREAMDEV}) { - $missing_features .= ", " if ($missing_features); - $missing_features .= "streamdev-client plugin"; - } - my $vars = { vdrversion => $VDRVERSION_HR, - myversion => $VERSION, - missing_features => $missing_features + myversion => $VERSION }; return showTemplate("about.html", $vars); } @@ -5042,6 +5709,10 @@ sub getSupportedFeatures { if ($VDRVERSION >= 10331) { command($this, "plug"); while ($_ = readoneline($this)) { + if ($_ =~ /^epgsearch v(\d+)\.(\d+)\.(\d+)/) { + $FEATURES{EPGSEARCH} = 1; + $EPGSEARCH_VERSION = ($1 * 10000 + $2 * 100 + $3); + } if ($_ =~ /^streamdev-server/) { $FEATURES{STREAMDEV} = 1; } |