de3f531874
- Move includes.nav*.sgml to share/sgml/navibar.ent and <lang>/share/sgml/navibar.l10n.ent. - Move includes.sgml and includes.xsl to share/sgml/common.ent, share/sgml/header.ent, <lang>/share/sgml/l10n.ent, and <lang>?share/sgml/header.l10n.ent. - Move most of XSLT libraries to share/sgml/*.xsl and <lang>/share/sgml/*.xsl. - Move news.xml and other *.xml files for the similar purpose to share/sgml/*.xml and <lang>/share/sgml/*.xml. - Switch to use a custom DTD for HTML document. Now we use "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension", which is HTML 4.01 + some entities previously pulled via "<!ENTITY % includes SYSTEM "includes.sgml"> %includes;" line. The location of entity file will be resolved by using catalog file. - Add DOCTYPE declearation to XML documents. This makes the followings possible: * Use of &foo; entities for SGML in an XML file instead of defining {$foo} as the same content. * &symbolic; entities for Latin characters. - Duplicated information between SGML and XML, or English and translated doc, has been removed as much as possible.
265 lines
7.2 KiB
Perl
Executable file
265 lines
7.2 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
|
|
|
|
############################################################
|
|
|
|
# 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/FreeBSD-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[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 "Updated $months[$mon] $mday, $year";
|
|
}
|
|
|
|
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 '..'>";
|
|
print $fh "<!ENTITY date \"<em>$today</em>\">\n";
|
|
print $fh "<!ENTITY title '$htext'>";
|
|
print $fh "<!ENTITY blurb SYSTEM \"ports.inc\">\n";
|
|
print $fh "<!ENTITY % navinclude.ports \"INCLUDE\">\n";
|
|
print $fh "<!ENTITY email 'ports'>";
|
|
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>";
|
|
|
|
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/%%;
|
|
|
|
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\">Long description</A>";
|
|
if ($packages{"$name.tgz"}) {
|
|
$data{$i} .= qq{ | <a href="$packagesURL$name.tgz">Package</a>};
|
|
}
|
|
|
|
$data{$i} .= qq{ | <A HREF="$pds?$sourcepath">Sources</A>};
|
|
|
|
if ($www ne "") {
|
|
$data{$i} .= qq{ | <a href="$www">Main Web Site</a>};
|
|
}
|
|
|
|
$ownerurl = $owner;
|
|
$ownerurl =~ s/</</g;
|
|
$owenrurl =~ s/>/>/g;
|
|
$data{$i} .=
|
|
"<BR><I>Maintained by:</I> <A HREF=\"mailto:$ownerurl\">$owner</A>";
|
|
|
|
# If there are any dependencies, list them
|
|
if ($bdep ne "" || $rdep ne "") {
|
|
$data{$i} .= "<BR><I>Requires:</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>Also listed in:</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>There are currently $portnumber ports in the
|
|
FreeBSD Ports Collection.<br> <A HREF=\"$base/ports.tar.gz\">Download
|
|
a gzip'd tar file of all $portnumber ports</A> (about 7 megabytes) or
|
|
browse the following categories:\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};
|
|
}
|
|
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, "<HR><A HREF=\"index.html\">Port Categories</A>" .
|
|
" -- <A HREF=\"master-index.html\">Index</A><HR>");
|
|
close(OUTF);
|
|
|
|
}
|
|
print MOUTF "</UL>\n";
|
|
print MOUTF
|
|
"<UL><LI><A HREF=\"master-index.html\">Alphabetical list of all $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 Index");
|
|
print MINDEX "<P>\n";
|
|
print MINDEX sort @master;
|
|
print MINDEX "</P>";
|
|
&footer(MINDEX, "<HR><A HREF=\"index.html\">Port Categories</A><HR>");
|
|
close(MINDEX);
|
|
close(INDEX);
|
|
}
|