doc/ja/ports/portindex
Johann Kois 6d3560e218 PR: www/123846
Fix the Japanese ports pages.
2008-08-25 12:39:17 +00:00

297 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: www/ja/ports/portindex,v 1.32 2006/08/19 21:24:43 hrs Exp $
# The FreeBSD Japanese Documentation Project
# Original revision: 1.49
############################################################
# 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 = "" if !$base;
$baseHTTP = $base if !$baseHTTP;
$baseFTP = "$ftpserver/pub/FreeBSD/ports/ports";
my $baseCVSWEB = 'http://www.FreeBSD.org/cgi/cvsweb.cgi/';
$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 = '';
$ftparchive = '.tar' if !defined $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[1] || '.') . '/categories', *category_description);
&main;
sub getdate {
# @months = ("January", "February", "March", "April", "May","June",
# "July", "August", "September", "October", "November", "December");
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
# return "Last modified: $mday-$months[$mon]-$year";
$mon++;
return "ºÇ½ª¹¹¿·Æü: $year ǯ $mon ·î $mday Æü";
}
sub header {
local ($fh, $htext) = @_;
print $fh "<!DOCTYPE html PUBLIC \"-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN\" [\n";
print $fh "<!ENTITY base CDATA '..'>\n";
print $fh "<!ENTITY date \"<em>$today</em>\">\n";
print $fh "<!ENTITY title '$htext'>\n";
print $fh "<!ENTITY blurb SYSTEM \"ports.inc\">\n";
print $fh "<!ENTITY % navinclude.ports \"INCLUDE\">\n";
print $fh "<!ENTITY email 'ports'>\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.ja")) {
while (<COMF>) {
($a, $b) = split('\|');
next if !defined($b);
chop($b);
$b =~ s/&/&amp;/g;
$b =~ s/</&lt;/g;
$b =~ s/>/&gt;/g;
$descLANG{$a} = $b;
}
}
open(INDEX, $ARGV[0]);
while (<INDEX>) {
chop;
s/&/&amp;/g;
s/</&lt;/g;
s/>/&gt;/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\//$baseCVSWEB/;
$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.tbz"}) {
$data{$i} .= qq{ | <a href="$packagesURL$name.tbz">¥Ñ¥Ã¥±¡¼¥¸</a>};
} elsif ($packages{"$name.tgz"}) {
$data{$i} .= qq{ | <a href="$packagesURL$name.tgz">¥Ñ¥Ã¥±¡¼¥¸</a>};
}
$data{$i} .= qq{ | <A HREF="$pds?$sourcepath">¥½¡¼¥¹</A>};
if ($www ne "") {
$data{$i} .= qq{ | <a href="$www">Main Web Site</a>};
}
$ownerurl = $owner;
$ownerurl =~ s/&lt;/</g;
$owenrurl =~ s/&gt;/>/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 Ports Collection ¤Ë¤Ï¡¢¸½»þÅÀ¤Ç $portnumber ¸Ä¤Î ports ¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£<br> <A HREF=\"$baseFTP/ports.tar.gz\">$portnumber ¸Ä¤¹¤Ù¤Æ¤Î ports ¤ò tar ¤Ç¤Þ¤È¤á¤Æ gzip ¤·¤¿¤â¤Î</A> (¤ª¤è¤½ 21 ¥á¥¬¥Ð¥¤¥È) ¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤«¡¢°Ê²¼¤ÎʬÎफ¤é¤¿¤É¤Ã¤Æ¤¯¤À¤µ¤¤¡£\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 Ports: \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\">Port ¤ÎʬÎà</A>" .
" -- <A HREF=\"master-index.html\">°ìÍ÷</A>");
close(OUTF);
}
print MOUTF "</UL>\n";
print MOUTF
"<UL><LI><A HREF=\"master-index.html\">$portnumber ¸Ä¤Î ports Á´¤Æ¤ò¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤Ëʤ٤¿°ìÍ÷</A></LI></UL>\n";
&footer(MOUTF, "");
close(MOUTF);
# Create the master index file
open(MINDEX, ">master-index.sgml");
&header(MINDEX, "FreeBSD Ports Collection °ìÍ÷");
print MINDEX "<P>\n";
print MINDEX sort @master;
print MINDEX "</P>";
&footer(MINDEX, "<A HREF=\"index.html\">Port ¤ÎʬÎà</A>");
close(MINDEX);
close(INDEX);
}