+++ /dev/null
-#!/bin/sh
-
-unset LANG
-PAGES=`curl "http://sourceforge.net/apps/trac/geeqie/wiki/TitleIndex" | \
- sed -e "s|>|>\n|g" |grep 'href=.*/geeqie/wiki/Guide'|sed -e 's|.*/wiki/Guide\([a-zA-Z0-9]*\).*|Guide\1|'`
-
-mkdir wiki
-
-for p in $PAGES ; do
- curl "http://sourceforge.net/apps/trac/geeqie/wiki/$p?format=txt" > wiki/$p
-done
-
-
-
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/python
-#
-# This script converts trac wiki to docbook
-# wiki pages must be in wiki/ directory and their names must start with "Guide"
-# the first page is named GuideIndex
-# output is written to docbook/ directory
-#
-# based on the following scripts:
-#
-# http://trac-hacks.org/wiki/Page2DocbookPlugin
-# http://trac.edgewall.org/attachment/wiki/TracWiki/trac_wiki2html.py
-#
-# see the links above for a list of requirements
-
-
-import sys
-import os
-from trac.test import EnvironmentStub, Mock, MockPerm
-from trac.mimeview import Context
-from trac.wiki.formatter import HtmlFormatter
-from trac.wiki.model import WikiPage
-from trac.web.href import Href
-
-import urllib
-from tidy import parseString
-import libxml2
-import libxslt
-import re
-
-datadir = os.getcwd() + "/wiki2docbook"
-
-
-xhtml2dbXsl = u"""<?xml version="1.0"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <xsl:import href=\"file:///""" + urllib.pathname2url(datadir + '/html2db/html2db.xsl') + """\" />
- <xsl:output method="xml" indent="no" encoding="utf-8"/>
- <xsl:param name="document-root" select="'__top_element__'"/>
-</xsl:stylesheet>
-"""
-
-normalizedHeadingsXsl = u"""<?xml version="1.0"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <xsl:import href=\"file:///""" + urllib.pathname2url(datadir + '/headingsNormalizer/headingsNormalizer.xsl') + """\" />
- <xsl:output method="xml" indent="no" encoding="utf-8"/>
- <xsl:param name="defaultTopHeading" select="FIXME"/>
-</xsl:stylesheet>
-"""
-
-normalizedHeadingsXsl_xmldoc = libxml2.parseDoc(normalizedHeadingsXsl)
-normalizedHeadingsXsl_xsldoc = libxslt.parseStylesheetDoc(normalizedHeadingsXsl_xmldoc)
-
-xhtml2dbXsl_xmldoc = libxml2.parseDoc(xhtml2dbXsl)
-xhtml2dbXsl_xsldoc = libxslt.parseStylesheetDoc(xhtml2dbXsl_xmldoc)
-
-def html2docbook(html):
-
- options = dict(output_xhtml=1, add_xml_decl=1, indent=1, tidy_mark=0, input_encoding='utf8', output_encoding='utf8', doctype='auto', wrap=0, char_encoding='utf8')
- xhtml = parseString(html.encode("utf-8"), **options)
-
- xhtml_xmldoc = libxml2.parseDoc(str(xhtml))
-
- xhtml2_xmldoc = normalizedHeadingsXsl_xsldoc.applyStylesheet(xhtml_xmldoc, None)
-
- nhstring = normalizedHeadingsXsl_xsldoc.saveResultToString(xhtml2_xmldoc)
-
- docbook_xmldoc = xhtml2dbXsl_xsldoc.applyStylesheet(xhtml2_xmldoc, None)
-
- dbstring = xhtml2dbXsl_xsldoc.saveResultToString(docbook_xmldoc)
-
- xhtml_xmldoc.freeDoc()
- xhtml2_xmldoc.freeDoc()
- docbook_xmldoc.freeDoc()
- return dbstring.decode('utf-8')
-
-
-text = {} #wiki text
-depth = {} #document depth, 0 for index, leaf documents have depth 1 or 2
-parent = {}#parent document (if depth > 0)
-inner = {} #defined for documents that are parents
-
-#top element indexed by depth
-top_element = [ 'book', 'chapter', 'section', 'section', 'section', 'section', 'section', 'section', 'section', 'section' ]
-
-env = EnvironmentStub()
-req = Mock(href=Href('/'), abs_href=Href('http://www.example.com/'),
- authname='anonymous', perm=MockPerm(), args={})
-context = Context.from_request(req, 'wiki')
-
-
-def read_file(name):
- text[name] = file("wiki/" + name).read().decode('utf-8')
- page = WikiPage(env)
- page.name = name
- page.text = '--'
- page.save('', '', '::1', 0)
-
-
-def read_index():
- index_name = "GuideIndex"
- read_file(index_name)
- index_text = text[index_name]
- depth[index_name] = 0
- inner[index_name] = 1
-
- stack = [ index_name , '', '', '' ]
-
- for line in index_text.splitlines() :
- match = re.match('^( *)\* \[wiki:(Guide[a-zA-Z0-9]*)', line)
- if match:
- name = match.group(2)
- d = len(match.group(1)) / 2
- if (d > 0):
- depth[name] = d
- parent[name] = stack[d - 1]
- inner[stack[d - 1]] = 1
- stack[d] = name
- read_file(name)
-
-# exclude links with depth > 1 from wiki text, they will be included indirectly
-def filter_out_indirect(text):
- out = ""
- for line in text.splitlines() :
- match = re.match('^( *)\* \[wiki:(Guide[a-zA-Z0-9]*)', line)
- d = 1
- if match:
- d = len(match.group(1)) / 2
- if (d == 1):
- out = out + line + "\n"
- return out
-
-def process_pages():
- for name in text.keys():
- txt = text[name]
-
- if name in inner:
- txt = filter_out_indirect(txt)
-
- html = HtmlFormatter(env, context, txt).generate()
-
- html = html.replace("/wiki/Guide", "#Guide")
-
- top = top_element[depth[name]]
- db = html2docbook(html)
-
- if name in inner:
- # replace list items with XIncludes, FIXME: this is ugly
- r = re.compile('<itemizedlist[^>]*>')
- db = r.sub(r'', db);
-
- r = re.compile('</itemizedlist>')
- db = r.sub(r'', db);
-
- r = re.compile('<listitem>\s*<para>\s*<link\s*linkend="(Guide[a-zA-Z0-9]*)">[^<]*</link>\s*</para>\s*</listitem>')
- db = r.sub(r'<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="\1.xml"/>\n', db);
-
-
- db = db.replace("<__top_element__>", "<" + top + " id=\"" + name + "\">")
- db = db.replace("</__top_element__>", "</" + top + ">")
-
- open("docbook/" + name + ".xml", "w").write(db.encode('utf-8'))
-
-
-read_index()
-process_pages()
-
-
-
+++ /dev/null
-Credits: Filipe Correia
-
-This stylesheet can be applied to xhtml documents. It ensures one one
-h1 element exists per document. If the input document has only one h1
-element it just copies all nodes to the output, otherwise it adds a
-new top level (h1) heading and depromotes every existing heading to a
-lower level (ie, h1s turn into h2s, h2s turn into h3s, etc).
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xhtml="http://www.w3.org/1999/xhtml"
- xmlns="http://www.w3.org/1999/xhtml">
- <xsl:output method="xml" indent="yes"/>
-
- <!--
- This stylesheet can be applied to xhtml documents. It ensures one one
- h1 element exists per document. If the input document has only one h1
- element it just copies all nodes to the output, otherwise it adds a
- new top level (h1) heading and depromotes every existing heading to a
- lower level (ie, h1s turn into h2s, h2s turn into h3s, etc).
- -->
-
- <xsl:param name="defaultHeading" select="'Chapter'"/>
-
- <xsl:template match="xhtml:html" mode="addtoplevelheading">
- <html>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </html>
- </xsl:template>
-
- <xsl:template match="xhtml:body" mode="addtoplevelheading">
- <body><h1><xsl:value-of select="$defaultTopHeading"/></h1>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </body>
- </xsl:template>
-
- <xsl:template match="xhtml:h1" mode="addtoplevelheading">
- <h2>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </h2>
- </xsl:template>
-
- <xsl:template match="xhtml:h2" mode="addtoplevelheading">
- <h3>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </h3>
- </xsl:template>
-
- <xsl:template match="xhtml:h3" mode="addtoplevelheading">
- <h4>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </h4>
- </xsl:template>
-
- <xsl:template match="xhtml:h4" mode="addtoplevelheading">
- <h5>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </h5>
- </xsl:template>
-
- <xsl:template match="xhtml:h5" mode="addtoplevelheading">
- <h6>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </h6>
- </xsl:template>
-
- <xsl:template match="xhtml:h6" mode="addtoplevelheading">
- <section>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </section>
- </xsl:template>
-
- <xsl:template match="@*|node()|text()|comment()|processing-instruction()" priority="-1" mode="addtoplevelheading">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template match="img[@alt]" priority="-1">
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" />
- </xsl:template>
-
- <xsl:template match="@*|node()|text()|comment()|processing-instruction()" priority="-1">
- <xsl:choose>
- <xsl:when test="count(//*[local-name()='h1'])=1">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" />
- </xsl:copy>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy>
- <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()" mode="addtoplevelheading"/>
- </xsl:copy>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-</xsl:stylesheet>
+++ /dev/null
-Credits: Oliver Steele
-http://osteele.com/projects/
-http://osteele.com/software/xslt/html2db/
-
-html2db.xsl converts an XHTML source document into a Docbook output document. It provides features for customizing the generation of the output, so that the output can be tuned by annotating the source, rather than hand-editing the output. This makes it useful in a processing pipeline where the source documents are maintained in HTML, although it can be used as a one-time conversion tool too.
+++ /dev/null
-Preamble
---------
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to
-make reasonable modifications.
-
-Definitions
------------
-"Package" refers to the collection of files distributed by the
-Copyright Holder, and derivatives of that collection of files created
-through textual modification.
-
-"Standard Version" refers to such a Package if it has not been
-modified, or has been modified in accordance with the wishes of the
-Copyright Holder as specified below.
-
-"Copyright Holder" is whoever is named in the copyright or copyrights
-for the package.
-
-"You" is you, if you're thinking about copying or distributing this
-Package.
-
-"Reasonable copying fee" is whatever you can justify on the basis of
-media cost, duplication charges, time of people involved, and so
-on. (You will not be required to justify it to the Copyright Holder,
-but only to the computing community at large as a market that must
-bear the fee.)
-
-"Freely Available" means that no fee is charged for the item itself,
-though there may be fees involved in handling the item. It also means
-that recipients of the item may redistribute it under the same
-conditions they received it.
-
-
-You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that
-you duplicate all of the original copyright notices and associated
-disclaimers.
-
-
-You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder. A Package
-modified in such a way shall still be considered the Standard Version.
-
-
-You may otherwise modify your copy of this Package in any way,
-provided that you insert a prominent notice in each changed file
-stating how and when you changed that file, and provided that you do
-at least ONE of the following:
-
-- place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or
- an equivalent medium, or placing the modifications on a major
- archive site such as uunet.uu.net, or by allowing the Copyright
- Holder to include your modifications in the Standard Version of the
- Package.
-- use the modified Package only within your corporation or
- organization.
-- rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-- make other distribution arrangements with the Copyright Holder.
-
-
-You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
-- distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on
- where to get the Standard Version.
-- accompany the distribution with the machine-readable source of the
- Package with your modifications.
-- give non-standard executables non-standard names, and clearly
- document the differences in manual pages (or equivalent), together
- with instructions on where to get the Standard Version.
-- make other distribution arrangements with the Copyright Holder.
-
-
-You may charge a reasonable copying fee for any distribution of this
-Package. You may charge any fee you choose for support of this
-Package. You may not charge a fee for this Package itself. However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial)
-software distribution provided that you do not advertise this Package
-as a product of your own. You may embed this Package's interpreter
-within an executable of yours (by linking); this shall be construed as
-a mere form of aggregation, provided that the complete Standard
-Version of the interpreter is so embedded.
-
-
-The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whomever generated
-them, and may be sold commercially, and may be aggregated with this
-Package. If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you
-do not represent such an executable image as a Standard Version of
-this Package.
-
-
-C subroutines (or comparably compiled subroutines in other languages)
-supplied by you and linked into this Package in order to emulate
-subroutines and variables of the language defined by this Package
-shall not be considered part of this Package, but are the equivalent
-of input as in Paragraph 6, provided these subroutines do not change
-the language in any way that would cause it to fail the regression
-tests for the language.
-
-
-Aggregation of this Package with a commercial distribution is always
-permitted provided that the use of this Package is embedded; that is,
-when no overt attempt is made to make this Package's interfaces
-visible to the end user of the commercial distribution. Such use shall
-not be construed as a distribution of this Package.
-
-
-The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-
-THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-The End
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Features</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="index.html" title="html2db.xsl"><link rel="next" href="ar01s03.html" title="Requirements"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Features</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="index.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10040"></a>Features</h2></div></div><div></div></div><div class="variablelist"><dl><dt><span class="term">XSLT implementation</span></dt><dd><p>This tool is designed to be embedded within an XSLT processing\r
-pipeline. <tt class="literal">html2html.xslt</tt> can be used in a custom\r
-stylesheet or integrated into a larger system. See <a href="ar01s08.html#embedding" title="Overriding the built-in templates">Overriding</a>.</p></dd><dt><span class="term">Customizable</span></dt><dd><p>The output can be customized by the means of additonal markup in\r
-the XHMTL source. See the section on <a href="ar01s08.html" title="Customization">customization</a>.</p></dd><dt><span class="term">Creates outline structure</span></dt><dd><p><tt class="literal">h1</tt>, <tt class="literal">h2</tt>, etc. are turned into nested\r
-<tt class="literal">section</tt> and <tt class="literal">title</tt> elements (as opposed to\r
-bridge heads).</p></dd><dt><span class="term">Accepts a wide variety of XHTML</span></dt><dd><p>In particular, <tt class="literal">html2db.xsl</tt> automatically wraps <a name="N10075" class="indexterm"></a><i class="glossterm">naked item\r
-text</i> (text that is not enclosed in a <tt class="literal"><p></tt>)\r
-inside a table cell or list item. Naked text is a common property of\r
-XHTML documents, but needs to be clothed to create valid\r
-Docbook.<sup>[<a href="#ftn.N1007F" name="N1007F">1</a>]</sup></p></dd></dl></div><p></p><div class="footnotes"><br><hr align="left" width="100"><div class="footnote"><p><sup>[<a href="#N1007F" name="ftn.N1007F">1</a>] </sup>This feature is limited. See <a href="ar01s07.html#implicit-blocks" title="Implicit Blocks">Implicit Blocks</a>.)</p></div></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="index.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s03.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">html2db.xsl </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Requirements</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Requirements</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s02.html" title="Features"><link rel="next" href="ar01s04.html" title="License"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Requirements</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s02.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10087"></a>Requirements</h2></div></div><div></div></div><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Java: JRE or JDK 1.3 or greater.</p></li><li><p>Xalan 2.5.0.</p></li><li><p>Familiarity with installing and running JAR files.</p></li></ul></div><p><tt class="literal">html2db.xsl</tt> might work with earlier versions of Java and Xalan, and\r
-it might work with other XSLT processors such as Saxon and\r
-xsltproc.</p><p></p></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s02.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s04.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Features </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> License</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>License</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s03.html" title="Requirements"><link rel="next" href="ar01s05.html" title="Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">License</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s03.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1009A"></a>License</h2></div></div><div></div></div><p>This software is released under the Open Source <a href="http://www.opensource.org/licenses/artistic-license.php" target="_top">Artistic License</a>.</p><p></p></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s03.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s05.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Requirements </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Installation</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Installation</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s04.html" title="License"><link rel="next" href="ar01s06.html" title="Usage"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Installation</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s04.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s06.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N100A4"></a>Installation</h2></div></div><div></div></div><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Install JRE 1.3 or higher.</p></li><li><p>Install Xalan, if necessary.</p></li><li><p>Download <tt class="literal">html2db-1.zip</tt> from <a href="http://osteele.com/sources/html2db.zip" target="_top">http://osteele.com/sources/html2db-1.zip</a>.</p></li><li><p>Unzip <tt class="literal">html2db-1.zip</tt>.</p></li></ul></div><p></p></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s04.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s06.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">License </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Usage</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Usage</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s05.html" title="Installation"><link rel="next" href="ar01s07.html" title="Specification"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Usage</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s05.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s07.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N100C0"></a>Usage</h2></div></div><div></div></div><p>Use Xalan to process an XHTML source file into a Docbook file:</p><div class="informalexample"><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">\r
-java org.apache.xalan.xslt.Process -XSL html2dbk.xsl -IN doc.html > doc.xml\r
-</pre></td></tr></table></div><p>See <a href="index.src.html" target="_top"><tt class="literal">index.src.html</tt></a> for an\r
-example of an input file.</p><p>If your source files are in HTML, not XHTML, you may find the <a href="http://tidy.sourceforge.net/" target="_top">Tidy</a> tool useful. This is a\r
-tool that converts from HTML to XHTML, and can be added to the front\r
-of your processing pipeline.</p><p>(If you need to process HTML and you don't know or can't figure out\r
-from context what a processing pipeline is, <tt class="literal">html2db.xsl</tt> is probably not\r
-the right tool for you, and you should look for a local XML or Java\r
-guru or for a commercially supported product.)</p><p></p></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s05.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s07.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Installation </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Specification</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Specification</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s06.html" title="Usage"><link rel="next" href="ar01s08.html" title="Customization"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Specification</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s06.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s08.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N100DB"></a>Specification</h2></div></div><div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N100DF"></a>XHTML Elements</h3></div></div><div></div></div><p><tt class="literal">code/i</tt> stands for "an <tt class="literal">i</tt> element\r
-immediately within a <tt class="literal">code</tt> element". This notation is\r
-from XPath.</p><p>XHTML elements must be in the XHTML Transitional namespace,\r
-<tt class="literal">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</tt>.</p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>XHTML</th><th>Docbook</th><th>Notes</th></tr></thead><tbody><tr><td><tt class="literal">b</tt>, <tt class="literal">i</tt>, <tt class="literal">em</tt>, <tt class="literal">strong</tt></td><td><tt class="literal">emphasis</tt></td><td>The <tt class="literal">role</tt> attribute is the original tag name</td></tr><tr><td><tt class="literal">dfn</tt></td><td><tt class="literal">glossitem</tt>, and also <tt class="literal">primary</tt><tt class="literal">indexterm</tt></td><td class="auto-generated"> </td></tr><tr><td><tt class="literal">code/i</tt>, <tt class="literal">tt/i</tt>, <tt class="literal">pre/i</tt></td><td><tt class="literal">replaceable</tt></td><td>In practice, <tt class="literal">i</tt> within a monospace content is usually used to mean replaceable text. If you're using it for emphasis, use <tt class="literal">em</tt> instead.</td></tr><tr><td><tt class="literal">pre</tt>, <tt class="literal">body/code</tt></td><td><tt class="literal">programlisting</tt></td><td class="auto-generated"> </td></tr><tr><td><tt class="literal">img</tt></td><td><tt class="literal">inlinemediaobject/imageobject/imagedata</tt></td><td>In an inline context.</td></tr><tr><td><tt class="literal">img</tt></td><td><tt class="literal">[informal]figure/mediaobject/imageobject/imagedata</tt></td><td>If it has a <tt class="literal">title</tt> attribute or <tt class="literal">db:title</tt> it's wrapped in a <tt class="literal">figure</tt>. Otherwise it's wrapped in an <tt class="literal">informalfigure</tt>.</td></tr><tr><td><tt class="literal">table</tt></td><td><tt class="literal">[informal]table</tt></td><td>XHTML <tt class="literal">table</tt> becomes Docbook <tt class="literal">table</tt> if it has a <tt class="literal">summary</tt> attribute; <tt class="literal">informaltable</tt> otherwise.</td></tr><tr><td><tt class="literal">ul</tt></td><td><tt class="literal">itemizedlist</tt></td><td>But see the processing instruction <a href="ar01s08.html#simplelist">below</a>.</td></tr></tbody></table></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1017E"></a>Links</h3></div></div><div></div></div><div class="table"><a name="N10181"></a><p class="title"><b>Table 1. Link Translation</b></p><table summary="Link Translation" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>XHTML</th><th>Docbook</th><th>Notes</th></tr></thead><tbody><tr><td><tt class="literal"><a name="<i class="replaceable"><tt>name</tt></i>"></tt></td><td><tt class="literal"><anchor id="{$anchor-id-prefix}<i class="replaceable"><tt>name</tt></i>"></tt></td><td>An anchor within a <tt class="literal">h<i class="replaceable"><tt>n</tt></i></tt> element is attached to the enclosing <tt class="literal">section</tt> as an <tt class="literal">id</tt> attribute instead.</td></tr><tr><td><tt class="literal"><a href="#<i class="replaceable"><tt>name</tt></i>"></tt></td><td><tt class="literal"><link linkend="{$anchor-id-prefix}<i class="replaceable"><tt>name</tt></i>"></tt></td><td class="auto-generated"> </td></tr><tr><td><tt class="literal"><a href="<i class="replaceable"><tt>url</tt></i>"></tt></td><td><tt class="literal"><ulink url="<i class="replaceable"><tt>name</tt></i>"></tt></td><td class="auto-generated"> </td></tr><tr><td><tt class="literal"><a name="mailto:<i class="replaceable"><tt>address</tt></i>"></tt></td><td><tt class="literal"><email><i class="replaceable"><tt>address</tt></i></email></tt></td><td class="auto-generated"> </td></tr></tbody></table></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="tables"></a>Tables</h3></div></div><div></div></div><p>XHTML <tt class="literal">table</tt> support is minimal. <tt class="literal">html2db.xsl</tt> changes the\r
-element names and counts the columns (this is necessary to get table\r
-footnotes to span all the columns), but it does not attempt to deal\r
-with tables in their full generality.</p><p>An XHTML <tt class="literal">table</tt> with a <tt class="literal">summary</tt> attribute\r
-generates a <tt class="literal">table</tt>, whose <tt class="literal">title</tt> is the value\r
-of that summary. An XHTML <tt class="literal">table</tt> without a\r
-<tt class="literal">summary</tt> generates an <tt class="literal">informaltable</tt>.</p><p>Any <tt class="literal">tr</tt>s that contain <tt class="literal">th</tt>s are pulled to\r
-the top of the table, and placed inside a <tt class="literal">thead</tt>. Other\r
-<tt class="literal">tr</tt>s are placed inside a <tt class="literal">tbody</tt>. This matches\r
-the commanon XHTML <tt class="literal">table</tt> pattern, where the first row is\r
-a header row.</p><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="implicit-blocks"></a>Implicit Blocks</h3></div></div><div></div></div><p>XHTML allows <tt class="literal">li</tt>, <tt class="literal">dd</tt>, and <tt class="literal">td</tt>\r
-elements to contain either inline text (for instance,\r
-<tt class="literal"><li>a list item</li></tt>) or block structure\r
-(<tt class="literal"><li><p>a block</p></li></tt>). The\r
-corresponding Docbook elements require block structure, such as\r
-<tt class="literal">para</tt>.</p><p><tt class="literal">html2db.xsl</tt> provides limited support for wrapping naked text in\r
-these positions in <tt class="literal">para</tt> elements. If a list item or\r
-table cell item directly contains text, all text up to the position of\r
-the first element (or all text, if there is no element) is wrapped in\r
-<tt class="literal">para</tt>. This handles the simple case of an item that\r
-directly contains text, and also the case of an item that contains\r
-text followed by blocks such as paragraphs.</p><p>Note that this algorithm is easily confused. It doesn't\r
-distinguish between block and inline XHTML elements, so it will only\r
-wrap the first word in <tt class="literal"><li>some <b>bold</b>\r
-text</li></tt>, leading to badly formatted output. Twhe\r
-workaround is to wrap troublesome content in explicit\r
-<tt class="literal"><p></tt> tags.</p><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="docbook-elements"></a>Docbook Elements</h3></div></div><div></div></div><p>Elements from the Docbook namespace are passed through as is.\r
-There are two ways to include a Docbook element in your XHTML\r
-source:</p><div class="variablelist"><dl><dt><span class="term">Global prefix</span></dt><dd><p>A <a name="N10241" class="indexterm"></a><i class="glossterm">fake Docbook namespace</i><sup>[<a href="#ftn.N10247" name="N10247">2</a>]</sup>\r
-\r
-declaration may be added to the document root element. Anywhere in\r
-the document, the prefix from this namespace declaration may be used\r
-to include a Docbook element. This is useful if a document contains\r
-many Docbook elements, such as <tt class="literal">footnote</tt> or\r
-<tt class="literal">glossterm</tt>, interspersed with XHTML. (In this case it may\r
-be more convenient to allow these elements in the XHMTL namespace and\r
-add a customization layer that translates them to docbook elements,\r
-however. See <a href="ar01s08.html" title="Customization">Customization</a>.)</p><div class="informalexample"><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">\r
-<html xmlns="http://www.w3.org/1999/xhtml"\r
- xmlns:db="urn:docbook">\r
- ...\r
- <p>Some text<db:footnote>and a footnote</db:footnote>.</p>\r
-</pre></td></tr></table></div></dd><dt><span class="term">Local namespace</span></dt><dd><p>A Docbook element may be introduced along with a prefix-less\r
-namespace declaration. This is useful for embedding a Docbook\r
-document fragment (a hierarchy of elements that all use Docbook tags)\r
-within of a XHTML document.</p><div class="informalexample"><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">\r
- ...\r
- <articleinfo xmlns="urn:docbook">\r
- <author>\r
- <firstname>...</firstname>\r
- ...\r
-</pre></td></tr></table></div></dd></dl></div><p>The source to <a href="index.src.html" target="_top">this document</a>\r
-illustrates both of these techniques.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Both these techniques will cause your document to be\r
-invalid as XHTML. In order to validate an XHTML document that\r
-contains Docbook elements, you will need to create a custom schema.\r
-Technically, you then ought to place your document in a different\r
-namespace, but this will cause <tt class="literal">html2db.xsl</tt> not to recognize it!</p></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N10275"></a>Output Processing Instructions</h3></div></div><div></div></div><p><tt class="literal">html2db.xsl</tt> adds a few of processing instructions to the output file.\r
-The Docbook XSL stylesheets ignore these, but if you write a\r
-customization layer for Docbook XSL, you can use the information in\r
-these processing instructions to customize the HTML output. This can\r
-be used, for example, to set the <tt class="literal">a</tt> <tt class="literal">onclick</tt>\r
-and <tt class="literal">target</tt> attributes in the HTML files that Docbook XSL\r
-creates to the same values they had in the input document.</p><div class="variablelist"><dl><dt><span class="term"><tt class="literal"><?html2db attribute="<i class="replaceable"><tt>name</tt></i>" value="<i class="replaceable"><tt>value</tt></i>"?></tt></span></dt><dd><p>Placed inside a link element to capture the value of the <tt class="literal">a</tt> <tt class="literal">target</tt> and <tt class="literal">onclick</tt> attributes. <i class="replaceable"><tt>name</tt></i> is the name of the attribute (<tt class="literal">target</tt> or <tt class="literal">onclick</tt>), and <i class="replaceable"><tt>value</tt></i> is its value, with <tt class="literal">"</tt> and <tt class="literal">\</tt> replaced by <tt class="literal">\"</tt> and <tt class="literal">\\</tt>, respectively.</p></dd><dt><span class="term"><tt class="literal"><?html2db element="br"?></tt></span></dt><dd><p>Represents the location of an XHTML <tt class="literal">br</tt> element in the\r
-source document.</p></dd></dl></div><p>You can also include <tt class="literal"><?db2html?></tt> processing\r
-instructions in the HTML source document, and they will be copied\r
-through to the Docbook output file unchanged (as will all other\r
-processing instructions).</p><p></p></div><div class="footnotes"><br><hr align="left" width="100"><div class="footnote"><p><sup>[<a href="#N10247" name="ftn.N10247">2</a>] </sup>The fake\r
-Docbook namespace is <tt class="literal">urn:docbook</tt>. Docbook doesn't really\r
-have a namespace, and if it did, it wouldn't be this one. See <a href="ar01s10.html#docbook-namespace" title="The Docbook Namespace">Docbook namespace</a> for a discussion of\r
-this issue.</p></div></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s06.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s08.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Usage </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Customization</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Customization</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s07.html" title="Specification"><link rel="next" href="ar01s09.html" title="FAQ"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Customization</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s07.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s09.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="customization"></a>Customization</h2></div></div><div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N102C9"></a>XSLT Parameters</h3></div></div><div></div></div><div class="variablelist"><dl><dt><span class="term"><tt class="literal"><xsl:param name="anchor-id-prefix" select="''/></tt></span></dt><dd><p>Prefixed to every id generated from <tt class="literal"><a name=></tt>\r
- and <tt class="literal"><a href="#"></tt>. This is useful to avoid\r
- collisions between multiple documents that are compiled into the\r
- same book. For instance, if a number of XHTML sources are assembled\r
- into chapters of a book, you style each source file with a prefix of\r
- <tt class="literal"><i class="replaceable"><tt>docid</tt></i>.</tt> where <i class="replaceable"><tt>docid</tt></i> is a unique id\r
- for each source file.</p></dd><dt><span class="term"><tt class="literal"><xsl:param name="document-root" select="'article'"/></tt></span></dt><dd><p>The default document root. This can be overridden by\r
- <tt class="literal"><?html2db class="<i class="replaceable"><tt>name</tt></i>"></tt> within the\r
- document itself, and defaults to <tt class="literal">article</tt>.</p></dd></dl></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="processing-instructions"></a>Processing instructions</h3></div></div><div></div></div><p>Use the <tt class="literal"><?html2db?></tt> processing instruction to\r
-customize the transformation of the XHTML source to Docbook:</p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Processing instruction</th><th>Content</th><th>Effect</th></tr></thead><tbody><tr><td><tt class="literal"><?html2db class="<i class="replaceable"><tt>xxx</tt></i>"?></tt></td><td><tt class="literal">body</tt></td><td>Sets the output document root to <i class="replaceable"><tt>xxx</tt></i>. Useful for\r
-translating to <tt class="literal">prefix</tt>, <tt class="literal">appendix</tt>, or <tt class="literal">chapter</tt>; the default is\r
-<i class="replaceable"><tt>$document-root</tt></i>.</td></tr><tr><td><a name="simplelist"></a><tt class="literal"><?html2db class="simplelist"?></tt></td><td><tt class="literal">ul</tt></td><td>Creates a vertical <tt class="literal">simplelist</tt>.<sup>[<a href="#ftn.N10330" name="N10330">a</a>]</sup></td></tr><tr><td><tt class="literal"><?html2db rowsep="1"?></tt></td><td><tt class="literal">[informal]table</tt></td><td>Sets the <tt class="literal">rowsep</tt> attribute on the generated <tt class="literal">table</tt>.<sup>[<a href="#ftn.N10349" name="N10349">b</a>]</sup></td></tr></tbody><tbody class="footnotes"><tr><td colspan="3"><div class="footnote"><p><sup>[<a href="#N10330" name="ftn.N10330">a</a>] </sup>Note that the\r
-current implementation simply checks for the presence of <span class="em">any</span>\r
-<tt class="literal">html2db</tt> processing instruction.</p></div><div class="footnote"><p><sup>[<a href="#N10349" name="ftn.N10349">b</a>] </sup>Note that the current implementation simply checks for the presence of <span class="em">any</span> <tt class="literal">html2db</tt> processing instruction that begins with <tt class="literal">rowsep</tt>, and assumes the vlaue is <tt class="literal">1</tt>.</p></div></td></tr></tbody></table></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="embedding"></a>Overriding the built-in templates</h3></div></div><div></div></div><p>For cases where the previous techniques don't allow for enough\r
-customization, you can override the builtin templates. You will need\r
-to know XSLT in order to do this, and you will need to write a new\r
-stylesheet that uses the <tt class="literal">xsl:import</tt> element to import\r
-<tt class="literal">html2db.xsl</tt>.</p><p>The <a href="examples.xsl" target="_top"><tt class="literal">example.xsl</tt></a> stylesheet\r
-is an example customization layer. It recognizes the <tt class="literal"><div\r
-class="abstract"></tt> and <tt class="literal"><p class="note"></tt>\r
-classes in the <a href="index.src.html" target="_top">source</a> for this document,\r
-and generates the corresponding Docbook elements.</p><p></p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s07.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s09.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Specification </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> FAQ</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>FAQ</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s08.html" title="Customization"><link rel="next" href="ar01s10.html" title="Implementation Notes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">FAQ</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s08.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s10.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10378"></a>FAQ</h2></div></div><div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1037C"></a>Why generate Docbook?</h3></div></div><div></div></div><p>The primary reason to use Docbook as an <span class="em">output</span> format is\r
-to take advantage of the Docbook XSL stylesheets. These are a\r
-well-designed, well-documented set of XSL stylesheets that provide a\r
-variety of publishing features that would be difficult to recreate\r
-from scratch for HTML:</p><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Automatic Table-of-Contents generation</p></li><li><p>Automatic part, chapter, and section numbering.</p></li><li><p>Creation of single-page, multi-page, PDF, and WinHelp files from the same source document.</p></li><li><p>Navigation headers, footers, and metadata for multi-page HTML\r
-documents.</p></li><li><p>Link resolution and link target text insertion across multiple pages and numbered targets.</p></li><li><p>Figure, example, and table numbering, and tables of these.</p></li><li><p>Index and glossary tools.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1039D"></a>Why write in XHTML?</h3></div></div><div></div></div><p>Given that Docbook is so great, why not write in it?</p><p>Where there are not legacy concerns, Docbook is probably a better\r
-choice for structured or technical documentation.</p><p>Where the only legacy concern is the documents themselves, and not\r
-the tools and skill sets of documentation contributors, you should\r
-consider using an (X)HMTL convertor to perform a one-time conversion\r
-of your documentation source into Docbook, and then switching\r
-development to the result files. You can use this stylesheet to\r
-perform this conversion, or evaluate other tools, many of which are\r
-probably appropriate for this purpose.</p><p>Often there are other legacy concerns: the availability of cheap\r
-(including free) and usable HTML editors and editing modes; and the\r
-fact that it's easier to teach people XHTML than Docbook. If either\r
-of this is an issue in your organization, you may want to maintain\r
-documentation sources in XHTML instead of Docbook</p><p>For example, at <a href="http://www.laszlosystems.com/" target="_top">Laszlo</a>,\r
-most developers contribute directly to the documentation. Requiring\r
-that developers learn Docbook, or that they wait on the doc team to\r
-get content into the docs, would discourage this.</p><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N103AF"></a>Why not use an existing convertor?</h3></div></div><div></div></div><p>This isn't the first (X)HTML to Docbook convertor. Why not use one\r
-of the exisitng ones?</p><p>Each HTML to Docbook convertors that I could find had at least some\r
-of the following limitations, some of which stemmed from their\r
-intended use as one-time-only convertors for legacy documents:</p><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Many only operated on a subset of HTML, and relied upon hand\r
-editing of the output to clean up mistakes. This made them impossible\r
-to use as part of a processing pipeline, where the source is\r
-<span class="em">maintained</span> in XHTML.</p></li><li><p>There was no way to customize the output, except by (1) hand\r
-editing, or (2) writing a post-processing stylesheet, which didn't\r
-have access to the information in the XHTML source document.</p></li><li><p>Many of them were difficult or impossible to customize and\r
-extend. They were closed-source, or written in Java or Perl (which I\r
-find to be a difficult languages to use for customizing this kind of\r
-thing) and embedded in a larger system.</p></li><li><p>They didn't take full advantage of the Docbook tag set and content\r
-model to represent document structure. For instance, they didn't\r
-generate nested <tt class="literal">section</tt> elements to represent\r
-<tt class="literal">h1</tt> <tt class="literal">h2</tt> sequences, or <tt class="literal">table</tt> to\r
-represent tables with <tt class="literal">summary</tt> attributes.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N103D8"></a>I got this error. What does it mean?</h3></div></div><div></div></div><div class="variablelist"><dl><dt><span class="term">Q. <tt class="literal">Fatal Error! The element type "br" must be terminated by the matching end-tag "</br>".\r
-</tt></span></dt><dd><p>A. Your document is HTML, not <span class="em">X</span>HTML. You need to fix it, or run it through Tidy first.</p></dd><dt><span class="term">Q. My output document is empty except for the <tt class="literal"><?xml version="1.0" encoding="UTF-8"?></tt> line.</span></dt><dd><p>A. The document is missing a namespace declaration. See the <a href="index.src.html" target="_top">example</a> for an example.</p></dd><dt><span class="term">Q. Some of the headers and document sections are repeated multiple times.</span></dt><dd><p>A. The document has out-of-sequence headers, such as <tt class="literal">h1</tt> followed by <tt class="literal">h3</tt> (instead of <tt class="literal">h2</tt>). This won't work.</p></dd><dt><span class="term">Q. <tt class="literal">Fatal Error! The prefix "db" for element "db:footnote" is not bound.</tt></span></dt><dd><p>A. You haven't declared the <tt class="literal">db</tt> namespace prefix. See the <a href="index.src.html" target="_top">example</a> for an example.</p></dd></dl></div><p></p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s08.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ar01s10.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Customization </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> Implementation Notes</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Implementation Notes</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="up" href="index.html" title="html2db.xsl"><link rel="previous" href="ar01s09.html" title="FAQ"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Implementation Notes</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s09.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> </td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10414"></a>Implementation Notes</h2></div></div><div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N10418"></a>Bugs</h3></div></div><div></div></div><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Improperly sequenced <tt class="literal">h<i class="replaceable"><tt>n</tt></i></tt> (for example\r
-<tt class="literal">h1</tt> followed by <tt class="literal">h3</tt>, instead of\r
-<tt class="literal">h2</tt>) will result in duplicate text.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1042F"></a>Limitations</h3></div></div><div></div></div><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>The <tt class="literal">id</tt> attribute is only preserved for certain\r
-elements (at least <tt class="literal">h<i class="replaceable"><tt>n</tt></i></tt>, images, paragraphs, and\r
-tables). It ought to be preserved for all of them.</p></li><li><p>Only the <a href="ar01s07.html#tables" title="Tables">very simplest</a> table format is\r
-implemented.</p></li><li><p>Always uses compact lists.</p></li><li><p>The string matching for <tt class="literal"><?html2b\r
-class="<i class="replaceable"><tt>classname</tt></i>"?></tt> requires an exact match\r
-(spaces and all).</p></li><li><p>The <a href="ar01s07.html#implicit-blocks" title="Implicit Blocks">implicit blocks</a> code is easily\r
-confused, as documented in that section. This is\r
-easy to fix now that I understand the difference between block and\r
-inline elements (I didn't when I was implementing this), but I\r
-probably won't do so until I run into the problem again.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1045A"></a>Wishlist</h3></div></div><div></div></div><div class="itemizedlist"><ul type="disc" compact="compact"><li><p>Allow <tt class="literal"><html2db attribute-name="<i class="replaceable"><tt>name</tt></i>"\r
-value="<i class="replaceable"><tt>value</tt></i>"?></tt> at any position, to set arbitrary\r
-Docbook attributes on the generated element.</p></li><li><p>Use different technique from the <a href="ar01s07.html#docbook-elements" title="Docbook Elements">fake\r
-namespace prefix</a> to name Docbook elements in the source, that\r
-preserves the XHTML validity of the source file. For example, an\r
-option transform <tt class="literal"><div class="db:footnote"></tt> into\r
-<tt class="literal"><footnote></tt>, or to use a processing attribute\r
-(<tt class="literal"><div><?html2db classname="footnote"?></tt>).</p></li><li><p>Parse DC metadata from XHTML <tt class="literal">html/head/meta</tt>.</p></li><li><p>Add an option to use <tt class="literal">html/head/title</tt> instead of\r
-<tt class="literal">html/body/h1[1]</tt> for top title.</p></li><li><p>Allow an <tt class="literal">id</tt> on every element.</p></li><li><p>Add an option to translate the XHTML <tt class="literal">class</tt> into a\r
-Docbook <tt class="literal">role</tt>.</p></li><li><p>Preserve more of the whitespace from the source document especially within lists and tables in order to make it easier to debug the output document.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1049D"></a>Design Notes</h3></div></div><div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="docbook-namespace"></a>The Docbook Namespace</h4></div></div><div></div></div><p><tt class="literal">html2db.xsl</tt> accepts elements in the "Docbook namespace" in XHTML\r
-source. This namespace is <tt class="literal">urn:docbook</tt>.</p><p>This isn't technically correct. Docbook doesn't really have a\r
-namespace, and if it did, it wouldn't be this one. <a href="http://www.faqs.org/rfcs/rfc3151.html" target="_top">RFC 3151</a> suggests\r
-<tt class="literal">urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN</tt> as the\r
-Docbook namespace.</p><p>There two problems with the RFC 3151 namespace. First, it's long\r
-and hard to remember. Second, it's limited to Docbook v4.1.2 \r
-but <tt class="literal">html2db.xsl</tt> works with other versions of Docbook too, which would\r
-presumably have other namespaces. I think it's more useful to\r
-<span class="em">under</span>specify the Docbook version in the spec for this tool.\r
-Docbook itself underspecifies the version completely, by avoiding a\r
-namespace at all, but when mixing Docbook and XHTML elements I find it\r
-useful to be <span class="em">more</span> specific than that.</p><p></p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N104C3"></a>History</h3></div></div><div></div></div><p>The original version of <tt class="literal">html2db.xsl</tt> was written by <a href="http://osteele.com" target="_top">Oliver Steele</a>, as part of the <a href="http://laszlosystems.com" target="_top">Laszlo Systems, Inc.</a> documentation\r
-effort. We had a set of custom stylesheets that formatted and added\r
-linking information to programming-language elements such as\r
-<tt class="literal">classname</tt> and <tt class="literal">tagname</tt>, and added\r
-Table-of-Contents to chapter documentation and numbers examples.</p><p>As the documentation set grew, the doc team (John Sundman)\r
-requested features such as inter-chapter navigation, callouts, and\r
-index and glossary elements. I was able to beat all of these back\r
-except for navigation, which seemed critical. After a few days trying\r
-to implement this, I decided it would be simpler to convert the subset\r
-of XHTML that we used into a subset of Docbook, and use the latter to\r
-add navigation. (Once this was done, the other features came for\r
-free.)</p><p>During my August 2004 "sabbatical", I factored the general html2db\r
-code out from the Laszlo-specific code, refactored and otherwise\r
-cleaned it up, and wrote this documentation.</p><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N104DE"></a>Credits</h3></div></div><div></div></div><p><tt class="literal">html2db.xsl</tt> was written by <a href="http://osteele.com" target="_top">Oliver Steele</a>, as part of the <a href="http://laszlosystems.com" target="_top">Laszlo Systems, Inc.</a> documentation effort.</p><p></p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s09.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="index.html">Up</a></td><td align="right" width="40%"> </td></tr><tr><td valign="top" align="left" width="40%">FAQ </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%"> </td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<!-- This build file won't work on your machine. It uses too many\r
-absolute pathnames. I'm including it in case it's useful to you\r
-as a starting point -->\r
-<project default="build">\r
- <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>\r
- <property file="build.properties"/>\r
- \r
- <path id="saxon.processor.classpath">\r
- <pathelement path="${saxon.location}" />\r
- <pathelement path="${xercesImpl.dir}/xercesImpl.jar"/>\r
- <pathelement path="${docbook-xsl}/extensions/saxon651.jar" />\r
- </path>\r
- \r
- <path id="classpath.fop">\r
- <pathelement path="${fop.dir}/fop.jar"/>\r
- <pathelement path="${xerces.dir}/xerces.jar"/>\r
- <pathelement path="${fop.dir}/batik.jar"/>\r
- <pathelement path="${fop.dir}/avalon-framework-cvs-20020806.jar"/>\r
- </path>\r
- \r
- <xmlcatalog id="commonDTDs">\r
- <dtd publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"\r
- location="${dtds}/xhtml1-transitional.dtd"/>\r
- </xmlcatalog>\r
- \r
- <target name="db">\r
- <!-- The output depends on these, but the style task doesn't know this,\r
- so delete them manually -->\r
- <outofdate>\r
- <sourcefiles>\r
- <fileset dir="." includes="html2db.xsl,html2db-common.xsl,html2db-utils.xsl"/>\r
- </sourcefiles>\r
- <targetfiles path="index.xml"/>\r
- <sequential>\r
- <delete file="index.xml"/>\r
- </sequential>\r
- </outofdate>\r
- <style style="example.xsl"\r
- in="index.src.html"\r
- out="index.xml">\r
- <xmlcatalog refid="commonDTDs"/>\r
- </style>\r
- </target>\r
- \r
- <target name="saxon">\r
- <java classname="com.icl.saxon.StyleSheet"\r
- fork="yes" \r
- failonerror="true">\r
- <classpath refid="saxon.processor.classpath" />\r
- <!--jvmarg value="-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>\r
- <jvmarg value="-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl"/>\r
- <jvmarg value="-Dorg.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XIncludeParserConfiguration"/-->\r
- <arg line="-o index.xml"/>\r
- <arg line="index.src.html"/>\r
- <arg line="example.xsl"/>\r
- </java>\r
- </target>\r
- \r
- <target name="just-html">\r
- <style style="${docbook}/html/docbook.xsl"\r
- in="index.xml"\r
- out="index.html">\r
- <param name="shade.verbatim" expression="1"/> \r
- <param name="make.valid.html" expression="1"/>\r
- </style>\r
- </target>\r
- \r
- <target name="html" depends="db,just-html"/>\r
- \r
- <target name="chunk" depends="db">\r
- <mkdir dir="docs"/>\r
- <style style="${docbook}/html/chunk.xsl"\r
- in="index.xml"\r
- out="docs/index.html">\r
- <param name="shade.verbatim" expression="1"/> \r
- </style>\r
- </target>\r
- \r
- <target name="pdf" depends="db">\r
- <style style="${docbook}/fo/docbook.xsl"\r
- in="index.xml"\r
- out="index.fo">\r
- <param name="shade.verbatim" expression="1"/> \r
- <param name="fop.extensions" expression="1"/>\r
- </style>\r
- <outofdate>\r
- <sourcefiles>\r
- <fileset dir="." includes="index.fo"/>\r
- </sourcefiles>\r
- <targetfiles>\r
- <fileset dir="." includes="html2db.pdf"/>\r
- </targetfiles>\r
- <sequential>\r
- <java classname="org.apache.fop.apps.Fop"\r
- fork="yes"\r
- failonerror="true">\r
- <classpath refid="classpath.fop"/>\r
- <arg line="-fo index.fo"/>\r
- <arg line="-pdf html2db.pdf"/>\r
- </java>\r
- </sequential>\r
- </outofdate>\r
- </target>\r
- \r
- <target name="docs" depends="html,chunk,pdf"/>\r
- \r
- <target name="zip" depends="docs">\r
- <zip destfile="build/html2db.zip">\r
- <!-- html2db source -->\r
- <fileset dir="." includes="*.xsl,index.src.html"/>\r
- <fileset dir="." includes="*.xsl,index.src.html,LICENSE.txt"/>\r
- <!-- build source -->\r
- <fileset dir="." includes="build.xml,tidy.properties"/>\r
- <!-- generated docs -->\r
- <fileset dir="." includes="index.xml,index.html,html2db.pdf"/>\r
- <fileset dir="docs"/>\r
- </zip>\r
- </target>\r
- \r
- <target name="build" depends="zip"/>\r
- \r
- <target name="sitedocs" depends="chunk">\r
- <exec executable="tidy">\r
- <arg line="-config tidy.properties -o build/index.html docs/index.html"/>\r
- </exec>\r
- <mkdir dir="build/sitedocs"/>\r
- <style style="extract-toc.xsl"\r
- in="build/index.html"\r
- out="build/sitedocs/index.html">\r
- <xmlcatalog refid="commonDTDs"/>\r
- </style>\r
- <copy todir="build/sitedocs">\r
- <fileset dir="docs" includes="*" excludes="index.html"/>\r
- </copy>\r
- </target>\r
- \r
- <target name="stage" depends="zip,sitedocs">\r
- <property file="build.properties"/>\r
- <echo message="${docbook}"/>\r
- <echo message="${htdocs}"/>\r
- <copy file="build/html2db.zip" todir="${htdocs}/sources"/>\r
- <copy todir="${htdocs}/software/xslt/html2db">\r
- <fileset dir="." includes="*.xsl,index.src.html,build.xml"/>\r
- <fileset dir="." includes="index.xml,html2db.pdf"/>\r
- <fileset dir="build/sitedocs"/>\r
- </copy>\r
- <copy tofile="${htdocs}/software/xslt/html2db/onepage.html"\r
- file="index.html"/>\r
- </target>\r
- \r
- <target name="clean">\r
- <delete>\r
- <fileset dir="." includes="index.fo"/>\r
- <fileset dir="." includes="index.xml,index.html,index.fo,html2db.pdf"/>\r
- <fileset dir="build"/>\r
- <fileset dir="docs"/>\r
- </delete>\r
- </target>\r
- \r
-</project>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Copyright 2004 by Laszlo Systems, Inc.\r
- Released under the Artistic License.\r
- Written by Oliver Steele.\r
- http://osteele.com/sources/xslt/htm2db/\r
- \r
- This is an minimal embedding stylesheet. Make a copy of\r
- this file and customize it with parameter definitions and\r
- template overrides to customize the transformation.\r
- See example.xsl for an example.\r
- -->\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
- xmlns:h="http://www.w3.org/1999/xhtml"\r
- exclude-result-prefixes="h"\r
- version="1.0">\r
- \r
- <xsl:import href="html2db.xsl"/>\r
- \r
- <xsl:template match="h:div[@class='abstract']">\r
- <abstract>\r
- <xsl:apply-templates/>\r
- </abstract>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:p[@class='note']">\r
- <note>\r
- <para>\r
- <xsl:apply-templates/>\r
- </para>\r
- </note>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:pre[@class='example']">\r
- <informalexample>\r
- <xsl:apply-imports/>\r
- </informalexample>\r
- </xsl:template>\r
-\r
-</xsl:stylesheet>\r
+++ /dev/null
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
- xmlns:h="http://www.w3.org/1999/xhtml"\r
- version="1.0">\r
- \r
- <xsl:output method="html"/>\r
- \r
- <xsl:template match="/">\r
- <xsl:apply-templates select="h:html/h:body//h:div[@class='section']"/>\r
- </xsl:template>\r
- \r
- <xsl:template match="@*|node()">\r
- <xsl:copy>\r
- <xsl:apply-templates select="@*|node()"/>\r
- </xsl:copy>\r
- </xsl:template>\r
-</xsl:stylesheet>\r
+++ /dev/null
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
- xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"\r
- exclude-result-prefixes=""\r
- extension-element-prefixes="xalanredirect"\r
- xmlns:h="http://www.w3.org/1999/xhtml"\r
- version="1.0">\r
- \r
- <xsl:output method="html"/>\r
- \r
- <xsl:template match="/">\r
- <xsl:apply-templates select="h:html/h:body/*"/>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:div[@class='toc']">\r
- <xalanredirect:write file="categories.html">\r
- <xsl:apply-templates/>\r
- </xalanredirect:write>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:div[@class='toc']//text()[string(.)='Table of Contents']">\r
- <xsl:value-of select="/h:html/h:head/h:title/text()"/>\r
- </xsl:template>\r
- \r
- <xsl:template match="@*|node()">\r
- <xsl:copy>\r
- <xsl:apply-templates select="@*|node()"/>\r
- </xsl:copy>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:a[string()='']">\r
- <xsl:copy>\r
- <xsl:apply-templates select="@*|node()"/>\r
- <xsl:text> </xsl:text>\r
- </xsl:copy>\r
- </xsl:template>\r
-</xsl:stylesheet>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Copyright 2004 by Laszlo Systems, Inc.\r
- Released under the Artistic License.\r
- Written by Oliver Steele.\r
- http://osteele.com/sources/xslt/htm2db/\r
- \r
- Utility functions\r
- -->\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
- xmlns:exslt="http://exslt.org/common"\r
- xmlns:math="http://exslt.org/math"\r
- xmlns:xalan="http://xml.apache.org/xalan"\r
- xmlns:html2db="urn:html2db"\r
- xmlns:db="urn:docbook"\r
- xmlns:h="http://www.w3.org/1999/xhtml"\r
- exclude-result-prefixes="db exslt h html2db math xalan"\r
- extension-element-prefixes="html2db"\r
- version="1.0">\r
- \r
- <!-- Wrap with ", and backslash " and \ -->\r
- <xsl:template name="quote">\r
- <xsl:param name="str" select="string(.)"/>\r
- <xsl:param name="lquo" select="'"'"/>\r
- <xsl:param name="rquo" select="'"'"/>\r
- <!-- first " -->\r
- <xsl:variable name="qpos" select="string-length(substring-before($str, '"'))"/>\r
- <!-- first \ -->\r
- <xsl:variable name="bspos" select="string-length(substring-before($str, '\\'))"/>\r
- <!-- first " or \ -->\r
- <xsl:variable name="pos">\r
- <xsl:choose>\r
- <xsl:when test="$qpos=0"><xsl:value-of select="$bspos"/></xsl:when>\r
- <xsl:when test="$bspos=0"><xsl:value-of select="$qpos"/></xsl:when>\r
- <xsl:when test="$qpos<$bspos">\r
- <xsl:value-of select="$qpos"/>\r
- </xsl:when>\r
- <xsl:when test="$bspos">\r
- <xsl:value-of select="$bspos"/>\r
- </xsl:when>\r
- </xsl:choose>\r
- </xsl:variable>\r
- <xsl:value-of select="$lquo"/>\r
- <xsl:choose>\r
- <xsl:when test="$pos!=0">\r
- <xsl:value-of select="substring($str, 1, $pos)"/>\r
- <xsl:text>\</xsl:text>\r
- <xsl:value-of select="substring($str, $pos + 1, 1)"/>\r
- <xsl:call-template name="quote">\r
- <xsl:with-param name="str" select="substring($str, $pos + 2)"/>\r
- <xsl:with-param name="lquo" select="''"/>\r
- <xsl:with-param name="rquo" select="''"/>\r
- </xsl:call-template>\r
- </xsl:when>\r
- <xsl:otherwise>\r
- <xsl:value-of select="$str"/>\r
- </xsl:otherwise>\r
- </xsl:choose>\r
- <xsl:value-of select="$rquo"/>\r
- </xsl:template>\r
- \r
-</xsl:stylesheet>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Copyright 2004 by Laszlo Systems, Inc.\r
- Released under the Artistic License.\r
- Written by Oliver Steele.\r
- Version 1.0.1\r
- http://osteele.com/sources/xslt/htm2db/\r
- -->\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
- xmlns:exslt="http://exslt.org/common"\r
- xmlns:java="http://xml.apache.org/xalan/java"\r
- xmlns:math="http://exslt.org/math"\r
- xmlns:db="urn:docbook"\r
- xmlns:h="http://www.w3.org/1999/xhtml"\r
- exclude-result-prefixes="exslt java math db h"\r
- version="1.0">\r
- \r
- <!-- Prefixed to every id generated from <a name=> and <a href="#"> -->\r
- <xsl:param name="anchor-id-prefix" select="''"/>\r
- \r
- <!-- Default document root; can be overridden by <?html2db class=> -->\r
- <xsl:param name="document-root" select="'article'"/>\r
- \r
- <xsl:include href="html2db-utils.xsl"/>\r
- \r
- <!--\r
- Default templates\r
- -->\r
- \r
- <!-- pass docbook elements through unchanged; just strip the prefix\r
- -->\r
- <xsl:template match="db:*">\r
- <xsl:element name="{local-name()}">\r
- <xsl:for-each select="@*">\r
- <xsl:attribute name="{name()}">\r
- <xsl:value-of select="."/>\r
- </xsl:attribute>\r
- </xsl:for-each>\r
- <xsl:apply-templates/>\r
- </xsl:element>\r
- </xsl:template>\r
- \r
- <xsl:template match="@id">\r
- <xsl:copy/>\r
- </xsl:template>\r
- \r
- <!-- copy processing instructions, too -->\r
- <xsl:template match="processing-instruction()">\r
- <xsl:copy/>\r
- </xsl:template>\r
- \r
- <!-- except for html2db instructions -->\r
- <xsl:template match="processing-instruction('html2db')"/>\r
- \r
- <!-- Warn about any html elements that don't match a more\r
- specific template. Copy them too, since it's often\r
- easier to find them in the output. -->\r
- <xsl:template match="h:*">\r
- <xsl:message terminate="no">\r
- Unknown element <xsl:value-of select="name()"/>\r
- </xsl:message>\r
- <xsl:copy>\r
- <xsl:apply-templates/>\r
- </xsl:copy>\r
- </xsl:template>\r
- \r
- <!--\r
- Root element and body\r
- -->\r
- \r
- <!-- ignore everything except the body -->\r
- <xsl:template match="/">\r
- <xsl:apply-templates select="//h:body"/>\r
- </xsl:template>\r
-\r
- <xsl:template match="h:body">\r
- <xsl:variable name="class-pi"\r
- select="processing-instruction('html2db')[starts-with(string(), 'class="')][1]"/>\r
- <xsl:variable name="class">\r
- <xsl:choose>\r
- <xsl:when test="count($class-pi)!=0">\r
- <xsl:value-of select="substring-before(substring-after(string($class-pi[0]), 'class="'), '"')"/>\r
- </xsl:when>\r
- <xsl:otherwise>\r
- <xsl:value-of select="$document-root"/>\r
- </xsl:otherwise>\r
- </xsl:choose>\r
- </xsl:variable>\r
- \r
- <!-- Warn if there are any text nodes outside a para, etc. See\r
- the note at the naked text template for why this is a\r
- warning. -->\r
- <xsl:if test="text()[normalize-space() != '']">\r
- <xsl:message terminate="no">\r
- Text must be inside a <p> tag.\r
- </xsl:message>\r
- </xsl:if>\r
- \r
- <xsl:element name="{$class}">\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:call-template name="section-content">\r
- <xsl:with-param name="level" select="1"/>\r
- <xsl:with-param name="nodes" select="//h:body/node()|//h:body/text()"/>\r
- </xsl:call-template>\r
- </xsl:element>\r
- </xsl:template>\r
- \r
- <!--\r
- Section and section title processing\r
- -->\r
-\r
- <!--\r
- Nest elements that *follow* an h1, h2, etc. into <section> elements\r
- such that the <h1> content is the section's <title>.\r
- -->\r
- <xsl:template name="section-content">\r
- <xsl:param name="level"/>\r
- <xsl:param name="nodes"/>\r
- <xsl:param name="h1" select="concat('h', $level)"/>\r
- <xsl:param name="h2" select="concat('h', $level+1)"/>\r
- <xsl:param name="h2-position" select="count(exslt:node-set($nodes)[1]/following-sibling::*[local-name()=$h2])"/>\r
- \r
- <!-- copy up to first h2 -->\r
- <xsl:apply-templates select="exslt:node-set($nodes)[\r
- count(following-sibling::*[local-name()=$h2])=$h2-position\r
- ]"/>\r
- \r
- <!-- if section is empty, add an empty para so it will validate -->\r
- <xsl:if test="not(exslt:node-set($nodes)/h:para[\r
- count(following-sibling::*[local-name()=$h2])=$h2-position\r
- ])">\r
- <para/>\r
- </xsl:if>\r
- \r
- <!-- subsections -->\r
- <xsl:for-each select="exslt:node-set($nodes)[local-name()=$h2]">\r
- <section>\r
- <xsl:variable name="mynodes" select="exslt:node-set($nodes)[\r
- count(following-sibling::*[local-name()=$h2])=\r
- count(current()/following-sibling::*[local-name()=$h2])]"/>\r
- <xsl:for-each select="exslt:node-set($mynodes)[local-name()=$h2]">\r
- <xsl:choose>\r
- <xsl:when test="@id">\r
- <xsl:apply-templates select="@id"/>\r
- </xsl:when>\r
- <xsl:when test="h:a/@name">\r
- <xsl:attribute name="id">\r
- <xsl:value-of select="concat($anchor-id-prefix, h:a/@name)"/>\r
- </xsl:attribute>\r
- </xsl:when>\r
- </xsl:choose>\r
- </xsl:for-each>\r
- <xsl:call-template name="section-content">\r
- <xsl:with-param name="level" select="$level+1"/>\r
- <xsl:with-param name="nodes" select="exslt:node-set($nodes)[\r
- count(following-sibling::*[local-name()=$h2])=\r
- count(current()/following-sibling::*[local-name()=$h2])]"/>\r
- </xsl:call-template>\r
- </section>\r
- </xsl:for-each>\r
- </xsl:template>\r
- \r
- <!--\r
- Remove anchors from hn titles. section-content attaches these as ids\r
- to the section (after mutilating them as described in the docs).\r
- -->\r
- <xsl:template match="h:h1|h:h2|h:h3|h:h4|h:h5|h:h6">\r
- <title>\r
- <xsl:apply-templates mode="skip-anchors" select="node()"/>\r
- </title>\r
- </xsl:template>\r
- \r
- <xsl:template mode="skip-anchors" match="h:a[@name]">\r
- <xsl:apply-templates/>\r
- </xsl:template>\r
- \r
- <xsl:template mode="skip-anchors" match="node()">\r
- <xsl:apply-templates select="."/>\r
- </xsl:template>\r
- \r
- <!--\r
- Inline elements\r
- -->\r
- <xsl:template match="h:b|h:i|h:em|h:strong">\r
- <emphasis role="{local-name()}">\r
- <xsl:apply-templates/>\r
- </emphasis>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:dfn">\r
- <indexterm significance="preferred">\r
- <primary><xsl:apply-templates/></primary>\r
- </indexterm>\r
- <glossterm><xsl:apply-templates/></glossterm>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:var">\r
- <replaceable><xsl:apply-templates/></replaceable>\r
- </xsl:template>\r
- \r
- <!--\r
- Inline elements in code\r
- -->\r
- <xsl:template match="h:code/h:i|h:tt/h:i|h:pre/h:i">\r
- <replaceable>\r
- <xsl:apply-templates/>\r
- </replaceable>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:code|h:tt">\r
- <literal>\r
- <xsl:if test="@class">\r
- <xsl:attribute name="role"><xsl:value-of select="@class"/></xsl:attribute>\r
- </xsl:if>\r
- <xsl:apply-templates/>\r
- </literal>\r
- </xsl:template>\r
- \r
- <!-- For now, everything that doesn't have a specific match in inline\r
- processing mode is matched against the default processing mode. -->\r
- <xsl:template mode="inline" match="*">\r
- <xsl:apply-templates select="."/>\r
- </xsl:template>\r
- \r
- <!--\r
- Block elements\r
- -->\r
- <xsl:template match="h:p">\r
- <para>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:apply-templates mode="inline"/>\r
- </para>\r
- </xsl:template>\r
- \r
- <!-- Wrap naked text nodes in a <para> so that they'll process more\r
- correctly. The h:body also warns about these, because even\r
- this preprocessing step isn't guaranteed to fix them. This is\r
- because "Some <i>italic</i> text" will be preprocessed into\r
- "<para>Some </para> <emphasis>italic</emphasis><para>\r
- text</para>" instead of "<para>Some <emphasis>italic</emphasis>\r
- text</para>". Getting this right would require more work than\r
- just maintaining the source documents. -->\r
- <xsl:template match="h:body/text()[normalize-space()!= '']">\r
- <!-- add an invalid tag to make it easy to find this in\r
- the generated file -->\r
- <naked-text>\r
- <para>\r
- <xsl:apply-templates/>\r
- </para>\r
- </naked-text>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:body/h:code|h:pre">\r
- <programlisting>\r
- <xsl:apply-templates/>\r
- </programlisting>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:blockquote">\r
- <blockquote>\r
- <xsl:apply-templates mode="item" select="."/>\r
- </blockquote>\r
- </xsl:template>\r
- \r
- <!--\r
- Images\r
- -->\r
- <xsl:template name="imageobject">\r
- <imageobject>\r
- <imagedata fileref="{@src}">\r
- <xsl:apply-templates select="@width|@height"/>\r
- </imagedata>\r
- </imageobject>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:img/@width">\r
- <xsl:copy/>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:img">\r
- <xsl:param name="informal">\r
- <xsl:if test="not(@title) and not(db:title)">informal</xsl:if>\r
- </xsl:param>\r
- <xsl:element name="{$informal}figure">\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:choose>\r
- <xsl:when test="@title">\r
- <title><xsl:value-of select="@title"/></title>\r
- </xsl:when>\r
- <xsl:otherwise>\r
- <xsl:apply-templates select="db:title"/>\r
- </xsl:otherwise>\r
- </xsl:choose>\r
- <mediaobject>\r
- <xsl:call-template name="imageobject"/>\r
- <xsl:if test="@alt and normalize-space(@alt)!=''">\r
- <caption>\r
- <para>\r
- <xsl:value-of select="@alt"/>\r
- </para>\r
- </caption>\r
- </xsl:if>\r
- </mediaobject>\r
- </xsl:element>\r
- </xsl:template>\r
- \r
- <xsl:template mode="inline" match="h:img">\r
- <inlinemediaobject>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:call-template name="imageobject"/>\r
- </inlinemediaobject>\r
- </xsl:template>\r
- \r
- <!--\r
- links\r
- -->\r
- \r
- <!-- anchors -->\r
- <xsl:template match="h:a[@name]">\r
- <anchor id="{$anchor-id-prefix}{@name}"/>\r
- <xsl:apply-templates/>\r
- </xsl:template>\r
- \r
- <!-- internal link -->\r
- <xsl:template match="h:a[starts-with(@href, '#')]">\r
- <link linkend="{$anchor-id-prefix}{substring-after(@href, '#')}">\r
- <xsl:apply-templates select="@*"/>\r
- <xsl:apply-templates/>\r
- </link>\r
- </xsl:template>\r
- \r
- <!-- external link -->\r
- <xsl:template match="h:a">\r
- <ulink url="{@href}">\r
- <xsl:apply-templates select="@*"/>\r
- <xsl:apply-templates/>\r
- </ulink>\r
- </xsl:template>\r
- \r
- <!-- email -->\r
- <xsl:template match="h:a[starts-with(@href, 'mailto:')]">\r
- <email>\r
- <xsl:apply-templates select="@*"/>\r
- <xsl:value-of select="substring-after(@href, 'mailto:')"/>\r
- </email>\r
- </xsl:template>\r
- \r
- <!-- link attributes -->\r
- \r
- <xsl:template match="h:a/@*"/>\r
- \r
- <xsl:template match="h:a/@id">\r
- <xsl:apply-templates select="@id"/>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:a/@target|h:a/@link">\r
- <xsl:processing-instruction name="db2html">\r
- <xsl:text>attribute name="</xsl:text>\r
- <xsl:value-of select="name()"/>\r
- <xsl:text>" value=</xsl:text>\r
- <xsl:call-template name="quote"/>\r
- </xsl:processing-instruction>\r
- </xsl:template>\r
- \r
- <!--\r
- lists\r
- -->\r
- \r
- <xsl:template match="h:dl">\r
- <variablelist>\r
- <xsl:apply-templates select="db:*"/>\r
- <xsl:apply-templates select="h:dt"/>\r
- </variablelist>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:dt">\r
- <xsl:variable name="item-number" select="count(preceding-sibling::h:dt)+1"/>\r
- <varlistentry>\r
- <term>\r
- <xsl:apply-templates/>\r
- </term>\r
- <listitem>\r
- <!-- Select the dd that follows this dt without an intervening dd -->\r
- <xsl:apply-templates mode="item"\r
- select="following-sibling::h:dd[\r
- count(preceding-sibling::h:dt)=$item-number\r
- ]"/>\r
- <!-- If there is no such dd, then insert an empty para -->\r
- <xsl:if test="count(following-sibling::h:dd[\r
- count(preceding-sibling::h:dt)=$item-number\r
- ])=0">\r
- <para/>\r
- </xsl:if>\r
- </listitem>\r
- </varlistentry>\r
- </xsl:template>\r
- \r
- <xsl:template mode="item" match="*[count(h:p) = 0]">\r
- <para>\r
- <xsl:apply-templates/>\r
- </para>\r
- </xsl:template>\r
- \r
- <xsl:template mode="nonblank-nodes" match="node()">\r
- <xsl:element name="{local-name()}"/>\r
- </xsl:template>\r
- \r
- <xsl:template mode="nonblank-nodes" match="text()[normalize-space()='']"/>\r
- \r
- <xsl:template mode="nonblank-nodes" match="text()">\r
- <text/>\r
- </xsl:template>\r
- \r
- <xsl:template mode="item" match="*">\r
- <!-- Test whether the first non-blank node is not a p -->\r
- <xsl:param name="nonblank-nodes">\r
- <xsl:apply-templates mode="nonblank-nodes"/>\r
- </xsl:param>\r
- \r
- <xsl:param name="tested" select="\r
- count(exslt:node-set($nonblank-nodes)/*) != 0 and\r
- local-name(exslt:node-set($nonblank-nodes)/*[1]) != 'p'"/>\r
- \r
- <xsl:param name="n1" select="count(*[1]/following::h:p)"/>\r
- <xsl:param name="n2" select="count(text()[1]/following::h:p)"/>\r
- \r
- <xsl:param name="n">\r
- <xsl:if test="$tested">\r
- <xsl:value-of select="java:java.lang.Math.max($n1, $n2)"/>\r
- </xsl:if>\r
- </xsl:param>\r
- \r
- <xsl:if test="false()">\r
- <nodeset tested="{$tested}" count="{count(exslt:node-set($nonblank-nodes)/*)}">\r
- <xsl:for-each select="exslt:node-set($nonblank-nodes)/*">\r
- <element name="{local-name()}"/>\r
- </xsl:for-each>\r
- </nodeset>\r
- </xsl:if>\r
- \r
- <!-- Wrap everything before the first p into a para -->\r
- <xsl:if test="$tested">\r
- <para>\r
- <xsl:apply-templates select="\r
- node()[count(following::h:p)=$n] |\r
- text()[count(following::h:p)=$n]"/>\r
- </para>\r
- </xsl:if>\r
- <xsl:apply-templates select="\r
- node()[count(following::h:p)!=$n] |\r
- text()[count(following::h:p)!=$n]"/>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:ol">\r
- <orderedlist spacing="compact">\r
- <xsl:for-each select="h:li">\r
- <listitem>\r
- <xsl:apply-templates mode="item" select="."/>\r
- </listitem>\r
- </xsl:for-each>\r
- </orderedlist>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:ul">\r
- <itemizedlist spacing="compact">\r
- <xsl:for-each select="h:li">\r
- <listitem>\r
- <xsl:apply-templates mode="item" select="."/>\r
- </listitem>\r
- </xsl:for-each>\r
- </itemizedlist>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:ul[processing-instruction('html2db')]">\r
- <simplelist>\r
- <xsl:for-each select="h:li">\r
- <member type="vert">\r
- <xsl:apply-templates mode="item" select="."/>\r
- </member>\r
- </xsl:for-each>\r
- </simplelist>\r
- </xsl:template>\r
- \r
- <!--\r
- ignored markup\r
- -->\r
- <xsl:template match="h:br">\r
- <xsl:processing-instruction name="db2html">\r
- <xsl:text>element="</xsl:text>\r
- <xsl:value-of select="local-name()"/>\r
- <xsl:text>"</xsl:text>\r
- </xsl:processing-instruction>\r
- </xsl:template>\r
- \r
- <xsl:template match="h:span|h:div">\r
- <xsl:apply-templates select="*|node()|text()"/>\r
- </xsl:template>\r
- \r
- <!--\r
- Utility functions and templates for tables\r
- -->\r
- <xsl:template mode="count-columns" match="h:tr">\r
- <n>\r
- <xsl:value-of select="count(h:td)"/>\r
- </n>\r
- </xsl:template>\r
- \r
- <!-- tables -->\r
- <xsl:template match="h:table">\r
- <xsl:param name="informal">\r
- <xsl:if test="not(@summary)">informal</xsl:if>\r
- </xsl:param>\r
- <xsl:param name="colcounts">\r
- <xsl:apply-templates mode="count-columns" select=".//h:tr"/>\r
- </xsl:param>\r
- <xsl:param name="cols" select="math:max(exslt:node-set($colcounts)/n)"/>\r
- <xsl:param name="sorted">\r
- <xsl:for-each select="exslt:node-set($colcounts)/n">\r
- <xsl:sort order="descending" data-type="number"/>\r
- <n><xsl:value-of select="."/></n>\r
- </xsl:for-each>\r
- </xsl:param>\r
- <xsl:element name="{$informal}table">\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:if test="processing-instruction('html2db')[starts-with(., 'rowsep')]">\r
- <xsl:attribute name="rowsep">1</xsl:attribute>\r
- </xsl:if>\r
- <xsl:apply-templates select="processing-instruction()"/>\r
- <xsl:if test="@summary">\r
- <title><xsl:value-of select="@summary"/></title>\r
- </xsl:if>\r
- <tgroup cols="{$cols}">\r
- <xsl:if test=".//h:tr/h:th">\r
- <thead>\r
- <xsl:for-each select=".//h:tr[count(h:th)!=0]">\r
- <row>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:for-each select="h:td|h:th">\r
- <entry>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:apply-templates/>\r
- </entry>\r
- </xsl:for-each>\r
- </row>\r
- <xsl:text> </xsl:text> <!-- cr -->\r
- </xsl:for-each>\r
- </thead>\r
- </xsl:if>\r
- <tbody>\r
- <xsl:for-each select=".//h:tr[count(h:th)=0]">\r
- <row>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:for-each select="h:td|h:th">\r
- <entry>\r
- <xsl:apply-templates select="@id"/>\r
- <xsl:apply-templates/>\r
- </entry>\r
- </xsl:for-each>\r
- </row>\r
- <xsl:text> </xsl:text> <!-- cr -->\r
- </xsl:for-each>\r
- </tbody>\r
- </tgroup>\r
- </xsl:element>\r
- </xsl:template>\r
-</xsl:stylesheet>\r
+++ /dev/null
-<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>html2db.xsl</title><meta content="DocBook XSL Stylesheets V1.65.1" name="generator"><link rel="home" href="index.html" title="html2db.xsl"><link rel="next" href="ar01s02.html" title="Features"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">html2db.xsl</th></tr><tr><td align="left" width="20%"> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s02.html">Next</a></td></tr></table><hr></div><div class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="N10001"></a>html2db.xsl</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Oliver</span> <span class="surname">Steele</span></h3></div></div><div><div class="revhistory"><table summary="Revision history" width="100%" border="1"><tr><th colspan="2" valign="top" align="left"><b>Revision History</b></th></tr><tr><td align="left">Revision 1</td><td align="left">2004-07-30</td></tr><tr><td align="left">Revision 1.0.1</td><td align="left">2004-08-01</td></tr><tr><td colspan="2" align="left"><p>Editorial changes to the\r
- readme.</p></td></tr></table></div></div></div><div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="index.html#N10020">Overview</a></span></dt><dt><span class="section"><a href="ar01s02.html">Features</a></span></dt><dt><span class="section"><a href="ar01s03.html">Requirements</a></span></dt><dt><span class="section"><a href="ar01s04.html">License</a></span></dt><dt><span class="section"><a href="ar01s05.html">Installation</a></span></dt><dt><span class="section"><a href="ar01s06.html">Usage</a></span></dt><dt><span class="section"><a href="ar01s07.html">Specification</a></span></dt><dd><dl><dt><span class="section"><a href="ar01s07.html#N100DF">XHTML Elements</a></span></dt><dt><span class="section"><a href="ar01s07.html#N1017E">Links</a></span></dt><dt><span class="section"><a href="ar01s07.html#tables">Tables</a></span></dt><dt><span class="section"><a href="ar01s07.html#implicit-blocks">Implicit Blocks</a></span></dt><dt><span class="section"><a href="ar01s07.html#docbook-elements">Docbook Elements</a></span></dt><dt><span class="section"><a href="ar01s07.html#N10275">Output Processing Instructions</a></span></dt></dl></dd><dt><span class="section"><a href="ar01s08.html">Customization</a></span></dt><dd><dl><dt><span class="section"><a href="ar01s08.html#N102C9">XSLT Parameters</a></span></dt><dt><span class="section"><a href="ar01s08.html#processing-instructions">Processing instructions</a></span></dt><dt><span class="section"><a href="ar01s08.html#embedding">Overriding the built-in templates</a></span></dt></dl></dd><dt><span class="section"><a href="ar01s09.html">FAQ</a></span></dt><dd><dl><dt><span class="section"><a href="ar01s09.html#N1037C">Why generate Docbook?</a></span></dt><dt><span class="section"><a href="ar01s09.html#N1039D">Why write in XHTML?</a></span></dt><dt><span class="section"><a href="ar01s09.html#N103AF">Why not use an existing convertor?</a></span></dt><dt><span class="section"><a href="ar01s09.html#N103D8">I got this error. What does it mean?</a></span></dt></dl></dd><dt><span class="section"><a href="ar01s10.html">Implementation Notes</a></span></dt><dd><dl><dt><span class="section"><a href="ar01s10.html#N10418">Bugs</a></span></dt><dt><span class="section"><a href="ar01s10.html#N1042F">Limitations</a></span></dt><dt><span class="section"><a href="ar01s10.html#N1045A">Wishlist</a></span></dt><dt><span class="section"><a href="ar01s10.html#N1049D">Design Notes</a></span></dt><dt><span class="section"><a href="ar01s10.html#N104C3">History</a></span></dt><dt><span class="section"><a href="ar01s10.html#N104DE">Credits</a></span></dt></dl></dd></dl></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10020"></a>Overview</h2></div></div><div></div></div><p><tt class="literal">html2db.xsl</tt> converts an XHTML source document into a Docbook output\r
-document. It provides features for customizing the generation of the\r
-output, so that the output can be tuned by annotating\r
-the source, rather than hand-editing the output. This makes it useful\r
-in a processing pipeline where the source documents are maintained in\r
-HTML, although it can be used as a one-time conversion tool\r
-too.</p><p>This document is an example of <tt class="literal">html2db.xsl</tt> used in conjunction with\r
-the Docbook XSL stylesheets. The <a href="index.src.html" target="_top">source\r
-file</a> is an XHTML file with some embedded Docbook elements and\r
-processing instructions. <tt class="literal">html2db.xsl</tt> compiles it into a <a href="index.xml" target="_top">Docbook document</a>, which can be used to generate\r
-this output file (which includes a Table of Contents), a <a href="docs/index.html" target="_top">chunked HTML file</a>, a <a href="html2db.pdf" target="_top">PDF</a>, or other formats.</p><p></p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ar01s02.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%"> </td><td align="center" width="20%"> </td><td valign="top" align="right" width="40%"> Features</td></tr></table></div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [\r
-<!ENTITY html2db "<code>html2db.xsl</code>">\r
-]>\r
-<html xmlns:x="http://www.w3.org/1999/xhtml"\r
- xmlns:db="urn:docbook">\r
-<head>\r
-<title>This title is ignored</title>\r
-</head>\r
-<body>\r
-\r
-<h1>html2db.xsl</h1>\r
-\r
-<!-- The xmlns attribute escapes into the Docbook namespace -->\r
-<articleinfo xmlns="urn:docbook">\r
- <author>\r
- <firstname>Oliver</firstname>\r
- <surname>Steele</surname>\r
- </author>\r
- <revhistory>\r
- <revision>\r
- <revnumber>1</revnumber>\r
- <date>2004-07-30</date>\r
- </revision>\r
- <revision>\r
- <revnumber>1.0.1</revnumber>\r
- <date>2004-08-01</date>\r
- <revdescription><para>Editorial changes to the\r
- readme.</para></revdescription>\r
- </revision>\r
- </revhistory>\r
- <date>2004-07-30</date>\r
-</articleinfo>\r
-\r
-<h2>Overview</h2>\r
-\r
-<p>&html2db; converts an XHTML source document into a Docbook output\r
-document. It provides features for customizing the generation of the\r
-output, so that the output can be tuned by annotating\r
-the source, rather than hand-editing the output. This makes it useful\r
-in a processing pipeline where the source documents are maintained in\r
-HTML, although it can be used as a one-time conversion tool\r
-too.</p>\r
-\r
-<p>This document is an example of &html2db; used in conjunction with\r
-the Docbook XSL stylesheets. The <a href="index.src.html">source\r
-file</a> is an XHTML file with some embedded Docbook elements and\r
-processing instructions. &html2db; compiles it into a <a\r
-href="index.xml">Docbook document</a>, which can be used to generate\r
-this output file (which includes a Table of Contents), a <a\r
-href="docs/index.html">chunked HTML file</a>, a <a\r
-href="html2db.pdf">PDF</a>, or other formats.</p>\r
-\r
-<h2>Features</h2>\r
-<dl>\r
-<dt>XSLT implementation</dt>\r
-<dd>This tool is designed to be embedded within an XSLT processing\r
-pipeline. <code>html2html.xslt</code> can be used in a custom\r
-stylesheet or integrated into a larger system. See <a\r
-href="#embedding">Overriding</a>.</dd>\r
-\r
-<dt>Customizable</dt>\r
-<dd>The output can be customized by the means of additonal markup in\r
-the XHMTL source. See the section on <a\r
-href="#customization">customization</a>.</dd>\r
-\r
-<dt>Creates outline structure</dt>\r
-<dd><code>h1</code>, <code>h2</code>, etc. are turned into nested\r
-<code>section</code> and <code>title</code> elements (as opposed to\r
-bridge heads).</dd>\r
-\r
-<dt>Accepts a wide variety of XHTML</dt>\r
-<dd>In particular, &html2db; automatically wraps <dfn>naked item\r
-text</dfn> (text that is not enclosed in a <code><p></code>)\r
-inside a table cell or list item. Naked text is a common property of\r
-XHTML documents, but needs to be clothed to create valid\r
-Docbook.<db:footnote><p>This feature is limited. See <a\r
-href="#implicit-blocks">Implicit Blocks</a>.)</p></db:footnote></dd>\r
-\r
-</dl>\r
-\r
-<h2>Requirements</h2>\r
-<ul>\r
-<li>Java: JRE or JDK 1.3 or greater.</li>\r
-<li>Xalan 2.5.0.</li>\r
-<li>Familiarity with installing and running JAR files.</li>\r
-</ul>\r
-\r
-<p>&html2db; might work with earlier versions of Java and Xalan, and\r
-it might work with other XSLT processors such as Saxon and\r
-xsltproc.</p>\r
-\r
-<h2>License</h2>\r
-<p>This software is released under the Open Source <a href="http://www.opensource.org/licenses/artistic-license.php">Artistic License</a>.</p>\r
-\r
-<h2>Installation</h2>\r
-<ul>\r
-<li>Install JRE 1.3 or higher.</li>\r
-<li>Install Xalan, if necessary.</li>\r
-<li>Download <code>html2db-1.zip</code> from <a href="http://osteele.com/sources/html2db.zip">http://osteele.com/sources/html2db-1.zip</a>.</li>\r
-<li>Unzip <code>html2db-1.zip</code>.</li>\r
-</ul>\r
-\r
-<h2>Usage</h2>\r
-<p>Use Xalan to process an XHTML source file into a Docbook file:</p>\r
-\r
-<pre class="example">\r
-java org.apache.xalan.xslt.Process -XSL html2dbk.xsl -IN doc.html > doc.xml\r
-</pre>\r
-\r
-<p>See <a href="index.src.html"><code>index.src.html</code></a> for an\r
-example of an input file.</p>\r
-\r
-<p>If your source files are in HTML, not XHTML, you may find the <a\r
-href="http://tidy.sourceforge.net/">Tidy</a> tool useful. This is a\r
-tool that converts from HTML to XHTML, and can be added to the front\r
-of your processing pipeline.</p>\r
-\r
-<p>(If you need to process HTML and you don't know or can't figure out\r
-from context what a processing pipeline is, &html2db; is probably not\r
-the right tool for you, and you should look for a local XML or Java\r
-guru or for a commercially supported product.)</p>\r
-\r
-<h2>Specification</h2>\r
-\r
-<h3>XHTML Elements</h3>\r
-<p><code>code/i</code> stands for "an <code>i</code> element\r
-immediately within a <code>code</code> element". This notation is\r
-from XPath.</p>\r
-\r
-<p>XHTML elements must be in the XHTML Transitional namespace,\r
-<code>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</code>.</p>\r
-\r
-<table>\r
-<tr>\r
-<th>XHTML</th>\r
-<th>Docbook</th>\r
-<th>Notes</th>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>b</code>, <code>i</code>, <code>em</code>, <code>strong</code></td>\r
-<td><code>emphasis</code></td>\r
-<td>The <code>role</code> attribute is the original tag name</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>dfn</code></td>\r
-<td><code>glossitem</code>, and also <code>primary</code> <code>indexterm</code></td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>code/i</code>, <code>tt/i</code>, <code>pre/i</code></td>\r
-<td><code>replaceable</code></td>\r
-<td>In practice, <code>i</code> within a monospace content is usually used to mean replaceable text. If you're using it for emphasis, use <code>em</code> instead.</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>pre</code>, <code>body/code</code></td>\r
-<td><code>programlisting</code></td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>img</code></td>\r
-<td><code>inlinemediaobject/imageobject/imagedata</code></td>\r
-<td>In an inline context.</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>img</code></td>\r
-<td><code>[informal]figure/mediaobject/imageobject/imagedata</code></td>\r
-<td>If it has a <code>title</code> attribute or <code>db:title</code> it's wrapped in a <code>figure</code>. Otherwise it's wrapped in an <code>informalfigure</code>.</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>table</code></td>\r
-<td><code>[informal]table</code></td>\r
-<td>XHTML <code>table</code> becomes Docbook <code>table</code> if it has a <code>summary</code> attribute; <code>informaltable</code> otherwise.</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code>ul</code></td>\r
-<td><code>itemizedlist</code></td>\r
-<td>But see the processing instruction <a href="#simplelist">below</a>.</td>\r
-</tr>\r
-</table>\r
-\r
-\r
-\r
-<h3>Links</h3>\r
-<table summary="Link Translation">\r
-<tr>\r
-<th>XHTML</th>\r
-<th>Docbook</th>\r
-<th>Notes</th>\r
-</tr>\r
-\r
-<tr>\r
-<td><code><a name="<var>name</var>"></code></td>\r
-<td><code><anchor id="{$anchor-id-prefix}<var>name</var>"></code></td>\r
-<td>An anchor within a <code>h<var>n</var></code> element is attached to the enclosing <code>section</code> as an <code>id</code> attribute instead.</td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code><a href="#<var>name</var>"></code></td>\r
-<td><code><link linkend="{$anchor-id-prefix}<var>name</var>"></code></td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code><a href="<var>url</var>"></code></td>\r
-<td><code><ulink url="<var>name</var>"></code></td>\r
-</tr>\r
-\r
-<tr>\r
-<td><code><a name="mailto:<var>address</var>"></code></td>\r
-<td><code><email><var>address</var></email></code></td>\r
-</tr>\r
-\r
-</table>\r
-\r
-<h3 id="tables">Tables</h3>\r
-\r
-<p>XHTML <code>table</code> support is minimal. &html2db; changes the\r
-element names and counts the columns (this is necessary to get table\r
-footnotes to span all the columns), but it does not attempt to deal\r
-with tables in their full generality.</p>\r
-\r
-<p>An XHTML <code>table</code> with a <code>summary</code> attribute\r
-generates a <code>table</code>, whose <code>title</code> is the value\r
-of that summary. An XHTML <code>table</code> without a\r
-<code>summary</code> generates an <code>informaltable</code>.</p>\r
-\r
-<p>Any <code>tr</code>s that contain <code>th</code>s are pulled to\r
-the top of the table, and placed inside a <code>thead</code>. Other\r
-<code>tr</code>s are placed inside a <code>tbody</code>. This matches\r
-the commanon XHTML <code>table</code> pattern, where the first row is\r
-a header row.</p>\r
-\r
-<h3 id="implicit-blocks">Implicit Blocks</h3>\r
-<p>XHTML allows <code>li</code>, <code>dd</code>, and <code>td</code>\r
-elements to contain either inline text (for instance,\r
-<code><li>a list item</li></code>) or block structure\r
-(<code><li><p>a block</p></li></code>). The\r
-corresponding Docbook elements require block structure, such as\r
-<code>para</code>.</p>\r
-\r
-<p>&html2db; provides limited support for wrapping naked text in\r
-these positions in <code>para</code> elements. If a list item or\r
-table cell item directly contains text, all text up to the position of\r
-the first element (or all text, if there is no element) is wrapped in\r
-<code>para</code>. This handles the simple case of an item that\r
-directly contains text, and also the case of an item that contains\r
-text followed by blocks such as paragraphs.</p>\r
-\r
-<p>Note that this algorithm is easily confused. It doesn't\r
-distinguish between block and inline XHTML elements, so it will only\r
-wrap the first word in <code><li>some <b>bold</b>\r
-text</li></code>, leading to badly formatted output. Twhe\r
-workaround is to wrap troublesome content in explicit\r
-<code><p></code> tags.</p>\r
-\r
-<h3 id="docbook-elements">Docbook Elements</h3>\r
-\r
-<p>Elements from the Docbook namespace are passed through as is.\r
-There are two ways to include a Docbook element in your XHTML\r
-source:</p>\r
-\r
-<dl>\r
-<dt>Global prefix</dt>\r
-<dd><p>A <dfn>fake Docbook namespace</dfn><db:footnote><p>The fake\r
-Docbook namespace is <code>urn:docbook</code>. Docbook doesn't really\r
-have a namespace, and if it did, it wouldn't be this one. See <a\r
-href="#docbook-namespace">Docbook namespace</a> for a discussion of\r
-this issue.</p></db:footnote>\r
-\r
-declaration may be added to the document root element. Anywhere in\r
-the document, the prefix from this namespace declaration may be used\r
-to include a Docbook element. This is useful if a document contains\r
-many Docbook elements, such as <code>footnote</code> or\r
-<code>glossterm</code>, interspersed with XHTML. (In this case it may\r
-be more convenient to allow these elements in the XHMTL namespace and\r
-add a customization layer that translates them to docbook elements,\r
-however. See <a href="#customization">Customization</a>.)</p>\r
-\r
-<pre class="example"><![CDATA[\r
-<html xmlns="http://www.w3.org/1999/xhtml"\r
- xmlns:db="urn:docbook">\r
- ...\r
- <p>Some text<db:footnote>and a footnote</db:footnote>.</p>\r
-]]></pre></dd>\r
-\r
-<dt>Local namespace</dt>\r
-<dd><p>A Docbook element may be introduced along with a prefix-less\r
-namespace declaration. This is useful for embedding a Docbook\r
-document fragment (a hierarchy of elements that all use Docbook tags)\r
-within of a XHTML document.</p>\r
-\r
-<pre class="example"><![CDATA[\r
- ...\r
- <articleinfo xmlns="urn:docbook">\r
- <author>\r
- <firstname>...</firstname>\r
- ...\r
-]]></pre></dd>\r
-</dl>\r
-\r
-<p>The source to <a href="index.src.html">this document</a>\r
-illustrates both of these techniques.</p>\r
-\r
-<p class="note">Both these techniques will cause your document to be\r
-invalid as XHTML. In order to validate an XHTML document that\r
-contains Docbook elements, you will need to create a custom schema.\r
-Technically, you then ought to place your document in a different\r
-namespace, but this will cause &html2db; not to recognize it!</p>\r
-\r
-\r
-<h3>Output Processing Instructions</h3>\r
-\r
-<p>&html2db; adds a few of processing instructions to the output file.\r
-The Docbook XSL stylesheets ignore these, but if you write a\r
-customization layer for Docbook XSL, you can use the information in\r
-these processing instructions to customize the HTML output. This can\r
-be used, for example, to set the <code>a</code> <code>onclick</code>\r
-and <code>target</code> attributes in the HTML files that Docbook XSL\r
-creates to the same values they had in the input document.</p>\r
-\r
-<dl>\r
-<dt><code><?html2db attribute="<var>name</var>" value="<var>value</var>"?></code></dt>\r
-<dd>Placed inside a link element to capture the value of the <code>a</code> <code>target</code> and <code>onclick</code> attributes. <var>name</var> is the name of the attribute (<code>target</code> or <code>onclick</code>), and <var>value</var> is its value, with <code>"</code> and <code>\</code> replaced by <code>\"</code> and <code>\\</code>, respectively.</dd>\r
-\r
-<dt><code><?html2db element="br"?></code></dt>\r
-<dd>Represents the location of an XHTML <code>br</code> element in the\r
-source document.</dd>\r
-\r
-</dl>\r
-\r
-<p>You can also include <code><?db2html?></code> processing\r
-instructions in the HTML source document, and they will be copied\r
-through to the Docbook output file unchanged (as will all other\r
-processing instructions).</p>\r
-\r
-\r
-<h2 id="customization">Customization</h2>\r
-<h3>XSLT Parameters</h3>\r
-<dl>\r
- <dt><code><xsl:param name="anchor-id-prefix" select="''/></code></dt>\r
- <dd>Prefixed to every id generated from <code><a name=></code>\r
- and <code><a href="#"></code>. This is useful to avoid\r
- collisions between multiple documents that are compiled into the\r
- same book. For instance, if a number of XHTML sources are assembled\r
- into chapters of a book, you style each source file with a prefix of\r
- <code><var>docid</var>.</code> where <var>docid</var> is a unique id\r
- for each source file.</dd>\r
- \r
- <dt><code><xsl:param name="document-root" select="'article'"/></code></dt>\r
- <dd>The default document root. This can be overridden by\r
- <code><?html2db class="<var>name</var>"></code> within the\r
- document itself, and defaults to <code>article</code>.</dd>\r
-</dl>\r
-\r
-<h3 id="processing-instructions">Processing instructions</h3>\r
-<p>Use the <code><?html2db?></code> processing instruction to\r
-customize the transformation of the XHTML source to Docbook:</p>\r
-\r
-<table>\r
-<tr>\r
-<th>Processing instruction</th>\r
-<th>Content</th>\r
-<th>Effect</th>\r
-</tr>\r
-\r
-<tr>\r
-<td><code><?html2db class="<var>xxx</var>"?></code></td>\r
-<td><code>body</code></td>\r
-<td>Sets the output document root to <var>xxx</var>. Useful for\r
-translating to <code>prefix</code>, <code>appendix</code>, or <code>chapter</code>; the default is\r
-<var>$document-root</var>.</td>\r
-</tr>\r
-\r
-<tr id="simplelist">\r
-<td><code><?html2db class="simplelist"?></code></td>\r
-<td><code>ul</code></td>\r
-<td>Creates a vertical <code>simplelist</code>.<db:footnote><db:para>Note that the\r
-current implementation simply checks for the presence of <em>any</em>\r
-<code>html2db</code> processing instruction.</db:para></db:footnote></td>\r
-</tr>\r
-\r
-\r
-<tr>\r
-<td><code><?html2db rowsep="1"?></code></td>\r
-<td><code>[informal]table</code></td>\r
-<td>Sets the <code>rowsep</code> attribute on the generated <code>table</code>.<db:footnote><db:para>Note that the current implementation simply checks for the presence of <em>any</em> <code>html2db</code> processing instruction that begins with <code>rowsep</code>, and assumes the vlaue is <code>1</code>.</db:para></db:footnote></td>\r
-</tr>\r
-</table>\r
-\r
-<h3 id="embedding">Overriding the built-in templates</h3>\r
-<p>For cases where the previous techniques don't allow for enough\r
-customization, you can override the builtin templates. You will need\r
-to know XSLT in order to do this, and you will need to write a new\r
-stylesheet that uses the <code>xsl:import</code> element to import\r
-<code>html2db.xsl</code>.</p>\r
-\r
-<p>The <a href="examples.xsl"><code>example.xsl</code></a> stylesheet\r
-is an example customization layer. It recognizes the <code><div\r
-class="abstract"></code> and <code><p class="note"></code>\r
-classes in the <a href="index.src.html">source</a> for this document,\r
-and generates the corresponding Docbook elements.</p>\r
-\r
-\r
-<h2>FAQ</h2>\r
-<h3>Why generate Docbook?</h3>\r
-<p>The primary reason to use Docbook as an <em>output</em> format is\r
-to take advantage of the Docbook XSL stylesheets. These are a\r
-well-designed, well-documented set of XSL stylesheets that provide a\r
-variety of publishing features that would be difficult to recreate\r
-from scratch for HTML:</p>\r
-\r
-<ul>\r
-<li>Automatic Table-of-Contents generation</li>\r
-<li>Automatic part, chapter, and section numbering.</li>\r
-<li>Creation of single-page, multi-page, PDF, and WinHelp files from the same source document.</li>\r
-<li>Navigation headers, footers, and metadata for multi-page HTML\r
-documents.</li>\r
-<li>Link resolution and link target text insertion across multiple pages and numbered targets.</li>\r
-<li>Figure, example, and table numbering, and tables of these.</li>\r
-<li>Index and glossary tools.</li>\r
-</ul>\r
-\r
-<h3>Why write in XHTML?</h3>\r
-\r
-<p>Given that Docbook is so great, why not write in it?</p>\r
-\r
-<p>Where there are not legacy concerns, Docbook is probably a better\r
-choice for structured or technical documentation.</p>\r
-\r
-<p>Where the only legacy concern is the documents themselves, and not\r
-the tools and skill sets of documentation contributors, you should\r
-consider using an (X)HMTL convertor to perform a one-time conversion\r
-of your documentation source into Docbook, and then switching\r
-development to the result files. You can use this stylesheet to\r
-perform this conversion, or evaluate other tools, many of which are\r
-probably appropriate for this purpose.</p>\r
-\r
-<p>Often there are other legacy concerns: the availability of cheap\r
-(including free) and usable HTML editors and editing modes; and the\r
-fact that it's easier to teach people XHTML than Docbook. If either\r
-of this is an issue in your organization, you may want to maintain\r
-documentation sources in XHTML instead of Docbook</p>\r
-\r
-<p>For example, at <a href="http://www.laszlosystems.com/">Laszlo</a>,\r
-most developers contribute directly to the documentation. Requiring\r
-that developers learn Docbook, or that they wait on the doc team to\r
-get content into the docs, would discourage this.</p>\r
-\r
-<h3>Why not use an existing convertor?</h3>\r
-\r
-<p>This isn't the first (X)HTML to Docbook convertor. Why not use one\r
-of the exisitng ones?</p>\r
-\r
-<p>Each HTML to Docbook convertors that I could find had at least some\r
-of the following limitations, some of which stemmed from their\r
-intended use as one-time-only convertors for legacy documents:</p>\r
-\r
-<ul>\r
-<li>Many only operated on a subset of HTML, and relied upon hand\r
-editing of the output to clean up mistakes. This made them impossible\r
-to use as part of a processing pipeline, where the source is\r
-<em>maintained</em> in XHTML.</li>\r
-\r
-<li>There was no way to customize the output, except by (1) hand\r
-editing, or (2) writing a post-processing stylesheet, which didn't\r
-have access to the information in the XHTML source document.</li>\r
-\r
-<li>Many of them were difficult or impossible to customize and\r
-extend. They were closed-source, or written in Java or Perl (which I\r
-find to be a difficult languages to use for customizing this kind of\r
-thing) and embedded in a larger system.</li>\r
-\r
-<li>They didn't take full advantage of the Docbook tag set and content\r
-model to represent document structure. For instance, they didn't\r
-generate nested <code>section</code> elements to represent\r
-<code>h1</code> <code>h2</code> sequences, or <code>table</code> to\r
-represent tables with <code>summary</code> attributes.</li>\r
-</ul>\r
-\r
-<h3>I got this error. What does it mean?</h3>\r
-<dl>\r
-<dt>Q. <code>Fatal Error! The element type "br" must be terminated by the matching end-tag "</br>".\r
-</code></dt>\r
-<dd>A. Your document is HTML, not <em>X</em>HTML. You need to fix it, or run it through Tidy first.</dd>\r
-\r
-<dt>Q. My output document is empty except for the <code><?xml version="1.0" encoding="UTF-8"?></code> line.</dt>\r
-<dd>A. The document is missing a namespace declaration. See the <a href="index.src.html">example</a> for an example.</dd>\r
-\r
-<dt>Q. Some of the headers and document sections are repeated multiple times.</dt>\r
-<dd>A. The document has out-of-sequence headers, such as <code>h1</code> followed by <code>h3</code> (instead of <code>h2</code>). This won't work.</dd>\r
-\r
-<dt>Q. <code>Fatal Error! The prefix "db" for element "db:footnote" is not bound.</code></dt>\r
-<dd>A. You haven't declared the <code>db</code> namespace prefix. See the <a href="index.src.html">example</a> for an example.</dd>\r
-\r
-</dl>\r
-\r
-\r
-<h2>Implementation Notes</h2>\r
-\r
-<h3>Bugs</h3>\r
-<ul>\r
-<li>Improperly sequenced <code>h<var>n</var></code> (for example\r
-<code>h1</code> followed by <code>h3</code>, instead of\r
-<code>h2</code>) will result in duplicate text.</li>\r
-</ul>\r
-\r
-\r
-<h3>Limitations</h3>\r
-<ul>\r
-<li>The <code>id</code> attribute is only preserved for certain\r
-elements (at least <code>h<var>n</var></code>, images, paragraphs, and\r
-tables). It ought to be preserved for all of them.</li>\r
-<li>Only the <a href="#tables">very simplest</a> table format is\r
-implemented.</li>\r
-<li>Always uses compact lists.</li>\r
-<li>The string matching for <code><?html2b\r
-class="<var>classname</var>"?></code> requires an exact match\r
-(spaces and all).</li>\r
-<li>The <a href="#implicit-blocks">implicit blocks</a> code is easily\r
-confused, as documented in that section. This is\r
-easy to fix now that I understand the difference between block and\r
-inline elements (I didn't when I was implementing this), but I\r
-probably won't do so until I run into the problem again.</li>\r
-\r
-</ul>\r
-\r
-\r
-\r
-\r
-<h3>Wishlist</h3>\r
-<ul>\r
-<li>Allow <code><html2db attribute-name="<var>name</var>"\r
-value="<var>value</var>"?></code> at any position, to set arbitrary\r
-Docbook attributes on the generated element.</li>\r
-\r
-<li>Use different technique from the <a href="#docbook-elements">fake\r
-namespace prefix</a> to name Docbook elements in the source, that\r
-preserves the XHTML validity of the source file. For example, an\r
-option transform <code><div class="db:footnote"></code> into\r
-<code><footnote></code>, or to use a processing attribute\r
-(<code><div><?html2db classname="footnote"?></code>).</li>\r
-\r
-<li>Parse DC metadata from XHTML <code>html/head/meta</code>.</li>\r
-\r
-<li>Add an option to use <code>html/head/title</code> instead of\r
-<code>html/body/h1[1]</code> for top title.</li>\r
-\r
-<li>Allow an <code>id</code> on every element.</li>\r
-\r
-<li>Add an option to translate the XHTML <code>class</code> into a\r
-Docbook <code>role</code>.</li>\r
-\r
-<li>Preserve more of the whitespace from the source document &emdash; especially within lists and tables &emdash; in order to make it easier to debug the output document.</li>\r
-\r
-<h3>Support</h3>\r
-<p>This is a work in progress. It serves my needs, but doesn't\r
-attempt to be much more general than that. If you run into anything\r
-it can't handle, please send a note, or better yet, a patch, to <a\r
-href="mailto:steele@osteele.com">steele@osteele.com</a>. I can't\r
-promise to address problems (I have a day job too), but knowing what\r
-people have run into will help my prioritize my work when I do have\r
-time to work on this.</p>\r
-\r
-\r
-</ul>\r
-\r
-\r
-<h3>Design Notes</h3>\r
-<h4 id="docbook-namespace">The Docbook Namespace</h4>\r
-<p>&html2db; accepts elements in the "Docbook namespace" in XHTML\r
-source. This namespace is <code>urn:docbook</code>.</p>\r
-\r
-<p>This isn't technically correct. Docbook doesn't really have a\r
-namespace, and if it did, it wouldn't be this one. <a\r
-href="http://www.faqs.org/rfcs/rfc3151.html">RFC 3151</a> suggests\r
-<code>urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN</code> as the\r
-Docbook namespace.</p>\r
-\r
-<p>There two problems with the RFC 3151 namespace. First, it's long\r
-and hard to remember. Second, it's limited to Docbook v4.1.2 &emdash;\r
-but &html2db; works with other versions of Docbook too, which would\r
-presumably have other namespaces. I think it's more useful to\r
-<em>under</em>specify the Docbook version in the spec for this tool.\r
-Docbook itself underspecifies the version completely, by avoiding a\r
-namespace at all, but when mixing Docbook and XHTML elements I find it\r
-useful to be <em>more</em> specific than that.</p>\r
-\r
-<h3>History</h3>\r
-<p>The original version of &html2db; was written by <a\r
-href="http://osteele.com">Oliver Steele</a>, as part of the <a\r
-href="http://laszlosystems.com">Laszlo Systems, Inc.</a> documentation\r
-effort. We had a set of custom stylesheets that formatted and added\r
-linking information to programming-language elements such as\r
-<code>classname</code> and <code>tagname</code>, and added\r
-Table-of-Contents to chapter documentation and numbers examples.</p>\r
-\r
-<p>As the documentation set grew, the doc team (John Sundman)\r
-requested features such as inter-chapter navigation, callouts, and\r
-index and glossary elements. I was able to beat all of these back\r
-except for navigation, which seemed critical. After a few days trying\r
-to implement this, I decided it would be simpler to convert the subset\r
-of XHTML that we used into a subset of Docbook, and use the latter to\r
-add navigation. (Once this was done, the other features came for\r
-free.)</p>\r
-\r
-<p>During my August 2004 "sabbatical", I factored the general html2db\r
-code out from the Laszlo-specific code, refactored and otherwise\r
-cleaned it up, and wrote this documentation.</p>\r
-\r
-<h3>Credits</h3>\r
-<p>&html2db; was written by <a href="http://osteele.com">Oliver Steele</a>, as part of the <a href="http://laszlosystems.com">Laszlo Systems, Inc.</a> documentation effort.</p>\r
-\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<article>\r
-\r
-<title>html2db.xsl</title>\r
-\r
-\r
-<articleinfo>\r
- <author>\r
- <firstname>Oliver</firstname>\r
- <surname>Steele</surname>\r
- </author>\r
- <revhistory>\r
- <revision>\r
- <revnumber>1</revnumber>\r
- <date>2004-07-30</date>\r
- </revision>\r
- <revision>\r
- <revnumber>1.0.1</revnumber>\r
- <date>2004-08-01</date>\r
- <revdescription><para>Editorial changes to the\r
- readme.</para></revdescription>\r
- </revision>\r
- </revhistory>\r
- <date>2004-07-30</date>\r
-</articleinfo>\r
-\r
-<para/><section><title>Overview</title>\r
-\r
-<para><literal>html2db.xsl</literal> converts an XHTML source document into a Docbook output\r
-document. It provides features for customizing the generation of the\r
-output, so that the output can be tuned by annotating\r
-the source, rather than hand-editing the output. This makes it useful\r
-in a processing pipeline where the source documents are maintained in\r
-HTML, although it can be used as a one-time conversion tool\r
-too.</para>\r
-\r
-<para>This document is an example of <literal>html2db.xsl</literal> used in conjunction with\r
-the Docbook XSL stylesheets. The <ulink url="index.src.html">source\r
-file</ulink> is an XHTML file with some embedded Docbook elements and\r
-processing instructions. <literal>html2db.xsl</literal> compiles it into a <ulink url="index.xml">Docbook document</ulink>, which can be used to generate\r
-this output file (which includes a Table of Contents), a <ulink url="docs/index.html">chunked HTML file</ulink>, a <ulink url="html2db.pdf">PDF</ulink>, or other formats.</para>\r
-\r
-<para/></section><section><title>Features</title>\r
-<variablelist><varlistentry><term>XSLT implementation</term><listitem><para>This tool is designed to be embedded within an XSLT processing\r
-pipeline. <literal>html2html.xslt</literal> can be used in a custom\r
-stylesheet or integrated into a larger system. See <link linkend="embedding">Overriding</link>.</para></listitem></varlistentry><varlistentry><term>Customizable</term><listitem><para>The output can be customized by the means of additonal markup in\r
-the XHMTL source. See the section on <link linkend="customization">customization</link>.</para></listitem></varlistentry><varlistentry><term>Creates outline structure</term><listitem><para><literal>h1</literal>, <literal>h2</literal>, etc. are turned into nested\r
-<literal>section</literal> and <literal>title</literal> elements (as opposed to\r
-bridge heads).</para></listitem></varlistentry><varlistentry><term>Accepts a wide variety of XHTML</term><listitem><para>In particular, <literal>html2db.xsl</literal> automatically wraps <indexterm significance="preferred"><primary>naked item\r
-text</primary></indexterm><glossterm>naked item\r
-text</glossterm> (text that is not enclosed in a <literal><p></literal>)\r
-inside a table cell or list item. Naked text is a common property of\r
-XHTML documents, but needs to be clothed to create valid\r
-Docbook.<footnote><para>This feature is limited. See <link linkend="implicit-blocks">Implicit Blocks</link>.)</para></footnote></para></listitem></varlistentry></variablelist>\r
-\r
-<para/></section><section><title>Requirements</title>\r
-<itemizedlist spacing="compact"><listitem><para>Java: JRE or JDK 1.3 or greater.</para></listitem><listitem><para>Xalan 2.5.0.</para></listitem><listitem><para>Familiarity with installing and running JAR files.</para></listitem></itemizedlist>\r
-\r
-<para><literal>html2db.xsl</literal> might work with earlier versions of Java and Xalan, and\r
-it might work with other XSLT processors such as Saxon and\r
-xsltproc.</para>\r
-\r
-<para/></section><section><title>License</title>\r
-<para>This software is released under the Open Source <ulink url="http://www.opensource.org/licenses/artistic-license.php">Artistic License</ulink>.</para>\r
-\r
-<para/></section><section><title>Installation</title>\r
-<itemizedlist spacing="compact"><listitem><para>Install JRE 1.3 or higher.</para></listitem><listitem><para>Install Xalan, if necessary.</para></listitem><listitem><para>Download <literal>html2db-1.zip</literal> from <ulink url="http://osteele.com/sources/html2db.zip">http://osteele.com/sources/html2db-1.zip</ulink>.</para></listitem><listitem><para>Unzip <literal>html2db-1.zip</literal>.</para></listitem></itemizedlist>\r
-\r
-<para/></section><section><title>Usage</title>\r
-<para>Use Xalan to process an XHTML source file into a Docbook file:</para>\r
-\r
-<informalexample><programlisting>\r
-java org.apache.xalan.xslt.Process -XSL html2dbk.xsl -IN doc.html > doc.xml\r
-</programlisting></informalexample>\r
-\r
-<para>See <ulink url="index.src.html"><literal>index.src.html</literal></ulink> for an\r
-example of an input file.</para>\r
-\r
-<para>If your source files are in HTML, not XHTML, you may find the <ulink url="http://tidy.sourceforge.net/">Tidy</ulink> tool useful. This is a\r
-tool that converts from HTML to XHTML, and can be added to the front\r
-of your processing pipeline.</para>\r
-\r
-<para>(If you need to process HTML and you don't know or can't figure out\r
-from context what a processing pipeline is, <literal>html2db.xsl</literal> is probably not\r
-the right tool for you, and you should look for a local XML or Java\r
-guru or for a commercially supported product.)</para>\r
-\r
-<para/></section><section><title>Specification</title>\r
-\r
-<para/><section><title>XHTML Elements</title>\r
-<para><literal>code/i</literal> stands for "an <literal>i</literal> element\r
-immediately within a <literal>code</literal> element". This notation is\r
-from XPath.</para>\r
-\r
-<para>XHTML elements must be in the XHTML Transitional namespace,\r
-<literal>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</literal>.</para>\r
-\r
-<informaltable><tgroup cols="3"><thead><row><entry>XHTML</entry><entry>Docbook</entry><entry>Notes</entry></row>\r
-</thead><tbody><row><entry><literal>b</literal>, <literal>i</literal>, <literal>em</literal>, <literal>strong</literal></entry><entry><literal>emphasis</literal></entry><entry>The <literal>role</literal> attribute is the original tag name</entry></row>\r
-<row><entry><literal>dfn</literal></entry><entry><literal>glossitem</literal>, and also <literal>primary</literal> <literal>indexterm</literal></entry></row>\r
-<row><entry><literal>code/i</literal>, <literal>tt/i</literal>, <literal>pre/i</literal></entry><entry><literal>replaceable</literal></entry><entry>In practice, <literal>i</literal> within a monospace content is usually used to mean replaceable text. If you're using it for emphasis, use <literal>em</literal> instead.</entry></row>\r
-<row><entry><literal>pre</literal>, <literal>body/code</literal></entry><entry><literal>programlisting</literal></entry></row>\r
-<row><entry><literal>img</literal></entry><entry><literal>inlinemediaobject/imageobject/imagedata</literal></entry><entry>In an inline context.</entry></row>\r
-<row><entry><literal>img</literal></entry><entry><literal>[informal]figure/mediaobject/imageobject/imagedata</literal></entry><entry>If it has a <literal>title</literal> attribute or <literal>db:title</literal> it's wrapped in a <literal>figure</literal>. Otherwise it's wrapped in an <literal>informalfigure</literal>.</entry></row>\r
-<row><entry><literal>table</literal></entry><entry><literal>[informal]table</literal></entry><entry>XHTML <literal>table</literal> becomes Docbook <literal>table</literal> if it has a <literal>summary</literal> attribute; <literal>informaltable</literal> otherwise.</entry></row>\r
-<row><entry><literal>ul</literal></entry><entry><literal>itemizedlist</literal></entry><entry>But see the processing instruction <link linkend="simplelist">below</link>.</entry></row>\r
-</tbody></tgroup></informaltable>\r
-\r
-\r
-\r
-<para/></section><section><title>Links</title>\r
-<table><title>Link Translation</title><tgroup cols="3"><thead><row><entry>XHTML</entry><entry>Docbook</entry><entry>Notes</entry></row>\r
-</thead><tbody><row><entry><literal><a name="<replaceable>name</replaceable>"></literal></entry><entry><literal><anchor id="{$anchor-id-prefix}<replaceable>name</replaceable>"></literal></entry><entry>An anchor within a <literal>h<replaceable>n</replaceable></literal> element is attached to the enclosing <literal>section</literal> as an <literal>id</literal> attribute instead.</entry></row>\r
-<row><entry><literal><a href="#<replaceable>name</replaceable>"></literal></entry><entry><literal><link linkend="{$anchor-id-prefix}<replaceable>name</replaceable>"></literal></entry></row>\r
-<row><entry><literal><a href="<replaceable>url</replaceable>"></literal></entry><entry><literal><ulink url="<replaceable>name</replaceable>"></literal></entry></row>\r
-<row><entry><literal><a name="mailto:<replaceable>address</replaceable>"></literal></entry><entry><literal><email><replaceable>address</replaceable></email></literal></entry></row>\r
-</tbody></tgroup></table>\r
-\r
-<para/></section><section id="tables"><title>Tables</title>\r
-\r
-<para>XHTML <literal>table</literal> support is minimal. <literal>html2db.xsl</literal> changes the\r
-element names and counts the columns (this is necessary to get table\r
-footnotes to span all the columns), but it does not attempt to deal\r
-with tables in their full generality.</para>\r
-\r
-<para>An XHTML <literal>table</literal> with a <literal>summary</literal> attribute\r
-generates a <literal>table</literal>, whose <literal>title</literal> is the value\r
-of that summary. An XHTML <literal>table</literal> without a\r
-<literal>summary</literal> generates an <literal>informaltable</literal>.</para>\r
-\r
-<para>Any <literal>tr</literal>s that contain <literal>th</literal>s are pulled to\r
-the top of the table, and placed inside a <literal>thead</literal>. Other\r
-<literal>tr</literal>s are placed inside a <literal>tbody</literal>. This matches\r
-the commanon XHTML <literal>table</literal> pattern, where the first row is\r
-a header row.</para>\r
-\r
-<para/></section><section id="implicit-blocks"><title>Implicit Blocks</title>\r
-<para>XHTML allows <literal>li</literal>, <literal>dd</literal>, and <literal>td</literal>\r
-elements to contain either inline text (for instance,\r
-<literal><li>a list item</li></literal>) or block structure\r
-(<literal><li><p>a block</p></li></literal>). The\r
-corresponding Docbook elements require block structure, such as\r
-<literal>para</literal>.</para>\r
-\r
-<para><literal>html2db.xsl</literal> provides limited support for wrapping naked text in\r
-these positions in <literal>para</literal> elements. If a list item or\r
-table cell item directly contains text, all text up to the position of\r
-the first element (or all text, if there is no element) is wrapped in\r
-<literal>para</literal>. This handles the simple case of an item that\r
-directly contains text, and also the case of an item that contains\r
-text followed by blocks such as paragraphs.</para>\r
-\r
-<para>Note that this algorithm is easily confused. It doesn't\r
-distinguish between block and inline XHTML elements, so it will only\r
-wrap the first word in <literal><li>some <b>bold</b>\r
-text</li></literal>, leading to badly formatted output. Twhe\r
-workaround is to wrap troublesome content in explicit\r
-<literal><p></literal> tags.</para>\r
-\r
-<para/></section><section id="docbook-elements"><title>Docbook Elements</title>\r
-\r
-<para>Elements from the Docbook namespace are passed through as is.\r
-There are two ways to include a Docbook element in your XHTML\r
-source:</para>\r
-\r
-<variablelist><varlistentry><term>Global prefix</term><listitem><para>A <indexterm significance="preferred"><primary>fake Docbook namespace</primary></indexterm><glossterm>fake Docbook namespace</glossterm><footnote><para>The fake\r
-Docbook namespace is <literal>urn:docbook</literal>. Docbook doesn't really\r
-have a namespace, and if it did, it wouldn't be this one. See <link linkend="docbook-namespace">Docbook namespace</link> for a discussion of\r
-this issue.</para></footnote>\r
-\r
-declaration may be added to the document root element. Anywhere in\r
-the document, the prefix from this namespace declaration may be used\r
-to include a Docbook element. This is useful if a document contains\r
-many Docbook elements, such as <literal>footnote</literal> or\r
-<literal>glossterm</literal>, interspersed with XHTML. (In this case it may\r
-be more convenient to allow these elements in the XHMTL namespace and\r
-add a customization layer that translates them to docbook elements,\r
-however. See <link linkend="customization">Customization</link>.)</para>\r
-\r
-<informalexample><programlisting>\r
-<html xmlns="http://www.w3.org/1999/xhtml"\r
- xmlns:db="urn:docbook">\r
- ...\r
- <p>Some text<db:footnote>and a footnote</db:footnote>.</p>\r
-</programlisting></informalexample></listitem></varlistentry><varlistentry><term>Local namespace</term><listitem><para>A Docbook element may be introduced along with a prefix-less\r
-namespace declaration. This is useful for embedding a Docbook\r
-document fragment (a hierarchy of elements that all use Docbook tags)\r
-within of a XHTML document.</para>\r
-\r
-<informalexample><programlisting>\r
- ...\r
- <articleinfo xmlns="urn:docbook">\r
- <author>\r
- <firstname>...</firstname>\r
- ...\r
-</programlisting></informalexample></listitem></varlistentry></variablelist>\r
-\r
-<para>The source to <ulink url="index.src.html">this document</ulink>\r
-illustrates both of these techniques.</para>\r
-\r
-<note><para>Both these techniques will cause your document to be\r
-invalid as XHTML. In order to validate an XHTML document that\r
-contains Docbook elements, you will need to create a custom schema.\r
-Technically, you then ought to place your document in a different\r
-namespace, but this will cause <literal>html2db.xsl</literal> not to recognize it!</para></note>\r
-\r
-\r
-<para/></section><section><title>Output Processing Instructions</title>\r
-\r
-<para><literal>html2db.xsl</literal> adds a few of processing instructions to the output file.\r
-The Docbook XSL stylesheets ignore these, but if you write a\r
-customization layer for Docbook XSL, you can use the information in\r
-these processing instructions to customize the HTML output. This can\r
-be used, for example, to set the <literal>a</literal> <literal>onclick</literal>\r
-and <literal>target</literal> attributes in the HTML files that Docbook XSL\r
-creates to the same values they had in the input document.</para>\r
-\r
-<variablelist><varlistentry><term><literal><?html2db attribute="<replaceable>name</replaceable>" value="<replaceable>value</replaceable>"?></literal></term><listitem><para>Placed inside a link element to capture the value of the <literal>a</literal> <literal>target</literal> and <literal>onclick</literal> attributes. <replaceable>name</replaceable> is the name of the attribute (<literal>target</literal> or <literal>onclick</literal>), and <replaceable>value</replaceable> is its value, with <literal>"</literal> and <literal>\</literal> replaced by <literal>\"</literal> and <literal>\\</literal>, respectively.</para></listitem></varlistentry><varlistentry><term><literal><?html2db element="br"?></literal></term><listitem><para>Represents the location of an XHTML <literal>br</literal> element in the\r
-source document.</para></listitem></varlistentry></variablelist>\r
-\r
-<para>You can also include <literal><?db2html?></literal> processing\r
-instructions in the HTML source document, and they will be copied\r
-through to the Docbook output file unchanged (as will all other\r
-processing instructions).</para>\r
-\r
-\r
-<para/></section></section><section id="customization"><title>Customization</title>\r
-<para/><section><title>XSLT Parameters</title>\r
-<variablelist><varlistentry><term><literal><xsl:param name="anchor-id-prefix" select="''/></literal></term><listitem><para>Prefixed to every id generated from <literal><a name=></literal>\r
- and <literal><a href="#"></literal>. This is useful to avoid\r
- collisions between multiple documents that are compiled into the\r
- same book. For instance, if a number of XHTML sources are assembled\r
- into chapters of a book, you style each source file with a prefix of\r
- <literal><replaceable>docid</replaceable>.</literal> where <replaceable>docid</replaceable> is a unique id\r
- for each source file.</para></listitem></varlistentry><varlistentry><term><literal><xsl:param name="document-root" select="'article'"/></literal></term><listitem><para>The default document root. This can be overridden by\r
- <literal><?html2db class="<replaceable>name</replaceable>"></literal> within the\r
- document itself, and defaults to <literal>article</literal>.</para></listitem></varlistentry></variablelist>\r
-\r
-<para/></section><section id="processing-instructions"><title>Processing instructions</title>\r
-<para>Use the <literal><?html2db?></literal> processing instruction to\r
-customize the transformation of the XHTML source to Docbook:</para>\r
-\r
-<informaltable><tgroup cols="3"><thead><row><entry>Processing instruction</entry><entry>Content</entry><entry>Effect</entry></row>\r
-</thead><tbody><row><entry><literal><?html2db class="<replaceable>xxx</replaceable>"?></literal></entry><entry><literal>body</literal></entry><entry>Sets the output document root to <replaceable>xxx</replaceable>. Useful for\r
-translating to <literal>prefix</literal>, <literal>appendix</literal>, or <literal>chapter</literal>; the default is\r
-<replaceable>$document-root</replaceable>.</entry></row>\r
-<row id="simplelist"><entry><literal><?html2db class="simplelist"?></literal></entry><entry><literal>ul</literal></entry><entry>Creates a vertical <literal>simplelist</literal>.<footnote><para>Note that the\r
-current implementation simply checks for the presence of <emphasis role="em">any</emphasis>\r
-<literal>html2db</literal> processing instruction.</para></footnote></entry></row>\r
-<row><entry><literal><?html2db rowsep="1"?></literal></entry><entry><literal>[informal]table</literal></entry><entry>Sets the <literal>rowsep</literal> attribute on the generated <literal>table</literal>.<footnote><para>Note that the current implementation simply checks for the presence of <emphasis role="em">any</emphasis> <literal>html2db</literal> processing instruction that begins with <literal>rowsep</literal>, and assumes the vlaue is <literal>1</literal>.</para></footnote></entry></row>\r
-</tbody></tgroup></informaltable>\r
-\r
-<para/></section><section id="embedding"><title>Overriding the built-in templates</title>\r
-<para>For cases where the previous techniques don't allow for enough\r
-customization, you can override the builtin templates. You will need\r
-to know XSLT in order to do this, and you will need to write a new\r
-stylesheet that uses the <literal>xsl:import</literal> element to import\r
-<literal>html2db.xsl</literal>.</para>\r
-\r
-<para>The <ulink url="examples.xsl"><literal>example.xsl</literal></ulink> stylesheet\r
-is an example customization layer. It recognizes the <literal><div\r
-class="abstract"></literal> and <literal><p class="note"></literal>\r
-classes in the <ulink url="index.src.html">source</ulink> for this document,\r
-and generates the corresponding Docbook elements.</para>\r
-\r
-\r
-<para/></section></section><section><title>FAQ</title>\r
-<para/><section><title>Why generate Docbook?</title>\r
-<para>The primary reason to use Docbook as an <emphasis role="em">output</emphasis> format is\r
-to take advantage of the Docbook XSL stylesheets. These are a\r
-well-designed, well-documented set of XSL stylesheets that provide a\r
-variety of publishing features that would be difficult to recreate\r
-from scratch for HTML:</para>\r
-\r
-<itemizedlist spacing="compact"><listitem><para>Automatic Table-of-Contents generation</para></listitem><listitem><para>Automatic part, chapter, and section numbering.</para></listitem><listitem><para>Creation of single-page, multi-page, PDF, and WinHelp files from the same source document.</para></listitem><listitem><para>Navigation headers, footers, and metadata for multi-page HTML\r
-documents.</para></listitem><listitem><para>Link resolution and link target text insertion across multiple pages and numbered targets.</para></listitem><listitem><para>Figure, example, and table numbering, and tables of these.</para></listitem><listitem><para>Index and glossary tools.</para></listitem></itemizedlist>\r
-\r
-<para/></section><section><title>Why write in XHTML?</title>\r
-\r
-<para>Given that Docbook is so great, why not write in it?</para>\r
-\r
-<para>Where there are not legacy concerns, Docbook is probably a better\r
-choice for structured or technical documentation.</para>\r
-\r
-<para>Where the only legacy concern is the documents themselves, and not\r
-the tools and skill sets of documentation contributors, you should\r
-consider using an (X)HMTL convertor to perform a one-time conversion\r
-of your documentation source into Docbook, and then switching\r
-development to the result files. You can use this stylesheet to\r
-perform this conversion, or evaluate other tools, many of which are\r
-probably appropriate for this purpose.</para>\r
-\r
-<para>Often there are other legacy concerns: the availability of cheap\r
-(including free) and usable HTML editors and editing modes; and the\r
-fact that it's easier to teach people XHTML than Docbook. If either\r
-of this is an issue in your organization, you may want to maintain\r
-documentation sources in XHTML instead of Docbook</para>\r
-\r
-<para>For example, at <ulink url="http://www.laszlosystems.com/">Laszlo</ulink>,\r
-most developers contribute directly to the documentation. Requiring\r
-that developers learn Docbook, or that they wait on the doc team to\r
-get content into the docs, would discourage this.</para>\r
-\r
-<para/></section><section><title>Why not use an existing convertor?</title>\r
-\r
-<para>This isn't the first (X)HTML to Docbook convertor. Why not use one\r
-of the exisitng ones?</para>\r
-\r
-<para>Each HTML to Docbook convertors that I could find had at least some\r
-of the following limitations, some of which stemmed from their\r
-intended use as one-time-only convertors for legacy documents:</para>\r
-\r
-<itemizedlist spacing="compact"><listitem><para>Many only operated on a subset of HTML, and relied upon hand\r
-editing of the output to clean up mistakes. This made them impossible\r
-to use as part of a processing pipeline, where the source is\r
-<emphasis role="em">maintained</emphasis> in XHTML.</para></listitem><listitem><para>There was no way to customize the output, except by (1) hand\r
-editing, or (2) writing a post-processing stylesheet, which didn't\r
-have access to the information in the XHTML source document.</para></listitem><listitem><para>Many of them were difficult or impossible to customize and\r
-extend. They were closed-source, or written in Java or Perl (which I\r
-find to be a difficult languages to use for customizing this kind of\r
-thing) and embedded in a larger system.</para></listitem><listitem><para>They didn't take full advantage of the Docbook tag set and content\r
-model to represent document structure. For instance, they didn't\r
-generate nested <literal>section</literal> elements to represent\r
-<literal>h1</literal> <literal>h2</literal> sequences, or <literal>table</literal> to\r
-represent tables with <literal>summary</literal> attributes.</para></listitem></itemizedlist>\r
-\r
-<para/></section><section><title>I got this error. What does it mean?</title>\r
-<variablelist><varlistentry><term>Q. <literal>Fatal Error! The element type "br" must be terminated by the matching end-tag "</br>".\r
-</literal></term><listitem><para>A. Your document is HTML, not <emphasis role="em">X</emphasis>HTML. You need to fix it, or run it through Tidy first.</para></listitem></varlistentry><varlistentry><term>Q. My output document is empty except for the <literal><?xml version="1.0" encoding="UTF-8"?></literal> line.</term><listitem><para>A. The document is missing a namespace declaration. See the <ulink url="index.src.html">example</ulink> for an example.</para></listitem></varlistentry><varlistentry><term>Q. Some of the headers and document sections are repeated multiple times.</term><listitem><para>A. The document has out-of-sequence headers, such as <literal>h1</literal> followed by <literal>h3</literal> (instead of <literal>h2</literal>). This won't work.</para></listitem></varlistentry><varlistentry><term>Q. <literal>Fatal Error! The prefix "db" for element "db:footnote" is not bound.</literal></term><listitem><para>A. You haven't declared the <literal>db</literal> namespace prefix. See the <ulink url="index.src.html">example</ulink> for an example.</para></listitem></varlistentry></variablelist>\r
-\r
-\r
-<para/></section></section><section><title>Implementation Notes</title>\r
-\r
-<para/><section><title>Bugs</title>\r
-<itemizedlist spacing="compact"><listitem><para>Improperly sequenced <literal>h<replaceable>n</replaceable></literal> (for example\r
-<literal>h1</literal> followed by <literal>h3</literal>, instead of\r
-<literal>h2</literal>) will result in duplicate text.</para></listitem></itemizedlist>\r
-\r
-\r
-<para/></section><section><title>Limitations</title>\r
-<itemizedlist spacing="compact"><listitem><para>The <literal>id</literal> attribute is only preserved for certain\r
-elements (at least <literal>h<replaceable>n</replaceable></literal>, images, paragraphs, and\r
-tables). It ought to be preserved for all of them.</para></listitem><listitem><para>Only the <link linkend="tables">very simplest</link> table format is\r
-implemented.</para></listitem><listitem><para>Always uses compact lists.</para></listitem><listitem><para>The string matching for <literal><?html2b\r
-class="<replaceable>classname</replaceable>"?></literal> requires an exact match\r
-(spaces and all).</para></listitem><listitem><para>The <link linkend="implicit-blocks">implicit blocks</link> code is easily\r
-confused, as documented in that section. This is\r
-easy to fix now that I understand the difference between block and\r
-inline elements (I didn't when I was implementing this), but I\r
-probably won't do so until I run into the problem again.</para></listitem></itemizedlist>\r
-\r
-\r
-\r
-\r
-<para/></section><section><title>Wishlist</title>\r
-<itemizedlist spacing="compact"><listitem><para>Allow <literal><html2db attribute-name="<replaceable>name</replaceable>"\r
-value="<replaceable>value</replaceable>"?></literal> at any position, to set arbitrary\r
-Docbook attributes on the generated element.</para></listitem><listitem><para>Use different technique from the <link linkend="docbook-elements">fake\r
-namespace prefix</link> to name Docbook elements in the source, that\r
-preserves the XHTML validity of the source file. For example, an\r
-option transform <literal><div class="db:footnote"></literal> into\r
-<literal><footnote></literal>, or to use a processing attribute\r
-(<literal><div><?html2db classname="footnote"?></literal>).</para></listitem><listitem><para>Parse DC metadata from XHTML <literal>html/head/meta</literal>.</para></listitem><listitem><para>Add an option to use <literal>html/head/title</literal> instead of\r
-<literal>html/body/h1[1]</literal> for top title.</para></listitem><listitem><para>Allow an <literal>id</literal> on every element.</para></listitem><listitem><para>Add an option to translate the XHTML <literal>class</literal> into a\r
-Docbook <literal>role</literal>.</para></listitem><listitem><para>Preserve more of the whitespace from the source document especially within lists and tables in order to make it easier to debug the output document.</para></listitem></itemizedlist>\r
-\r
-\r
-<para/></section><section><title>Design Notes</title>\r
-<para/><section id="docbook-namespace"><title>The Docbook Namespace</title>\r
-<para><literal>html2db.xsl</literal> accepts elements in the "Docbook namespace" in XHTML\r
-source. This namespace is <literal>urn:docbook</literal>.</para>\r
-\r
-<para>This isn't technically correct. Docbook doesn't really have a\r
-namespace, and if it did, it wouldn't be this one. <ulink url="http://www.faqs.org/rfcs/rfc3151.html">RFC 3151</ulink> suggests\r
-<literal>urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN</literal> as the\r
-Docbook namespace.</para>\r
-\r
-<para>There two problems with the RFC 3151 namespace. First, it's long\r
-and hard to remember. Second, it's limited to Docbook v4.1.2 \r
-but <literal>html2db.xsl</literal> works with other versions of Docbook too, which would\r
-presumably have other namespaces. I think it's more useful to\r
-<emphasis role="em">under</emphasis>specify the Docbook version in the spec for this tool.\r
-Docbook itself underspecifies the version completely, by avoiding a\r
-namespace at all, but when mixing Docbook and XHTML elements I find it\r
-useful to be <emphasis role="em">more</emphasis> specific than that.</para>\r
-\r
-<para/></section></section><section><title>History</title>\r
-<para>The original version of <literal>html2db.xsl</literal> was written by <ulink url="http://osteele.com">Oliver Steele</ulink>, as part of the <ulink url="http://laszlosystems.com">Laszlo Systems, Inc.</ulink> documentation\r
-effort. We had a set of custom stylesheets that formatted and added\r
-linking information to programming-language elements such as\r
-<literal>classname</literal> and <literal>tagname</literal>, and added\r
-Table-of-Contents to chapter documentation and numbers examples.</para>\r
-\r
-<para>As the documentation set grew, the doc team (John Sundman)\r
-requested features such as inter-chapter navigation, callouts, and\r
-index and glossary elements. I was able to beat all of these back\r
-except for navigation, which seemed critical. After a few days trying\r
-to implement this, I decided it would be simpler to convert the subset\r
-of XHTML that we used into a subset of Docbook, and use the latter to\r
-add navigation. (Once this was done, the other features came for\r
-free.)</para>\r
-\r
-<para>During my August 2004 "sabbatical", I factored the general html2db\r
-code out from the Laszlo-specific code, refactored and otherwise\r
-cleaned it up, and wrote this documentation.</para>\r
-\r
-<para/></section><section><title>Credits</title>\r
-<para><literal>html2db.xsl</literal> was written by <ulink url="http://osteele.com">Oliver Steele</ulink>, as part of the <ulink url="http://laszlosystems.com">Laszlo Systems, Inc.</ulink> documentation effort.</para>\r
-\r
-<para/></section></section></article>
\ No newline at end of file
+++ /dev/null
-output-xhtml: true\r
-show-warnings: no\r
-quiet: yes\r