XSLT_TAO/conversion_TMX_en_FODS/tmx2fods.xsl

136 lines
6.2 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Cette feuille de style transforme une mémoire de traduction (fichier TMX)
en fichier de tableur au format Flat OpenDocument (.fods) qui peut être
ouvert directement dans LibreOffice Calc.
Elle représente une adaptation d'une feuille de style installée comme
filtre d'importation dans LibreOffice or OpenOffice Calc pour lire un
fichier TMX dans une feuille de calcul. -->
<!-- Les filtres d'importations et d'exportations pour Calc sont disponibles
ici : https://forge.chapril.org/kazephil/XSLT_TAO/releases -->
<!-- Auteur: Philippe Tourigny, version 0.1 créée le 6-6-2023. -->
<!-- Copyright 2023, Philippe Tourigny.
Tout comme le filtre d'importation original, cette feuille de style est un
logiciel libre utilisable et modifiable selon les termes de la GNU Lesser
General Public License (LGPL) version 3 ou ultérieure. -->
<!-- Déclarer les espaces de noms requis pour créer le document. -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">
<!-- Préciser XML comme format de sortie -->
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<!-- Créer le modèle pour le document .fods -->
<xsl:template match="/">
<!-- Il faut ajouter le «mimetype» pour que le fichier soit reconnu
comme un document de tableur au format Flat OpenDocument. -->
<office:document office:mimetype="application/vnd.oasis.opendocument.spreadsheet">
<!-- Définir des styles qui facilitent la lecture du tableau. -->
<office:automatic-styles>
<!-- Ajuster la largeur des colonnes pour toutes les langues
utilisées dans la TMX. -->
<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto"
style:column-width="14.000cm"/>
</style:style>
<!-- Ajuster toutes les rangées à la hauteur de ligne optimale. -->
<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties fo:break-before="auto"
style:use-optimal-row-height="true"
/>
</style:style>
<!-- Style pour les cellules en-têtes. Les codes de langues sont
centrées et mis en caractères gras. -->
<style:style style:name="heading" style:family="table-cell"
style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix"
style:repeat-content="false"
fo:wrap-option="wrap"/>
<style:paragraph-properties fo:text-align="center"/>
<style:text-properties fo:font-weight="bold"/>
</style:style>
<!-- Appliquer le renvoi à la ligne automatique et l'alignement
en haut de ce cellule pour le texte des segments. -->
<style:style style:name="ce2" style:family="table-cell"
style:parent-style-name="Default">
<style:table-cell-properties fo:wrap-option="wrap"
style:vertical-align="top"/>
</style:style>
</office:automatic-styles>
<office:body>
<office:spreadsheet>
<table:table>
<!-- Récupérer le nombre de langues dans la TMX. -->
<xsl:variable name="numLangs" select="count(//tu[1]/tuv)"/>
<!-- Ajuster la largeur des colonnes pour chacune des langues
qui se trouve dans la TMX. -->
<table:table-column table:style-name='co1'
table:number-columns-repeated="{$numLangs}"
table:default-cell-style-name="ce2"/>
<!-- Créer la rangée en-tête et récupérer les codes de langues.
L'attribue «mode» sert à distinguer le code de langue
du texte dans le segment du <tuv>. -->
<!-- Todo: Identifier le <tu> contenant le plus d'éléments <tuv>
afin de récupérer toutes les langues présentes dans
un fichier TMX où certains éléments <tu> contiennent
un plus grand nombre de langues que d'autres. -->
<table:table-row table:style-name="ro1">
<xsl:apply-templates select="//tu[1]/tuv" mode="lang"/>
<table:table-column table:style-name="co1"/>
</table:table-row>
<!-- Récupérer les <tuv> et le texte de leur segment
dans chacun des <tu>. -->
<xsl:apply-templates select="//tu"/>
</table:table>
</office:spreadsheet>
</office:body>
</office:document>
</xsl:template>
<!-- Récupérer les codes de langue servant d'en-tête dans la première rangée.
La fonction «local-name() » permet de reconnaître autant les anciennes
versions avec l'attribut «lang» que les nouvelles versions avec
l'attribut «xml:lang». -->
<xsl:template match="tu[1]/tuv" mode="lang">
<table:table-cell table:style-name="heading">
<text:p>
<xsl:value-of select="@*[local-name()='lang']"/>
</text:p>
</table:table-cell>
</xsl:template>
<!-- Traiter les éléments <tu>. -->
<xsl:template match="tu">
<table:table-row table:style-name="ro1">
<xsl:apply-templates select="tuv" mode="text"/>
</table:table-row>
</xsl:template>
<!-- Récupérer le texte des segments dans chacun des <tuv> du <tu>. -->
<xsl:template match="tuv" mode="text">
<table:table-cell table:style-name="ce2">
<text:p>
<xsl:value-of select="seg"/>
</text:p>
</table:table-cell>
</xsl:template>
</xsl:stylesheet>