mirror of https://github.com/moparisthebest/xeps
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
14 KiB
451 lines
14 KiB
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://xsltsl.org/string"> |
|
<!-- |
|
* Copyright (c) 2008 - 2017 Tobias Markmann |
|
* All rights reserved. |
|
* |
|
* Redistribution and use in source and binary forms, with or without |
|
* modification, are permitted provided that the following conditions are met: |
|
* * Redistributions of source code must retain the above copyright |
|
* notice, this list of conditions and the following disclaimer. |
|
* * Redistributions in binary form must reproduce the above copyright |
|
* notice, this list of conditions and the following disclaimer in the |
|
* documentation and/or other materials provided with the distribution. |
|
* * Neither the name of the <organization> nor the |
|
* names of its contributors may be used to endorse or promote products |
|
* derived from this software without specific prior written permission. |
|
* |
|
* THIS SOFTWARE IS PROVIDED BY TOBIAS MARKMANN ''AS IS'' AND ANY |
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
* DISCLAIMED. IN NO EVENT SHALL TOBIAS MARKMANN BE LIABLE FOR ANY |
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
|
Thanks to the XSLT Standard Library http://xsltsl.sourceforge.net/. |
|
--> |
|
|
|
<!--<xsl:include href="xsltsl/string.xsl"/>--> |
|
<xsl:import href="texml-xsl/stdlib.xsl"/> |
|
|
|
<!-- Create a variable named $maxXEPVersiom containing the MAX version --> |
|
<xsl:variable name="maxXEPVersion"> |
|
<xsl:value-of select='/xep/header/revision[position()=1]/version'/> |
|
</xsl:variable> |
|
|
|
<!-- Create a variable named $maxXEPDate containing the MAX date --> |
|
<xsl:variable name="maxXEPDate"> |
|
<xsl:for-each select="/xep/header/revision"> |
|
<xsl:sort select="date" data-type="text" order="descending" /> |
|
<xsl:if test="position() = 1"> |
|
<xsl:value-of select="date" /> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:variable> |
|
|
|
<!-- Format URLs for the front page. Putting too long URLs in the footnotes. --> |
|
<xsl:template name="formatURL"> |
|
<xsl:param name="url"/> |
|
<xsl:choose> |
|
<xsl:when test="string-length($url) > 80"> |
|
<cmd name="thanks"><parm><cmd name="url"><parm><xsl:value-of select="$url"/></parm></cmd></parm></cmd> \hspace{0.5 cm} |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<cmd name="url"><parm><xsl:value-of select="$url"/></parm></cmd> \\ |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:template> |
|
|
|
<!-- convert "document": create header and continue --> |
|
<xsl:template match="xep"> |
|
<TeXML> |
|
<!-- create header --> |
|
<TeXML escape="0"> |
|
%!TEX TS-program = xelatex |
|
%!TEX encoding = UTF-8 Unicode |
|
\documentclass[DIV=10]{scrartcl} |
|
\KOMAoptions{paper=a4} |
|
|
|
\usepackage[ |
|
pdftitle={XEP-<xsl:value-of select="/xep/header/number"/>: <xsl:value-of select="/xep/header/title"/>}, |
|
pdfauthor={XMPP Standards Foundation}, |
|
pdfcreator={XEP2PDF}, |
|
pdfproducer={XEP2PDF}, |
|
breaklinks = true, |
|
unicode, |
|
pagebackref, |
|
xetex]{hyperref} |
|
|
|
% break URLs at more places |
|
\renewcommand{\UrlBreaks}{\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z\do\0\do\1} |
|
|
|
\usepackage{xcolor} |
|
\usepackage{graphicx} |
|
\usepackage{fancyhdr} |
|
\usepackage{tabu} |
|
\usepackage{longtable} |
|
\usepackage{listings} |
|
\usepackage{varwidth} |
|
\usepackage{titling} |
|
\usepackage{titletoc} |
|
\usepackage{float} |
|
\usepackage{adjustbox} |
|
|
|
\usepackage{hyphenat} |
|
|
|
\hypersetup{colorlinks, linkcolor=blue, anchorcolor=blue, urlcolor=blue} |
|
|
|
|
|
\usepackage{fontspec,xltxtra,xunicode} |
|
\defaultfontfeatures{Mapping=tex-text} |
|
\setromanfont[Ligatures={Common}]{Gentium Basic} |
|
\setsansfont[Scale=MatchLowercase]{Gentium Basic} |
|
\setmonofont[Scale=MatchLowercase]{Inconsolata} |
|
|
|
\setkomafont{descriptionlabel}{\normalfont\bfseries} |
|
|
|
\usepackage[english]{babel} |
|
|
|
\pagestyle{fancy} |
|
\fancyfoot{} |
|
\fancyhead{} |
|
%% page numbering |
|
|
|
\newcommand{\XEPNumber}[0]{<xsl:value-of select="/xep/header/number"/>} |
|
\newcommand{\XEPVersion}[0]{<xsl:value-of select="$maxXEPVersion"/>} |
|
|
|
\newcolumntype{L}{>{\raggedright\arraybackslash}X} |
|
|
|
\fancyhead[L,L]{\includegraphics[totalheight=10pt]{xmpp.pdf} \slshape \leftmark} |
|
\fancyfoot[C,C]{\thepage} |
|
|
|
\pretitle{ |
|
\begin{figure*}[h] |
|
\begin{center} |
|
\includegraphics[totalheight=7.5cm]{xmpp-text.pdf} |
|
\end{center} |
|
\end{figure*} |
|
\begin{center}\LARGE |
|
} |
|
|
|
\sloppy |
|
</TeXML> |
|
|
|
<cmd name="title" nl2="1"> |
|
<parm>XEP-<cmd name="XEPNumber" />: <xsl:value-of select="/xep/header/title"/></parm> |
|
</cmd> |
|
<cmd name="author"> |
|
<parm><TeXML escape="0"> |
|
<xsl:for-each select='/xep/header/author'><xsl:value-of select="firstname"/><xsl:text> </xsl:text><xsl:value-of select="surname"/> \\ |
|
<xsl:if test="email"><xsl:call-template name="formatURL"><xsl:with-param name="url">mailto:<xsl:value-of select="email"/></xsl:with-param></xsl:call-template></xsl:if> |
|
<xsl:if test="jid"><xsl:call-template name="formatURL"><xsl:with-param name="url">xmpp:<xsl:value-of select="jid"/></xsl:with-param></xsl:call-template></xsl:if> |
|
<xsl:if test="uri"><xsl:call-template name="formatURL"><xsl:with-param name="url"><xsl:value-of select="uri"/></xsl:with-param></xsl:call-template></xsl:if> <xsl:if test='position() != last()'> \and </xsl:if> |
|
</xsl:for-each> |
|
</TeXML></parm> |
|
</cmd> |
|
<cmd name="date"> |
|
<parm><TeXML escape="0"><xsl:value-of select="$maxXEPDate"/>\\ Version <xsl:value-of select="$maxXEPVersion"/></TeXML></parm> |
|
</cmd> |
|
<!-- process content --> |
|
<env name="document"> |
|
<TeXML escape="0"> |
|
<cmd name="lstset"> |
|
<parm>language=XML, |
|
breaklines=true, |
|
emptylines=5, |
|
frame=single, |
|
rulecolor=\color{black}, |
|
basicstyle=\ttfamily\small\color{darkgray}, |
|
keywordstyle=\color{cyan}, |
|
stringstyle=\color{blue}, |
|
tagstyle=\color{purple}, |
|
markfirstintag=true |
|
</parm> |
|
</cmd> |
|
|
|
</TeXML> |
|
<cmd name="KOMAoptions"><parm>DIV=24</parm></cmd> |
|
<cmd name="pagestyle"><parm>empty</parm></cmd> |
|
<cmd name="maketitle" /> |
|
<cmd name="thispagestyle"><parm>empty</parm></cmd> |
|
<env name="center"> |
|
<env name="tabular"><parm>ccc</parm> |
|
<TeXML escape="0"> |
|
<cmd name="textbf"><parm>Status</parm></cmd> & <cmd name="textbf"><parm>Type</parm></cmd> & <cmd name="textbf"><parm>Short Name</parm></cmd> \\ |
|
<xsl:value-of select="/xep/header/status"/> & <xsl:value-of select="/xep/header/type"/> & <TeXML escape="1"><xsl:value-of select="/xep/header/shortname"/></TeXML> |
|
</TeXML> |
|
</env> |
|
</env> |
|
<env name="abstract"> |
|
<xsl:value-of select="/xep/header/abstract"/> |
|
</env> |
|
<cmd name="newpage" nl2="1"/> |
|
<TeXML escape="0"> |
|
\fancyhead[L,L]{\includegraphics[totalheight=10pt]{xmpp.pdf} \slshape \leftmark} |
|
\fancyfoot[C,C]{\thepage} |
|
</TeXML> |
|
<cmd name="KOMAoptions"><parm>DIV=10</parm></cmd> |
|
<cmd name="section*" nl2="1"><parm>Legal</parm></cmd> |
|
<xsl:apply-templates select="/xep/header/legal" /> |
|
<cmd name="newpage" nl2="1"/> |
|
<cmd name="tableofcontents" nl2="1"/> |
|
<cmd name="newpage" nl2="1"/> |
|
<cmd name="pagestyle" nl2="1"><parm>fancy</parm></cmd> |
|
<cmd name="setcounter" nl2="1"><parm>page</parm><parm>1</parm></cmd> |
|
<xsl:apply-templates/> |
|
</env> |
|
</TeXML> |
|
</xsl:template> |
|
|
|
<!-- for legal crap --> |
|
<xsl:template match="copyright"> |
|
<cmd name="subsection*" nl2="1"><parm>Copyright</parm></cmd> |
|
<group><cmd name="small" /> |
|
<xsl:apply-templates/> |
|
</group> |
|
</xsl:template> |
|
|
|
<xsl:template match="permissions"> |
|
<cmd name="subsection*" nl2="1"><parm>Permissions</parm></cmd> |
|
<group><cmd name="small" /> |
|
<xsl:apply-templates/> |
|
</group> |
|
</xsl:template> |
|
|
|
<xsl:template match="warranty"> |
|
<cmd name="subsection*" nl2="1"><parm>Warranty</parm></cmd> |
|
<group><cmd name="small" /> |
|
<xsl:apply-templates/> |
|
</group> |
|
</xsl:template> |
|
|
|
<xsl:template match="liability"> |
|
<cmd name="subsection*"><parm>Liability</parm></cmd> |
|
<group><cmd name="small" /> |
|
<xsl:apply-templates/> |
|
</group> |
|
</xsl:template> |
|
|
|
<xsl:template match="conformance"> |
|
<cmd name="subsection*"><parm>Conformance</parm></cmd> |
|
<group><cmd name="small" /> |
|
<xsl:apply-templates/> |
|
</group> |
|
</xsl:template> |
|
|
|
|
|
<xsl:template match="header"> |
|
</xsl:template> |
|
|
|
|
|
<!-- table --> |
|
<xsl:template match='table'> |
|
<TeXML escape="0"> |
|
<env name="center"> |
|
<env name='longtabu'> |
|
<parm><xsl:for-each select='tr[1]/th | tr[1]/td'><xsl:if test="position() = 1">l</xsl:if><xsl:if test='position() != last() and position() > 1'>X</xsl:if><xsl:if test='position() = last()'>X</xsl:if></xsl:for-each></parm> |
|
<xsl:for-each select='tr'> |
|
<xsl:for-each select='td | th'><xsl:if test='position() > 1'> & </xsl:if><TeXML escape="1"><xsl:value-of select='.'/></TeXML><xsl:if test='position() = last()'> \\</xsl:if></xsl:for-each> |
|
<xsl:if test="position() = 1"> |
|
\hline |
|
\hline |
|
\endhead |
|
</xsl:if> |
|
</xsl:for-each> |
|
</env> |
|
</env> |
|
</TeXML> |
|
</xsl:template> |
|
|
|
|
|
<!-- link --> |
|
<xsl:template match="span"> |
|
<xsl:apply-templates/> |
|
</xsl:template> |
|
|
|
<xsl:template match="link"> |
|
<xsl:variable name="isHTTP"> |
|
<xsl:call-template name="str:string-match"> |
|
<xsl:with-param name="text"><xsl:value-of select="text()"/></xsl:with-param> |
|
<xsl:with-param name="pattern">*http*</xsl:with-param> |
|
</xsl:call-template> |
|
</xsl:variable> |
|
<xsl:variable name="isInternal"> |
|
<xsl:call-template name="str:string-match"> |
|
<xsl:with-param name="text"><xsl:value-of select="@url"/></xsl:with-param> |
|
<xsl:with-param name="pattern">#*</xsl:with-param> |
|
</xsl:call-template> |
|
</xsl:variable> |
|
<xsl:if test="$isInternal = 0"> |
|
<cmd name="href"> |
|
<parm> |
|
<TeXML escape="0"><xsl:value-of select='@url'/></TeXML> |
|
</parm> |
|
<parm> |
|
<xsl:if test="$isHTTP = 1"> |
|
<cmd name="url"><parm><xsl:apply-templates/></parm></cmd> |
|
</xsl:if> |
|
<xsl:if test="$isHTTP = 0"> |
|
<xsl:apply-templates/> |
|
</xsl:if> |
|
</parm> |
|
</cmd> |
|
</xsl:if> |
|
<xsl:if test="$isInternal = 1"> |
|
<cmd name="hyperref"> |
|
<opt><TeXML escape="0"><xsl:value-of select='@url'/></TeXML></opt> |
|
<parm><xsl:apply-templates/></parm> |
|
</cmd> |
|
<!--<TeXML escape="0"> { </TeXML><cmd name="footnotesize" /><cmd name="pageref"><parm><TeXML escape="0"><xsl:value-of select='@url'/></TeXML></parm></cmd><TeXML escape="0"> } </TeXML>--> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
<!-- note --> |
|
<xsl:template match="note"> |
|
<cmd name="footnote"><parm><xsl:apply-templates/></parm></cmd> |
|
</xsl:template> |
|
|
|
<!-- em --> |
|
<xsl:template match="em"> |
|
<cmd name="emph"><parm><xsl:apply-templates/></parm></cmd> |
|
</xsl:template> |
|
|
|
<!-- strong --> |
|
<xsl:template match="strong"> |
|
<cmd name="textbf"><parm><xsl:apply-templates/></parm></cmd> |
|
</xsl:template> |
|
|
|
<!-- sub --> |
|
<xsl:template match="sub"> |
|
<math><cmd name="textsuperscript"><parm><xsl:apply-templates/></parm></cmd></math> |
|
</xsl:template> |
|
|
|
<!-- span[@class='super'] --> |
|
<xsl:template match="span[@class='super']"> |
|
<math><spec cat="sup"/><spec cat="bg"/><xsl:apply-templates/><spec cat="eg"/></math> |
|
</xsl:template> |
|
|
|
|
|
<!-- p --> |
|
<xsl:template match="p"> |
|
<xsl:apply-templates/><TeXML escape="0" emptylines="1"><xsl:text>\\ |
|
|
|
</xsl:text></TeXML> |
|
</xsl:template> |
|
|
|
<!-- li --> |
|
<xsl:template match="li"> |
|
<TeXML escape="1" emptylines="1"> |
|
<cmd name="item" /> <xsl:apply-templates/><xsl:text> |
|
|
|
</xsl:text> |
|
</TeXML> |
|
</xsl:template> |
|
|
|
<!-- ul --> |
|
<xsl:template match="ul"> |
|
<env name="itemize"> |
|
<xsl:apply-templates/> |
|
</env> |
|
</xsl:template> |
|
|
|
<!-- ol --> |
|
<xsl:template match="ol"> |
|
<env name="enumerate"> |
|
<xsl:apply-templates/> |
|
</env> |
|
</xsl:template> |
|
|
|
<!-- dl --> |
|
<xsl:template match="dl"> |
|
<env name="description"> |
|
<xsl:apply-templates/> |
|
</env> |
|
</xsl:template> |
|
|
|
<!-- di --> |
|
<xsl:template match="di"> |
|
<TeXML escape="1" emptylines="1"> |
|
<cmd name="item"><opt><xsl:value-of select="./dt" /></opt></cmd> |
|
<xsl:text> |
|
</xsl:text> |
|
<xsl:value-of select="./dd" /> |
|
</TeXML> |
|
</xsl:template> |
|
|
|
<!-- example --> |
|
<xsl:template match="example"> |
|
<env name="lstlisting"> |
|
<opt>caption=<group><TeXML escape="1"><xsl:value-of select="@caption"/></TeXML></group></opt> |
|
<TeXML escape="0" emptylines="1"> |
|
<xsl:apply-templates /> |
|
</TeXML> |
|
</env> |
|
</xsl:template> |
|
|
|
<xsl:template match="br"> |
|
<!--<cmd name="newline" gr="0"/>--> |
|
|
|
</xsl:template> |
|
|
|
<!-- code --> |
|
<xsl:template match="code"> |
|
<xsl:if test='@class = "inline"'> |
|
<cmd name='path'><parm><TeXML escape="0"><xsl:value-of select="."/></TeXML></parm></cmd> |
|
</xsl:if> |
|
<xsl:if test='not(@class)'> |
|
<env name="lstlisting"> |
|
<TeXML escape="0" emptylines="1" ligatures="1"> |
|
<xsl:value-of select="."/> |
|
</TeXML> |
|
</env> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
<!-- img --> |
|
<xsl:template match="img"> |
|
<env name="figure"><opt>H</opt> |
|
<cmd name="centering" /> |
|
<cmd name="adjustimage"><parm><TeXML escape="0">max size={.9\textwidth}{.9\textheight}</TeXML></parm><parm>inlineimage-<xsl:value-of select="/xep/header/number" />-<xsl:value-of select="count(preceding::img)" /></parm></cmd> |
|
</env> |
|
</xsl:template> |
|
|
|
<!-- section3 --> |
|
<xsl:template match="section3"> |
|
<cmd name="subsubsection" nl2="1"> |
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm> |
|
</cmd> |
|
<cmd name="label"> |
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm> |
|
</cmd> |
|
<xsl:apply-templates /> |
|
</xsl:template> |
|
|
|
<!-- section2 --> |
|
<xsl:template match="section2"> |
|
<cmd name="subsection" nl2="1"> |
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm> |
|
</cmd> |
|
<cmd name="label"> |
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm> |
|
</cmd> |
|
<xsl:apply-templates /> |
|
</xsl:template> |
|
|
|
<!-- section1 --> |
|
<xsl:template match="section1"> |
|
<cmd name="section" nl2="1"> |
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm> |
|
</cmd> |
|
<cmd name="label" nl2="1"> |
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm> |
|
</cmd> |
|
<xsl:apply-templates /> |
|
</xsl:template> |
|
|
|
|
|
|
|
</xsl:stylesheet>
|
|
|