diff options
Diffstat (limited to 'support/TeX4ht/source/tex4ht-docbook-xtpipes.tex')
-rw-r--r-- | support/TeX4ht/source/tex4ht-docbook-xtpipes.tex | 537 |
1 files changed, 537 insertions, 0 deletions
diff --git a/support/TeX4ht/source/tex4ht-docbook-xtpipes.tex b/support/TeX4ht/source/tex4ht-docbook-xtpipes.tex new file mode 100644 index 0000000000..00d4d048ef --- /dev/null +++ b/support/TeX4ht/source/tex4ht-docbook-xtpipes.tex @@ -0,0 +1,537 @@ +% $Id: tex4ht-docbook-xtpipes.tex 740 2020-06-13 22:35:32Z karl $ +% htlatex tex4ht-docbook-xtpipes "xhtml,next,3" "" "-d./" +% +% Copyright 2009-2020 TeX Users Group +% Copyright 2000-2009 Eitan M. Gurari +% Released under LPPL 1.3c+. +% See tex4ht-cpright.tex for license text. + +\documentclass{article} + \Configure{ProTex}{log,<<<>>>,title,list,`,[[]]} +\begin{document} + +\input{common} +\input{tex4ht-cpright} +\input{tex4ht-dir} + + + +%%%%%%%%%%%%%%%%%% +\part{Post Processing for DocBook Output Mode} +%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%% +\section{Outline} +%%%%%%%%%%%%%%%%%% + +\AtEndDocument{\OutputCodE\<docbook.4xt\>} + +\Needs{"xmllint --valid --noout docbook.4xt"} + +\<docbook.4xt\><<< +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE xtpipes SYSTEM "xtpipes.dtd" > +<!-- docbook.4xt (`version), generated from `jobname.tex + Copyright (C) 2009-2010 TeX Users Group + Copyright (C) `CopyYear.2008. Eitan M. Gurari +`<TeX4ht copyright`> --> +<xtpipes preamble="yes" signature="docbook.4xt (`version)"> + <sax content-handler="xtpipes.util.ScriptsManager" + lexical-handler="xtpipes.util.ScriptsManagerLH" > + `<db links`> + `<tabular hor lines`> + `<trim() para`> + </sax> +</xtpipes> +>>> + + +\AtEndDocument{\OutputCodE\<DbUtilities.java\>} + +\ifdojava + \Needs{" + javac DbUtilities.java -d \XTPIPES +"} +\fi + +\<DbUtilities.java\><<< +package tex4ht; +/* DbUtilities.java (`version), generated from `jobname.tex + Copyright (C) 2009-2010 TeX Users Group + Copyright (C) `CopyYear.2008. Eitan M. Gurari +`<TeX4ht copyright`> */ + +import org.w3c.dom.*; +public class DbUtilities { + `<static void cline(dom)`> + `<static void para(dom)`> +} +>>> + + +%%%%%%%%%%%%%%%%%% +\section{Trim Spaces of Paragraphs} +%%%%%%%%%%%%%%%%%% + +\<trim() para\><<< +<script element="para" > + <dom name="." xml="." method="para" class="tex4ht.DbUtilities" /> +</script> +>>> + + +\<static void para(dom)\><<< +public static void para(Node dom) { + Node pNode = dom.getFirstChild(); + if( pNode.hasChildNodes() ){ + Node child = pNode.getFirstChild(); + if( child != null ){ + if( (child.getNodeType() == Node.TEXT_NODE) + && + ((Text) child).getWholeText().trim().equals("") + ){ + pNode.removeChild( child ); + } } } + if( pNode.hasChildNodes() ){ + Node child = pNode.getLastChild(); + if( child != null ){ + if( (child.getNodeType() == Node.TEXT_NODE) + && + ((Text) child).getWholeText().trim().equals("") + ){ + pNode.removeChild( child ); + } } } + if( pNode.hasChildNodes() ){ + Node child = pNode.getFirstChild(); + if( (child != null) + && (child.getNextSibling() == null) + && (child.getNodeType() == Node.TEXT_NODE) + ){ + String txt = ((Text) child).getWholeText(); + String trm = txt.trim(); + if( !trm.equals(txt) ){ + ((Text)child).replaceWholeText(trm); + } } } +} +>>> + + + +%%%%%%%%%%%%%%%%%% +\section{Title Elements} +%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%% +\section{Internal Links} +%%%%%%%%%%%%%%%%%% + + + Anchor within the document should use + +\begin{center} + \verb+<link linkend="Ortsflaechen">...</link>+ +\end{center} + +without the `\verb+#+' character. +The ulink element is used for URLs. + +\begin{center} + \verb+<ulink url="http://...">...</ulink>+ +\end{center} + +\<db links\><<< +<script element="ulink" > + <set name="ulink" > + `<open xslt script`> + `<ulink templates`> + `<close xslt script`> + </set> + <xslt name="." xml="." xsl="ulink" /> +</script> +>>> + + +\<ulink templates\><<< +<xsl:template match=" ulink[ + @url and starts-with( @url, '#') +]" > + <link> + <xsl:attribute name="linkend"> + <xsl:value-of select=" substring( @url, 2 )" /> + </xsl:attribute> + <xsl:apply-templates select="*|text()|comment()" /> + </link> +</xsl:template> +>>> + +%%%%%%%%%%%%%%%%%% +\section{tabular hor lines} +%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%% +\subsection{Outline} +%%%%%%%%%%%%% + + +\<tabular hor lines\><<< +<script element="tbody" > + <set name="dirt" > + `<open xslt script`> + `<tbody dirt templates`> + `<close xslt script`> + </set> + <set name="tbody" > + `<open xslt script`> + `<tbody templates`> + `<close xslt script`> + </set> + <xslt name="." xml="." xsl="tbody" /> + <xslt name="." xml="." xsl="dirt" /> + <dom name="." xml="." method="cline" class="tex4ht.DbUtilities" /> +</script> +>>> + + + + + + +\<static void cline(dom)\><<< +public static void cline(Node dom) { + Node row, entry, para, nextrow; + Node node = dom.getFirstChild(); + if( node != null ){ + `<remove empty trailing rows`> + `<merge cline rows into non-line rows`> + } +} +>>> + + +\<remove empty trailing rows\><<< +row = node.getLastChild(); +while( (row != null) + && ( (entry = row.getLastChild()) != null) + && ( (para = entry.getFirstChild()) != null) + && ( para.getNextSibling() == null) + && ( para.getFirstChild() == null) +){ + node.removeChild(row); + row = node.getLastChild(); +} +>>> + +The merging of rows deal with cases similar to the following one. + + +\begin{verbatim} +<row> + <entry align="left"> + <para> 1</para> + </entry> + <entry align="left" nameend="3" namest="2"> + <para>2 to 3</para> + </entry> +</row> +<row role="cline"> + <entry rowsep="0"/> + <entry rowsep="1"/> + <entry rowsep="1"/> +</row> +\end{verbatim} + +\<merge cline rows into non-line rows\><<< +row = node.getFirstChild(); +while( row != null ){ + if( (row.getNodeType() == Node.ELEMENT_NODE) + && ((Element) row).getAttribute("rowsep").equals("") + && !((Element) row).getAttribute("role" ).equals("cline") + && ((nextrow = row.getNextSibling()) != null) + && (nextrow.getNodeType() == Node.ELEMENT_NODE) + && ((Element) nextrow).getAttribute("role" ).equals("cline") + ){ + `<boolean compatible = ...`> + if( compatible ){ + `<row += nextrow`> + node.removeChild(nextrow); + } + } + row = row.getNextSibling(); +} +>>> + +\<boolean compatible = ...\><<< +boolean compatible = true; +Node entry1 = row.getFirstChild(); +Node entry2 = nextrow.getFirstChild(); +while( true ){ + if( (entry1 == null) || (entry2 == null) ){ break; } + int range; + try{ + range = + Integer.parseInt( ((Element) entry1).getAttribute("nameend") ) + - + Integer.parseInt( ((Element) entry1).getAttribute("namest") ) + + + 1; + } catch( Exception e){ range = 1;} + if( range > 1 ){ + String rowsep = ((Element) entry2).getAttribute("rowsep"); + while( --range > 0 ){ + entry2 = entry2.getNextSibling(); + if( entry2 == null ){ + compatible = false; + break; + } + String value = ((Element) entry2).getAttribute("rowsep"); + if( !value.equals( rowsep ) ){ + compatible = false; + break; + } + } + } + if( !compatible ){ break; } + entry1 = entry1.getNextSibling(); + entry2 = entry2.getNextSibling(); +} +>>> + +\<row += nextrow\><<< +entry1 = row.getFirstChild(); +entry2 = nextrow.getFirstChild(); +while( true ){ + if( (entry1 == null) || (entry2 == null) ){ break; } + int range; + try{ + range = + Integer.parseInt( ((Element) entry1).getAttribute("nameend") ) + - + Integer.parseInt( ((Element) entry1).getAttribute("namest") ) + + + 1; + } catch( Exception e){ range = 1;} + ((Element) entry1).setAttribute( + "rowsep", + ((Element) entry2).getAttribute("rowsep") ); + while( --range > 0 ){ + entry2 = entry2.getNextSibling(); + } + entry1 = entry1.getNextSibling(); + entry2 = entry2.getNextSibling(); +} +>>> + + + +%%%%%%%%%%%%% +\subsection{Dirt Lines} +%%%%%%%%%%%%% + +Can they be removed earlier at the latex pass? + + +\<tbody dirt templates\><<< +<xsl:template match=" row[ + (count(child::entry) = 1) + and + ( normalize-space(child::entry[1]/child::para[1]/child::comment()) + = 'dirt' + ) +]"> +</xsl:template> +>>> + + + + + +%%%%%%%%%%%%% +\subsection{hline} +%%%%%%%%%%%%% + + + +\<tbody templates\><<< +<xsl:template match=" row[ @role = 'hline' ]" /> +>>> + +\<tbody templates\><<< +<xsl:template match=" row[ @role = 'hline' ]" /> +<xsl:template match=" row[ + following-sibling::*[1][ self::row[@role = 'hline'] ] +] "> + <xsl:copy> + <xsl:attribute name="rowsep"> + <xsl:text>1</xsl:text> + </xsl:attribute> + <xsl:apply-templates select="*|@*|text()|comment()" /> + </xsl:copy> +</xsl:template> +>>> + +%%%%%%%%%%%%% +\subsection{cline} +%%%%%%%%%%%%% + + + + +\<tbody templates\><<< +<xsl:template match=" row[ + (@role = 'cline') + and + preceding-sibling::*[1] + [ self::row[ not(@role) ] ] + and + ( count(child::entry) + = count(preceding-sibling::*[1]/child::entry)) +]" /> +<xsl:template match=" row[ + not(@role) + and + following-sibling::*[1][ self::row[@role = 'cline'] ] + and + ( count(child::entry) + = count(following-sibling::*[1]/child::entry)) +] "> + <xsl:copy> + <xsl:apply-templates select="@*" /> + <xsl:apply-templates select="*|text()|comment()" mode="cline" /> + </xsl:copy> +</xsl:template> +>>> + +\<tbody templates\><<< +<xsl:template match=" text()|comment() " mode="cline"> + <xsl:copy> + <xsl:apply-templates select="*|@*|text()|comment()" /> + </xsl:copy> +</xsl:template> +>>> + + + + +\<tbody templates\><<< +<xsl:template match="*" mode="cline"> + <xsl:copy> + <xsl:if test="self::entry"> + <xsl:attribute name="rowsep"> + <xsl:variable name="pos"> + <xsl:value-of select="position()" /> + </xsl:variable> + <xsl:value-of select="parent::row + / following-sibling::*[1] + / child::entry[position()=$pos] + / @rowsep + " /> + </xsl:attribute> + </xsl:if> + <xsl:apply-templates select="*|@*|text()|comment()" /> + </xsl:copy> +</xsl:template> +>>> + + + + + + + + + +%%%%%%%%%%%%%%%%%% +\section{Shared} +%%%%%%%%%%%%%%%%%% + + + +\<open xslt script\><<< +<![CDATA[ + <xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:db="http://docbook.org/ns/docbook" + > + <xsl:output omit-xml-declaration = "yes" /> +>>> + +\<close xslt script\><<< + <xsl:template match="*|@*|text()|comment()" > + <xsl:copy> + <xsl:apply-templates select="*|@*|text()|comment()" /> + </xsl:copy> + </xsl:template> + </xsl:stylesheet> +]]> +>>> + + +\<get content template\><<< +<xsl:template match="*" mode="content" > + <xsl:choose> + <xsl:when test=" @class = 'char' " > + <xsl:text>x</xsl:text> + </xsl:when> + <xsl:when test=" not( + (@title = 'speech-extra') or (@class = 'accent-char') + ) " > + <xsl:apply-templates select="*|text()" mode="content" /> + </xsl:when> + </xsl:choose> +</xsl:template> +>>> + + + + + +%%%%%%%%%%%%%%%%%% +\section{Copyright} +%%%%%%%%%%%%%%%%%% + +\let\newfilename=\relax + +\<copy right\><<< +/**********************************************************/ >>> + + + +\<cont copy right\><<< +/* */ +/* This work may be distributed and/or modified under the */ +/* conditions of the LaTeX Project Public License, either */ +/* version 1.3 of this license or (at your option) any */ +/* later version. The latest version of this license is */ +/* in */ +/* http://www.latex-project.org/lppl.txt */ +/* and version 1.3 or later is part of all distributions */ +/* of LaTeX version 2003/12/01 or later. */ +/* */ +/* This work has the LPPL maintenance status "maintained".*/ +/* */ +/* The Current Maintainer of this work */ +/* is the TeX4ht Project <http://tug.org/tex4ht>. */ +>>> + +\ifdojava +\AtEndDocument{\Needs{% + "pushd \XTPIPES || exit 1 + ; + jar cf tex4ht.jar * + ; + popd + ; + mv \XTPIPES tex4ht.jar \TEXMFTEXivBIN + ; + cp \XTPIPES xtpipes/lib/* + \TEXMFTEXivXTPIPES +"}} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\end{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + |