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.
378 lines
13 KiB
378 lines
13 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<!--
|
|
This file is part of the KDE project
|
|
Copyright (C) 2002 Robert JACOLIN <rjacolin@ifrance.com>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
This stylesheet convert kword document in xsl:fo.
|
|
|
|
-->
|
|
|
|
<xsl:stylesheet version = '1.0'
|
|
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
|
|
xmlns:fo='http://www.w3.org/1999/XSL/Format'>
|
|
|
|
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
|
|
<xsl:param name="nbTotalPara" select="30"/>
|
|
|
|
<!-- DOC. (DEFINITIONS, ...) -->
|
|
<xsl:template match="DOC">
|
|
<xsl:comment>
|
|
<xsl:value-of select="@editor"/>
|
|
</xsl:comment>
|
|
<fo:root>
|
|
<fo:layout-master-set>
|
|
<fo:simple-page-master
|
|
margin-right="0.5cm" margin-left="0.5cm" margin-bottom="0.5cm" margin-top="0.75cm"
|
|
page-width="21cm" page-height="29.7cm" master-name="first">
|
|
<fo:region-body></fo:region-body>
|
|
</fo:simple-page-master>
|
|
<fo:simple-page-master
|
|
margin-right="2.5cm" margin-left="2.5cm" margin-bottom="2cm" margin-top="1cm"
|
|
page-width="21cm" page-height="29.7cm" master-name="rest">
|
|
<fo:region-body></fo:region-body>
|
|
</fo:simple-page-master>
|
|
|
|
<fo:page-sequence-master master-name="page">
|
|
<fo:repeatable-page-master-alternatives>
|
|
<fo:conditional-page-master-reference master-name="first"
|
|
page-position="first" />
|
|
<fo:conditional-page-master-reference master-name="rest"
|
|
page-position="rest" />
|
|
<!-- recommended fallback procedure -->
|
|
<fo:conditional-page-master-reference master-name="rest" />
|
|
</fo:repeatable-page-master-alternatives>
|
|
</fo:page-sequence-master>
|
|
</fo:layout-master-set>
|
|
<xsl:apply-templates select="FRAMESETS"/>
|
|
</fo:root>
|
|
</xsl:template>
|
|
|
|
<!-- LE DOCUMENT LUI-MEME -->
|
|
<xsl:template match="FRAMESETS">
|
|
<fo:page-sequence master-name="page">
|
|
<xsl:if test="/DOC/ATTRIBUTES/@hasHeader='1'">
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=1]"/>
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=2]"/>
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=3]"/>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="/DOC/ATTRIBUTES/@hasFooter='1'">
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=4]"/>
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=5]"/>
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=6]"/>
|
|
</xsl:if>
|
|
|
|
<xsl:apply-templates select="FRAMESET[@frameInfo=0]"/>
|
|
</fo:page-sequence>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- CADRES POUR CHAQUE PARTIE D'UNE PAGE -->
|
|
<xsl:template match="FRAMESET">
|
|
|
|
<xsl:if test="@frameInfo=0">
|
|
<fo:flow flow-name="xsl-region-body">
|
|
<xsl:apply-templates select="FRAME"/>
|
|
<xsl:call-template name="PARAS" select="PARAGRAPH">
|
|
<xsl:with-param name="i">1</xsl:with-param>
|
|
<xsl:with-param name="debutListInitial">0</xsl:with-param>
|
|
<xsl:with-param name="nbItemInitial">0</xsl:with-param>
|
|
</xsl:call-template>
|
|
</fo:flow>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="@frameInfo=1">
|
|
<fo:static-content flow-name="xsl-region-bottom">
|
|
<xsl:apply-templates select="FRAME"/>
|
|
<xsl:apply-templates name="PARAGS" select="PARAS"/>
|
|
</fo:static-content>
|
|
</xsl:if>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- CADRE -->
|
|
<xsl:template match="FRAME">
|
|
|
|
</xsl:template>
|
|
|
|
<!-- LISTE DE PARAG. -->
|
|
<xsl:template name="PARAS">
|
|
<xsl:param name="i">param_i</xsl:param>
|
|
<xsl:param name="nbItemInitial">param_nbItem</xsl:param>
|
|
<xsl:param name="debutListeInitial" select="param_debutListeInitial"/>
|
|
|
|
<xsl:message>parag. <xsl:value-of select="$i"/></xsl:message>
|
|
|
|
<!-- test si le paragraphe est une liste -->
|
|
<xsl:choose>
|
|
<xsl:when test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@numberingtype=0">
|
|
<!-- si le parag. est une liste on groupe -->
|
|
<xsl:message>Une liste</xsl:message>
|
|
<xsl:variable name="nbItem" select="$nbItemInitial + 1"/>
|
|
<!-- Rappelle le template -->
|
|
<xsl:if test="($i + 1) <=$nbTotalPara">
|
|
<xsl:message>parag. suivant </xsl:message>
|
|
<xsl:call-template name="PARAS">
|
|
<xsl:with-param name="debutListeInitial" select="$debutListeInitial"/>
|
|
<xsl:with-param name="i"><xsl:value-of select="$i + 1"/></xsl:with-param>
|
|
<xsl:with-param name="nbItemInitial" select="$nbItem"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
<!-- si le parag. est normal, on le genere. -->
|
|
<xsl:otherwise>
|
|
<xsl:if test="$nbItemInitial > 0">
|
|
<fo:list-block>
|
|
<xsl:variable name="startInit">
|
|
<xsl:choose>
|
|
<xsl:when test="PARAGRAPH[position()=($i - 1)]/LAYOUT/COUNTER/@start">
|
|
<xsl:copy-of select="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@start"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:if test="PARAGRAPH[position()=($i - 1)]/LAYOUT/COUNTER/@type=1">
|
|
<xsl:copy-of select="1"/>
|
|
</xsl:if>
|
|
<xsl:if test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type=2">
|
|
<xsl:copy-of select="a"/>
|
|
</xsl:if>
|
|
<xsl:if test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type=3">
|
|
<xsl:copy-of select="A"/>
|
|
</xsl:if>
|
|
<xsl:if test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type=4">
|
|
<xsl:copy-of select="i"/>
|
|
</xsl:if>
|
|
<xsl:if test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type=5">
|
|
<xsl:copy-of select="I"/>
|
|
</xsl:if>
|
|
<xsl:if test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type=6">
|
|
<xsl:copy-of select="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@bullet"/>
|
|
</xsl:if>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:call-template name="genListe">
|
|
<xsl:with-param name="debutListe" select="$debutListeInitial"/>
|
|
<xsl:with-param name="nbItem" select="$nbItemInitial"/>
|
|
<xsl:with-param name="i" select="$debutListeInitial"/>
|
|
<xsl:with-param name="start" select="$startInit"/>
|
|
</xsl:call-template>
|
|
</fo:list-block>
|
|
</xsl:if>
|
|
<xsl:variable name="nbItem">0</xsl:variable>
|
|
<!--<xsl:variable name="nextItem"></xsl:variable>-->
|
|
<xsl:message>Un parag.</xsl:message>
|
|
<xsl:apply-templates select="PARAGRAPH[position()=$i]"/>
|
|
<!-- Rappelle le template -->
|
|
<xsl:if test="($i + 1) <=$nbTotalPara">
|
|
<xsl:message>parag. suivant </xsl:message>
|
|
<xsl:call-template name="PARAS">
|
|
<xsl:with-param name="debutListeInitial" select="$i + 1"/>
|
|
<xsl:with-param name="i"><xsl:value-of select="$i + 1"/></xsl:with-param>
|
|
<xsl:with-param name="nbItemInitial" select="$nbItem"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
<xsl:template name="genListe">
|
|
<xsl:param name="nbItem">param_nbItem</xsl:param>
|
|
<xsl:param name="debutListe" select="param_debutListe"/>
|
|
<xsl:param name="i">param_i</xsl:param>
|
|
<xsl:param name="start">param_start</xsl:param>
|
|
<xsl:message>Generation de la liste</xsl:message>
|
|
<xsl:message> debut : <xsl:value-of select="$debutListe"/></xsl:message>
|
|
<xsl:message> courant : <xsl:value-of select="$i"/></xsl:message>
|
|
<xsl:message> nb : <xsl:value-of select="$nbItem"/></xsl:message>
|
|
<xsl:message> start : <xsl:value-of select="$start"/></xsl:message>
|
|
<xsl:call-template name="createItem">
|
|
<xsl:with-param name="i" select="$i"/>
|
|
<xsl:with-param name="start" select="$start"/>
|
|
</xsl:call-template>
|
|
|
|
<xsl:if test="($i + 1) < ($debutListe + $nbItem)">
|
|
<xsl:variable name="nextStart">
|
|
<xsl:choose>
|
|
<xsl:when test="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@type > 5">
|
|
<xsl:copy-of select="$start"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:copy-of select="$start + 1"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:call-template name="genListe">
|
|
<xsl:with-param name="debutListe" select="$debutListe"/>
|
|
<xsl:with-param name="nbItem" select="$nbItem"/>
|
|
<xsl:with-param name="i" select="$i + 1"/>
|
|
<xsl:with-param name="start" select="$nextStart"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="createItem">
|
|
<xsl:param name="i">param_i</xsl:param>
|
|
<xsl:param name="start">param_start</xsl:param>
|
|
<fo:list-item>
|
|
<fo:list-item-label>
|
|
<fo:block>
|
|
<xsl:value-of select="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@lefttext"/>
|
|
<xsl:value-of select="$start"/>
|
|
<xsl:value-of select="PARAGRAPH[position()=$i]/LAYOUT/COUNTER/@righttext"/>
|
|
</fo:block>
|
|
</fo:list-item-label>
|
|
<fo:list-item-body>
|
|
<xsl:apply-templates select="PARAGRAPH[position()=$i]"/>
|
|
</fo:list-item-body>
|
|
</fo:list-item>
|
|
</xsl:template>
|
|
|
|
<!-- PARAGRAPH -->
|
|
<xsl:template match="PARAGRAPH" name="PARAGRAPH">
|
|
<xsl:text>
|
|
</xsl:text>
|
|
<fo:block>
|
|
<!-- Formats the paragraph -->
|
|
<xsl:apply-templates select="LAYOUT"/>
|
|
|
|
<xsl:variable name="text"><xsl:value-of select="TEXT"/></xsl:variable>
|
|
<!-- Formats each part of the paragraph -->
|
|
<xsl:choose>
|
|
<xsl:when test="FORMATS">
|
|
<xsl:for-each select="FORMATS">
|
|
<xsl:call-template name="FORMATS">
|
|
<xsl:with-param name="text"><xsl:value-of select="$text"/></xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:for-each>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="$text"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
|
|
</fo:block>
|
|
<xsl:text>
|
|
</xsl:text>
|
|
</xsl:template>
|
|
|
|
<!-- FORMATS -->
|
|
<xsl:template name="FORMATS">
|
|
<xsl:param name="text"/>
|
|
|
|
<xsl:variable name="pos"><xsl:value-of select="FORMAT/@pos"/></xsl:variable>
|
|
<!-- Add the text before the first format. -->
|
|
<xsl:if test="$pos != 0">
|
|
<xsl:value-of select="substring($text, 0, $pos + 1)"/>
|
|
</xsl:if>
|
|
|
|
<xsl:for-each select="FORMAT">
|
|
<xsl:variable name="pos"><xsl:value-of select="@pos"/></xsl:variable>
|
|
<xsl:variable name="len"><xsl:value-of select="@len"/></xsl:variable>
|
|
<!-- Add the text in a format. -->
|
|
<fo:inline>
|
|
<xsl:apply-templates select="."/>
|
|
<xsl:value-of select="substring($text, $pos + 1, $len)"/>
|
|
</fo:inline>
|
|
<xsl:variable name="next_pos"><xsl:value-of select="following::FORMAT/@pos"/></xsl:variable>
|
|
<!-- Add the text when a following format exists. -->
|
|
<xsl:if test="$next_pos > ($pos + $len)">
|
|
<xsl:value-of select="substring($text, $pos + $len + 1, $next_pos - $pos - $len)"/>
|
|
</xsl:if>
|
|
<!-- Add the text when there are no more formats. -->
|
|
<xsl:if test="$next_pos=0">
|
|
<xsl:value-of select="substring($text, $pos + $len + 1)"/>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<!-- FORMAT -->
|
|
<xsl:template match="FORMAT" name="FORMAT">
|
|
<xsl:choose>
|
|
<xsl:when test="@id=1">
|
|
<xsl:call-template name="TEXT-FORMAT"/>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<!-- TEXT-FORMAT -->
|
|
<xsl:template name="TEXT-FORMAT">
|
|
<xsl:choose>
|
|
<xsl:when test="VERTALIGN/@value=1">
|
|
<xsl:attribute name="vertical-align">sub</xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:when test="VERTALIGN/@value=2">
|
|
<xsl:attribute name="vertical-align">super</xsl:attribute>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
<xsl:if test="FONT">
|
|
<xsl:attribute name="font-family"><xsl:value-of select="FONT/@name"/></xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="UNDERLINE/@value=1">
|
|
<xsl:attribute name="text-decoration">underline</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="STRIKEOUT/@value=1">
|
|
<xsl:attribute name="text-decoration">line-through</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="CHARSET">
|
|
<!--<xsl:attribute name="charset"><xsl:value-of select="CHARSET/@value"/></xsl:attribute>-->
|
|
</xsl:if>
|
|
<xsl:if test="ITALIC/@value=1">
|
|
<xsl:attribute name="font-style">italic</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="WEIGHT/@value=75">
|
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="SIZE">
|
|
<xsl:attribute name="font-size"><xsl:value-of select="SIZE/@value"/>pt</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- OTHER-FORMAT -->
|
|
|
|
<!-- LAYOUT -->
|
|
<xsl:template match="LAYOUT">
|
|
<xsl:if test="NAME">
|
|
<!-- MUST USE THE STYLE WHICH THIS NAME -->
|
|
<!-- TODO -->
|
|
<xsl:variable name="name"><xsl:value-of select="@value"/></xsl:variable>
|
|
<xsl:call-template name="FORMAT" select="/DOC/STYLES//STYLE/NAME[@value=$name]"/>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="FLOW">
|
|
<xsl:attribute name="text-align">
|
|
<xsl:value-of select="FLOW/@align"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="COUNTER">
|
|
|
|
</xsl:if>
|
|
<xsl:if test="INDENTS/@first">
|
|
<xsl:attribute name="text-indent">
|
|
<xsl:value-of select="/@first"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="FORMAT">
|
|
<xsl:apply-templates select="FORMAT"/>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
</xsl:stylesheet>
|