docs/124447: [patch] Bring www/en/multimedia into the age of SGML

Edwin Groothuis edwin at mavetju.org
Tue Jun 10 13:50:02 UTC 2008


>Number:         124447
>Category:       docs
>Synopsis:       [patch] Bring www/en/multimedia into the age of SGML
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-doc
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 10 13:50:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Edwin Groothuis
>Release:        FreeBSD 7.0-RELEASE-p1 i386
>Organization:
-
>Environment:
System: FreeBSD k7.mavetju 7.0-RELEASE-p1 FreeBSD 7.0-RELEASE-p1 #2: Wed May 28 08:12:56 EST 2008 edwin at k7.mavetju:/usr/src/sys/i386/compile/k7 i386

>Description:

In cooperation with keramida@:

- Let the conversion script produce SGML output.
- Let the SGML files be translated the normal way to HTML files.
- Cleanup markup on input file to make sure that tidy likes it.

>How-To-Repeat:
>Fix:

Index: Makefile
===================================================================
RCS file: /home/dcvs/www/en/multimedia/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- Makefile	15 May 2007 21:53:43 -0000	1.2
+++ Makefile	10 Jun 2008 13:10:19 -0000
@@ -10,30 +10,30 @@
 .include "Makefile.inc"
 .endif
 
-INDEXLINK= multimedia.html
-
-FXML = multimedia-input.xml
-FHTML = \
-	multimedia.html.intro \
-	multimedia.html.pre \
-	multimedia.html.post
-FLIST = multimedia.created
-FSCRIPT = multimedia.pl
-
-.if exists(${FLIST})
-DATA!=	cat ${FLIST}
-.else
-DATA=	${INDEXLINK}
-.endif
-
-all: ${FLIST}
+#all: build
+all: build
+	cd output && make all DIRPRFX=multimedia/output/
+
+install:
+	cd output && make install DIRPRFX=multimedia/output/
+
+TEMPLATES=	multimedia.sgml.intro \
+		multimedia.sgml.post \
+		multimedia.sgml.pre \
+		multimedia.html.intro \
+		multimedia.html.post \
+		multimedia.html.pre \
+		multimedia-input.xml
 
 clean:
