milis/bin/talimatname_indeks_yap

314 lines
5.8 KiB
Plaintext
Raw Normal View History

2017-04-17 23:49:36 +02:00
#!/usr/bin/perl -w
our $version = "1.0.4";
########################################################################
#
# portspage (http://www.karsikkopuu.net/crux/scripts/)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# 2017 milis linux talimatnamesine uyarlama - milisarge
########################################################################
use strict;
our %options =
(
title => "Milis Linux Talimatnamesi",
timestamp_accuracy => 1,
date_from_file => 0,
);
sub print_usage
{
print <<EOT;
Usage: talimatname_indeks_yap [paremetre]... [dizin]
--title=TITLE set the page title
--header=FILE name of file to insert before port listing
--footer=FILE name of file to insert after port listing
--timestamp-accuracy=LEVEL 0 = no timestamp, 1 = date only, 2 = date and time
default is 1
--date-from-file take date from newest file instead of directory
--date-from-pkgfile take date from Pkgfile instead of directory
--version output version information and exit
EOT
}
sub parse_args
{
foreach my $arg (@ARGV)
{
if ($arg =~ /^--header=(.*)$/)
{
$options{header} = $1;
}
elsif ($arg =~ /^--footer=(.*)$/)
{
$options{footer} = $1;
}
elsif ($arg =~ /^--title=(.*)$/)
{
$options{title} = $1;
}
elsif ($arg =~ /^--timestamp-accuracy=(0|1|2)$/)
{
$options{timestamp_accuracy} = $1;
}
elsif ($arg =~ /^--date-from-file$/)
{
$options{date_from_file} = 1;
}
elsif ($arg =~ /^--date-from-pkgfile$/)
{
$options{date_from_pkgfile} = 1;
}
elsif ($arg =~ /^--version$/)
{
print "$version\n";
exit 0;
}
elsif ($arg =~ /^--help$/)
{
print_usage();
exit 0;
}
else
{
$options{directory} = $arg;
}
}
}
sub recurse_tree
{
my $path = shift;
my @list;
while ($path =~ s/\/\//\//g) {}
$path =~ s/\/$//;
opendir(DIR, $path) or return;
ENTRY:
foreach my $entry(sort(readdir(DIR)))
{
next ENTRY if $entry eq ".";
next ENTRY if $entry eq "..";
push (@list, "$path/$entry") if -f "$path/$entry";
push (@list, recurse_tree("$path/$entry")) if -d "$path/$entry";
}
return @list;
}
sub parse_pkgfile
{
my %parsed;
my $pkgfile = shift;
if (open (FILE, $pkgfile))
{
while (<FILE>)
{
if ($_ =~ /^#\s*(.*?):\s*(.*)$/)
{
my $key = $1;
my $value = $2;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/&/&amp;/g;
$parsed{$key} = $value;
}
elsif ($_ =~ /^version=(.*)$/)
{
$parsed{version} = $1;
}
elsif ($_ =~ /^release=(.*)$/)
{
$parsed{release} = $1;
}
}
close (FILE);
}
return { %parsed };
}
sub main
{
my %db;
parse_args();
if (!$options{directory})
{
print_usage();
return 0;
}
foreach my $file (recurse_tree($options{directory}))
{
if ($file =~ q:.*/(.*)/talimat$:)
{
$db{$1} = parse_pkgfile("$file");
}
}
print <<EOH;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xml:lang="tr" lang="tr" xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<meta http-equiv="content-type" contentType="text/html;">
EOH
print " <title>$options{title}</title>\n";
print <<EOH;
<style type="text/css">
body
{
font-family: Verdana, sans-serif;
font-size: 85%;
padding: 2em;
}
a
{
color: black;
}
table
{
border: solid #CAD4E9 1px;
font-size: 85%;
}
td
{
padding: 6px;
}
tr.header
{
background-color: #CAD4E9;
}
tr.odd
{
background-color: #ECF0F7;
}
tr.even
{
background-color: #F7F9FC;
}
</style>
</head>
<body>
EOH
print " <h2>$options{title}</h2>\n";
if ($options{header})
{
open(FILE, $options{header}) or die "Couldn't open header file";
while (<FILE>)
{
print " " . $_;
}
close(FILE);
}
print " <table width=\"100%\" cellspacing=\"0\">\n";
print " <tr class=\"header\"><td><b>Talimat</b></td><td><b>Sürüm</b></td><td><b>Açıklama</b></td>";
if ($options{timestamp_accuracy} > 0)
{
print "<td><b>Son değişiklik</b></td>";
}
print "</tr>\n";
our $odd = "odd";
my $count = 0;
foreach my $port (sort keys %db)
{
$count++;
print " <tr class=\"$odd\"><td>";
$db{$port}{URL} ? print "<a href=\"$db{$port}{URL}\">$port</a>" : print "$port";
print "</td><td><a href=\"$options{directory}/$port/\">$db{$port}{version}-$db{$port}{release}</a></td><td>";
print $db{$port}{Description} if $db{$port}{Description};
print "</td>";
if ($options{timestamp_accuracy} > 0)
{
my $date;
if ($options{date_from_file})
{
my @files = recurse_tree("$options{directory}/$port");
my @dates;
foreach my $file (@files)
{
push (@dates, (stat($file))[9]);
}
@dates = sort @dates;
$date = $dates[$#dates];
}
elsif ($options{date_from_pkgfile})
{
$date = (stat("$options{directory}/$port/talimat"))[9];
}
else
{
$date = (stat("$options{directory}/$port"))[9];
}
print "<td>" . isotime($date, $options{timestamp_accuracy}) . "</td>";
}
print "</tr>\n";
if ($odd eq "odd") { $odd = "even"; }
else { $odd = "odd"; }
}
print " </table>\n";
print " <p><b>$count ports</b></p>\n";
if ($options{footer})
{
open(FILE, $options{footer}) or die "Couldn't open footer file";
while (<FILE>)
{
print " " . $_;
}
close(FILE);
}
print <<EOH;
</body>
</html>
EOH
return 0;
}
sub isotime
{
my $time = (shift or time);
my $accuracy = (shift or 2);
my @t = gmtime ($time);
my $year = $t[5] + 1900;
my $month = sprintf("%02d", $t[4] + 1);
my $day = sprintf("%02d", $t[3]);
if ($accuracy == 1)
{
return "$year-$month-$day";
}
return "$year-$month-$day " . sprintf("%02d:%02d:%02d UTC", $t[2], $t[1], $t[0]);
}
exit(main());
# End of file