b2b7eb1df6
Repository state. This commit mostly brings in a lot of translation synches, spelling fixes, adds new translations. Obtained from: FreeBSD Russian Documentation Project CVS Repository
317 lines
8.3 KiB
Perl
Executable file
317 lines
8.3 KiB
Perl
Executable file
#!/usr/bin/perl
|
||
|
||
# convert a ports INDEX file to HTML
|
||
#
|
||
# by John Fieber <jfieber@freebsd.org>
|
||
# Mon May 13 10:31:58 EST 1996
|
||
|
||
# $FreeBSD$
|
||
# The FreeBSD Russian Documentation Project
|
||
# $FreeBSDru: frdp/www/ru/ports/portindex,v 1.5 2000/10/12 10:02:51 phantom Exp $
|
||
# Original revision: 1.33
|
||
|
||
############################################################
|
||
|
||
# Load local config file. You can override in portindex.conf
|
||
# the variables for the default web and the ftp server. This
|
||
# make it easy to maintain a local web mirror and let the
|
||
# URL point to yourself and not to the standard FreeBSD FTP server.
|
||
$config = $0 . '.' . 'conf';
|
||
do $config if -f $config;
|
||
|
||
# This is the base of where we ftp stuff from
|
||
if ($ENV{'MASTER_FTP_SERVER'}) {
|
||
$ftpserver = $ENV{'MASTER_FTP_SERVER'};
|
||
} else {
|
||
$ftpserver = 'ftp://ftp.freebsd.org' if !$ftpserver;
|
||
}
|
||
$base = "$ftpserver/pub/FreeBSD/branches/-current" if !$base;
|
||
$baseHTTP = $base if !$baseHTTP;
|
||
$urlcgi = 'http://www.freebsd.org/cgi/url.cgi' if !$urlcgi;
|
||
$packagesURL = "$ftpserver/pub/FreeBSD/ports/i386/packages-stable/All/"
|
||
if !$packagesURL;
|
||
# support tar on the fly or gzip'ed tar on the fly
|
||
$ftparchive = 'tar' if !$ftparchive;
|
||
|
||
|
||
# ports download sources script
|
||
$pds = 'http://www.freebsd.org/cgi/pds.cgi';
|
||
|
||
# better layout and link to the sources
|
||
if ($urlcgi) {
|
||
$baseHTTP = $urlcgi . '?' . $baseHTTP;
|
||
}
|
||
|
||
$today = &getdate;
|
||
|
||
&packages_exist('packages.exists', *packages);
|
||
&category_description(($ARGV[2] || '.') . '/categories', *category_description);
|
||
&y2k_statements;
|
||
&main;
|
||
|
||
sub y2k_statements {
|
||
|
||
open(Y2K, $ARGV[1]);
|
||
while(<Y2K>) {
|
||
chop();
|
||
( $dir, $url ) = split(/\s+/);
|
||
$dir = $base . "/" . $dir;
|
||
$y2k{$dir} = $url;
|
||
|
||
}
|
||
close(Y2K);
|
||
|
||
}
|
||
|
||
sub getdate {
|
||
@months = ("ñÎ×ÁÒÑ", "æÅ×ÒÁÌÑ", "íÁÒÔÁ", "áÐÒÅÌÑ", "íÁÑ","éÀÎÑ",
|
||
"éÀÌÑ", "á×ÇÕÓÔÁ", "óÅÎÔÑÂÒÑ", "ïËÔÑÂÒÑ", "îÏÑÂÒÑ", "äÅËÁÂÒÑ");
|
||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||
$year += 1900;
|
||
return "ðÏÓÌÅÄÎÉÅ ÉÚÍÅÎÅÎÉÑ: $mday $months[$mon], $year";
|
||
}
|
||
|
||
sub header {
|
||
local ($fh, $htext) = @_;
|
||
print $fh "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\" [\n";
|
||
print $fh "<!ENTITY base CDATA '..'>";
|
||
print $fh "<!ENTITY date \"<em>$today</em>\">\n";
|
||
print $fh "<!ENTITY title '$htext'>";
|
||
print $fh "<!ENTITY blurb SYSTEM \"ports.inc\">\n";
|
||
print $fh "<!ENTITY % includes SYSTEM \"../includes.sgml\">\n";
|
||
print $fh "<!ENTITY email 'ports'>";
|
||
print $fh "%includes;\n";
|
||
print $fh "]>\n";
|
||
print $fh "<html>&header;\n";
|
||
}
|
||
|
||
sub footer {
|
||
local ($fh, $ftext) = @_;
|
||
print $fh "\n$ftext\n";
|
||
print $fh "&footer;\n";
|
||
print $fh "</BODY>\n</HTML>\n";
|
||
}
|
||
|
||
sub packages_exist {
|
||
local($file, *p) = @_;
|
||
|
||
open(P, $file) || do {
|
||
warn "open $file: $!\n";
|
||
warn "Cannot create packages links\n";
|
||
return 1;
|
||
};
|
||
|
||
while(<P>) {
|
||
chop;
|
||
$p{$_} = 1;
|
||
}
|
||
close P;
|
||
return 0;
|
||
}
|
||
|
||
sub category_description {
|
||
local($file, *p) = @_;
|
||
|
||
open(P, $file) || do {
|
||
warn "open $file: $!\n";
|
||
warn "Cannot find category description\n";
|
||
return 1;
|
||
};
|
||
|
||
local($category, $description);
|
||
while(<P>) {
|
||
# ignore comments
|
||
next if /^\s*#/;
|
||
|
||
($category, $description) = /^\s*"([^"]+)",\s*"([^"]+)/;
|
||
$p{$category} = $description;
|
||
}
|
||
close P;
|
||
return 0;
|
||
}
|
||
|
||
sub main {
|
||
|
||
$sep = "<B>:</B>";
|
||
|
||
# 'COMMENT' translation database
|
||
if (open(COMF, "comments.ru")) {
|
||
while(<COMF>) {
|
||
($a, $b) = split('\|');
|
||
next if !defined($b);
|
||
chop($b);
|
||
$b =~ s/&/&/g;
|
||
$b =~ s/</</g;
|
||
$b =~ s/>/>/g;
|
||
$descLANG{$a} = $b;
|
||
}
|
||
}
|
||
|
||
open(INDEX, $ARGV[0]);
|
||
while (<INDEX>) {
|
||
chop;
|
||
s/&/&/g;
|
||
s/</</g;
|
||
s/>/>/g;
|
||
|
||
# Read a record
|
||
($name, $loc, $prefix, $desc, $ldesc, $owner, $cats,
|
||
$bdep, $rdep, $www) = split('\|');
|
||
|
||
# Check for double hyphens in the name (--).
|
||
$name =~ s/--/-/g;
|
||
|
||
# Split the categories into an array
|
||
@cat = split("[ \t]+", $cats);
|
||
|
||
$catkey{$name} = $cat[0];
|
||
|
||
local($sourcepath) = $loc;
|
||
$sourcepath =~ s%/usr/%%;
|
||
|
||
# desc translation
|
||
($lloc = $loc) =~ s@^/usr/ports/@@;
|
||
$desc = $descLANG{$lloc}
|
||
if ($descLANG{$lloc} ne '');
|
||
|
||
foreach $i (@cat) {
|
||
|
||
$stats{$i}++;
|
||
|
||
# figure out the FTP url
|
||
$loc =~ s/\/usr/$base/;
|
||
$ldesc =~ s/\/usr/$baseHTTP/;
|
||
|
||
# The name description and maintainer
|
||
$data{$i} .= "<DT><B><A NAME=\"$name\"></A><A HREF=\"$loc.$ftparchive\">$name</A></B> ";
|
||
|
||
|
||
$data{$i} .= "<DD>$desc<BR><A HREF=\"$ldesc\">ðÏÌÎÏÅ ÏÐÉÓÁÎÉÅ</A>";
|
||
if ($packages{"$name.tgz"}) {
|
||
$data{$i} .= qq{ | <a href="$packagesURL$name.tgz">ðÁËÁÄÖ</a>};
|
||
}
|
||
|
||
$data{$i} .= qq{ | <A HREF="$pds?$sourcepath">éÓÈÏÄÎÙÅ ÔÅËÓÔÙ</A>};
|
||
|
||
if ($y2k{"$loc"}) {
|
||
$data{$i} .= qq{ | <a href="$y2k{$loc}">Y2K</a>};
|
||
}
|
||
|
||
if ($www ne "") {
|
||
$data{$i} .= qq{ | <a href="$www">ïÓÎÏ×ÎÏÊ Web ÓÁÊÔ</a>};
|
||
}
|
||
|
||
$ownerurl = $owner;
|
||
$ownerurl =~ s/</</g;
|
||
$owenrurl =~ s/>/>/g;
|
||
$data{$i} .=
|
||
"<BR><I>ðÏÄÄÅÒÖËÏÊ ÚÁÎÉÍÁÅÔÓÑ:</I> <A HREF=\"mailto:$ownerurl\">$owner</A>";
|
||
|
||
# If there are any dependencies, list them
|
||
if ($bdep ne "" || $rdep ne "") {
|
||
$data{$i} .= "<BR><I>ôÒÅÂÕÅÔ:</I> ";
|
||
@dep = split(/ /, "$bdep $rdep");
|
||
local($last) = '';
|
||
foreach $j (sort @dep) {
|
||
next if $j eq $last;
|
||
$last = $j;
|
||
$data{$i} .= " <A HREF=\"##$j##.html#$j\">$j</A>,";
|
||
}
|
||
# remove the trailing comma
|
||
chop $data{$i};
|
||
}
|
||
|
||
# If the port is listed in more than one category, throw
|
||
# in some cross references
|
||
if ($#cat > 0) {
|
||
$data{$i} .= "<BR><EM>ôÁËÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ ×:</EM> ";
|
||
foreach $j (@cat) {
|
||
if ($j ne $i) {
|
||
if ($j eq $cat[0]) {
|
||
$data{$i} .= " <STRONG><A HREF=\"$j.html#$name\">\u$j</A></STRONG>,";
|
||
}
|
||
else {
|
||
$data{$i} .= " <A HREF=\"$j.html#$name\">\u$j</A>,";
|
||
}
|
||
}
|
||
}
|
||
# remove the trailing comma
|
||
chop($data{$i});
|
||
}
|
||
$data{$i} .= "<P></P></DD>\n"
|
||
}
|
||
|
||
# Add an entry to the master index
|
||
|
||
# workaround for SGML bug, `--' is not allowed in comments
|
||
local ($sname) = $name;
|
||
$sname =~ s/--/-=/g;
|
||
$master[$portnumber] =
|
||
"<!-- $sname --><STRONG><A HREF=\"$cat[0].html#$name\">$name</A></STRONG> " .
|
||
" -- <EM>$desc</EM><BR>\n";
|
||
$portnumber++;
|
||
}
|
||
|
||
open(MOUTF, ">index.sgml");
|
||
|
||
&header(MOUTF, "FreeBSD Ports");
|
||
# print MOUTF "<!--#include virtual=\"./ports.inc\" -->\n";
|
||
print MOUTF "&blurb;";
|
||
print MOUTF "<hr><P>÷ ÓÐÉÓËÅ ëÏÌÌÅËÃÉÉ ðÏÒÔÏ× FreeBSD ÎÁ ÄÁÎÎÙÊ ÍÏÍÅÎÔ
|
||
ÐÒÉÓÕÔÓÔ×ÕÀÔ $portnumber ÐÏÒÔÉÒÏ×ÁÎÙÈ × FreeBSD ÐÒÏÇÒÁÍÍ.<br>
|
||
<A HREF=\"$base/ports.tar.gz\">÷ÙËÁÞÁÊÔÅ gzip ÁÒÈÉ× ÓÏÄÅÒÖÁÝÉÊ ×ÓÅ $portnumber
|
||
ÐÏÒÔÏ×</A> (ÏËÏÌÏ 10 íÅÇÁÂÁÊÔ) ÉÌÉ ÐÒÏÓÍÏÔÒÉÔÅ ÓÌÅÄÕÀÝÉÅ ËÁÔÅÇÏÒÉÉ:\n";
|
||
|
||
print MOUTF "<UL>\n";
|
||
|
||
@foos = sort(keys %stats);
|
||
foreach $key (@foos) {
|
||
# For the master file...
|
||
print MOUTF
|
||
"<LI><A HREF=\"$key.html\">\u$key</A> <em>($stats{$key})</em>";
|
||
if ($category_description{$key}) {
|
||
print MOUTF " -- " . $category_description{$key};
|
||
}
|
||
|
||
# Someone forgot to add a category to the description file
|
||
# or there is a typo in the category field.
|
||
else {
|
||
warn "No description found for category: ``$key''!\n";
|
||
warn "Please fix me or send an E-Mail to doc\@FreeBSD.org\a\n";
|
||
sleep(3);
|
||
}
|
||
|
||
print MOUTF "</LI>\n";
|
||
|
||
# Create the category file
|
||
open(OUTF, ">$key.sgml");
|
||
&header(OUTF, "ðÏÒÔÙ FreeBSD: \u$key");
|
||
if ($category_description{$key}) {
|
||
print OUTF "<h3>", $category_description{$key}, "</h3>\n";
|
||
}
|
||
print OUTF "<DL>\n";
|
||
$d = join("\n", sort(split(/\n/, $data{$key})));
|
||
$d =~ s/##([^#]*)##/$catkey{$1}/g;
|
||
print OUTF $d;
|
||
print OUTF "</DL>\n";
|
||
&footer(OUTF, "<p></p><A HREF=\"index.html\">ëÁÔÅÇÏÒÉÉ ðÏÒÔÏ×</A>" .
|
||
" -- <A HREF=\"master-index.html\">éÎÄÅËÓ</A>");
|
||
close(OUTF);
|
||
|
||
}
|
||
print MOUTF "</UL>\n";
|
||
print MOUTF
|
||
"<UL><LI><A HREF=\"master-index.html\">áÌÆÁ×ÉÔÎÙÊ ÓÐÉÓÏË ×ÓÅÈ $portnumber ÐÏÒÔÏ×</A></LI></UL>\n";
|
||
&footer(MOUTF, "");
|
||
close(MOUTF);
|
||
|
||
# Create the master index file
|
||
open(MINDEX, ">master-index.sgml");
|
||
&header(MINDEX, "éÎÄÅËÓ ëÏÌÅËÃÉÉ ðÏÒÔÏ× FreeBSD");
|
||
print MINDEX "<P>\n";
|
||
print MINDEX sort @master;
|
||
print MINDEX "</P>";
|
||
&footer(MINDEX, "<A HREF=\"index.html\">ëÁÔÅÇÏÒÉÉ ðÏÒÔÏ×</A>");
|
||
close(MINDEX);
|
||
close(INDEX);
|
||
}
|