-	if test -f ${FLIST} ; then \
-		xargs ${RM} < ${FLIST} && ${RM} ${FLIST} ; \
-	fi
+	-${RM} output/*
 
-${FLIST}: ${FSCRIPT} ${FXML} ${FHTML}
-	perl -Tw ${FSCRIPT}
+build:
+	(test -d output || ${MKDIR} output ) && \
+	cd output && \
+	${LN} -fs ../Makefile.output Makefile && \
+	( for f in ${TEMPLATES}; do ${LN} -fs ../$$f $$f; done ) && \
+	${PERL} -Tw ../multimedia.pl && \
+	${RM} -f *.html
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: Makefile.inc
===================================================================
RCS file: Makefile.inc
diff -N Makefile.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Makefile.inc	10 Jun 2008 13:10:19 -0000
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+WEBBASE?=       /data/multimedia
+WEB_PREFIX?=    ${.CURDIR}/../../..
Index: Makefile.output
===================================================================
RCS file: Makefile.output
diff -N Makefile.output
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Makefile.output	10 Jun 2008 13:10:19 -0000
@@ -0,0 +1,15 @@
+.if exists(../../Makefile.conf)
+.include "../../Makefile.conf"
+.endif
+.if exists(../../Makefile.inc)
+.include "../../Makefile.inc"
+.endif
+
+DOCS!=		cat multimedia.sgml.created
+DATA=		multimedia.xml
+
+WEBDIR=		multimedia
+
+WEB_PREFIX:=	${WEB_PREFIX}/../
+
+.include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: multimedia-input.xml
===================================================================
RCS file: /home/dcvs/www/en/multimedia/multimedia-input.xml,v
retrieving revision 1.3
diff -u -r1.3 multimedia-input.xml
--- multimedia-input.xml	30 May 2008 15:25:11 -0000	1.3
+++ multimedia-input.xml	10 Jun 2008 13:10:33 -0000
@@ -317,12 +317,12 @@
 		Certification.
 		</p><p>
 		See the following links for more information:
+		</p>
 		<ul>
-		<li>https://register.bsdcertification.org/register/get-a-bsdcg-id
-		<li>http://reedmedia.net/books/freebsd-basics
-		<li>http://www.osbr.ca
+		<li>https://register.bsdcertification.org/register/get-a-bsdcg-id</li>
+		<li>http://reedmedia.net/books/freebsd-basics</li>
+		<li>http://www.osbr.ca</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <overview>http://bsdtalk.blogspot.com/2008/01/bsdtalk139-dru-lavigne.html</overview>
 	    <tags>bsdtalk,interview,dru lavigne,the best of freebsd basics</tags>
@@ -347,17 +347,19 @@
 	<item source="bsdtalk" added="20080125">
 	    <title>Central Syslog</title>
 	    <desc><![CDATA[
+		<p>
 		Setting up a central syslog server.
+		</p>
 		<ul>
-		<li>If you are concerned about the security of your logs, use a dedicated machine and lock it down.
-		<li>Keep clocks in sync.
-		<li>You may need to change log rotation schedule in /etc/newsyslog.conf. You can rotate based in size and/or time. This can be as much a policy decision as a hardware decision.
-		<li>On central log host, change syslogd flags to listen to network. Each BSD does this differently, so check the man pages. Also, check out the -n flag for busy environments.
-		<li>Make sure host firewall allows syslog traffic through.
-		<li>Be careful to limit syslog traffic to just the trusted network or hosts. FreeBSD man page refers to syslogd as a "remote disk filling service".
-		<li>For heavy logging environments, it is important to have a dedicated network. A down syslogd server can create a lot of "ARP who-has" broadcasts.
-		<li>Most network devices such as printers and commercial firewalls support sending to a central syslog server. Take a look at "Snare" for Windows hosts.
-		<li>To send messages from a Unix host, specify the host name prepended with @ instead of a file for logging in /etc/syslog.conf. For example, change /var/log/xferlog to @loghost.mydomain.biz. You can also copy and edit the line to have it log to both a local file and a remote host.
+		<li>If you are concerned about the security of your logs, use a dedicated machine and lock it down.</li>
+		<li>Keep clocks in sync.</li>
+		<li>You may need to change log rotation schedule in /etc/newsyslog.conf. You can rotate based in size and/or time. This can be as much a policy decision as a hardware decision.</li>
+		<li>On central log host, change syslogd flags to listen to network. Each BSD does this differently, so check the man pages. Also, check out the -n flag for busy environments.</li>
+		<li>Make sure host firewall allows syslog traffic through.</li>
+		<li>Be careful to limit syslog traffic to just the trusted network or hosts. FreeBSD man page refers to syslogd as a "remote disk filling service".</li>
+		<li>For heavy logging environments, it is important to have a dedicated network. A down syslogd server can create a lot of "ARP who-has" broadcasts.</li>
+		<li>Most network devices such as printers and commercial firewalls support sending to a central syslog server. Take a look at "Snare" for Windows hosts.</li>
+		<li>To send messages from a Unix host, specify the host name prepended with @ instead of a file for logging in /etc/syslog.conf. For example, change /var/log/xferlog to @loghost.mydomain.biz. You can also copy and edit the line to have it log to both a local file and a remote host.</li>
 		</ul>
 	    ]]></desc>
 	    <overview>http://bsdtalk.blogspot.com/2008/01/bsdtalk138-central-syslog.html</overview>
@@ -646,18 +648,20 @@
 	<item source="bsdtalk" added="20070901">
 	    <title>Why I like the CLI</title>
 	    <desc><![CDATA[
+		<p>
 		Why I like the CLI:
+		</p>
 		<ul>
-		<li>Uses minimal resources. Less space, less memory, fewer dependencies.
-		<li>Transparency. GUI hides internals, limits options.
-		<li>Similar between Unix-like systems. GUI tools seem to change every week.
-		<li>Remote management. SSH rocks.
-		<li>Everything is text. Configs, devices, output. CLI is natural complement.
-		<li>Pipes and scripts. One time is hard, a thousand times is easy.
-		<li>Only need a few tools. Grep, sed, awk, vi, cron.
-		<li>Text config files. Easy to version, share, and comment.
-		<li>Requires reading skills instead of clicking skills.
-		<li>Much faster when you know what you are doing.
+		<li>Uses minimal resources. Less space, less memory, fewer dependencies.</li>
+		<li>Transparency. GUI hides internals, limits options.</li>
+		<li>Similar between Unix-like systems. GUI tools seem to change every week.</li>
+		<li>Remote management. SSH rocks.</li>
+		<li>Everything is text. Configs, devices, output. CLI is natural complement.</li>
+		<li>Pipes and scripts. One time is hard, a thousand times is easy.</li>
+		<li>Only need a few tools. Grep, sed, awk, vi, cron.</li>
+		<li>Text config files. Easy to version, share, and comment.</li>
+		<li>Requires reading skills instead of clicking skills.</li>
+		<li>Much faster when you know what you are doing.</li>
 		</ul>
 	    ]]></desc>
 	    <overview>http://bsdtalk.blogspot.com/2007/08/bsdtalk127-why-i-like-cli.html</overview>
@@ -917,22 +921,22 @@
 	    <title>One Time Passwords</title>
 	    <desc><![CDATA[
 		<ul>
-		<li> Important when you don't trust the computer you are using, such as a library computer or internet kiosk.
-		<li> Available by default in Free/Net/Open BSD.
-		<li> FreeBSD uses OPIE, Net/Open use S/Key.
-		<li> One time passwords are based on your pass phrase, a non-repeating sequence number, and a seed.
-		<li> Initial setup should be done directly on the server.
-		<li> "skeyinit" for Net/Open, "opiepasswd -c" for FreeBSD.
-		<li> Enter a pass phrase that is not your regular account password.
-		<li> Find your current sequence number and seed with "opieinfo" or "skeyinfo", for example: "497 pc5246".
-		<li> Generate a list of the next 10 passwords and write them down, using "opiekey -n 10 497 pc5246" or "skey -n 10 497 pc5246".
-		<li> When you log in from a remote machine that might have a keystroke logger, you can now use a one time password instead of your regular password.
-		<li> For OpenBSD, log in as account:skey, for example "bob:skey", which will cause the system to present the s/key challenge.
-		<li> For NetBSD, the system will always present you with the s/key challenge if it is configured for your account, although you can still use your regular password.
-		<li> FreeBSD by default will force you to use a one time password if it is configured for your account.
-		<li> If you want both OPIE and password authentication, FreeBSD allows you to list trusted networks or hosts in /etc/opieaccess.
-		<li> Instead of carrying a list of passwords around, you can use s/key generators on a portable device that you trust, such as a palm pilot.
-		<li> For more info, check the man pages.
+		<li> Important when you don't trust the computer you are using, such as a library computer or internet kiosk.</li>
+		<li> Available by default in Free/Net/Open BSD.</li>
+		<li> FreeBSD uses OPIE, Net/Open use S/Key.</li>
+		<li> One time passwords are based on your pass phrase, a non-repeating sequence number, and a seed.</li>
+		<li> Initial setup should be done directly on the server.</li>
+		<li> "skeyinit" for Net/Open, "opiepasswd -c" for FreeBSD.</li>
+		<li> Enter a pass phrase that is not your regular account password.</li>
+		<li> Find your current sequence number and seed with "opieinfo" or "skeyinfo", for example: "497 pc5246".</li>
+		<li> Generate a list of the next 10 passwords and write them down, using "opiekey -n 10 497 pc5246" or "skey -n 10 497 pc5246".</li>
+		<li> When you log in from a remote machine that might have a keystroke logger, you can now use a one time password instead of your regular password.</li>
+		<li> For OpenBSD, log in as account:skey, for example "bob:skey", which will cause the system to present the s/key challenge.</li>
+		<li> For NetBSD, the system will always present you with the s/key challenge if it is configured for your account, although you can still use your regular password.</li>
+		<li> FreeBSD by default will force you to use a one time password if it is configured for your account.</li>
+		<li> If you want both OPIE and password authentication, FreeBSD allows you to list trusted networks or hosts in /etc/opieaccess.</li>
+		<li> Instead of carrying a list of passwords around, you can use s/key generators on a portable device that you trust, such as a palm pilot.</li>
+		<li> For more info, check the man pages.</li>
 		</ul>
 	    ]]></desc>
 	    <overview>http://bsdtalk.blogspot.com/2007/06/bsdtalk117-one-time-passwords.html</overview>
@@ -1279,20 +1283,19 @@
 	    <title>Getting to know X</title>
 	    <desc><![CDATA[
 		<p>
-		Getting to know the X Window System.<br>
+		Getting to know the X Window System.<br />
 		Make sure you are in a text only mode. You might
 		need to change how the system boots, or boot into
 		single user mode.
-		</p><p>
+		</p>
 		<ul>
-		<li>"startx" to make sure X is working right.
-		<li>"X" by itself gives the basic grey screen.
-		<li>"ctrl" and "alt" and "backspace" keys at the same time will zap X.
-		<li>"X & xterm -display :0"
-		<li>"xterm -geometry +300+300"
-		<li>"twm" or "metacity"
+		<li>"startx" to make sure X is working right.</li>
+		<li>"X" by itself gives the basic grey screen.</li>
+		<li>"ctrl" and "alt" and "backspace" keys at the same time will zap X.</li>
+		<li>"X & xterm -display :0"</li>
+		<li>"xterm -geometry +300+300"</li>
+		<li>"twm" or "metacity"</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <overview>http://bsdtalk.blogspot.com/2007/03/bsdtalk104-getting-to-know-x.html</overview>
 	    <tags>bsdtalk,X</tags>
@@ -3202,7 +3205,7 @@
 		UKUUG LISA 2006 took place in Durham, UK in March,
 		2006. On this page, you can find my slides from
 		this conference.
-		<br>
+		<br />
 		OpenBSM is a BSD-licensed implementation of Sun's
 		Basic Security Module (BSM) API and file format,
 		and is the foundation of the TrustedBSD audit
@@ -3235,12 +3238,12 @@
 		spanning the BSD's. On this page, you can find my
 		slides from the FreeBSD developer summit and full
 		conference.
-		<br>
+		<br />
 		Status report on the TrustedBSD Project: introduction
 		and status regarding Audit, plus a TODO list;
 		introduction to the priv(9) work recently merged
 		to 7.x.
-		<br>
+		<br />
 		The FreeBSD Project is one of the oldest and most
 		successful open source operating system projects,
 		seeing wide deployment across the IT industry. From
@@ -3332,7 +3335,7 @@
 		to attend the conference itself, and my talks were
 		presented in absentia by Poul-Henning Kamp and Ed
 		Maste, who have my greatest appreciation!
-		<br>
+		<br />
 		The FreeBSD SMPng Project has spent the past five
 		years redesigning and reimplementing SMP support
 		for the FreeBSD operating system, moving from a
@@ -3364,7 +3367,7 @@
 		BSDCan 2004 took place at the University of Ottawa
 		in Ottawa, Canada. On this page, you can find my
 		slides from the conference.
-		<br>
+		<br />
 		Robert Watson will describe a variety of pieces of
 		work done as part of the TrustedBSD Project, including
 		the TrustedBSD MAC Framework, Audit facilities for
@@ -3781,7 +3784,7 @@
 		as an IPv6 router and tunneling system will also
 		be covered.
 		</p><p>
-		<b>Bio</b><br>
+		<b>Bio</b><br />
 		Gene Cronk, CISSP-ISSAP, NSA-IAM is a freelance
 		network security consultant, specializing in *NIX
 		solutions. He has been working with computers for
@@ -3862,19 +3865,19 @@
 		beat the price.
 		</p><p>
 		We plan on covering the following topics:
+		</p>
 		<ul>
-		<li>what it is
-		<li>how it works
-		<li>where to get it
-		<li>how to install it
-		<li>how to configure it
-		<li>how to customize it for your environment
-		<li>where the data is stored
-		<li>how to write a basic plug-in
+		<li>what it is</li>
+		<li>how it works</li>
+		<li>where to get it</li>
+		<li>how to install it</li>
+		<li>how to configure it</li>
+		<li>how to customize it for your environment</li>
+		<li>where the data is stored</li>
+		<li>how to write a basic plug-in</li>
 		</ul>
-		</p>
 		<p>
-		<b>About the Speaker</b><br>
+		<b>About the Speaker</b><br />
 		Marc Spitzer started as a VAX/VMS operator who
 		taught himself some basic scripting in DCL to help
 		me remember how to do procedures that did not come
@@ -3941,7 +3944,7 @@
 		surprisingly useful (and fun)- for developers,
 		sysadmins, and anyone working with BSD systems.
 		</p><p>
-		About the speaker<br>
+		About the speaker<br />
 		Isaac Levy, (ike) is a freelance BSD hadker based
 		in NYC. He runs Diversaform Inc. as an engine to
 		make his hacking feed itself, (and ike). Diversaform
@@ -3984,7 +3987,7 @@
 		of such attacks on servers designed to provide
 		network intensive services such as HTTP or routing.
 		</p><p>
-		About the speaker<br>
+		About the speaker<br />
 		Steven Kreuzer is currently employed by Right Media
 		as a Systems Administrator focusing on building and
 		managing high transaction infrastructures around
@@ -4102,7 +4105,7 @@
 		the global policy. Our goal is a coherent,
 		enterprise-wide response to any network threat.
 		</p><p>
-		<b>Biography</b><br>
+		<b>Biography</b><br />
 		Matthew Burnside is a Ph.D. student in the Computer
 		Science department at Columbia University, in New
 		York. He works for Professor Angelos Keromytis in
@@ -4188,9 +4191,9 @@
 	    <title>New York City BSD Con 2006: BSD is Dying - A Cautionary Tale of Sex and Greed</title>
 	    <desc><![CDATA[
 		<p>
-		<b>BSD is Dying</b><br>
-		<b>A Cautionary Tale of Sex and Greed</b><br>
-		<b>Jason Dixon</b><br>
+		<b>BSD is Dying</b><br />
+		<b>A Cautionary Tale of Sex and Greed</b><br />
+		<b>Jason Dixon</b><br />
 		<b>October 28, 2006</b>
 		</p><p>
 		First and foremost, I would like to thank the unique
@@ -4333,23 +4336,23 @@
 		understandable by everyone, (even techs without
 		UNIX knowledge), and the gear is cheap - this saves
 		time and money.
-		<br>
+		<br />
 		In the meantime, the features of your average Linksys
 		or Netgear router often leave MUCH to be desired,
 		(https auth management, for one simple example).
-		<br>
+		<br />
 		Enter m0n0wall and PFSense, 2 BSD based packaged
 		router/firewall solutions that are as solid and
 		full featured as you`d expect from any BSD system-
 		PLUS THEY HAVE HTML WEB INTERFACES FOR MANAGEMENT!
-		<br>
+		<br />
 		m0n0wall and PFSense become an easy sell in any
 		small professional enviornment, any competent tech
 		can manage the network within minutes... At home,
 		in every hackers home network, they free the hacker
 		to have trusted tools available, but are as time-saving
 		as using any Linksys router.
-		<br>
+		<br />
 		m0n0wall and PFSense are both light and clean,
 		designed to run on embedded systems- (Soekris,
 		WRAP), but are monsters when unleashed on even
@@ -4358,7 +4361,7 @@
 		to manage the router for your DSL when you get home?
 		But then doesn`t it bug you to use a chincey Linksys
 		box?
-		<br>
+		<br />
 		Ike has been a member of NYC*BUG since we first
 		launched in January 2004. He is a long-time member
 		of the Lower East Side Mac Unix User Group. He has
@@ -4384,7 +4387,7 @@
 		 millions of messages to OKCupid`s subscribers.
 		 Topics covered will be system tuning and sendmail
 		 hacks used in house to achieve massive throughput.
-		 <br>
+		 <br />
 		 Alfred Perlstein is the CTO of OKcupid.com, the
 		 largest free online dating site. He has been a
 		 FreeBSD hacker for five years, he`s worked on NFS,
@@ -4458,14 +4461,14 @@
 	    <title>Episode 06 of "FreeBSD for all" uploaded</title>
 	    <desc><![CDATA[
 		<p>
-		This week we talk about-
+		This week we talk about
+		</p>
 		<ul>
-		<li>Macromedia plugin
-		<li>FreeBSD-Linux differences part 2
-		<li>John Baldwin Introduction
-		<li>Podcast anouncement - call for co-hosts!
+		<li>Macromedia plugin</li>
+		<li>FreeBSD-Linux differences part 2</li>
+		<li>John Baldwin Introduction</li>
+		<li>Podcast anouncement - call for co-hosts!</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <overview>http://freebsdforall.blogspot.com/2006/06/episode-06.html</overview>
 	    <tags>freebsd for all,talk,john baldwin,freebsd vs linux</tags>
@@ -4497,10 +4500,10 @@
 	    <desc><![CDATA[
 		<b>Our Topic:</b>
 		FreeBSD's ACPI implementation: The details.
-		<br>
+		<br />
 		<b>Our Speaker:</b>
 		Nate Lawson, FreeBSD Committer.
-		<br>
+		<br />
 		<b>Our Topic:</b>
 		FreeBSD's ACPI implementation is based on code for ACPI released
 		by Intel. Nate and others wrote the glue code to make this code
@@ -4521,12 +4524,12 @@
 	    <desc><![CDATA[
 		<b>Our Topic:</b>
 		Network Protocol Development Tools and Techniques for FreeBSD
-		<br>
+		<br />
 		<b>Our Speaker:</b>
 		George Neville-Neil, co-author of the "Design and
 		Implementation of the FreeBSD Operating System"
 		"daemon" book.
-		<br>
+		<br />
 		<b>Our Topic:</b>
 		While computers have gotten faster and more powerful
 		the tools we use to develop network protocols, such
@@ -4538,10 +4541,10 @@
 		developing a library for use in protocol testing.
 		This talk will cover three topics:
 		<ol>
-		<li>Developing and testing kernel code with Virtual Machines
-		<li>Finding good tests for networking code
+		<li>Developing and testing kernel code with Virtual Machines</li>
+		<li>Finding good tests for networking code</li>
 		<li>Packet Construction Set (PCS) a new library for
-		    writing protocol tests
+		    writing protocol tests</li>
 		</ol>
 		]]></desc>
 	    <tags>bafug,presentation,freebsd,packet construction set,george neville-neil</tags>
@@ -4960,7 +4963,7 @@
 		    <tags>slides</tags>
 		</file>
 		<file>
-		    <url><![CDATA[http://vp.video.google.com/videodownload?version=0&secureurl=uAAAANDveMbSROZ54T6ovHpX7U46rpfxARh9qN1NEemo6WM7qeDBk-8GxxtGIXTqDRuaHnUUJVcUs0bf539CXM4fqBp6xeb9INr7CRp9JPcKZeT9UsSqDsvdYZhiN7xnPzju7rN379RkfS47rjI8TnCJ1iQdrEqhd8Okw_KJcO7O3Iq00GUYYZaedmq5jrmy1ezFXGAG6KURgb8RV19cCaui1U0zVEKd2ApjzlxRHSi89QBih_VSyFE64p3haNyy76qCVQ&sigh=GK-OoKkmqQWNalgoUzB4HmzA3EI&begin=0&len=3967520&docid=-2979502732836620391]]></url>
+		    <url><![CDATA[http://vp.video.google.com/videodownload?version=0&secureurl=uAAAANDveMbSROZ54T6ovHpX7U46rpfxARh9qN1NEemo6WM7qeDBk-8GxxtGIXTqDRuaHnUUJVcUs0bf539CXM4fqBp6xeb9INr7CRp9JPcKZeT9UsSqDsvdYZhiN7xnPzju7rN379RkfS47rjI8TnCJ1iQdrEqhd8Okw_KJcO7O3Iq00GUYYZaedmq5jrmy1ezFXGAG6KURgb8RV19cCaui1U0zVEKd2ApjzlxRHSi89QBih_VSyFE64p3haNyy76qCVQ&sigh=GK-OoKkmqQWNalgoUzB4HmzA3EI&begin=0&len=3967520&amp;docid=-2979502732836620391]]></url>
 		    <length>1:06:07</length>
 		    <desc>Google Video</desc>
 		    <tags>mp4</tags>
@@ -5065,13 +5068,13 @@
 		 </p>
 	    ]]></desc>
 	    <overview><![CDATA[
-		http://video.google.com/videoplay?docid=-4400856579609253323&total=1&start=0&num=10&so=1&type=search&plindex=0
+		http://video.google.com/videoplay?docid=-4400856579609253323&total=1&start=0&num=10&so=1&type=search&plindex=0
 		]]></overview>
 	    <tags>google,presentation,freebsd,freebsd project,robert watson</tags>
 	    <files>
 		<file>
 		    <url><![CDATA[
-			http://vp.video.google.com/videodownload?version=0&secureurl=uAAAAMnsi51RXPgEl7zGKAWEdrKWWWjUJ5q602Nvd2V5YwaDTyCIRM5k8Rq4nUZipL4tHODLiuiSxq34qoHi8TiEyXrdjKI8_WN0fXSKQYyrrlrWKMWd5Vw7AuXiu_B0uHEadc-fR6np2MP0ItJbT-Zx-J0-GCx0Mya2fQLoLG2pb55veUzTepcJz2RsKjNaGM-XUHpxqTZoIh0rggQIkNp-vZzghRb_8JQanc00ChX2CYB3LogDCHj1hpnFFmFd-2sEEg&sigh=ZrfuqGS7FqWRpFYVklZH1V4LRj4&begin=0&len=3053322&docid=-4400856579609253323
+			http://vp.video.google.com/videodownload?version=0&secureurl=uAAAAMnsi51RXPgEl7zGKAWEdrKWWWjUJ5q602Nvd2V5YwaDTyCIRM5k8Rq4nUZipL4tHODLiuiSxq34qoHi8TiEyXrdjKI8_WN0fXSKQYyrrlrWKMWd5Vw7AuXiu_B0uHEadc-fR6np2MP0ItJbT-Zx-J0-GCx0Mya2fQLoLG2pb55veUzTepcJz2RsKjNaGM-XUHpxqTZoIh0rggQIkNp-vZzghRb_8JQanc00ChX2CYB3LogDCHj1hpnFFmFd-2sEEg&sigh=ZrfuqGS7FqWRpFYVklZH1V4LRj4&begin=0&len=3053322&docid=-4400856579609253323
 		    ]]></url>
 		    <size>321 Mb</size>
 		    <length>51 minutes</length>
@@ -5728,7 +5731,7 @@
 		category in the FreeBSD ports tree</a> and has
 		become the maintainer of over 20 of the hamradio
 		ports.  She also contributed to the <a
-		href="http://www.hamsexy.com/wiki/index.php?title=FreeBSD&redirect=no">FreeBSD
+		href="http://www.hamsexy.com/wiki/index.php?title=FreeBSD&redirect=no">FreeBSD
 		entry at Hampedia</a>, the Wikipedia for ham
 		operators.
 		</p><p>
@@ -6057,7 +6060,7 @@
 	    <tags>bsdcan,bsdcan2008,devsummit,devsummit2008,freebsd,embedded,rafal jaworowski</tags>
 	    <files>
 		<file>
-		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=devsummit-200805-embedded_summary.pdf]]></url>
+		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=devsummit-200805-embedded_summary.pdf]]></url>
 		    <length>6 pages</length>
 		    <size>58 Kb</size>
 		    <desc>PDF file</desc>
@@ -6075,7 +6078,7 @@
 	    <tags>bsdcan,bsdcan2008,devsummit,devsummit2008,freebsd,smp,robert watson</tags>
 	    <files>
 		<file>
-		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=20080515-stack-parallelism.pdf]]></url>
+		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=20080515-stack-parallelism.pdf]]></url>
 		    <length>8 pages</length>
 		    <size>70 Kb</size>
 		    <desc>PDF file</desc>
@@ -6093,7 +6096,7 @@
 	    <tags>bsdcan,bsdcan2008,devsummit,devsummit2008,freebsd,portmgr,erwin lansing</tags>
 	    <files>
 		<file>
-		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=portmgr-BSDCan2008.pdf]]></url>
+		    <url><![CDATA[http://wiki.freebsd.org/200805DevSummit?action=AttachFile&do=get&target=portmgr-BSDCan2008.pdf]]></url>
 		    <length>14 pages</length>
 		    <size>146 Kb</size>
 		    <desc>PDF file</desc>
@@ -6240,20 +6243,22 @@
 		PBI installer for PC-BSD desktops.
 		</p><p>
 		The presentation will be divided into two main sections:
-		<br>
+		<br />
 		The Push Button Installer (PBI) Format
+		</p>
 		<ul>
-		<li>The basics of the PBI format
-		<li>The PBI format construction
-		<li>Add & Remove scripting support within PBI
+		<li>The basics of the PBI format</li>
+		<li>The PBI format construction</li>
+		<li>Add & Remove scripting support within PBI</li>
 		</ul>
+		<p>
 		Building PBIs from Ports "Auto-magically"
+		</p>
 		<ul>
-		<li>The PBI build server & standalone software
-		<li>Module creation & configuration
-		<li>Converting messy ports into PBIs
+		<li>The PBI build server & standalone software</li>
+		<li>Module creation & configuration</li>
+		<li>Converting messy ports into PBIs</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2008,slides,pc-bsd,ports,pbi,kris moore</tags>
 	    <files>
@@ -6478,7 +6483,7 @@
 		<i>Beer, prizes, secrets, Works In Progress</i>
 		<p>
 		The traditional closing...
-		<br>
+		<br />
 		with some new and interesting twists. Sleep in if
 		you must, but don't miss this session.
 		</p>
@@ -6637,40 +6642,39 @@
 		cover the in-kernel debugger DDB and the external
 		debugger kgdb which is used to perform post-mortem
 		analysis on kernel crash dumps.
-		</p><p>
+		</p>
 		<h2>Introduction to Debugging the FreeBSD Kernel</h2>
 		<ul>
 		<li>Basic crash messages, what a crash looks like
 		    <ul>
-		    <li>typical panic() invocation
-		    <li>page fault example
-		    </ul>
+		    <li>typical panic() invocation</li>
+		    <li>page fault example</li>
+		    </ul></li>
 		<li>"live" debugging with DDB
 		    <ul>
-		    <li>stack traces
-		    <li>ps
-		    <li>deadlock examples
-		    <li>show lockchain
-		    <li>show sleepchain
-		    <li>Adding new DDB commands
-		    </ul>
+		    <li>stack traces</li>
+		    <li>ps</li>
+		    <li>deadlock examples</li>
+		    <li>show lockchain</li>
+		    <li>show sleepchain</li>
+		    <li>Adding new DDB commands</li>
+		    </ul></li>
 		<li>KGDB
 		    <ul>
-		    <li>inspecting processes and threads
-		    <li>working with kernel modules
-		    <li>using scripts to extend
-		    </ul>
+		    <li>inspecting processes and threads</li>
+		    <li>working with kernel modules</li>
+		    <li>using scripts to extend</li>
+		    </ul></li>
 		<li>examining crashdumps using utilities
 		    <ul>
-		    <li>ps, netstat, etc.
-		    </ul>
+		    <li>ps, netstat, etc.</li>
+		    </ul></li>
 		<li>debugging strategies
 		    <ul>
-		    <li>kernel crashes
-		    <li>system hangs
-		    </ul>
+		    <li>kernel crashes</li>
+		    <li>system hangs</li>
+		    </ul></li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2008,slides,paper,debugging,freebsd,john baldwin</tags>
 	    <files>
@@ -6715,18 +6719,18 @@
 		This talk discusses the port of the DTrace facility
 		to FreeBSD and demonstrates examples on a live
 		FreeBSD system.
+		</p>
 		<ul>
-		<li>Introduction to the D language - probes, predicates and actions.
-		<li>dtrace(8) and libdtrace - the userland side of the DTrace story.
-		<li>The DTrace kernel module, it's ioctl interface to userland and the provider infrastructure in the kernel.
-		<li>DTrace kernel hooks and the problem of code licensed under Sun's CDDL.
-		<li>What does a DTrace probe actually do?
-		<li>DTrace safety and how it is implemented.
-		<li>Build system changes to add CTF (Compact C Type Format) data to objects, shared libraries and executables.
-		<li>The DTrace test suite.
-		<li>A brief list of things to do to port the DTrace facility to other BSD-derived operating systems.
+		<li>Introduction to the D language - probes, predicates and actions.</li>
+		<li>dtrace(8) and libdtrace - the userland side of the DTrace story.</li>
+		<li>The DTrace kernel module, it's ioctl interface to userland and the provider infrastructure in the kernel.</li>
+		<li>DTrace kernel hooks and the problem of code licensed under Sun's CDDL.</li>
+		<li>What does a DTrace probe actually do?</li>
+		<li>DTrace safety and how it is implemented.</li>
+		<li>Build system changes to add CTF (Compact C Type Format) data to objects, shared libraries and executables.</li>
+		<li>The DTrace test suite.</li>
+		<li>A brief list of things to do to port the DTrace facility to other BSD-derived operating systems.</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2008,slides,dtrace,freebsd,john birrell</tags>
 	    <files>
@@ -6889,12 +6893,12 @@
 		to the user. Then we will shift gears and discuss
 		the extended socket API that is available to SCTP
 		users and will cover such items as:
+		</p>
 		<ul>
-		<li>The two socket programming models
-		<li>Extended system calls that support the SCTP feature set.
-		<li>What model may fit you best
+		<li>The two socket programming models</li>
+		<li>Extended system calls that support the SCTP feature set.</li>
+		<li>What model may fit you best</li>
 		</ul>
-		</p>
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2008,abstract,freebsd,sctp,randall stewart</tags>
 	    <files>
@@ -6957,7 +6961,7 @@
 	    <desc><![CDATA[
 		<h1>Opening session</h1>
 		Welcome to BSDCan 2008
-		<br>
+		<br />
 		Traditional greetings
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2008,slides,dan langille</tags>
@@ -6976,8 +6980,8 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
-		Kirk McKusick - Code Reading of Locally-Connected Sockets<br>
+		The 2007 BSDCan conference<br />
+		Kirk McKusick - Code Reading of Locally-Connected Sockets<br />
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,talks,kirk mckusick</tags>
 	    <files>
@@ -6995,8 +6999,8 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
-		Erwin Lansing - The state of the FreeBSD Ports Tree<br>
+		The 2007 BSDCan conference<br />
+		Erwin Lansing - The state of the FreeBSD Ports Tree<br />
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,talks,erwin lansing,ports</tags>
 	    <files>
@@ -7032,8 +7036,8 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
-		Kris Kennaway - Scalability Update 2007<br>
+		The 2007 BSDCan conference<br />
+		Kris Kennaway - Scalability Update 2007<br />
 		Progress on FreeBSD SMP performance and scalablity
 		since BSDCan Dev Summit 2006
 	    ]]></desc>
@@ -7053,7 +7057,7 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
+		The 2007 BSDCan conference<br />
 		Qing Li - Routing, ARP and ND6
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,talks,qing li,routing arp and nd6</tags>
@@ -7072,7 +7076,7 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
+		The 2007 BSDCan conference<br />
 		Marko Zec explains the vimage architecture
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,talks,marko zec,vimage</tags>
@@ -7091,7 +7095,7 @@
 	    <title>BSDCan-2007 - Videos</title>
 	    <overview>http://people.freebsd.org/~julian/BSDCan-2007/</overview>
 	    <desc><![CDATA[
-		The 2007 BSDCan conference<br>
+		The 2007 BSDCan conference<br />
 		Max Laier - PFIL, firewalls and locking
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,talks,max laier,ipf</tags>
@@ -7202,7 +7206,7 @@
 	    <desc><![CDATA[
 		"FreeBSD Portsnap - 
 		What (it is), Why (it was written), and How (it works)"
-		by Colin Percival (cperciva at FreeBSD.org)<br>
+		by Colin Percival (cperciva at FreeBSD.org)<br />
 		(Note: use ^L to get back in non-fullscreen mode)
 	    ]]></desc>
 	    <tags>bsdcan,bsdcan2007,pdf,portsnap,freebsd,colin percival</tags>
Index: multimedia.pl
===================================================================
RCS file: /home/dcvs/www/en/multimedia/multimedia.pl,v
retrieving revision 1.2
diff -u -r1.2 multimedia.pl
--- multimedia.pl	30 May 2008 15:22:01 -0000	1.2
+++ multimedia.pl	10 Jun 2008 13:10:34 -0000
@@ -2,13 +2,14 @@
 
 #
 # $Id$
-# $FreeBSD: www/en/multimedia/multimedia.pl,v 1.2 2008/05/30 15:22:01 remko Exp $
+# $FreeBSD$
 #
 
 use strict;
 use XML::Parser;
 use Data::Dumper;
 use POSIX;
+use IO::File;
 
 my @months = (
     "", "January", "February", "March",
@@ -17,7 +18,9 @@
     "November", "December"
 );
 
-my @createdfiles = ();
+my @createdhtml = ();
+my @createdsgml = ();
+my @createdxml = ();
 
 my @tree = ();
 my @values = ();
@@ -28,6 +31,7 @@
 my %sources;
 my $sid = "";
 my %tags;
+my $tag = "";
 
 sub addtags {
     my $tags = shift;
@@ -78,12 +82,23 @@
      && $treeindex == 5) {
 	$items[$ci]{fc}++;
     }
+
+    if ($treeindex == 3 &&
+	$element eq "tags") {
+	$tag = "";
+    }
 }
 
 sub xml_end {
     my $expat = shift;
     my $element = shift;
 
+    if ($treeindex == 3 &&
+	$element eq "tags") {
+	@{$items[$ci]{tags}} = split(/,/, $tag);
+	addtags($tag);
+    }
+
     $values[$treeindex] = ();
     $treeindex--;
 }
@@ -122,8 +137,7 @@
 		    return;
 		}
 		if ($tree[3] eq "tags") {
-		    @{$items[$ci]{tags}} = split(/,/, $value);
-		    addtags($value);
+		    $tag .= $value;
 		    return;
 		}
 
@@ -240,92 +254,110 @@
 # HTML overview output
 #
 sub print_htmlitem {
+    my $fhandle = shift;
     my $item = shift;
     my %item = %{$item};
     my $source = shift;
     my %source = %{$source};
 
-    print FOUT "<li><p>";
+    print $fhandle "<li><p>";
     if (defined $item{overview}) {
-	print FOUT "<a href=\"$item{overview}\">$item{title}</a>\n";
+	print $fhandle "<a href=\"$item{overview}\">$item{title}</a>\n";
     } else {
 	my %media = %{$item{files}{0}};
-	print FOUT "<a href=\"$media{url}\">$item{title}</a>\n";
+	print $fhandle "<a href=\"$media{url}\">$item{title}</a>\n";
 	if (defined $media{size} || defined $media{length}) {
 	    my $s = "";
-	    print FOUT "(";
+	    print $fhandle "(";
 	    if (defined $media{size}) {
-		print FOUT "$media{size}";
+		print $fhandle "$media{size}";
 		$s = ", ";
 	    }
 	    if (defined $media{length}) {
-		print FOUT "$s$media{length}";
+		print $fhandle "$s$media{length}";
 		$s = ", ";
 	    }
-	    print FOUT ")";
+	    print $fhandle ")";
 	}
     }
-    print FOUT "<br>Source: <a href=\"", $source{url}, "\">",
+    print $fhandle "<br>Source: <a href=\"", $source{url}, "\">",
 	$source{name}, "</a><br>\n";
-    print FOUT "Added: ",
+    print $fhandle "Added: ",
 	    substr($item{added}, 6, 2), " ",
 	    $months[substr($item{added}, 4, 2)], " ",
 	    substr($item{added}, 0, 4), "<br>\n";
 
-    print FOUT "Tags: ";
+    print $fhandle "Tags: ";
     {
 	my $first = 1;
 	foreach my $t (@{$item{tags}}) {
-	    print FOUT ", " if (!$first);
+	    print $fhandle ", " if (!$first);
 #	    join(", ", @{$item{$t}}), "<br>\n";
 	    my $th = $t;
 	    $th =~ s/ /_/g;
-	    print FOUT "<a href=\"multimedia-tag-$th.html\">$t</a>";
+	    print $fhandle "<a href=\"tag-$th.html\">$t</a>";
 	    $first = 0;
 	}
     }
-    print FOUT "<br>\n";
+    print $fhandle "<br>\n";
 
     if (defined $item{overview} && defined $item{files}) {
 	my $c = 0;
 	foreach my $m (keys(%{$item{files}})) {
 	    my %file = %{$item{files}{$m}};
-	    print FOUT ", " if ($c++);
+	    print $fhandle ", " if ($c++);
 	    if (defined $item{prefix}) {
-		print FOUT "<a href=\"$item{prefix}/$file{url}\">$file{desc}</a>";
+		print $fhandle "<a href=\"$item{prefix}/$file{url}\">$file{desc}</a>";
 	    } else {
-		print FOUT "<a href=\"$file{url}\">$file{desc}</a>";
+		print $fhandle "<a href=\"$file{url}\">$file{desc}</a>";
 	    }
 	    if (defined $file{size} || defined $file{length}) {
 		my $s = "";
-		print FOUT " (";
+		print $fhandle " (";
 		if (defined $file{size}) {
-		    print FOUT "$file{size}";
+		    print $fhandle "$file{size}";
 		    $s = ", ";
 		}
 		if (defined $file{length}) {
-		    print FOUT "$s$file{length}";
+		    print $fhandle "$s$file{length}";
 		    $s = ", ";
 		}
-		print FOUT ")";
+		print $fhandle ")";
 	    }
 	}
-	print FOUT "<br>\n";
+	print $fhandle "<br>\n";
     }
-    print FOUT "$item{desc}\n";
+    print $fhandle "</p>\n";
+    print $fhandle "$item{desc}\n";
+    print $fhandle "</li>\n";
 }
 {
-    $createdfiles[$#createdfiles+1] = "multimedia.html";
-    open(FOUT, ">multimedia.html");
+    $createdhtml[$#createdhtml+1] = "multimedia.html";
+    $createdsgml[$#createdsgml+1] = "multimedia.sgml";
+    my $fhtml = new IO::File;
+    my $fsgml = new IO::File;
+
+    open($fhtml, ">multimedia.html");
     open(FIN, "multimedia.html.pre");
     my @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
+    print $fhtml @lines;
     open(FIN, "multimedia.html.intro");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
-    print FOUT "<h2 id=\"latest\">Newest resources</h2>\n";
+    print $fhtml @lines;
+    print $fhtml "<h2 id=\"latest\">Newest resources</h2>\n";
+
+    open($fsgml, ">multimedia.sgml");
+    open(FIN, "multimedia.sgml.pre");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    open(FIN, "multimedia.sgml.intro");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    print $fsgml "<h2 id=\"latest\">Newest resources</h2>\n";
 
     my $month = "";
 
@@ -333,38 +365,64 @@
 	my %item = %{$items[$order]};
 	my %source = %{$sources{$item{source}}};
 	if (substr($item{added}, 0, 6) ne $month) {
-	    print FOUT "</ul><h2>", $months[substr($item{added}, 4, 2)+0], " ", substr($item{added}, 0, 4), "</h2><ul>";
+	    if ($month ne "") {
+		print $fhtml "</ul>\n";
+		print $fsgml "</ul>\n";
+	    }
+	    print $fhtml "<h2>", $months[substr($item{added}, 4, 2)+0], " ", substr($item{added}, 0, 4), "</h2><ul>";
+	    print $fsgml "<h2>", $months[substr($item{added}, 4, 2)+0], " ", substr($item{added}, 0, 4), "</h2><ul>";
 	    $month = substr($item{added}, 0, 6);
 	}
 
-	print_htmlitem(\%item, \%source);
+	print_htmlitem($fhtml, \%item, \%source);
+	print_htmlitem($fsgml, \%item, \%source);
     }
 
-    print FOUT "</ul>\n";
-
+    print $fhtml "</ul>\n";
     open(FIN, "multimedia.html.post");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
+    print $fhtml @lines;
+    close($fhtml);
 
-    close(FOUT);
+    print $fsgml "</ul>\n";
+    open(FIN, "multimedia.sgml.post");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    close($fsgml);
 }
 
 #
 # HTML cloud output
 #
 {
-    $createdfiles[$#createdfiles+1] = "multimedia-tags.html";
-    open(FOUT, ">multimedia-tags.html");
+    $createdhtml[$#createdhtml+1] = "tags.html";
+    $createdsgml[$#createdsgml+1] = "tags.sgml";
+    my $fhtml = new IO::File;
+    my $fsgml = new IO::File;
+    open($fhtml, ">tags.html");
+    open($fsgml, ">tags.sgml");
+
     open(FIN, "multimedia.html.pre");
     my @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
+    print $fhtml @lines;
     open(FIN, "multimedia.html.intro");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
-    print FOUT "<h2 id=\"latest\">Tags</h2>\n";
+    print $fhtml @lines;
+    print $fhtml "<h2 id=\"latest\">Tags</h2>\n";
+
+    open(FIN, "multimedia.sgml.pre");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    open(FIN, "multimedia.sgml.intro");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    print $fsgml "<h2 id=\"latest\">Tags</h2>\n";
 
     my $month = "";
 
@@ -377,16 +435,23 @@
     foreach my $tag (sort size(keys(%tags))) {
 	my $ftag = $tag;
 	$ftag =~ s/ /_/g;
-	print FOUT "<font style=\"font-size:${size}pt\"><a href=\"multimedia-tag-$ftag.html\">$tag</a></font>\n";
+	print $fhtml "<font style=\"font-size:${size}pt\"><a href=\"tag-$ftag.html\">$tag</a></font>\n";
+	print $fsgml "<font style=\"font-size:${size}pt\"><a href=\"tag-$ftag.html\">$tag</a></font>\n";
 	$size-- if ($c++%10 == 0 && $size > 2);
     }
 
     open(FIN, "multimedia.html.post");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
+    print $fhtml @lines;
 
-    close(FOUT);
+    open(FIN, "multimedia.sgml.post");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+
+    close($fhtml);
+    close($fsgml);
 }
 
 #
@@ -394,21 +459,37 @@
 #
 {
     foreach my $tag (keys(%tags)) {
+	my $fhtml = new IO::File;
+	my $fsgml = new IO::File;
+
 	my $ftag = $tag;
 	$ftag =~ s/ /_/g;
-	$createdfiles[$#createdfiles+1] = "multimedia-tag-$ftag.html";
-	open(FOUT, ">multimedia-tag-$ftag.html");
+	$createdhtml[$#createdhtml+1] = "tag-$ftag.html";
+	$createdsgml[$#createdsgml+1] = "tag-$ftag.sgml";
+	open($fhtml, ">tag-$ftag.html");
+	open($fsgml, ">tag-$ftag.sgml");
 
 	open(FIN, "multimedia.html.pre");
 	my @lines = <FIN>;
 	close(FIN);
-	print FOUT @lines;
+	print $fhtml @lines;
 	open(FIN, "multimedia.html.intro");
 	@lines = <FIN>;
 	close(FIN);
-	print FOUT @lines;
-	print FOUT "<h2 id=\"latest\">Tag: $tag</h2>\n";
-	print FOUT "<ul>\n";
+	print $fhtml @lines;
+	print $fhtml "<h2 id=\"latest\">Tag: $tag</h2>\n";
+	print $fhtml "<ul>\n";
+
+	open(FIN, "multimedia.sgml.pre");
+	@lines = <FIN>;
+	close(FIN);
+	print $fsgml @lines;
+	open(FIN, "multimedia.sgml.intro");
+	@lines = <FIN>;
+	close(FIN);
+	print $fsgml @lines;
+	print $fsgml "<h2 id=\"latest\">Tag: $tag</h2>\n";
+	print $fsgml "<ul>\n";
 
 	foreach my $item (@items) {
 	    my %item = %{$item};
@@ -435,16 +516,25 @@
 		}
 	    }
 
-	    print_htmlitem(\%item, \%source) if ($found);
+	    print_htmlitem($fhtml, \%item, \%source) if ($found);
+	    print_htmlitem($fsgml, \%item, \%source) if ($found);
 
 	}
 
-	print FOUT "</ul>\n";
+	print $fhtml "</ul>\n";
 	open(FIN, "multimedia.html.post");
 	@lines = <FIN>;
 	close(FIN);
-	print FOUT @lines;
-	close(FOUT);
+	print $fhtml @lines;
+	close($fhtml);
+
+	print $fsgml "</ul>\n";
+	open(FIN, "multimedia.sgml.post");
+	@lines = <FIN>;
+	close(FIN);
+	print $fsgml @lines;
+	close($fsgml);
+
     }
 }
 
@@ -452,18 +542,35 @@
 # HTML all-sources output
 #
 {
-    $createdfiles[$#createdfiles+1] = "multimedia-sources.html";
-    open(FOUT, ">multimedia-sources.html");
+    my $fhtml = new IO::File;
+    my $fsgml = new IO::File;
+
+    $createdhtml[$#createdhtml+1] = "sources.html";
+    $createdsgml[$#createdsgml+1] = "sources.sgml";
+    open($fhtml, ">sources.html");
+    open($fsgml, ">sources.sgml");
+
     open(FIN, "multimedia.html.pre");
     my @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
+    print $fhtml @lines;
     open(FIN, "multimedia.html.intro");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
-    print FOUT "<h2 id=\"latest\">Sources</h2>\n";
-    print FOUT "<ul>\n";
+    print $fhtml @lines;
+    print $fhtml "<h2 id=\"latest\">Sources</h2>\n";
+    print $fhtml "<ul>\n";
+
+    open(FIN, "multimedia.sgml.pre");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    open(FIN, "multimedia.sgml.intro");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    print $fsgml "<h2 id=\"latest\">Sources</h2>\n";
+    print $fsgml "<ul>\n";
 
     my $lastsource = "";
     foreach my $item (@site_order) {
@@ -471,21 +578,33 @@
 	next if ($lastsource eq $item{source});
 	$lastsource = $item{source};
 
-	print FOUT "<li><a href=\"multimedia-source-$lastsource.html\">", $sources{$item{source}}{name}, "</a>\n";
+	print $fhtml "<li><a href=\"source-$lastsource.html\">", $sources{$item{source}}{name}, "</a>\n";
+	print $fsgml "<li><a href=\"source-$lastsource.html\">", $sources{$item{source}}{name}, "</a>\n";
     }
 
-    print FOUT "</ul>\n";
+    print $fhtml "</ul>\n";
     open(FIN, "multimedia.html.post");
     @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
-    close(FOUT);
+    print $fhtml @lines;
+    close($fhtml);
+
+    print $fsgml "</ul>\n";
+    open(FIN, "multimedia.sgml.post");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    close($fsgml);
+
 }
 
 #
 # HTML per-source output
 #
 {
+    my $fhtml = new IO::File;
+    my $fsgml = new IO::File;
+
     my $lastsource = "";
     foreach my $item (@site_order) {
 	my %item = %{$item};
@@ -493,36 +612,67 @@
 	if ($lastsource ne $item{source}) {
 
 	    if ($lastsource) {
-		print FOUT "</ul>\n";
+		print $fhtml "</ul>\n";
+		print $fsgml "</ul>\n";
+
 		open(FIN, "multimedia.html.post");
 		my @lines = <FIN>;
 		close(FIN);
-		print FOUT @lines;
-		close(FOUT);
+		print $fhtml @lines;
+		close($fhtml);
+
+		open(FIN, "multimedia.sgml.post");
+		@lines = <FIN>;
+		close(FIN);
+		print $fsgml @lines;
+		close($fsgml);
+
 	    }
-	    $createdfiles[$#createdfiles+1] = "multimedia-source-$item{source}.html";
-	    open(FOUT, ">multimedia-source-$item{source}.html");
+	    $createdhtml[$#createdhtml+1] = "source-$item{source}.html";
+	    $createdsgml[$#createdsgml+1] = "source-$item{source}.sgml";
+	    open($fhtml, ">source-$item{source}.html");
+	    open($fsgml, ">source-$item{source}.sgml");
+
 	    open(FIN, "multimedia.html.pre");
 	    my @lines = <FIN>;
 	    close(FIN);
-	    print FOUT @lines;
+	    print $fhtml @lines;
 	    open(FIN, "multimedia.html.intro");
 	    @lines = <FIN>;
 	    close(FIN);
-	    print FOUT @lines;
+	    print $fhtml @lines;
+
+	    open(FIN, "multimedia.sgml.pre");
+	    @lines = <FIN>;
+	    close(FIN);
+	    print $fsgml @lines;
+	    open(FIN, "multimedia.sgml.intro");
+	    @lines = <FIN>;
+	    close(FIN);
+	    print $fsgml @lines;
+
 	    $lastsource = $item{source};
-	    print FOUT "<h2 id=\"latest\">$source{name}</h2>\n";
-	    print FOUT "<ul>\n";
+	    print $fhtml "<h2 id=\"latest\">$source{name}</h2>\n<ul>\n";
+	    print $fsgml "<h2 id=\"latest\">$source{name}</h2>\n<ul>\n";
 	}
-	print_htmlitem(\%item, \%source);
+	print_htmlitem($fhtml, \%item, \%source);
+	print_htmlitem($fsgml, \%item, \%source);
 
     }
-    print FOUT "</ul>\n";
+    print $fhtml "</ul>\n";
+    print $fsgml "</ul>\n";
+
     open(FIN, "multimedia.html.post");
     my @lines = <FIN>;
     close(FIN);
-    print FOUT @lines;
-    close(FOUT);
+    print $fhtml @lines;
+    close($fhtml);
+
+    open(FIN, "multimedia.sgml.post");
+    @lines = <FIN>;
+    close(FIN);
+    print $fsgml @lines;
+    close($fsgml);
 }
 
 #
@@ -579,14 +729,14 @@
 	print FOUT "<pubDate>$date</pubDate>\n";
 	print FOUT "<enclosure url=\"", htmlentities($file{url}), "\" length=\"1\" type=\"application/octet-stream\" />\n";
 	print FOUT "<description>";
-	print FOUT htmlentities("$item{title}<br>From: $source{name}<br>");
-	print FOUT htmlentities("Tags: $tags<br>\n");
+	print FOUT htmlentities("$item{title}<br/>From: $source{name}<br/>");
+	print FOUT htmlentities("Tags: $tags<br/>\n");
 	print FOUT htmlentities("$item{desc}");
 	print FOUT "</description>\n";
 	print FOUT "</item>\n";
     }
 
-    $createdfiles[$#createdfiles+1] = "multimedia.xml";
+    $createdxml[$#createdxml+1] = "multimedia.xml";
     open(FOUT, ">multimedia.xml");
 
     my @s = stat("multimedia-input.xml");
@@ -624,8 +774,14 @@
 # Created files
 #
 {
-    open(FOUT, ">multimedia.created");
-    foreach my $f (@createdfiles) {
+    open(FOUT, ">multimedia.html.created");
+    foreach my $f (@createdhtml) {
+	print FOUT "$f\n";
+    }
+    close(FOUT);
+
+    open(FOUT, ">multimedia.sgml.created");
+    foreach my $f (@createdsgml) {
 	print FOUT "$f\n";
     }
     close(FOUT);
Index: multimedia.sgml.intro
===================================================================
RCS file: multimedia.sgml.intro
diff -N multimedia.sgml.intro
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ multimedia.sgml.intro	10 Jun 2008 13:10:34 -0000
@@ -0,0 +1,24 @@
+<h1>FreeBSD Multimedia Resources List</h1>
+<p>
+Links on this page refer to multimedia resources (podcast, vodcast,
+audio recordings, video recordings, photos) related to FreeBSD or
+of interest for FreeBSD users.
+</p>
+
+<p>
+This list is available as <a href="multimedia.html">chronological
+overview</a>, as a <a href="tags.html">tag cloud</a> and
+via <a href="sources.html">the sources</a>.
+</p>
+
+<p>
+This list is also available as RSS feed <a href="multimedia.xml"><img
+src="http://www.freebsd.org/layout/images/ico_rss.png" alt="RSS Feed"></a>
+</p>
+
+<p>
+If you know any resources not listed here, or notice any dead links,
+please send details to
+<a href="mailto:edwin\@FreeBSD.org">Edwin Groothuis</a> so that
+it can be included or updated.
+</p>
Index: multimedia.sgml.post
===================================================================
RCS file: multimedia.sgml.post
diff -N multimedia.sgml.post
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ multimedia.sgml.post	10 Jun 2008 13:10:35 -0000
@@ -0,0 +1,4 @@
+    &footer;
+  </body>
+</html>
+
Index: multimedia.sgml.pre
===================================================================
RCS file: multimedia.sgml.pre
diff -N multimedia.sgml.pre
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ multimedia.sgml.pre	10 Jun 2008 13:10:35 -0000
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
+<!ENTITY date "$FreeBSD$">
+<!ENTITY title "FreeBSD Multimedia">
+<!ENTITY % navinclude.about "INCLUDE">
+<!ENTITY base "..">
+]>
+<html>
+    &header;
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-doc mailing list