summaryrefslogtreecommitdiff
path: root/support/TeX4ht/source/tex4ht-docbook-xtpipes.tex
diff options
context:
space:
mode:
Diffstat (limited to 'support/TeX4ht/source/tex4ht-docbook-xtpipes.tex')
-rw-r--r--support/TeX4ht/source/tex4ht-docbook-xtpipes.tex537
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}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+