123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- #!/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/</</g;
- $value =~ s/>/>/g;
- $value =~ s/&/&/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
|