diff --git a/en/multimedia/multimedia.pl b/en/multimedia/multimedia.pl index 25a3981405..cf3b3d67d2 100644 --- a/en/multimedia/multimedia.pl +++ b/en/multimedia/multimedia.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # -# $Id: multimedia.pl,v 1.1 2007-05-15 21:30:41 keramida Exp $ +# $Id: multimedia.pl,v 1.2 2008-05-30 15:22:01 remko Exp $ # $FreeBSD$ # @@ -10,148 +10,164 @@ use XML::Parser; use Data::Dumper; use POSIX; -my @months=( - "","January","February","March", - "April","May","June","July", - "August","September","October", - "November","December" +my @months = ( + "", "January", "February", "March", + "April", "May", "June", "July", + "August", "September", "October", + "November", "December" ); -my @createdfiles=(); +my @createdfiles = (); -my @tree=(); -my @values=(); -my $treeindex=-1; +my @tree = (); +my @values = (); +my $treeindex = -1; my @items; -my $ci=-1; +my $ci = -1; my %sources; -my $sid=""; +my $sid = ""; my %tags; sub addtags { - my $tags=shift; + my $tags = shift; if ($tags) { - my @w=split(/,/,$tags); + my @w = split(/,/, $tags); foreach my $w (@w) { - $tags{$w}=0 if (!defined $tags{$w}); + $tags{$w} = 0 if (!defined $tags{$w}); $tags{$w}++; } return; } - my $array=shift; - my @array=@{$array}; + my $array = shift; + my @array = @{$array}; foreach my $w (@array) { - $tags{$w}=0 if (!defined $tags{$w}); + $tags{$w} = 0 if (!defined $tags{$w}); $tags{$w}++; } } sub xml_start { - my $expat=shift; - my $element=shift; + my $expat = shift; + my $element = shift; - $tree[++$treeindex]=$element; - while (defined (my $attribute=shift)) { - $values[$treeindex]{$attribute}=shift; + $tree[++$treeindex] = $element; + while (defined (my $attribute = shift)) { + $values[$treeindex]{$attribute} = shift; } if ($element eq "item" - && $treeindex==2) { + && $treeindex == 2) { $ci++; - $items[$ci]=(); - $items[$ci]{source}=$values[$treeindex]{source}; - $items[$ci]{added}=$values[$treeindex]{added}; - $items[$ci]{ci}=$ci; - $items[$ci]{fc}=-1; + $items[$ci] = (); + $items[$ci]{source} = $values[$treeindex]{source}; + $items[$ci]{added} = $values[$treeindex]{added}; + $items[$ci]{ci} = $ci; + $items[$ci]{fc} = -1; } if ($element eq "source" - && $treeindex==2) { - $sid=$values[$treeindex]{id}; - $sources{$values[$treeindex]{id}}=(); + && $treeindex == 2) { + $sid = $values[$treeindex]{id}; + $sources{$values[$treeindex]{id}} = (); + } + + if ($element eq "url" + && $treeindex == 5) { + $items[$ci]{fc}++; } } sub xml_end { - my $expat=shift; - my $element=shift; + my $expat = shift; + my $element = shift; - $values[$treeindex]=(); + $values[$treeindex] = (); $treeindex--; } sub xml_char { - my $expat=shift; - my $value=shift; + my $expat = shift; + my $value = shift; if ($tree[0] eq "multimedia") { - return if ($treeindex==0); + return if ($treeindex == 0); if ($tree[1] eq "items") { - return if ($treeindex==1); + return if ($treeindex == 1); if ($tree[2] eq "item") { - return if ($treeindex==2); + return if ($treeindex == 2); if ($tree[3] eq "title") { - $items[$ci]{title}=$value; + $items[$ci]{title} = "" if (!defined $items[$ci]{title}); + $items[$ci]{title} .= $value; return; } if ($tree[3] eq "desc") { - $items[$ci]{desc}="" if (!defined $items[$ci]{desc}); - $items[$ci]{desc}.=$value; + $items[$ci]{desc} = "" if (!defined $items[$ci]{desc}); + $items[$ci]{desc} .= $value; return; } if ($tree[3] eq "overview") { - $items[$ci]{overview}=$value; + $items[$ci]{overview} = "" if (!defined $items[$ci]{desc}); + $items[$ci]{overview} .= $value; return; } if ($tree[3] eq "link") { - $items[$ci]{link}=$value; + $items[$ci]{link} = "" if (!defined $items[$ci]{link}); + $items[$ci]{link} .= $value; return; } if ($tree[3] eq "tags") { - @{$items[$ci]{tags}}=split(/,/,$value); + @{$items[$ci]{tags}} = split(/,/, $value); addtags($value); return; } if ($tree[3] eq "files") { - return if ($treeindex==3); + return if ($treeindex == 3); if ($tree[4] eq "prefix") { - $items[$ci]{prefix}="" if (!defined $items[$ci]{prefix}); - $items[$ci]{prefix}.=$value; + $items[$ci]{prefix} = "" if (!defined $items[$ci]{prefix}); + $items[$ci]{prefix} .= $value; return; } if ($tree[4] eq "file") { - return if ($treeindex==4); + return if ($treeindex == 4); if ($tree[5] eq "url") { - $items[$ci]{fc}++; - $items[$ci]{files}{$items[$ci]{fc}}{url}=$value; + # Note that $items[$ci]{fc} gets incremented in xml_start + $items[$ci]{files}{$items[$ci]{fc}}{url} = "" + if (!defined $items[$ci]{files}{$items[$ci]{fc}}{url}); + $items[$ci]{files}{$items[$ci]{fc}}{url} .= $value; return; } if ($tree[5] eq "size") { - $items[$ci]{files}{$items[$ci]{fc}}{size}=$value; + $items[$ci]{files}{$items[$ci]{fc}}{size} = "" + if (!defined $items[$ci]{files}{$items[$ci]{fc}}{size}); + $items[$ci]{files}{$items[$ci]{fc}}{size} .= $value; return; } if ($tree[5] eq "length") { - $items[$ci]{files}{$items[$ci]{fc}}{length}=$value; + $items[$ci]{files}{$items[$ci]{fc}}{length} = "" + if (!defined $items[$ci]{files}{$items[$ci]{fc}}{length}); + $items[$ci]{files}{$items[$ci]{fc}}{length} .= $value; return; } if ($tree[5] eq "desc") { - $items[$ci]{files}{$items[$ci]{fc}}{desc}=$value; + $items[$ci]{files}{$items[$ci]{fc}}{desc} = "" + if (!defined $items[$ci]{files}{$items[$ci]{fc}}{desc}); + $items[$ci]{files}{$items[$ci]{fc}}{desc} .= $value; return; } if ($tree[5] eq "tags") { - @{$items[$ci]{files}{$items[$ci]{fc}}{tags}}=split(/,/,$value); + @{$items[$ci]{files}{$items[$ci]{fc}}{tags}} = split(/,/, $value); addtags($value); - addtags("",$items[$ci]{tags}); + addtags("", $items[$ci]{tags}); return; } goto error; @@ -164,17 +180,17 @@ sub xml_char { } if ($tree[1] eq "sources") { - return if ($treeindex==1); + return if ($treeindex == 1); if ($tree[2] eq "source") { - return if ($treeindex==2); + return if ($treeindex == 2); if ($tree[3] eq "name") { - $sources{$sid}{name}=$value; + $sources{$sid}{name} = $value; return; } if ($tree[3] eq "url") { - $sources{$sid}{url}=$value; + $sources{$sid}{url} = $value; return; } goto error; @@ -188,7 +204,7 @@ error: print "Unknown item at depth $treeindex: $tree[$treeindex]\n"; } -my $p=new XML::Parser( +my $p = new XML::Parser( Handlers => { Start => \&xml_start, End => \&xml_end, @@ -197,64 +213,83 @@ my $p=new XML::Parser( ); $p->parsefile("multimedia-input.xml"); -my @site_order=(); +my @site_order = (); { sub site_sort { - my %a=%{$a}; - my %b=%{$b}; + my %a = %{$a}; + my %b = %{$b}; return $a{source} cmp $b{source} if ($a{source} ne $b{source}); return $a{title} cmp $b{title}; } - @site_order=sort site_sort @items; + @site_order = sort site_sort @items; } -my @date_order=(); +my @date_order = (); { - my %dates=(); + my %dates = (); foreach my $item (@items) { - my %item=%{$item}; - $dates{$item{ci}}=$item{added}; + my %item = %{$item}; + $dates{$item{ci}} = $item{added}; } - my @dates=keys(%dates); - @date_order=sort { $dates{$b} cmp $dates{$a} } @dates; + my @dates = keys(%dates); + @date_order = sort { $dates{$b} cmp $dates{$a} } @dates; } # # HTML overview output # sub print_htmlitem { - my $item=shift; - my %item=%{$item}; - my $source=shift; - my %source=%{$source}; + my $item = shift; + my %item = %{$item}; + my $source = shift; + my %source = %{$source}; print FOUT "
";
if (defined $item{overview}) {
print FOUT "$item{title}\n";
} else {
- my %media=%{$item{files}{0}};
+ my %media = %{$item{files}{0}};
print FOUT "$item{title}\n";
if (defined $media{size} || defined $media{length}) {
- my $s="";
+ my $s = "";
print FOUT "(";
if (defined $media{size}) {
print FOUT "$media{size}";
- $s=", ";
+ $s = ", ";
}
if (defined $media{length}) {
print FOUT "$s$media{length}";
- $s=", ";
+ $s = ", ";
}
print FOUT ")";
}
}
- print FOUT "
Source: ",$source{name},"
\n";
- print FOUT "Tags: ",join(", ",@{$item{tags}}),"
\n";
+ print FOUT "
Source: ",
+ $source{name}, "
\n";
+ print FOUT "Added: ",
+ substr($item{added}, 6, 2), " ",
+ $months[substr($item{added}, 4, 2)], " ",
+ substr($item{added}, 0, 4), "
\n";
+
+ print FOUT "Tags: ";
+ {
+ my $first = 1;
+ foreach my $t (@{$item{tags}}) {
+ print FOUT ", " if (!$first);
+# join(", ", @{$item{$t}}), "
\n";
+ my $th = $t;
+ $th =~ s/ /_/g;
+ print FOUT "$t";
+ $first = 0;
+ }
+ }
+ print FOUT "
\n";
+
if (defined $item{overview} && defined $item{files}) {
- my $c=0;
+ my $c = 0;
foreach my $m (keys(%{$item{files}})) {
- my %file=%{$item{files}{$m}};
+ my %file = %{$item{files}{$m}};
print FOUT ", " if ($c++);
if (defined $item{prefix}) {
print FOUT "$file{desc}";
@@ -262,15 +297,15 @@ sub print_htmlitem {
print FOUT "$file{desc}";
}
if (defined $file{size} || defined $file{length}) {
- my $s="";
+ my $s = "";
print FOUT " (";
if (defined $file{size}) {
print FOUT "$file{size}";
- $s=", ";
+ $s = ", ";
}
if (defined $file{length}) {
print FOUT "$s$file{length}";
- $s=", ";
+ $s = ", ";
}
print FOUT ")";
}
@@ -280,35 +315,35 @@ sub print_htmlitem {
print FOUT "$item{desc}\n";
}
{
- $createdfiles[$#createdfiles+1]="multimedia.html";
- open(FOUT,">multimedia.html");
- open(FIN,"multimedia.html.pre");
- my @lines=Newest resources
\n";
- my $month="";
+ my $month = "";
foreach my $order (@date_order) {
- my %item=%{$items[$order]};
- my %source=%{$sources{$item{source}}};
- if (substr($item{added},0,6) ne $month) {
- print FOUT "",$months[substr($item{added},4,2)+0]," ",substr($item{added},0,4),"
";
- $month=substr($item{added},0,6);
+ my %item = %{$items[$order]};
+ my %source = %{$sources{$item{source}}};
+ if (substr($item{added}, 0, 6) ne $month) {
+ print FOUT "
", $months[substr($item{added}, 4, 2)+0], " ", substr($item{added}, 0, 4), "
";
+ $month = substr($item{added}, 0, 6);
}
- print_htmlitem(\%item,\%source);
+ print_htmlitem(\%item, \%source);
}
print FOUT "
\n";
- open(FIN,"multimedia.html.post");
- @lines=Tags
\n";
- my $month="";
+ my $month = "";
sub size {
- return $b cmp $a if ($tags{$b}==$tags{$a});
+ return $b cmp $a if ($tags{$b} == $tags{$a});
return $tags{$b} <=> $tags{$a};
}
- my $size=20;
- my $c=0;
+ my $size = 20;
+ my $c = 0;
foreach my $tag (sort size(keys(%tags))) {
- my $ftag=$tag;
- $ftag=~s/ /_/g;
+ my $ftag = $tag;
+ $ftag =~ s/ /_/g;
print FOUT "$tag\n";
- $size-- if ($c++%10==0 && $size>2);
+ $size-- if ($c++%10 == 0 && $size > 2);
}
- open(FIN,"multimedia.html.post");
- @lines=Tag: $tag
\n";
print FOUT "\n";
foreach my $item (@items) {
- my %item=%{$item};
- my %source=%{$sources{$item{source}}};
+ my %item = %{$item};
+ my %source = %{$sources{$item{source}}};
- my $found=0;
+ my $found = 0;
foreach my $itag (@{$item{tags}}) {
if ($itag eq $tag) {
- $found=1;
+ $found = 1;
last;
}
}
if (!$found) {
foreach my $file (keys(%{$item{files}})) {
- my %file=%{$item{files}{$file}};
+ my %file = %{$item{files}{$file}};
foreach my $itag (@{$file{tags}}) {
if ($itag eq $tag) {
- $found=1;
+ $found = 1;
last;
}
}
}
}
- print_htmlitem(\%item,\%source) if ($found);
+ print_htmlitem(\%item, \%source) if ($found);
}
print FOUT "
\n";
- open(FIN,"multimedia.html.post");
- @lines=Sources
\n";
print FOUT "\n";
- my $lastsource="";
+ my $lastsource = "";
foreach my $item (@site_order) {
- my %item=%{$item};
+ my %item = %{$item};
next if ($lastsource eq $item{source});
- $lastsource=$item{source};
+ $lastsource = $item{source};
- print FOUT "
\n";
- open(FIN,"multimedia.html.post");
- @lines=$source{name}
\n";
print FOUT "\n";
}
- print_htmlitem(\%item,\%source);
+ print_htmlitem(\%item, \%source);
}
print FOUT "
\n";
- open(FIN,"multimedia.html.post");
- my @lines=
From: $source{name}
");
print FOUT htmlentities("Tags: $tags
\n");
@@ -550,11 +586,11 @@ sub print_htmlitem {
print FOUT "